socket斷開連線的四次握手及常見過程解析

2022-05-22 10:00:09 字數 1232 閱讀 9757

tcp的協議文件對tcp的一些規定:文件名稱-rfc793 

tcp訊息頭的控制位

urg:緊急指標字段有效

ack:確認頭部字段有效

psh:強制函式

syn:同步系列號碼

fin:再沒有來自傳送者的資料

tcp連線過程的各種狀態及意義

listen:等待任何從遠端tcp和埠的連線請求

syn-sent:傳送乙個連線請求以後等待乙個匹配的連線請求

syn-received:傳送乙個連線請求並收到匹配的連線請求以後等待連線請求被確認

established:表示乙個開啟的連線,接收的資料可以傳遞給使用者,連線的資料傳輸的正常階段

fin-wait-1:等待遠端的tcp連線終止請求,或者等待之前傳送的連線終止請求確認

fin-wait-2:等待遠端tcp的連線終止請求

close-wait:等待本地使用者的連線終止請求

closing:等待遠端的tcp連線終止請求確認

last-ack:等待傳送給遠端的tcp連線終止請求的確認(包括位元組的連線終止請求確認)

time-wait:等待足夠的時間以確認遠端tcp收到它的連線終止請求的確認

closed:不在連線狀態

四次握手協議的過程以及狀態變化

2.b端收到fin後傳送給a端fin訊息以及回覆a端fin的ack訊息,同時進入close狀態

3.a端收到b端的fin和fin-ack訊息以後切換至close狀態,a端回覆b端的fin-ack訊息以後進入wait-2狀態

4.b端收到a端的fin-ack訊息後進入最後的等待階段,會等待2msl時長,保證資料全部傳送和接收,之後才是真正關閉

三次握手的作用

防止老的重複連線發起導致的混亂,rst訊息就是為了處理這種特殊的訊息,在同步狀態和非同步狀態收到rst的tcp端採取不同的措施

tcp的半開啟狀態

tcp連線的兩端沒有資料互動,且其中一端異常關閉(比如伺服器斷電,應用程式異常終止不算異常關閉,作業系統會在fd變為0時自動關閉socket,完成四次握手),此時對端並不知道鏈結已關閉,這種場景叫做半開啟連線。半開啟連線中保持開啟的一端向socket傳送任何資料都會導致收到乙個rst訊息,rst訊息期望收到訊息的一端關閉連線。

關閉乙個連線時如何確保資料已經全部傳送或者接收?

使用者需要持續讀取資料直到tcp告訴使用者已經沒有資料可讀,手動關閉連線後,tcp仍會保持一段時間,保證使用者的資料全部送達,這個期間需要持續從關閉的連線讀取資料。

TCP四次握手斷開連線

建立連線非常重要,它是資料正確傳輸的前提 斷開連線同樣重要,它讓計算機釋放不再使用的資源。如果連線不能正常斷開,不僅會造成資料傳輸錯誤,還會導致套接字不能關閉,持續占用資源,如果併發量高,伺服器壓力堪憂。建立連線需要三次握手,斷開連線需要四次握手,可以形象的比喻為下面的對話 下圖演示了客戶端主動斷開...

tcp 三次握手連線,四次握手斷開

tcp握手協議 在tcp ip協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線.第一次握手 建立連線時,客戶端傳送syn包 syn j 到伺服器,並進入syn send狀態,等待伺服器確認 syn 同步序列編號 synchronize sequence numbers 第二次握手 伺服...

TCP斷開連線的四次握手流程

1.客戶端向服務端傳送乙個fin包m,然後進入fin wait狀態。m為請求序號 正確理解為 fin 1,seq m 2.服務端接收到fin包,傳送乙個ack應答,ack 1,ack m 1給客戶端,然後服務端進入close wait狀態 3.服務端向客戶傳送乙個fin包n,然後進入lask ack...