IP協(xié)議詳解教程Linu系統(tǒng)學(xué)習(xí)_第1頁(yè)
IP協(xié)議詳解教程Linu系統(tǒng)學(xué)習(xí)_第2頁(yè)
IP協(xié)議詳解教程Linu系統(tǒng)學(xué)習(xí)_第3頁(yè)
IP協(xié)議詳解教程Linu系統(tǒng)學(xué)習(xí)_第4頁(yè)
IP協(xié)議詳解教程Linu系統(tǒng)學(xué)習(xí)_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

TCP/IP協(xié)議詳解-教程-Linux系統(tǒng)學(xué)習(xí)

TransmissionControlProtocol/InternetProtocol傳輸掌握協(xié)議/英特爾互聯(lián)協(xié)議

TCP/IP是一個(gè)ProtocolStack,包括TCP、IP、UDP、ICMP、RIP、TELNET、FTP、SMTP、ARP等很多協(xié)議

最早發(fā)源于美國(guó)國(guó)防部(縮寫DOD)的英特爾的前身ARPA網(wǎng)工程1983年1月1日,TCP/IP取代了舊的網(wǎng)絡(luò)掌握協(xié)議NCP,成為今日的互聯(lián)網(wǎng)和局域網(wǎng)的基石和標(biāo)準(zhǔn),由互聯(lián)網(wǎng)工程任務(wù)組負(fù)責(zé)維護(hù)

共定義了四層

和ISO參考模型的分層有對(duì)應(yīng)關(guān)系

TCP/IP協(xié)議和OSI模型

TCP/IPOSI參考模型

應(yīng)用層應(yīng)用層

表示層

會(huì)話層

傳輸層傳輸層

internet層網(wǎng)絡(luò)層

數(shù)據(jù)鏈路層數(shù)據(jù)鏈路層

物理層物理層

TCP特性

工作在傳輸層

面對(duì)連接協(xié)議

全雙工協(xié)議

半關(guān)閉

錯(cuò)誤檢查

將數(shù)據(jù)打包成端,排序

確認(rèn)機(jī)制

數(shù)據(jù)恢復(fù)重傳

流量掌握,滑動(dòng)窗口

擁塞掌握,慢啟動(dòng)和擁塞避開(kāi)算法

TCP

源端口,目標(biāo)端口:計(jì)算機(jī)上的進(jìn)程要是和其他進(jìn)程通信是通過(guò)計(jì)算機(jī)端口的,而一個(gè)計(jì)算機(jī)端口某個(gè)時(shí)刻只能被一個(gè)進(jìn)程占用,所以通過(guò)制定源端口和目標(biāo)端口,就可以知道是那兩個(gè)進(jìn)程需要通信,源端口,目標(biāo)端口是用16位表示的,可推算計(jì)算機(jī)端口個(gè)數(shù)為2^16個(gè)

序列號(hào):表示本報(bào)文段所發(fā)送數(shù)據(jù)的第一個(gè)字節(jié)的編號(hào),在TCP鏈接中所傳送的字節(jié)節(jié)流的每一個(gè)字節(jié)都會(huì)按挨次編號(hào),由于序列號(hào)有32位表示,所以每2^32個(gè)字節(jié),都會(huì)消失序列號(hào)繚繞,再次從0開(kāi)頭

確認(rèn)號(hào):表示接收方期望收到發(fā)送方下一個(gè)報(bào)文段的第一個(gè)字節(jié)數(shù)據(jù)的編號(hào),也就是告知發(fā)送發(fā):我盼望你下一次發(fā)送的數(shù)據(jù)的第一個(gè)字節(jié)數(shù)據(jù)的編號(hào)是這個(gè)確認(rèn)號(hào)

