趣談TCP四次揮手

1.趣談TCP四次揮手

老樣子,在開始正式的講解TCP四次揮手之前,先來一段小對話來幫助大家更好的理解。
下面展示 對話情景

----------------------------------------------------------------------
對話介紹:
角色:祖安人,萌新
背景:經過了三次對話之後,祖安人和小朋友進入了選擇英雄界面。祖安人面帶微笑
的讓小萌新選擇了一個“掃把頭”的英雄,而祖安人選擇了“鮎魚”來輔助萌新。
進入遊戲界面後,祖安人開始了和萌新友好的互動 ......
----------------------------------------------------------------------

在這裏插入圖片描述

遊戲結束,祖安人和萌新各回各家。

對話結束,下面正式的開始介紹TCP四次揮手連接

2.斷開TCP連接:TCP四次揮手

看完上面那個小對話,下面開始正式的來看TCP四次揮手
TCP四次揮手
這裏再複習一下seq,FIN,ACK:
1.序號seq:

佔32比特,也就是4個字節。一個報文段的序號是該報文段首字節的字節流編號。

2.確認號ack:

佔4個字節。確認號就是主機正在等待的數據的下一個字節序號。
例如:客戶發送的第一個報文段的序號 seq =  99;那麼服務器發送的報文段的
確認號: ACK= 100

3.終止FIN

FIN=1時,表示數據已全部傳輸完成,發送方不會再傳輸數據,並且要求釋放當前
連接。
FIN=0,正常傳輸數據。

①爲什麼需要斷開TCP連接?

因爲在建立TCP連接(三次握手),連接後的數據傳輸中,客戶和服務器都會爲該TCP連接分配TCP緩存和變量。(在分配TCP緩存和變量中,會使得TCP容易收到SYN洪泛的拒絕服務攻擊)。所以在連接結束後(TCP四次揮手),客戶和服務器中的資源(即緩存和變量)都應該被釋放。

②爲什麼需要四次揮手斷開TCP連接?

因爲TCP是全雙工的通信機制全雙工通信信道:雙方都可以同時發送和接收),每個方向必須單獨進行關閉,並且客戶和服務器任何一個都可以選擇關閉該TCP連接。

分析四次揮手:斷開連接

  1. 客戶端首先發出一個關閉連接命令(FIN = 1),也就是向服務器端發送一個首部帶有FIN比特標誌位的TCP報文段,此時客戶端不會再向服務器發送數據,並且會等待服務器返回確認報文段(ACK報文)。

  2. 服務器端接收到了該報文段後,就向客戶端發送回一個確認報文段(ACK = 1);但是服務器端此時還沒有進入關閉狀態,會把剩下沒有發送的數據繼續發給客戶端

  3. 服務器端發送完剩下未發送的數據之後,同樣也會向客戶端發送一個首部帶有FIN比特標誌位的TCP報文段,此時服務器端不會再向客戶端發送數據,同樣會等待客戶端返回確認報文段。

  4. 客戶端收到該報文段後,客戶TCP會對該報文段進行確認,並且會進入定時等待狀態,因爲假若ACK丟失,該狀態會讓TCP客戶端重新發送最後的確認報文ACK。經過該狀態之後,TCP連接就正式關閉了,客戶端所有的資源(變量,緩存包括端口號)將會被釋放。

定時等待狀態:TIME_WAIT,所消耗的時間有30秒、1分鐘或者2分鐘,一般爲2分鐘
(MSL)。

總結

TCP四次揮手關閉連接的規則如下:

  • 當一端(可以是客戶端或者服務器端)發送一個FIN報文段來關閉這一端的數據發送,需要收到另一端的確認報文段。
  • 又因爲TCP是全雙工的通信機制(全雙工通信信道:雙方都可以同時發送和接收),每個方向必須單獨進行關閉,所以需要四次揮手關閉連接。

3.小知識:SYN洪泛攻擊

SYN洪泛攻擊也叫DoS攻擊,利用了TCP三次握手建立連接的特點。攻擊者發送大量的僞造TCP SYN報文段,而不完成去第三次握手的步驟,導致服務器不斷爲這些半開連接分配資源(緩存,變量),導致了服務器的連接資源被消耗殆盡。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章