《LINUX實(shí)操:TCP三次握手和四次揮手》要點(diǎn):
本文介紹了LINUX實(shí)操:TCP三次握手和四次揮手,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
TCP銜接是通過(guò)三次握手來(lái)銜接的.
當(dāng)客戶端向服務(wù)器發(fā)起連接哀求時(shí),客戶端會(huì)發(fā)送同步序列標(biāo)號(hào)SYN
到服務(wù)器,在這里我們?cè)O(shè)SYN
為m,等待服務(wù)器確認(rèn),這時(shí)客戶端的狀態(tài)為SYN
_SENT.
當(dāng)服務(wù)器收到客戶端發(fā)送的SYN
后,服務(wù)器要做的是確認(rèn)客戶端發(fā)送過(guò)來(lái)的SYN
,在這里服務(wù)器發(fā)送確認(rèn)包ACK
,這里的ACK
為m+1,意思是說(shuō)“我收到了你發(fā)送的SYN
了”,同時(shí),服務(wù)器也會(huì)向客戶端發(fā)送一個(gè)SYN
包,這里我們?cè)O(shè)SYN
為n.這時(shí)服務(wù)器的狀態(tài)為SYN
_RECV.
一句話,服務(wù)器端發(fā)送SYN
和ACK
兩個(gè)包.
客戶端收到服務(wù)器發(fā)送的SYN
和ACK
包后,需向服務(wù)器發(fā)送確認(rèn)包ACK
,“我也收到你發(fā)送的SYN
了,我這就給你發(fā)個(gè)確認(rèn)過(guò)去,然后我們即能合體了”,這里的ACK
為n+1,發(fā)送完畢后,客戶端和服務(wù)器的狀態(tài)為ESTABLISH,即TCP連接勝利.
在三次握手中,客戶端和服務(wù)器端都發(fā)送兩個(gè)包SYN
和ACK
,只不外服務(wù)器端的兩個(gè)包是一次性發(fā)過(guò)來(lái)的,客戶端的兩個(gè)包是分兩次發(fā)送的.
三次握手示意圖如下(純手繪,見(jiàn)諒見(jiàn)諒):
在TCP連接中,服務(wù)器端的SYN
和ACK
向客戶端發(fā)送是一次性發(fā)送的,而在斷開(kāi)連接的過(guò)程中,B端向A端發(fā)送的ACK
和FIN
是是分兩次發(fā)送的.因?yàn)樵贐端接收到A端的FIN
后,B端可能還有數(shù)據(jù)要傳輸,所以先發(fā)送ACK
,等B端處理完本身的事情后就可以發(fā)送FIN
斷開(kāi)連接了.
前文說(shuō)到
MSL是Maximum Segment Lifetime,最大報(bào)文段生存時(shí)間,2個(gè)MSL是報(bào)文段發(fā)送和接收的最長(zhǎng)時(shí)間.
假定網(wǎng)絡(luò)不可靠,那么第四次發(fā)送的ACK
可能丟失,即B端無(wú)法收到這個(gè)ACK
,如果B端收不到這個(gè)確認(rèn)ACK
,B端會(huì)定時(shí)向A端重復(fù)發(fā)送FIN
,直到B端收到A的確認(rèn)ACK
.所以這個(gè)2MSL便是用來(lái)處理這個(gè)可能丟失的ACK
的.
本文永遠(yuǎn)更新鏈接地址:
更多LINUX教程,盡在維易PHP學(xué)院專欄。歡迎交流《LINUX實(shí)操:TCP三次握手和四次揮手》!
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/8842.html