數(shù)據(jù)偏移:表示TCP報(bào)文段的首部長(zhǎng)度,共4位由于TCP首部包含一個(gè)長(zhǎng)度可變的選項(xiàng)局部,需要指定這個(gè)TCP報(bào)文的長(zhǎng)度究竟有多長(zhǎng),他指出TCP報(bào)文段的數(shù)據(jù)起始處距離TCP報(bào)文段的起始處有多遠(yuǎn),該字段單位是32位,4位二進(jìn)最大表示15所以數(shù)據(jù)飄逸也是TCP首部最大60字節(jié)

TCP包頭

URG:表示本報(bào)文段中發(fā)送的數(shù)據(jù)是否包含緊急數(shù)據(jù)。后面的緊急指針字段(urgentpointer)只有當(dāng)URG=1時(shí)才有效

ACK:表示是否前面確認(rèn)號(hào)字段是否有效。只有當(dāng)ACK=1時(shí),前面確實(shí)認(rèn)號(hào)字段才有效。TCP規(guī)定,連接建立后,ACK必需為1,帶ACK標(biāo)志的TCP報(bào)文段稱為確認(rèn)報(bào)文段

PSH:提示接收端應(yīng)用程序應(yīng)當(dāng)馬上從TCP接收緩沖區(qū)中讀走數(shù)據(jù),為接收后續(xù)數(shù)據(jù)騰出空間。假如為1,則表示對(duì)方應(yīng)當(dāng)馬上把數(shù)據(jù)提交給上層應(yīng)用,而不是緩存起來(lái),假如應(yīng)用程序不將接收到的數(shù)據(jù)讀走,就會(huì)始終停留在TCP接收緩沖區(qū)中

RST:假如收到一個(gè)RST=1的報(bào)文,說(shuō)明與主機(jī)的連接消失了嚴(yán)峻錯(cuò)誤(如主機(jī)崩潰),必須釋放連接,然后再重新建立連接?;蛘哒f(shuō)明上次發(fā)送給主機(jī)的數(shù)據(jù)有問(wèn)題,主機(jī)拒絕響應(yīng),帶RST標(biāo)志的TCP報(bào)文段稱為復(fù)位報(bào)文段

SYN:在建立連接時(shí)使用,用來(lái)同步序號(hào)。當(dāng)SYN=1,ACK=0時(shí),表示這是一個(gè)懇求建立連接的報(bào)文段;當(dāng)SYN=1,ACK=1時(shí),表示對(duì)方同意建立連接。SYN=1,說(shuō)明這是一個(gè)懇求建立連接或同意建立連接的報(bào)文。只有在前兩次握手中SYN才置為1,帶SYN標(biāo)志的TCP報(bào)文段稱為同步報(bào)文段

FIN:表示通知對(duì)方本端要關(guān)閉連接了,標(biāo)記數(shù)據(jù)是否發(fā)送完畢。假如FIN=1,即告知對(duì)方:“我的數(shù)據(jù)已經(jīng)發(fā)送完畢,你可以釋放連接了”,帶FIN標(biāo)志的TCP報(bào)文段稱為完畢報(bào)文段

序號(hào)和確認(rèn)號(hào)和標(biāo)記為

seq:序號(hào):發(fā)送者的發(fā)的包的序號(hào)

ack:確認(rèn)號(hào):是接收者收到后返回確實(shí)認(rèn)包

標(biāo)記位:

URG:(緊急指針位)只有當(dāng)URG=1時(shí)才有意義

ACK:(確認(rèn)位)表示是否前面確認(rèn)號(hào)字段是否有效。只有當(dāng)ACK=1時(shí),前面確實(shí)認(rèn)號(hào)字段才有效。

RST:重置位

SYN:同步位

FIN:完畢位

TCP包頭

窗口大小:表示現(xiàn)在允許對(duì)方發(fā)送的數(shù)據(jù)量,也就是告知對(duì)方,從本報(bào)文段確實(shí)認(rèn)號(hào)開(kāi)頭允許對(duì)方發(fā)送的數(shù)據(jù)量

校驗(yàn)和:供應(yīng)額外的牢靠性

緊急指針:標(biāo)記緊急數(shù)據(jù)在數(shù)據(jù)字段中的位置

選項(xiàng)局部:其最大長(zhǎng)度可依據(jù)TCP首部長(zhǎng)度進(jìn)展推算

常見(jiàn)選項(xiàng):

最大報(bào)文段長(zhǎng)度:MaxiumSegmentSize,MSS

窗口擴(kuò)大:WindowsScaling

時(shí)間戳:Timestamps

TCP三次握手

所謂三次握手(Three-wayHandshake),是指建立一個(gè)TCP連接時(shí),需要客戶端和效勞器總共發(fā)送3個(gè)包。

三次握手的目的是連接效勞器指定端口,建立TCP連接,并同步連接雙方的序列號(hào)和確認(rèn)號(hào)并交換TCP窗口大小信息.在socket編程中,客戶端執(zhí)行connect()時(shí)。將觸發(fā)三次握手:

三次握手過(guò)程

第一次握手:建立連接時(shí),客戶端發(fā)送SYN包(syn=j)到效勞器,并進(jìn)入SYN_SEND狀態(tài),等待效勞器確認(rèn);

其次次握手:效勞器收到SYN包,必需確認(rèn)客戶的SYN(ack=j+1),同時(shí)自己也發(fā)送一個(gè)SYN包(syn=k),即SYN+ACK包,此時(shí)效勞器進(jìn)入SYN_RECV狀態(tài);

第三次握手:客戶端收到效勞器的SYN+ACK包,向效勞器發(fā)送確認(rèn)包ACK(ack=k+1),此包發(fā)送完畢,客戶端和效勞器進(jìn)入ESTABLISHED狀態(tài),完成三次握手.

TCP四次揮手

TCP的連接的撤除需要發(fā)送四個(gè)包,因此稱為四次揮手(four-wayhandshake)。

客戶端或效勞器均可主動(dòng)發(fā)起揮手動(dòng)作,在socket編程中,任何一方執(zhí)行close()操作即可產(chǎn)生揮手操作。

四次揮手過(guò)程

step1:第一次揮手

首先,客戶端發(fā)送一個(gè)FIN,用來(lái)關(guān)閉客戶端到效勞器的數(shù)據(jù)傳送,然后等待效勞器確實(shí)認(rèn)。其中終止標(biāo)志位FIN=1,序列號(hào)seq=u。

step2:其次次揮手

效勞器收到這個(gè)FIN,它發(fā)送一個(gè)ACK,確認(rèn)ack為收到的序號(hào)加一。

step3:第三次揮手

關(guān)閉效勞器到客戶端的連接,發(fā)送一個(gè)FIN給客戶端。

step4:第四次揮手

客戶端收到FIN后,并發(fā)回一個(gè)ACK報(bào)文確認(rèn),并將確認(rèn)序號(hào)seq設(shè)置為收到序號(hào)加一。首先進(jìn)展關(guān)閉的一方將執(zhí)行主動(dòng)關(guān)閉,而另一方執(zhí)行被動(dòng)關(guān)閉。

客戶端發(fā)送FIN后,進(jìn)入終止等待狀態(tài),效勞器收到客戶端連接釋放報(bào)文段后,就馬上給客戶端發(fā)送確認(rèn),效勞器就進(jìn)入CLOSE_WAIT狀態(tài),

此時(shí)TCP效勞器進(jìn)程就通知高層應(yīng)用進(jìn)程,因而從客戶端到效勞器的連接就釋放了。

此時(shí)是“半關(guān)閉狀態(tài)”,即客戶端不行以發(fā)送給效勞器,效勞器可以發(fā)送給客戶端。

此時(shí),假如效勞器沒(méi)有數(shù)據(jù)報(bào)發(fā)送給客戶端,其應(yīng)用程序就通知TCP釋放連接,然后發(fā)送給客戶端連接釋放數(shù)據(jù)報(bào),并等待確認(rèn)。

