TCP的三次握手與四次揮手

2022-03-10 02:32:35 字數 1510 閱讀 3861

在面試中網路問題是一定會考察的,而tcp協議則是考察網路知識的重點。經常會被問道的問題如下:

請講一下tcp協議建立連線的過程

請介紹tcp協議中的三次握手和四次揮手是怎麼樣的

為什麼tcp協議要三次握手來確立連線,而不是兩次,也不是4次

tcp連線發起是的syn序號為什麼不能從同乙個序號開始,比如說1

接下來,我將介紹我理解的tcp三次握手和4次揮手的過程,如果錯誤還請指正,謝謝。

首先需要伺服器監聽特定的埠,等待客戶端來請求連線。當客戶端需要建立連線時,客戶端會先向伺服器傳送syn報文,將報文中syn置為隨機生成的序號n(這裡假設序號為1000)。伺服器收到同步報文後,會回覆乙個ack報文,把ack位置位n+1(這裡的序號應該為1001),同時設定syn為y(這裡假設為2000)。客戶端收到伺服器傳送的ack報文後,會回覆乙個ack報文給伺服器,其中ack位置為y+1(這裡即為2001)。當伺服器收到ack訊息後,即認為連線進入穩定狀態。狀態機與流程圖如下:

以下為tcp從建立連線到斷開的完整流程圖

有了上面的介紹,基本能夠回答前兩個問題。

看上面看上面

首先呢,根本不存在可靠的連線,tcp只是提供相對可靠的連線。三次握手的主要目的是交換通訊需要的引數,主要是server與client的syn序號,這個序號是用於收發資料的。如果只有兩次握手的話,當伺服器傳送ack+syn訊息後,就會認為建立了穩定連線,這個時候如果ack+syn丟失了,client並沒有收到這個訊息,那麼客戶端就會認為連線建立不成功,而直接進入close狀態。這樣就會造成,server一直在哪傻等,永遠不會有client來傳送資料,這就會造成伺服器資源的浪費。至於為什麼不是四次握手,是因為握手三次成功以後,就可以認定當前連線是可靠的了,不然的話還需要client與server互相之間傳送ack訊息,這樣就無休無止了。

因為現實中的網路狀況不可預知,比如說客戶端在第一次連線時,使用序號為1為初始序號進行資料傳送,傳送了1到30的資料片段,這個時候因為網路問題斷開了連線。然後客戶端是syn為1重新建立了新的連線,這個時候伺服器收到了之前傳送的30個位元組的資料,伺服器就會以為這30個位元組的資料是新發的,這就會導致資料混亂。

說明,本文所有均來自the tcp/ip guide。

the tcp/ip guide

tcp為什麼需要3次握手與4次揮手

tcp三次握手四次揮手詳解

Tcp三次握手與四次揮手

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

TCP三次握手與四次揮手

也許三次握手你會經常聽到,但你知道三次握手的真正意義嗎,為什麼需要三次握手呢?首先我們必須明白tcp是面向連線的協議,無論哪乙個方向在傳送資料之前,都必須先在雙方之間建立連線。這一點與udp協議是不一樣的,udp在傳送資料報之前是不需要建立連線的。建立tcp連線的過程中,通訊的雙方需要互相發報文進行...

tcp三次握手與四次揮手

一.tcp三次握手 簡述 a傳送乙個請求給b,b發回確認,然後a再加以確認,來回共3次 1 第一次握手 客戶端傳送syn包 syn x 到伺服器,並進入syn send狀態,等待伺服器確認。2 第二次握手 伺服器收到syn包之後,必須確認客戶的syn ack x 1 同時自己也傳送乙個syn syn...