TCP/IP協議


TCP/IP協議模型

各層常見協議

1.鏈路層:

ARP:地址解析協議,根據IP地址獲取真實物理地址MAC地址的一種協議。當主機需要發送一個IP包時,會查本地高速緩存,若不存在,主機便會發送一個ARP包,從含有該IP映射的主機中獲取相關的ARP包。解包后會更新本地ARP緩存。

RARP:與ARP協議相反。

2.網絡層:

IP協議:TCP/IP協議的核心,所有的傳輸層協議以及IP輔助協議都以IP數據格式傳送。IP協議是不可靠的,TCP可靠的原因是加入了多種機制,保證可靠傳輸。換而言之,IP協議只負責IP數據傳送,不保證安全性。

ICMP協議:IP輔助協議,全稱網絡控制報文協議。正如前文所述,IP協議是不可靠的傳輸。ICMP協議就是用來封裝IP數據包傳輸錯誤時的信息(如主機不可達等),並將其傳送回主機。

3.傳輸層:

TCP協議:面向連接(客戶端與服務端建立起端到端的全雙工通信)的傳輸層協議,采用字節流方式,傳輸可靠,但速度慢。

UDP協議:無連接(廣播式)的傳輸層協議,采用報文方式,傳輸不可靠可能丟包,但速度快。

4.應用層協議:

Http協議:超文本傳輸協議,端口號80。默認采用TCP協議實現。所以Http的請求過程首先要建立TCP連接(三次握手),然后客戶端發出Http請求,服務端處理請求並響應。

Https協議:Http協議基礎上進行了加密,端口443。由於用來加密的原因,所以在發生請求前需要進行加密。更多次的握手保證了數據的安全性,但同時也降低了效率。

其他常見:

 

 

IP地址

IP地址一共32位,一共五類IP地址。

 

 

 

IP數據包的封裝

封裝過程:(Http為例)

 IP數據報:(建議每32bit按行的方式去理解)

 

 

 

四個字節共32Bit的數據按每次8Bit傳輸。(每一行)

版本號代表當前IP協議的版本如IPV4或IPV6,頭部長度代表首部占32Bit(4個字節)的數目,包含可選選項,四個位表示首部最長1111=15(行)即4*15=60個字節,沒有任何選項的即圖中所示默認為5(行)即4*5=20個字節。(如圖所示的前五行)

服務類型包含一個3Bit的優先權字段,4Bit的Tos字段以及末尾1Bit的置零字段。TOS字段包含四個選項最小時延、最大吞吐、最高可靠、最小費用。

總長度代表的是整個IP數據包的長度,以字節為單位,則最長為65535。但由於MTU(最大傳輸單元)的存在,有可能會被分片。同時利用總長度和首部長度可知數據的起始位置。

TTL生存時間字段設置可經過的最大路由器數,每經過一個路由器就減一。當該字段為0時,就丟棄該報文,並通過ICMP協議返回相關信息。TraceRoute就是通過這個原理實現的,先設置TTL為1嘗試,然后為2直至通路為止,由此獲得所有的路由信息。

Ping、TraceRoute和DNS

Ping:基於ICMP協議的應用程序。前文可知ICMP包含報文傳輸過程中的錯誤,所以根據這一信息可以測試主機間的聯通狀態

TraceRoute:通過將TTL從一遞增的設置數據包嘗試,直至獲取所有路由表的程序。

DNS協議:域名解析服務,類似於ARP協議。ARP時IP與MAC地址的映射,DNS則是域名與IP地址的映射。

TCP連接的建立與斷開。

預備知識:

TCP頭部結構:

 

五個關鍵位置:

SYN:建立連接標識,ACK:響應標識,FIN:斷開連接標識,seq(seq number):發送序號,ack(ack number):響應序號。

 從圖可知FIN、ACK、SYN三個標志位只有1Bit要不為0,要不為1,而seq和ack支持32bit。

1.三次握手(建立連接):

客戶端發送SYN,seq=x,進入SYN_SEND狀態。

服務端響應SYN,ACK,seq=y,ack =x+1,進入SYN_RCVD狀態。

客戶端回應ACK,seq=x+1,ack=y+1.進入ESTABLISHED狀態,服務端收到也進入該狀態。

簡而言之:A告訴B建立連接,B收到后告訴A我收到了建立連接的消息,然后A收到后通知B你給我的確認我收到了。

三次握手的原因:

為了防止已失效的連接請求報文段突然又傳送到了服務端,因而產生錯誤。

 

 

 

2.四次揮手(斷開連接):

主機A發送FIN,ACK,seq=x,ack=z,進入FINWAIT_1狀態。

主機B回應ACK,seq=z,ack=x+1,主機A收到后進入FINWAIT_2狀態。

主機B發送FIN,ACK,seq=y,ack=x,進入LAST_ACK狀態。

主機A回應ACK,seq=x,ack =y進入TIME_WAIT狀態,等待主機B收到后關閉連接,進入Closed狀態。

簡而言之:A告訴B我已經沒有數據要傳輸了,B發送響應我同意你的關閉請求。然后B在請求A關閉連接,B收到請求后,發送確認關閉連接的響應。如果2MSL沒收到回復,證明B已關閉。