客戶端發(fā)送確認(rèn)后,進(jìn)入TIME_WAIT狀態(tài),但是此時(shí)TCP連接還沒(méi)有釋放,然后經(jīng)過(guò)等待計(jì)時(shí)器設(shè)置的2MSL后,才進(jìn)入到CLOSE狀態(tài)。

為什么建立連接協(xié)議是三次握手,而關(guān)閉連接卻是四次呢

這是由于效勞端的LISTEN狀態(tài)下的SOCKET當(dāng)收到SYN報(bào)文的連接懇求后,它可以把ACK和SYN(ACK起應(yīng)答作用,而SYN起同步作用)放在一個(gè)報(bào)文里來(lái)發(fā)送。

但關(guān)閉連接時(shí),當(dāng)收到對(duì)方的FIN報(bào)文通知時(shí),它僅僅表示對(duì)方?jīng)]有數(shù)據(jù)發(fā)送給你了;

但未必你全部的數(shù)據(jù)都全部發(fā)送給對(duì)方了,所以你可能未必會(huì)立刻會(huì)關(guān)閉SOCKET,也即你可能還需要發(fā)送一些數(shù)據(jù)給對(duì)方之后,再發(fā)送FIN報(bào)文給對(duì)方來(lái)表示你同意現(xiàn)在可以關(guān)閉連接了,

所以它這里的ACK報(bào)文和FIN報(bào)文多數(shù)狀況下都是分開(kāi)發(fā)送的。

為什么不能用兩次握手進(jìn)展連接

我們知道,3次握手完成兩個(gè)重要的功能,既要雙方做好發(fā)送數(shù)據(jù)的預(yù)備工作(雙方都知道彼此已預(yù)備好),也要允許雙方就初始序列號(hào)進(jìn)展協(xié)商,這個(gè)序列號(hào)在握手過(guò)程中被發(fā)送和確認(rèn)。

現(xiàn)在把三次握手改成僅需要兩次握手,死鎖是可能發(fā)生的。

作為例子,考慮計(jì)算機(jī)S和C之間的通信,假定C給S發(fā)送一個(gè)連接懇求分組,S收到了這個(gè)分組,并發(fā)送了確認(rèn)應(yīng)答分組。

根據(jù)兩次握手的協(xié)定,S認(rèn)為連接已經(jīng)勝利地建立了,可以開(kāi)頭發(fā)送數(shù)據(jù)分組。

可是,C在S的應(yīng)答分組在傳輸中被喪失的狀況下,將不知道S是否已預(yù)備好,不知道S建立什么樣的序列號(hào),C甚至疑心S是否收到自己的連接懇求分組。

在這種狀況下,C認(rèn)為連接還未建立勝利,將忽視S發(fā)來(lái)的任何數(shù)據(jù)分組,只等待連接確認(rèn)應(yīng)答分組。

而S在發(fā)出的分組超時(shí)后,重復(fù)發(fā)送同樣的分組。這樣就形成了死鎖。

為什么TIME_WAIT狀態(tài)需要經(jīng)過(guò)2MSL(最大報(bào)文段生存時(shí)間)才能返回到CLOSE狀態(tài)?

雖然按道理,四個(gè)報(bào)文都發(fā)送完畢,我們可以直接進(jìn)入CLOSE狀態(tài)了,但是我們必需假象網(wǎng)絡(luò)是不行靠的,有可以最終一個(gè)ACK喪失。

所以TIME_WAIT狀態(tài)就是用來(lái)重發(fā)可能喪失的ACK報(bào)文。

TCP超時(shí)重傳

特別網(wǎng)絡(luò)狀態(tài)下(開(kāi)頭消失超時(shí)或丟包),TCP掌握數(shù)據(jù)傳輸以保證其承若的牢靠效勞

