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...