計算機網路 三次握 和四次揮

2021-10-14 04:18:37 字數 1585 閱讀 7353

三次握手

第一次握手:客戶端–傳送帶有 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 發出連線釋放報文段,並停止再傳送...