TCP效勞必需能夠重傳超時(shí)時(shí)間內(nèi)未收到的TCP報(bào)文段

為此,TCP模塊為每一個(gè)TCP報(bào)文段都維護(hù)一個(gè)重傳定時(shí)器,該定時(shí)器在TCP報(bào)文段第一次被發(fā)送時(shí)啟動(dòng)

與TCP超時(shí)重傳相關(guān)的兩個(gè)內(nèi)核參數(shù):

/proc/sys/net/ipv4/tcp_retries1:最少執(zhí)行的重傳次數(shù)

proc/sys/net/ipv4/tcp_retries2:做多執(zhí)行的重傳次數(shù)默認(rèn)值15

TCP協(xié)議和UDP協(xié)議的區(qū)分是什么

TCP協(xié)議是有連接的,有連接的意思是開(kāi)頭傳輸實(shí)際數(shù)據(jù)之前TCP的客戶端和效勞器端必需通過(guò)三次握手建立連接,會(huì)話完畢之后也要完畢連接。

而UDP是無(wú)連接的

TCP協(xié)議保證數(shù)據(jù)按序發(fā)送,按序到達(dá),供應(yīng)超時(shí)重傳來(lái)保證牢靠性,

但是UDP不保證按序到達(dá),甚至不保證到達(dá),只是努力交付,即便是按序發(fā)送的序列,也不保證按序送到。

CP協(xié)議PORT

傳??層通過(guò)port號(hào),確認(rèn)應(yīng)用層協(xié)議

tcp:傳輸掌握協(xié)議,面對(duì)連接協(xié)議:通信前需要建立虛擬鏈路:完畢后撤除鏈路0-65535

udp:無(wú)連接的協(xié)議0-65535

IANA:互聯(lián)網(wǎng)數(shù)字安排機(jī)構(gòu)(負(fù)責(zé)域名;數(shù)字資源;協(xié)議安排)

0-1023:系統(tǒng)端口或特權(quán)端口(僅治理員可用)總所周知,永久的安排個(gè)固定的系統(tǒng)應(yīng)用使用22(ssh)80(http)443(https)

1024-49125:用戶端口或注冊(cè)端口但要求不嚴(yán)格

49152-65535:動(dòng)態(tài)端口或私有端口,客戶端程序隨機(jī)使用端口

其范圍的定義:/proc/sys/net/ipv4/ip_local_port_range

Internet協(xié)議特征

運(yùn)行與OSI網(wǎng)絡(luò)層

面對(duì)無(wú)連接的協(xié)議

獨(dú)立處理數(shù)據(jù)包

分層編址

盡力而為傳輸

很多據(jù)恢復(fù)功能

單播多播播送

處地址類別外,還可以依據(jù)傳輸?shù)男畔⑻卣鲗P地址分為單播,多播,播送。主機(jī)使用IP地址進(jìn)展一對(duì)一(單播),一對(duì)多(多播),或一對(duì)全部(播送)的通信

單播:?jiǎn)尾サ刂肥荌P網(wǎng)絡(luò)中最常見(jiàn)的。包含單播地址的分組發(fā)送給特定主機(jī),

多播:多播地址讓原設(shè)備能夠?qū)⒃纸M發(fā)送給一組設(shè)備

播送:播送分組的目標(biāo)IP地址的主機(jī)局部全為1,這以為著本地網(wǎng)絡(luò)(播送域)中的全部主機(jī)都將接收并查看該分組

ARP地址解析協(xié)議:

IPPDU報(bào)頭

版本:占4位,指IP協(xié)議的版本目前的IP協(xié)議版本號(hào)為4

首部長(zhǎng)度:占4位,可表示的最大數(shù)值是15個(gè)單位,一個(gè)單位為四個(gè)字節(jié),因此IP的首部長(zhǎng)度的最大數(shù)值是60個(gè)字節(jié)

