1. 程式人生 > >Linux網路 - Tcp連線機制

Linux網路 - Tcp連線機制

Linux網路 - tcp三次握手-四次揮手

###

一、術語解釋

ACK: 一種傳輸類的確認控制字元。接收方成功地接收到資料,那麼會回覆對方一個ACK資料,TCP協議規定,只有ACK=1時有效,也規定連線建立後所有傳送的報文的ACK必須為1

SYN:  在連線建立時用來同步序號。當SYN=1ACK=0時,表明這是一個連線請求報文,對方若同意建立連線,則應在響應報文中使SYN=1ACK=1,因此,  SYN1就表示這是一個連線請求或連線接受報文。

FIN: 用來釋放一個連線。當 FIN = 1 時,表明此報文段的傳送方的資料已經發送完畢,並要求釋放連線。

seq: TCP連線是面向位元組流的,seq標識某一方傳送資料的位元組序號(mod 2^32),整個連線中,位元組流的起始序號在建立連線時設定,一個報文段的資料包一般會包含多個位元組的資料,以資料包第一個位元組的序號標識報文段序號。

ack: 下一個期望接收的資料包的序號。


二、建立連線 - 三次握手

2.1. 示意圖

1: SYN=1, seq=x,ACK=0

2: SYN=1, ACK=1,seq=y, ack=x+1

3: ACK=1,seq=x+1, ack=y+1

2.2. 需要第三次握手的目的


三、釋放連線 - 四次揮手

3.1. 示意圖


1: FIN=1, seq=u

2: ACK=1, seq=v, ack=u+1

3: FIN=1, ACK=1, seq=w, ack=u+1

4: ACK=1, seq=u+1, ack=w+1

3.2. TIME_WAIT的作用

     TIME_WAIT作用:  2ms,假如ActiveCloser傳送的確認釋放連線資訊PassiveCloser沒有收到,這時候P會再次傳送一個FIN=1的釋放連線報文,而這個時候A還處於TIME-WAIT,所以可以再次傳送確認資訊。


【參考連結】

https://blog.csdn.net/oney139/article/details/8103223

https://www.cnblogs.com/xiaoming0601/p/6001021.html

https://blog.csdn.net/jewes/article/details/52654997