TCP三次握手與四次揮手

2021-08-03 05:42:22 字數 2237 閱讀 2295

tcp是面向連線的協議。而運輸連線有三個階段:

連線建立

資料傳送

連線釋放

其過程示意圖:

本篇中點講述「連線建立」與「連線釋放」過程,以及它們的原理。

tcp的功能:

需要強調的tcp控制位中的四個:

其他容易混淆的單詞:

三次握手:

過程:客戶端和伺服器初始都在closed狀態,即沒有連線。

伺服器變為listen狀態,隨時監聽連線請求。

客戶端向伺服器傳送乙個syn=1,ack=0的報文,表明則是乙個連線請求。此時客戶端進入syn-sent狀態。

伺服器接收客戶端的連線請求報文,並作出響應,傳送確認報文syn=1,ack=1。並且伺服器進入syn-rcvd狀態。

客戶端接收了來自伺服器的連線確認報文,也發出確認,表示:客戶端知道伺服器對連線請求作出了響應,並傳達給伺服器。此時客戶端進入estab-lished狀態。

伺服器接受了客戶端確認報文,也進入了estab-lished狀態。

此時,客戶端和伺服器之間的雙向連線建立完畢,可以進行資料傳輸。

對於seq(序列號)與ack(確認號):

問題:為什麼連線建立需要三次握手,而不是兩次握手?

上面提過,tcp是一種可靠的資料傳輸。

如果是兩次握手,則當伺服器接收到乙個失效的客戶端連線請求報文時,伺服器就建立了伺服器到客戶端之間的連線。並向客戶端傳送確認報文。但是客戶端並沒有發出建立新連線的請求報文,所以不響應伺服器的確認報文。但是伺服器卻會一直等到客戶端的資料,所以就浪費了伺服器的許多資源。

通過採用三次握手,由於伺服器接受不到來自客戶端的確認,所以就知道了客戶端並沒有要求建立連線,從而不會建立連線。

四次揮手:

過程:客戶端和伺服器都處於estab-lished狀態,兩者可以相互傳送資料。

客戶端向伺服器傳送fin=1的報文,表明希望斷開連線,並且不再傳送資料。此時客戶端進入fin-wait-1狀態。

伺服器接收fin=1的報文後,首先向客戶端傳送ack=1的報文,表示,客戶端的請求伺服器已經知曉了。並且進入close-wait狀態。

伺服器在close-wait狀態下,可能還有資料沒有傳送完,所以自己將剩下資料繼續傳送給客戶端。

伺服器將資料傳送完後,最後想客戶端傳送了fin=1,ack=1的報文,表明自己也要斷開連線,並且進入last-ack狀態。

客戶端接收了伺服器的ack確認報文之後,又想伺服器傳送了ack=1的報文,並且進入time-wait狀態。

伺服器接受到客戶端的ack確認報文後,關閉到客戶端的連線,進入closed狀態。

客戶端等待了2msl時間後,沒有收到來自伺服器的報文,表明伺服器是真的斷開連線了,客戶端也斷開連線,進入closed狀態。

關於seq序列號:

問題:

(1)為什麼建立連線是三次握手,而關閉連線卻是四次揮手呢?

這是因為服務端在listen狀態下,收到建立連線請求的syn報文後,把ack和syn放在乙個報文裡傳送給客戶端。而關閉連線時,當收到對方的fin報文時,僅僅表示對方不再傳送資料了但是還能接收資料,己方也未必全部資料都傳送給對方了,所以己方可以立即close,也可以傳送一些資料給對方後,再傳送fin報文給對方來表示同意現在關閉連線,因此,己方ack和fin一般都會分開傳送。

(2)time-wait存在意義?

a,防止上一次連線中的包,迷路後重新出現,影響新連線(經過2msl,上一次連線中所有的重複包都會消失)

b,可靠的關閉tcp連線。在主動關閉方傳送的最後乙個 ack確認報文,有可能丟失,這時被動方會重新發,如果這時主動方處於 closed 狀態 ,就會響應rst而不是 ack。所以主動方要處於 time_wait 狀態,而不能是 closed 。

客戶端\伺服器所處的11個狀態

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