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