1. 程式人生 > >TCP協議的三次握手和四次揮手

TCP協議的三次握手和四次揮手

揮手 這一 nbsp 服務端 msl cnblogs chm 可靠的 不相信

TCP報文段格式圖:
技術分享

序號:seq序號,用來標識從TCP源端向目的端發送的字節流,發起方發送數據時對此進行標記。

確認號:ack序號,只有ACK標誌位為1時,確認序號字段才有效,Ack=seq+1。

標誌位:共6個,即URG、ACK、PSH、RST、SYN、FIN等.
ACK:確認序號有效。
SYN:發起一個新連接。
FIN:釋放一個連接。

三次握手:TCP協議是穩定的、可靠的、面向連接的協議,在建立TCP連接的時候需要經過三次握手的過程

1.Client端:發送SYN(標誌位SYN=1)到服務端,表示請求互聯(該報文段攜帶了一個序列號seq);

2.Server端:當接受到SYN時,表明有客戶端在請求連接。這時向Client端發送SYN+ACK,標誌位SYN=1,ACK=1(該報文段攜帶了確認號ack=seq+1,同時也有一個序列號seq`);

3.Client端:在接受到SYN+ACK後,再向Server端發送ACK,標誌位ACK=1(該報文段攜帶了確認號ack=seq`+1)

技術分享

幫助理解的例子:

Client: 你聽得見我說話嗎?

Server:嗯,聽得見。

你聽得見我說話嗎?

Client:我也能聽見。

成功建立連接。

四次揮手:

1.Client端:發送一個FIN.

2.Server端:在接受到FIN之後,表明客戶端想斷開連接了。這時先發送ACK回客戶端,客戶端在接受到後將處於FIN-WAIT狀態。

3.Server端:再發送FIN到客戶端。

4.Client端:發送ACK到服務端,之後客戶端進入Time-wait狀態。如果Client端等待了2MSL後依然沒有收到回復,則證明Server端已正常關閉,那好,我Client端也可以關閉連接了

技術分享

幫助理解的例子:

1.Client端:我不想說話了。

2.Server端:好的,我知道了,但是我還有些話沒有說完,稍等哈

3.Server端:我說完了

4.Client端:好的。(為什麽會有這一次握手呢?因為客戶端不相信網絡,怕Server端不知道要關閉,所以發送ACK後進入TIME_WAIT狀態,如果Server端沒有收到ACK則可以重傳)

TCP協議的三次握手和四次揮手