我們在了解三次握手之后:https://blog.csdn.net/qq_46423166/article/details/113441873,接下來看四次揮手的問題,
TCP時是向連接的協議,運輸連接是用來傳送TCP報文的,
這里我們討論TCP連接的釋放:四次揮手
首先看圖解:

第一次揮手:
- 客戶端向服務器端發送連接釋放報文段,并停止再發送資料,主動關閉TCP連接
此時首部中的終止控制位FIN=1,(當FIN=1,表明此報文段的發送方資料已經發送完畢,并要求釋放運輸連接)
同時自己的序號seq=u;
第二次揮手:
- 服務器收到連接釋放報文段后即發出確認,但是可能客戶端發來的資料沒有接收完,所以不會立即停止,而是會保持這個狀態一段時間,也就是半關閉狀態
包含確認ACK=1(確認ACK為1,是確認號欄位才有用)
然后回傳確認號ack=u+1,(確認號欄位,表示希望接收的下一個服務器端報文段開頭序列,同時也是上一個服務器發送的資料的最后一個位元組的序號加1)
同時自己的序列號seq=y
第三次揮手:
- 如果服務器已經完全接收了資料之后,其應用行程才會通知TCP釋放連接
首先包含釋放報文段FIN=1
還是回傳確認ACK=1,
回傳確認號還是上次的,因為還是那一段資料的最后一次自己序號加一,即ack=y+1,
同時自己的序號seq=w,因為在半關閉狀態可能又發送了一些資料
第四次揮手:
- 客戶端收到連接釋放報文段后,還需要對此發出確認,
首先還是確認ACK=1
然后確認好ack=w+1
自己的序列號變成seq=u+1
上面就是TCP的四次揮手的程序
四次握手的原因?
由于連接的關閉控制權在應用層,所以被動關閉的一方在接收到FIN包時,TCP協議堆疊會直接發送一個ACK確認包,優先關閉一端的通信,
然后通知應用層,由應用層決定什么時候發送FIN包,應用層可以使用系統呼叫函式read==0來帕努但對端是否關閉連接,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/255258.html
標籤:其他
