三次握手
第一次握手:客戶端–傳送帶有 syn 標誌的資料報–服務端
第二次握手:服務端–傳送帶有 syn/ack 標誌的資料報–客戶端
第三次握手:客戶端–傳送帶有帶有 ack 標誌的資料報–服務端
為什麼要三次握⼿
三次握⼿的⽬的就是雙⽅確認⾃⼰與對⽅的傳送與接收是正常的。
第⼀次握⼿:client 什麼都不能確認;server 確認了對⽅傳送正常,⾃⼰接收正常
第⼆次握⼿:client 確認了:⾃⼰傳送、接收正常,對⽅傳送、接收正常;server 確認了:對⽅傳送正常,⾃⼰接收正常
第三次握⼿:client 確認了:⾃⼰傳送、接收正常,對⽅傳送、接收正常;server 確認了:⾃⼰傳送、接收正常,對⽅傳送、接收正常
所以三次握⼿就能確認雙發收發功能都正常,缺⼀不可。
四次揮手
簡要概述
第⼀次揮手:客戶端-傳送⼀個 fin,⽤來關閉客戶端到伺服器的資料傳送
第二次揮手:伺服器-收到這個 fin,它發回⼀ 個 ack,確認序號為收到的序號加1 。和 syn ⼀樣,⼀個
fin 將佔⽤⼀個序號
第三次揮手:伺服器-關閉與客戶端的連線,傳送⼀個fin給客戶端
第四次揮手:客戶端-發回 ack 報⽂確認,並將確認序號設定為收到序號加1
為什麼要四次揮⼿
任何⼀⽅都可以在資料傳送結束後發出連線釋放的通知,待對⽅確認後進⼊半關閉狀態。當另⼀
⽅也沒有資料再傳送的時候,則發出連線釋放通知,對⽅確認後就完全關閉了tcp連線。
詳細解析
①第一次:最開始客戶端和伺服器都是連線建立的狀態(establish)
客戶端向伺服器傳送fin,客戶端進入fin_wait_1狀態
②第二次:伺服器回ack,伺服器進入close_wait狀態;
客戶端收到ack後,進入fin_wait_2狀態
③第三次:伺服器傳送fin,進入last_ack狀態(等待對方的ack報文,當收到ack後,進入到closed狀態);
④第四次:客戶端收到fin報文段後,傳送ack,進入time_wait狀態;伺服器收到ack,進入close狀態,伺服器關閉連線;
此時,客戶端等待2msl,為了防止伺服器沒收到ack,則伺服器超時重傳fin請求,經過2msl後進入close狀態,客戶端才可以關閉連線。
為什麼要有time_wait這個狀態?
主要有兩個原因:
1.可靠的關閉tcp連線:
在客戶端傳送的ack可能丟失,這時伺服器會重發fin, 如果客戶端處於 closed 狀態 ,則會響應rst而不是ack。所以客戶端要處於 time_wait 狀態,而不能是 closed 。
2.防止重傳的fin包影響新連線
計算機網路 TCP IP三次握手和四次揮手
udp通訊時不需要接收方確認,屬於不可靠的傳輸,可能會出現丟包現象,實際應用中要求程式設計師程式設計驗證。udp與tcp位於同一層,但它不管資料報的順序 錯誤或重發。因此,udp不被應用於那些使用虛電路的面向連線的服務,udp主要用於那些面向查詢 應答的服務,例如nfs。相對於ftp或telnet,...
計算機網路 TCP的三次握手和四次揮手
參考鏈結 參考鏈結 三次握手 四次揮手 在完成三次握手的第三步之前分配 tcp 快取 和 變數,使得tcp易於受到syn洪氾的拒絕服務攻擊。linux為tcp連線分配的資源 linuxtcp的連線控制塊 tcp服務端在接收到syn報文時,會為該連線先分配乙個tcp request sock,三次握手...
計算機網路四次握手
任何一方都可以在傳送資料傳送結束後發出連線釋放的通知,待對方確認後進入半關閉的狀態。當另一方也沒有資料在傳送時,則傳送連線釋放通知,對方確認後就完全關閉了tcp連線。下面分兩次來解釋四次握手 資料傳輸結束後,通訊的雙方都可釋放連線。現在 a 的應用程序先向其 tcp 發出連線釋放報文段,並停止再傳送...