首先我們要了解其程序必須要了解它的6個標志位,一個Seq的序號和一個確認號

6個標志位
1.URG(緊急)
緊急指標有效,為1表示某一位需要被優先處理,用于保護TCP的連接不被種斷,督促中間設備盡快處理資料
2.ACK(確認)
確認標志,表示確認收到請求 置1時表示確認號合法,為0時表示資料段中不包含確認資訊,確認號被忽略,
3.PSH(傳送)
資料包到達接收端后,直接發給應用程式,
4.RST(重制)
重置復位標志,用來復位那些產生錯誤的連接,也被用于拒絕錯誤和非法的資料包,
5.SYN(建立聯機)
表示同步序號,用來建立連接,
6.FIN(結束)
表示發送端已經到達資料末尾,也就是說雙方的資料傳送完成,
序列號Seq
占4個位元組,用來標記資料段的順序,TCP把連接中的所有資料位元組都編上一個序號,第一個編號就是本地隨機產生,Seq就是第一個編號的序號,
確認號ack
占4個子節,期待收到對方下一個報文段的第一個資料位元組的序號;確認號指的是期待接收到下一個位元組的編號,因此當前報文段最后一個位元組的編號+1就是確認號
當我們了解了這些標志位和這些序列號和確認號的時候,這時候我們便好理解TCP的三次握手

第一次握手: 建立連接時,客戶端發送SYN包(syn=y)與序列號(seq=x)到服務器,并進入SYN_SENT狀態(同步已發送)等待服務器的回復,
第二次握手: 服務器接受到來自客戶端的SYN包與序列號后,必須確認客戶的SYN包并回復一個確認號(ack=y+1),同時服務器自己也發一個SYN包與ACK包與序列號(syn=k ACK=1 seq=z),并進入SYN_RCVD狀態(同步已接受)
第三次握手: 客戶端收到服務器的SYN+ACK包后,向服務器發送確認包ACK(ack=z+1)與序號seq=x+1,此包發送完畢后,客戶端與服務端進入ESTABLISHED狀態(連接已建立) ,故完成TCP的三次握手,
四次揮手程序:

(1)客戶端行程發出連接釋放報文,并且停止發送資料,釋放資料報文首部,FIN=1,序列號為seq=u(等于前面已經傳送過來的資料的最后一個位元組的序號加一)此時,客戶端進入FIN-WAIT-1(終止等待1)狀態,
(2)服務器收到連接釋放報文,發送確認報文,ACK=1,ack=u+1,并且帶上自己的序列號seq=v,此時,服務器就進入CLOSE-WAIT(關閉等待)狀態,TCP服務區通過高層的應用程式,客戶端向服務就停止,這時客戶端處在半關閉狀態,客戶端已經沒有資料要發送了,但是服務端若發送資料,這個狀態要持續一段時間,也是整個CLOSE-WAIT狀態的持續時間,
(3)客戶端收到服務器的確認請求后,客戶端就進入FIN-WAIT-2狀態,等待服務器發送連接釋放報文,
(4)服務器將最后的資料發送完畢后,就向客戶端發送連接釋放報文,FIN=1,ACK=1,ack=u+1,由于客戶端處于半關閉狀態,服務器很可能又發送了一些資料,假定此時的序列號seq=w,此時,服務端就進入了LAST-ACK(最后確認)狀態,待客戶端的確認,
(5)客戶端收到服務端的連接釋放報文后,必須發出確認ACK=1,ack=w+1,而自己的序列號為seq=u+1,此時,客戶端進入了TIME-WAlT(時間等待)狀態,注意,此時的TCP連接還沒有釋放,必須經過2MSL(最長報文段壽命)的時間后,當客戶端撤銷相應的TCB后,才進入CLOSED狀態,
(6)服務器只要收到了客戶端發出的確認,立即進入CLOSED狀態,同樣,撤銷TCB后,就結束了這次TCP連接,服務端結束TCP比客戶端要早,
這就是完整的TCP的三次握手四次揮手,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/325530.html
標籤:其他
上一篇:計算機網路知識點(面試)
