白話文理解 TCP、TCP 三次握手、TCP 四次揮手

前言:本文主要是分享一下關於對 TCP、UDP、TCP 三次握手、TCP 四次揮手的個人理解,儘量用白話文的方式去解釋,但是肯定會夾雜一些專業名詞,對這一塊一無所知的小白兄弟請見諒。

什麼是 TCP 協議?

設備 (手機 / 電腦)能夠使用聯網功能是因爲設備底層實現了 TCP/IP 協議,可以使設備終端通過網絡建立 TCP 連接。TCP 協議可以對上層網絡提供通道,使上層網絡數據的傳輸建立在“無差別” 的網絡之上。

可以簡單理解 TCP 相當於一個連接通道,而 HTTP、HTTPS 就是基於這個連接通道的應用:運輸員。

TCP 三次握手相當於 建立連接通道,而 TCP 四次揮手相當於 關閉連接通道。

最後上一張 OSI 7 層網絡模型(這裏看不懂沒關係,結合下文食用味道更好)

TCP 三次握手和 TCP 四次揮手發生在哪裏?

不帶着問題驅動去解決問題就是耍流氓,

這裏引用一道常見的面試題:從輸入 URL 地址到看到頁面,中間都經歷了啥?去理解 TCP 三次握手和 TCP 四次揮手應用在哪?

從輸入 URL 地址到看到頁面,中間都經歷了啥?(這裏只講簡單步驟,因爲本文主要是爲了去白話文描述一些 TCP 的相關問題)

  1. URL 地址解析
  2. 緩存檢查
  3. DNS 解析
  4. TCP 三次握手
  5. 數據傳輸
  6. TCP 四次揮手
  7. 頁面渲染

可以看到 TCP 三次握手和 TCP 四次揮手主要發生在於數據傳輸的前後。

TCP 三次握手是什麼?

客戶端通過 IP 向服務器發起請求獲取數據,此時需要我們客戶端和服務器建立起網絡連接通道(只有建立了網絡連接通道我們才能通過 IP 地址向服務器獲取數據 ),這個建立通道的過程就是 TCP 三次握手。

TCP 爲了使通道更加穩定可靠,TCP 三次握手就是三次效驗的過程。

效驗的常用名詞:

效驗的過程:

三次握手爲什麼不用兩次,或者四次呢?

TCP 作爲一種可靠傳輸控制協議,其核心思想:既要保證數據可靠傳輸,又要提高傳輸的效率!

TCP 四次揮手是什麼?

TCP 四次揮手的目的是斷開 TCP 連接通道。

TCP 四次揮手和 TCP 三次握手一樣都是客戶端主動發起的。

那麼客戶端什麼時候發起 TCP 四次揮手呢?

1當客戶端把信息(請求頭、請求主體……)傳給服務器之後,它就開始發起我們這個TCP四次揮手(斷開鏈接)的請求。
2複製代碼
3

爲什麼建立連接通道的時候是三次握手,而關閉連接通道的時候是四次揮手?

理論性解釋:

1服務器端收到客戶端的SYN連接請求報文後,可以直接發送SYN+ACK報文
2
3但關閉連接時,當服務器端收到FIN報文時,很可能並不會立即關閉鏈接,
4所以只能先回復一個ACK報文,告訴客戶端:”你發的FIN報文我收到了”,
5
6只有等到服務器端所有的報文都發送完了,我才能發送FIN報文,因此不能一起發送,故需要四步握手。
7
8複製代碼
9

假如關閉連接通道也是三次揮手,會這樣::

  1. 當客戶端將信息(請求頭、請求主體……)傳給服務器之後,它就立馬通知 服務器端 我準備要關閉連接通道了
 11.當客戶端將信息(請求頭、請求主體……)傳給服務器之後,它就立馬通知 服務器端 我準備要關閉連接通道了
 2
 32.由於數據傳輸的內容相對過大且準備數據傳輸內容需要時間,
 4服務端等響應數據內容準備好並將響應數據內容和迴應客戶端的話:我收到你要斷開連接的通知了
 5傳輸給客戶端。(由於等待時間過長沒有響應,客戶端會想服務器這小子到底聽到了沒啊?都不理人的)
 6(這個過程會相對漫長耗時,此時過程中客戶端並不知道服務器端是否知道自己要斷開連接的通知,就無法準備斷開連接的工作)
 7
 83.客戶端:好的,再見。
 9複製代碼
10

這樣的過程顯然是不合理的。

而四次揮手,便顯得更加的合理:

 11.當客戶端將信息(請求頭、請求主體……)傳給服務器之後,它就立馬通知 服務器端 我準備要關閉連接通道了
 2
 32.由於數據傳輸的內容相對過大且準備數據傳輸內容需要時間,
 4服務器端無法第一時間將數據傳輸給客戶端,
 5但是它需要告訴客戶端一聲:我知道了,你等我把數據內容傳輸給你後就斷開連接吧。(立即回答)
 6
 73.服務器端 將 客戶端請求的數據返回給客戶端,同時,服務器再告訴客戶端:你要的東西我都給你了
 8
 94.客戶端收到數據後,告訴服務器端:你給我的東西我收到了,那我斷開連接了,再見
10
11複製代碼
12

結合上面的鋪墊,那就可以用下面的圖片來表示了:

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://juejin.cn/post/6939559771188133924?utm_source=gold_browser_extension