區(qū)分效勞:占8位用來(lái)獲得更好的效勞,在舊標(biāo)準(zhǔn)中叫做效勞類型,到實(shí)際上未被使用過(guò),后改名為區(qū)分效勞,只有在使用區(qū)分效勞時(shí),這個(gè)字段才起作用,一般的狀況下都不使用

總長(zhǎng)度:占16位,指首部和數(shù)據(jù)之和的長(zhǎng)度,單位為字節(jié),因此數(shù)據(jù)報(bào)的最大長(zhǎng)度為65535字節(jié),總長(zhǎng)度不能超過(guò)最大傳輸單元MTU

標(biāo)識(shí):占16位它是一個(gè)計(jì)數(shù)器,通常,沒(méi)發(fā)送一個(gè)只有當(dāng)報(bào)文,該值會(huì)加1,也用于數(shù)據(jù)包分片,自同一個(gè)包的若干分片中,該值是一樣的

標(biāo)志:占3位,目前只有后兩位有意義

DF:中間的一位,只有當(dāng)DF=1是才允許分片。

MF:最高位,MF=1表示后面還有分片,表示最終一個(gè)分片

片偏移:占12位,指較長(zhǎng)的分組在分片后,該分片在原分組中的相對(duì)位置,片偏移以8個(gè)字節(jié)為偏移單位

生存時(shí)間:占8位,即為TTL數(shù)據(jù)報(bào)在網(wǎng)絡(luò)中可通過(guò)的路由器的最大值,TTL字段是有發(fā)送端初始設(shè)置一個(gè)8bit字節(jié),推舉的初始值由安排數(shù)字RFC指定,當(dāng)前值為64發(fā)送ICMP回顯應(yīng)答是=時(shí)常常把TTL設(shè)為最大值255

協(xié)議:占8位,指出此數(shù)據(jù)寶攜帶數(shù)據(jù)使用何種協(xié)議以便目的主機(jī)的IP層將數(shù)據(jù)局部上交給哪個(gè)處理過(guò)程,1表示ICMP協(xié)議,2表示為IGMP協(xié)議,6表示TCP協(xié)議,17表示為UDP協(xié)議

首部檢驗(yàn)和:占16位,只驗(yàn)證數(shù)據(jù)報(bào)的首部不檢驗(yàn)數(shù)據(jù)局部,這里不采納CRC檢驗(yàn)碼而采納簡(jiǎn)潔的計(jì)算方法

原地址和目標(biāo)地址:都各自占4個(gè)字節(jié),分別記錄原地址和目的地址

IP地址

他們可唯一標(biāo)識(shí)IP網(wǎng)絡(luò)中的每一臺(tái)設(shè)備

每臺(tái)主機(jī)(計(jì)算機(jī),網(wǎng)絡(luò)設(shè)備,外圍設(shè)備)必需具有唯一的地址

IP地址有兩局部組成:

標(biāo)識(shí)網(wǎng)絡(luò)

每個(gè)網(wǎng)絡(luò)安排一個(gè)ID

主機(jī)ID:

標(biāo)識(shí)單個(gè)主機(jī)

有組織非配給各設(shè)備

IP地址分類

A類:

00000000-01111111:1-127

網(wǎng)絡(luò)數(shù):126,127

每個(gè)網(wǎng)絡(luò)中的主機(jī)數(shù):2^24-2

默認(rèn)子網(wǎng)掩碼:

私網(wǎng)地址:

B類:

10000000-10111111:128-191

網(wǎng)絡(luò)數(shù):2^14

每個(gè)網(wǎng)絡(luò)中的主機(jī)數(shù):2^16-2

默認(rèn)子網(wǎng)掩碼:

私網(wǎng)地址:-

C類:

11000000-11011111:192-223

網(wǎng)絡(luò)數(shù):2^21

每個(gè)網(wǎng)絡(luò)中的主機(jī)數(shù):2^8-2

默認(rèn)子網(wǎng)掩碼:255,255,255

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論