四次揮手的原因:

TCP是全雙工模式,這就意味着,當主機A發出FIN報文段時,只是表示主機A已經沒有數據要發送了,但是,這個時候主機A還是可以接受來自主機B的數據;當主機B返回響應ACK報文段時,表示它已經知道主機A沒有數據發送了,但是主機B還是可以發送數據到主機A的;當主機B也發送了FIN報文段時,這個時候就表示主機B也沒有數據要發送了,就會告訴主機A,我也沒有數據要發送了,之后彼此就會愉快的中斷這次TCP連接。 

為什么要等待2MSL(MSL是指報文最大生存時間):

1.保證全雙工通信的TCP協議可靠關閉。

2.保證這次連接的重復數據段從網絡中消失

 TCP協議可靠性的幾個方面

1.超時重傳

原理:在發送數據報文后開啟一個計時器,如果超過了時間仍沒有收到ACK回應就重發該數據報文。直到成功為止。

RTO:重傳超時時間,該值影響超時重傳的效率。若過長,效率低,若過短,則會導致網絡更加擁塞,導致更多的超時和重傳。

RTT:連接往返時間,即一個TCP數據包發送到接收到相應的響應時間,例如游戲中的延遲。

RTO最好是RTT的時間,但由於RTT不固定,所以使用自適應算法。

2.流量控制

意義:解決接收端處理數據不如發送端發送數據快,導致數據過多無法處理。

實現原理:滑動窗口機制。通過ACK報文響應窗口值的大小表示當前緩存可以接受的數據報文大小,由此實現控制客戶端發送報文大小,從而實現流量控制。

3.擁塞控制

 意義:為了避免發送方因為IP網絡擁塞而遏制。

解決的幾種方法:慢啟動、擁塞避免、快重傳、快恢復。

 

擁塞窗口概念:類似於滑動窗口,但限制的是本機發送的大小(cwnd),若網絡擁塞則該值小,若不擁塞則該值大(即動態變化,取決於網絡情況)。通過不同的算法控制擁塞窗口的大小從而盡量減少擁塞的出現。

慢開始算法:開始由於不知道網絡情況,為了防止在網絡擁堵的情況下注入過多數據,所以開始的cwnd值較小然后逐漸增加。最初設置為MSS(最大報文長度)每經過一個輪次(服務端對客戶端的每個報文的確認響應)加一。列入最初為1,發送一個報文,收到一個確認,cwnd為2,然后發送兩個報文,收到兩個確認,cwnd變為4。所以慢開始指的不是增長速率慢,而是cwnd的初始值小。

 

為了避免cwnd增長過快,需要使用ssthresh變量設置cwnd的門限。當cwnd小於ssthresh時使用慢開始算法。當cwnd大於ssthresh時,停止使用慢開始算法,改用擁塞避免算法,二者相等時,兩個算法皆可以使用。注意,當發生網絡擁塞時ssthresh會變為當前cwnd值的一半(乘法縮小算法),擁塞窗口設置為1。然后重新開始慢開始算法,直至cwnd=ssthresh時執行擁塞避免算法。

 

擁塞避免算法:每經過一個RTT往返就加一,這樣cwnd變為線性增長而非起始的成倍增長,增長速率相對於慢開始放緩。並非完全避免擁塞,只是通過限制cwnd的大小增長塑速率減少了網絡擁塞的可能性。

 

快重傳與快恢復:在超時重傳中,主要是由於超過了定時器的限制,才進行重傳。快重傳重新定義了一種丟包標准,即如果連續三次收到重復ACK包即認為該seq(序列)包丟失,然后立即進行重傳。而快恢復算法一般與快重傳算法一起使用。當收到三個重復ACK包時,就進行乘法縮小算法,把ssthresh減半(減半為擁塞發生時的cwnd的值的一半,不開始慢開始算法,cwnd不置零,設置為ssthresh值的一半,然后執行擁塞避免算法使cwnd線性增長)

TCP的定時器

重傳定時器:前文中保證TCP可靠傳輸的超時重傳機制使用的定時器,當發送報文后開始計時,若沒有在定時器結束前收到ACK包,則代表數據丟失,進行重傳,避免陷入無限等待。

堅持定時器:對付零窗口通知設立。以滑動窗口為例,當從零窗口恢復時,接受端發送一個非零的ACK包,而ACK包沒有對應的響應,若此ACK包丟失,則發送端仍認為為零窗口狀態,而接收端不會重新發送非零的ACK包,則陷入死循環狀態。解決方法就是在發送端確認窗口為0時實力該計時器,計時結束發送探測報文告知接收端重發ACK包,並每個一段時間將該計時器重置哦,直至出現非零窗口。

保活計時器:防止TCP連接出現長時間的空閑,一般設置為兩個小時。如果某端因為出現了故障,兩個小時后另一端發送10個探測報文(每個間隔一段時間)沒有收到回復則直接斷開TCP連接,而非通過四次揮手斷開連接。

時間等待計時器:TCP連接斷開時四次揮手使用的計時器。即等待2MSL后關閉主動關閉一端的連接。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM