天天看點

TCP協定的"三次握手"和"四次揮手"

傳輸層是計算機網絡體系結構中關鍵的一層,要了解傳輸層首先要深入了解兩個協定:

1.使用者資料報協定(UDP)

2.傳輸控制協定(TCP)

簡單介紹一下UDP協定,重點介紹TPC協定:

UDP協定:

UDP是一個快速高效的傳輸協定,傳送資料之前不需要建立連接配接,是無連接配接傳輸,但有一個缺點就是,不能保證可靠性傳輸。

主要特點:

1.無連接配接的。

2.UDP盡最大努力傳遞,不能保證可靠傳遞。

3.UDP是面向封包的。

4.UDP沒有擁塞控制,也就是說,網絡出現阻塞的時候不會使源主機發送速率降低,允許傳輸過程中丢失一部分資料,但是卻不能産生太大的延時。

5.UDP支援一對一、一對多、多對一、多對多傳輸

6.首部開銷少。隻有8位元組,TCP協定首部20位元組。

TCP協定:

TCP協定是TCP/IP體系中非常複雜的一個協定

主要特點:

1.TCP面向連接配接的。類似撥号一樣,傳輸資料時,發送端和接收端首先要建立連接配接。有三次對話,後面詳解

2.TCP是提供可靠性傳遞的服務,通過TCP傳輸的資料,無差錯,不丢失,不重複,并且按順序到達。

3.TCP提供全雙工信道通信。

4.面向位元組流。

TCP運輸連接配接管理

TCP是面向連接配接的協定,運輸連接配接是用來傳送TCP封包的,運輸連接配接分為三個階段:連接配接建立、資料傳送、連接配接釋放。

在TCP連接配接的過程中要确立這幾個問題:

①.要使一方知道另一方的存在。

②.要允許雙方協商一些參數(視窗大小、時間戳等選項)。

③.能夠對運輸實體資源配置設定。

TCP的連接配接建立:

TCP協定的"三次握手"和"四次揮手"

建立連接配接的過程:

客戶client 主動請求連接配接,而伺服器server則是被動打開連接配接。

三次握手:

一、伺服器先建立TCB(傳輸控制塊)來準備接受連接配接請求。處于LISTEN 狀态,用戶端也有TCB塊 送出請求,這時候首部中的SYN字段變為1,同時選擇一個序列号seq=x,TCP規定SYN封包段不能攜帶資料,但是要消耗一個序列号。TCP用戶端進入SYN SENT狀态。

二、伺服器收到請求後,如果同意建立連接配接,則向客戶發出确認,再确認封包段中應SYN=1,ACK=1,确認号ack=x+1,同時也要為自己選一個序列号seq=y,這是同樣要消耗一個序列号。

TCP伺服器程序進入SYN-RCVD狀态。

三、TCP用戶端接收到伺服器端的确認後,還要給伺服器發送确認,确認封包段ACK=1,确認序列号ack=y+1,自己的序列号seq=x+1。此時TCP連接配接已建立,伺服器、用戶端同時進入ESTABLISHED狀态。開始傳輸資料。

問題:

為什麼,最後用戶端還要确認一次?主要是防止已經被确認失效的連接配接突然有傳送到伺服器端,産生錯誤。

例如下面這種情況:

client 發送了一個請求,由于各種原因為抵達,那麼會重新發送,和server建立連接配接後傳輸資料。到最後釋放。完成傳輸後,這是第一次的請求突然被接收到了,如果沒有第三次确認,這是server誤以為是又要重建立立一個新的連接配接,來傳輸資料,産生異常。

建立三次握手就可以避免上述異常産生,而為什麼不建立四次、五次,三次就能完成,沒必要浪費資源。

四次揮手:

TCP協定的"三次握手"和"四次揮手"

一、用戶端向伺服器端發送連接配接釋放封包段。FIN置為1,序列号seq=u,等待回應。TCP連接配接處于半關閉狀态,這時表示用戶端已沒有要發送的資料,但是伺服器端還能發送,客戶仍需接受。

二、伺服器端收到請求,回應 ACK置1,确認序列号ack=u+1,自己的序列号seq=v。用戶端收到伺服器确認後進入半關閉狀态FIN-WAIT2狀态。等待伺服器的連接配接釋放請求封包段。

三、此時,伺服器已不再向用戶端發資料,伺服器發起釋放連接配接請求。FIN置1,ACK=1,确認序列号ack=u+1,自己的序列号seq=w,進入LAST-ACK狀态等待用戶端的确認

四、用戶端發送确認釋放封包段,ACK置1,确認序列号ack=w+1,seq=u+1。

問題:為什麼用戶端在第一次收到确認後進入FIN-WAIT2狀态?

為了保證最後一次發送的ACK封包段能到達伺服器端。還有就是保證上面說到的已失效連接配接請求封包段。

上述就是四次揮手。