一文看懂TCP基礎之三次握手4次揮手

Abstract

本文主要關注了TCP連接中最關鍵的部分就是如何建立連接和關閉連接.
寫這個文章的目的主要還是總結備忘TCP相關的聯繫

TCP 三次握手

什麼是TCP三次握手?

TCP 三次握手主要用於建立TCP連接.其中涉及3個TCP包.
一個連接的建立過程:

  1. 客戶端發送SYNC包:
    在這裏插入圖片描述
  2. 服務端回覆SYNC+ACK包:
    在這裏插入圖片描述
  3. 客戶端回覆ACK包
    在這裏插入圖片描述

Q&A

2次行不行?

不行. 因爲如果客戶端發送的SYNC由於網絡延遲發送了, 那麼客戶端重新發SYNC包, 然後服務器建立了連接. 前面SYNC的包又到了, 那麼會重複建立連接.

4次行不行?

可以. 但是效率不高.
如果TCP的握手是四次:
–1.client給server發送SYN同步報文;
–2.server收到SYN後,給client回覆ACK確認報文;
–3.server給client發送SYN同步報文;
–4.client給server發送ACK確認報文。
第2.3步之間,server和client沒有任何的數據交互,分開發送相當於多發了一次TCP報文段,SYN和ACK標識只是TCP報頭的一個標識位。很明顯,這兩步可以合併,從而提高連接的速度和效率。

什麼是backlog

在建立連接時, 客戶端發送SYNC,服務器收到SYNC後, 服務器端會將該請求放入SYNC隊列(服務器端半連接隊列), 然後服務器發送SYNC+ACK給客戶端, 客戶端收到SYNC+ACK後, 在客戶端連接標記爲Established, 然後客戶端發送ACK, 服務器檢查ACCEPT隊列, 如果ACCEPT隊列滿, 要麼丟棄要麼直接回復RST(參數tcp_abort_on_overflow). 如果ACCEPT隊列沒有滿, 則將該連接從SYNC隊列移入ACCEPT隊列.
ACCEPT隊列大小=min(backlog, somaxconn) = default is 50
SYNC隊列大小=max(64, tcp_max_sync_backlog)
在這裏插入圖片描述
如果客戶端發送ACK較晚, 服務端直接RST.

TCP 4次揮手

什麼是 TCP四次揮手

TCP關閉連接的過程. 取決於誰先trigger關閉連接:
在這裏插入圖片描述

Q&A

爲什麼是4次?

TCP是全連接(兩邊可以同時收發數據), 所以爲了保證TCP被正常關閉設計的4次揮手.

什麼是TIMED_WAIT

參考上圖.

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