深入解析 TCP 協議【真題】

傳輸控制協議(TCP)解析與題目解析

題目解析

關于傳輸控制協議(TCP)表述不正確的是?
A. 主機尋址
B. 進程尋址
C. 流量控制
D. 差錯控制

TCP(Transmission Control Protocol)是面向連接、可靠傳輸傳輸層協議,用于需要數據傳輸可靠性保障的場景,如網頁瀏覽(HTTP/HTTPS)、文件傳輸(FTP)等。

逐項分析

? B. 進程尋址(正確)
TCP 通過 端口號(Port Number) 區分不同的應用程序,使多個進程能同時收發數據:

  • HTTP 使用 80 端口
  • HTTPS 使用 443 端口
  • FTP 使用 21 端口

? C. 流量控制(正確)
TCP 提供流量控制(Flow Control),防止發送方數據發送過快,使接收方無法處理:

  • 滑動窗口(Sliding Window) 控制數據發送量,避免溢出。
  • 擁塞控制(Congestion Control) 避免網絡過載,采用慢啟動、擁塞避免、快重傳等機制

? D. 差錯控制(正確)
TCP 確保數據完整性,避免傳輸錯誤:

  • 校驗和(Checksum):檢測數據包是否出錯。
  • 確認機制(ACK):確保數據正確送達。
  • 超時重傳(Timeout Retransmission):數據丟失時重新發送。

? A. 主機尋址(錯誤)
主機尋址是網絡層(IP 層)的任務,TCP 只負責端口管理:

  • IP 地址 負責主機尋址,在 IP 協議(Internet Protocol) 中完成。
  • TCP 依賴 IP 地址 進行數據傳輸,但本身不負責主機尋址

最終答案:A. 主機尋址(錯誤)


深入理解 TCP

1. TCP 主要特點

特性說明
面向連接三次握手 建立連接,四次揮手 斷開連接
可靠傳輸采用 確認應答(ACK)、超時重傳 機制
流量控制滑動窗口機制 限制數據發送速度
擁塞控制采用 慢啟動、擁塞避免 等機制防止網絡擁塞
面向字節流字節流 方式傳輸,而非獨立數據包

2. TCP 連接管理

(1) TCP 三次握手(建立連接)

📌 目的:確保通信雙方都準備好數據傳輸
1?? 客戶端發送 SYN(請求連接)
2?? 服務器回復 SYN-ACK(確認連接)
3?? 客戶端回復 ACK(確認收到)
? 連接建立成功!

“你聽得到嗎?”(SYN)
“我聽得到,你能聽到嗎?”(SYN-ACK)
“我能聽到!”(ACK)

(2) TCP 四次揮手(斷開連接)

📌 目的:確保雙方安全斷開,防止數據丟失
1?? 客戶端發送 FIN(請求斷開)
2?? 服務器回復 ACK(確認請求)
3?? 服務器發送 FIN(服務器也要斷開)
4?? 客戶端回復 ACK(確認收到)
? 連接完全斷開!

“我要走了”(FIN)
“好,我知道了”(ACK)
“我也要走了”(FIN)
“好,拜拜”(ACK)


1. 為什么 TCP 需要三次握手而不是兩次?

就像你和朋友打電話,需要確認雙方的聽說能力:

  1. :📞 “喂,你聽得到嗎?”(SYN)
  2. 朋友:📞 “我聽得到,你能聽到我嗎?”(SYN-ACK)
  3. :📞 “我也能聽到!咱們開始聊天吧!”(ACK)

如果只有兩次握手,比如:

  1. :📞 “喂,你聽得到嗎?”(SYN)
  2. 朋友:📞 “我聽得到。”(SYN-ACK)

那問題來了,你并沒有確認自己也能聽到朋友的聲音,萬一朋友以為你聽到了,而你其實沒聽清,就會導致通信失敗。因此,需要 三次握手 來確保雙方都準備好通信。

解析
TCP 連接的建立采用 三次握手(Three-Way Handshake) 主要是為了確保通信雙方都具備發送和接收能力,并且能正確同步初始序列號(ISN,Initial Sequence Number)。

三次握手過程
  • 第一次握手(SYN):客戶端發送 SYN(同步序列號)報文,表示要建立連接,同時攜帶一個初始序列號 seq = x
  • 第二次握手(SYN-ACK):服務器收到 SYN 后,回復 SYN + ACK,表示收到請求,同時發送自己的 seq = y
  • 第三次握手(ACK):客戶端收到服務器的 SYN + ACK 后,回復 ACK 確認連接建立,攜帶 ack = y + 1
為什么不能用兩次握手?

如果只用 兩次握手,可能會導致舊連接請求的干擾問題:

  • 設想 第一個 SYN 丟失,但 客戶端重傳了一個新的 SYN 并成功建立連接。
  • 但是舊的 SYN 可能在網絡中滯留,并在某個時刻被服務器收到,此時服務器會認為客戶端想要重新建立連接,并回復 SYN + ACK
  • 如果使用 兩次握手,客戶端會直接進入通信狀態,導致服務器和客戶端的狀態不同步,從而出現錯誤的連接建立

三次握手通過 客戶端在最后發送 ACK 確認,確保服務器知道客戶端已經準備好進行數據傳輸,從而避免了舊 SYN 報文的干擾問題。


2. 為什么 TCP 需要四次揮手,而不是三次?

就像你和朋友打電話結束時,不能一方直接掛斷,而是要確認對方也準備好掛斷:

  1. :📞 “我不說了,你繼續吧。”(FIN)
  2. 朋友:📞 “好的,我知道你不說了,但我還有點話要說。”(ACK)
  3. 朋友:📞 “我也說完了,我們掛電話吧。”(FIN)
  4. :📞 “收到,掛了!”(ACK)

如果只用三次揮手,比如:

  1. :📞 “我不說了,你繼續吧。”(FIN)
  2. 朋友:📞 “我也說完了,我們掛電話吧。”(FIN)
  3. :📞 “收到,掛了!”(ACK)

問題來了,你沒有確認朋友是否真的說完了,可能他還有話沒說完,數據就會丟失。因此需要 四次揮手 來確保雙方都真正完成通信。
解析
TCP 連接的釋放采用 四次揮手(Four-Way Handshake),主要是為了確保雙方都能安全地關閉連接,避免數據丟失。

四次揮手過程
  • 第一次揮手(FIN):客戶端發送 FIN,表示不再發送數據,但仍能接收數據。
  • 第二次揮手(ACK):服務器收到 FIN 后,返回 ACK,表示收到斷開請求,但可能還有數據要發送。
  • 第三次揮手(FIN):服務器處理完剩余數據后,主動發送 FIN,請求斷開連接。
  • 第四次揮手(ACK):客戶端收到服務器的 FIN 后,返回 ACK,并進入 TIME_WAIT 狀態。
為什么不能用三次揮手?

TCP 采用 全雙工通信,雙方的數據發送和接收是獨立的,因此需要 四次握手 確保:

  1. 客戶端關閉發送(第一、二次握手),但仍能接收服務器數據。
  2. 服務器關閉發送(第三、四次握手),以確保剩余數據能被客戶端接收。

如果采用 三次揮手,服務器可能在未完全發送完數據的情況下被強制關閉,導致數據丟失。


3. 為什么 TCP 需要 TIME_WAIT 狀態?

想象你掛了電話,但仍然在原地等幾秒,以防朋友發現自己話沒說完,再補充一句話:

  1. 你掛了電話(發送最后的 ACK)。
  2. 但你不會立刻走開,而是 等 2 分鐘,以防對方發現自己忘了說點什么,還能找你再確認。
  3. 如果 2 分鐘內朋友沒再打回來,你才真正離開。

這個 等待 2 分鐘 就是 TIME_WAIT,確保連接真正關閉,不會有遺留信息影響新的通話。

解析
TIME_WAIT 是指客戶端在發送 最后一個 ACK 之后,需要等待 2 * MSL(最大報文生存時間),確保服務器已經關閉連接。

TIME_WAIT 的作用
  1. 防止舊的 TCP 報文干擾新連接

    • 如果不等待直接關閉連接,舊的重復報文可能被新連接誤認為是新的數據,造成混亂。
  2. 確保服務器已正確關閉

    • 服務器可能沒有收到客戶端的最后一個 ACK(ACK 丟失),因此它會重發 FIN
    • 如果客戶端立刻關閉,服務器就無法收到 ACK,導致連接無法正確關閉。

TIME_WAIT 確保客戶端能夠處理服務器的重發 FIN,保證連接完整關閉。


TCP vs UDP

1. UDP(用戶數據報協議)特點

特性UDP 說明
無連接發送數據前無需建立連接
不可靠可能會丟包、亂序、重復
面向報文數據以報文(Datagram) 形式發送
無流量控制發送方不關心接收方能否處理
低延遲適用于實時通信(視頻會議、游戲)

2. TCP vs UDP 對比

特性TCPUDP
是否連接需要三次握手無需建立連接
傳輸可靠性可靠(有確認、重傳)不可靠(可能丟失)
流量控制(滑動窗口)
適用場景HTTP、FTP、郵件DNS、視頻、游戲

記憶技巧

📌 “TCP 像打電話📞,UDP 像寄快遞📦”

  • TCP 先撥號(三次握手),確認通話后交流(可靠)。
  • UDP 直接寄快遞,可能丟件(不可靠)。

TCP 流量控制(Flow Control)—— 滑動窗口機制

TCP 通過 滑動窗口機制(Sliding Window) 進行流量控制,防止發送方數據過快導致接收方處理不過來,從而保證網絡穩定、高效。


1. 為什么需要流量控制?

  • 發送方和接收方的處理能力可能不同,比如:
    • 發送方是 高性能服務器,每秒能發送 10GB 數據
    • 接收方是 老舊設備,每秒最多能處理 1GB 數據
    • 如果沒有流量控制,接收方就會被淹沒,數據會丟失 ?

TCP 需要調整發送速率,讓接收方有足夠的時間處理數據,這就是 流量控制 的作用。


2. 滑動窗口機制(Sliding Window)

TCP 通過滑動窗口協議來動態調整發送方的數據量。

🔹 核心概念

  • 發送窗口(Send Window):發送方可以連續發送的數據量
  • 接收窗口(Receive Window):接收方當前能存儲的最大數據量
  • 確認ACK:接收方收到數據后,發送 ACK(確認號)通知發送方

📌 示例
假設:

  • 發送窗口大小 = 4,即最多能連續發送 4 個數據包
  • 發送方發送 D1, D2, D3, D4
  • 接收方收到后,發 ACK 確認
  • 窗口滑動,允許發送 D5, D6, D7, D8

3. 滑動窗口的工作過程

(1)初始狀態

  • 發送窗口 = 4
  • 發送方可以發送 D1, D2, D3, D4
發送窗口D1D2D3D4D5D6D7D8
狀態? 已發送? 已發送? 已發送? 已發送? 未發送? 未發送? 未發送? 未發送

(2)接收方確認后,窗口滑動

  • 接收方收到 D1、D2,并返回 ACK(3)(表示已收到 D1, D2)
  • 窗口滑動 2 格,允許發送方發送新的數據 D5, D6
發送窗口D3D4D5D6D7D8
狀態? 已發送? 已發送? 已發送? 已發送? 未發送? 未發送

(3)丟包情況

  • 如果 D3 丟失,接收方不會發送 ACK(5),而是重傳 D3
  • 窗口不滑動,直到 D3 被成功接收
  • 發送方超時后,會重新發送 D3,等待 ACK

4. 窗口大小如何確定?

接收方會在 ACK 中動態調整窗口大小(RWND, Receiver Window)

  • 如果接收方忙(緩沖區快滿)窗口變小,減少發送數據
  • 如果接收方空閑(處理快)窗口變大,加快傳輸

📌 例子

  • 接收方緩沖區剩余 4KB,在 ACK 里告訴發送方 RWND=4KB
  • 發送方只會發送 4KB 數據,然后等待確認
  • 避免接收方緩沖區溢出

你的總結已經很清晰了,但可以再優化一下,使重點更突出、理解更直觀。我會進行以下改進:

  1. 補充直觀類比:用流水線倉庫管理的比喻,讓 TCP 流量控制、滑動窗口等概念更容易理解。
  2. 優化表格結構:將核心概念提煉得更簡潔,突出關鍵詞。
  3. 強調 TCP 機制的聯系:比如流量控制和滑動窗口的關系。

5. 拓展:流量控制 vs 擁塞控制

TCP 流量控制(Flow Control)擁塞控制(Congestion Control) 類似,但作用不同:

機制目標觸發條件主要手段
流量控制防止接收方被數據“壓垮”接收方反饋 RWND(接收窗口)變小滑動窗口、ACK 確認
擁塞控制防止網絡堵塞丟包、RTT 變大,網絡變慢慢啟動、擁塞避免、快速重傳、快速恢復

類比:

  • 流量控制 → 你吃飯的速度不能超過咀嚼的速度,否則會噎住(接收方能力)。
  • 擁塞控制 → 高速公路上的車不能太多,否則會堵車(網絡負載)。

6. 記憶技巧

🎯 口訣“先試探,再調整,慢慢來,不卡頓”

  • 發送方 先發一部分 數據(試探)
  • 根據接收方反饋 動態調整窗口大小(調整)
  • 避免數據丟失,保證高效傳輸(不卡頓)

? 類比
👉 流水線:工人(接收方)能處理多少,傳送帶(TCP 發送)就放多少,防止過載。


7. 總結

概念作用聯系
滑動窗口讓 TCP 連續發送 數據,提高效率核心機制,動態調整窗口大小
ACK 確認接收方確認已收到數據,窗口才滑動結合超時重傳,保證可靠性
窗口大小(RWND)由接收方控制,防止溢出用于流量控制,影響滑動窗口
超時重傳數據丟失時,TCP 重新發送與 ACK 確認配合,保證可靠傳輸

? 整體邏輯

  1. TCP 發送數據 → 采用滑動窗口,提高吞吐量。
  2. 接收方反饋 → 通過 ACK + RWND 控制數據量,避免溢出(流量控制)。
  3. 網絡異常時 → 通過超時重傳,確保數據不丟失。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/73089.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/73089.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/73089.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

單例模式的五種實現方式

1、餓漢式 ①實現:在類加載的時候就初始化實例 ②優點:線程安全 ③缺點:實例在類加載的時候創建,可能會浪費資源 //餓漢式 public class EagerSingleton{private EagerSingleton(){} //私有構造方法private static EagerSingle…

SwiftUI 讓視圖自適應高度的 6 種方法(四)

概覽 在 SwiftUI 的世界里,我們無數次都夢想著視圖可以自動根據布局上下文“因勢而變”?。大多數情況下,SwiftUI 會將每個視圖尺寸處理的井井有條,不過在某些時候我們還是得親力親為。 如上圖所示,無論頂部 TabView 容器里子視圖…

小程序SSL證書過期怎么辦?

SSL證書就像小程序的“安全鎖”,一旦過期,用戶訪問時會被提示“不安全”,輕則流失客戶,重則數據泄露!作為企業負責人,如何快速解決證書過期問題?又該如何避免再次踩坑?這篇指南給你答…

ClickHouse優化技巧實戰指南:從原理到案例解析

目錄 ?ClickHouse優化核心思想?表結構設計優化?查詢性能優化技巧?數據寫入優化方案?系統配置調優實戰?高可用與集群優化?真實案例解析?總結與建議 1. ClickHouse優化核心思想 ClickHouse作為OLAP領域的明星引擎,其優化需遵循列式存儲特性,把握…

DeepSeek 助力 Vue3 開發:打造絲滑的表格(Table)之添加列寬調整功能,示例Table14_02帶邊框和斑馬紋的固定表頭表格

前言:哈嘍,大家好,今天給大家分享一篇文章!并提供具體代碼幫助大家深入理解,徹底掌握!創作不易,如果能幫助到大家或者給大家一些靈感和啟發,歡迎收藏關注哦 💕 目錄 Deep…

服務自動被kill掉的原因和查看

服務在運行一段時間后被自動kill掉可能是由多種原因引起的,包括系統資源限制、進程管理策略、應用程序錯誤等。以下是一些常見的原因以及定位問題的過程: 常見原因 系統資源限制: 內存不足:如果服務消耗了過多的內存,系統可能會kill掉該進程以釋放內存資源。CPU使用過高:…

基礎算法——順序表

一、詢問學號 題?來源&#xff1a;洛? 題?鏈接&#xff1a;P3156 【深基15.例1】詢問學號 - 洛谷 難度系數&#xff1a;★ 1. 題目描述 2. 算法原理 直接? vector 或者數組模擬即可。 3. 參考代碼 #include <iostream> #include <vector>using namespace st…

Ubuntu用戶安裝cpolar內網穿透

前言 Cpolar作為一款體積小巧卻功能強大的內網穿透軟件&#xff0c;不僅能夠在多種環境和應用場景中發揮巨大作用&#xff0c;還能適應多種操作系統&#xff0c;應用最為廣泛的Windows、Mac OS系統自不必多說&#xff0c;稍顯小眾的Linux、樹莓派、群輝等也在起支持之列&#…

C#實現高性能異步文件下載器(支持進度顯示/斷點續傳)

一、應用場景分析 異步文件下載器用處很大&#xff0c;當我們需要實現以下功能時可以用的上&#xff1a; 大文件下載&#xff08;如4K視頻/安裝包&#xff09; 避免UI線程阻塞&#xff0c;保證界面流暢響應多任務并行下載 支持同時下載多個文件&#xff0c;提升帶寬利用率后臺…

Oracle比較好的幾本書籍

1.《Oracle專家高級編程》 2.《Oracle高效設計》 3.《Oracle9i&10g&11g編程藝術深入數據庫體系結構》 4.《讓Oracle跑的更快》(1/2) ....... n.《Oracle官方文檔的閱讀》下面包括這幾個部分&#xff0c;可以跟進研讀一下&#xff1a; &#xff08;1&#xff09;《…

js和java中方法重載(js本身是不支持方法重載,方便對比學習)

js如果需要實現方法重載 示例 1&#xff1a;根據參數數量實現重載 function overloadExample() {if (arguments.length 1) {console.log(一個參數:, arguments[0]);} else if (arguments.length 2) {console.log(兩個參數:, arguments[0], arguments[1]);} else {console.l…

Android : Camera之CHI API

來自&#xff1a; https://www.cnblogs.com/szsky/articles/10861918.html 一、CAM CHI API功能介紹&#xff1a; CHI API建立在Google HAL3的靈活性基礎之上&#xff0c;目的是將Camera2/HAL3接口分離出來用于使用相機功能&#xff0c;它是一個靈活的圖像處理驅動程序&#…

Netty基礎—2.網絡編程基礎四

大綱 1.網絡編程簡介 2.BIO網絡編程 3.AIO網絡編程 4.NIO網絡編程之Buffer 5.NIO網絡編程之實戰 6.NIO網絡編程之Reactor模式 5.NIO網絡編程之Buffer (1)Buffer的作用 Buffer的作用是方便讀寫通道(Channel)中的數據。首先數據是從通道(Channel)讀入緩沖區&#xff0c;從…

Git前言(版本控制)

1.Git 目前世界上最先進的分布式版本控制系統。 git官網&#xff1a;https://git-scm.com/ 2.版本控制 2.1什么是版本控制 版本控制(Revision control)是一種在開發的過程中用于管理我們對文件、目錄或工程等內容修改歷史&#xff0c;方便查看更改歷史記錄備份以便恢復以前…

調試正常 ≠ 運行正常:Keil5中MicroLIB的“量子態BUG”破解實錄

調試正常 ≠ 運行正常&#xff1a;Keil5中MicroLIB的“量子態BUG”破解實錄——從勾選一個選項到理解半主機模式&#xff0c;嵌入式開發的認知升級 &#x1f4cc; 現象描述&#xff1a;調試與燒錄的詭異差異 在線調試時 程序正常運行 - 獨立運行時 設備無響應 ! 編譯過程 0 Err…

算法每日一練 (9)

&#x1f4a2;歡迎來到張胤塵的技術站 &#x1f4a5;技術如江河&#xff0c;匯聚眾志成。代碼似星辰&#xff0c;照亮行征程。開源精神長&#xff0c;傳承永不忘。攜手共前行&#xff0c;未來更輝煌&#x1f4a5; 文章目錄 算法每日一練 (9)最小路徑和題目描述解題思路解題代碼…

【高項】信息系統項目管理師(四)項目整合管理【4分】

一、管理基礎 項目整合管理的責任不能被授權或轉移&#xff0c;項目經理必須對整個項目承擔最終責任。 執行項目整合時項目經理承擔雙重角色&#xff1a; 1、組織層面上&#xff0c;項目經理扮演重要角色&#xff0c;與項目發起人攜手合作&#xff0c;了解戰略目標并確保項目目…

ECEF與ENU坐標系定義及C語言實現

一、ECEF與ENU坐標系定義 ECEF坐標系&#xff08;地心地固坐標系&#xff09; 原點&#xff1a;地球質心X軸&#xff1a;指向本初子午線與赤道交點Y軸&#xff1a;在赤道平面內與X軸垂直Z軸&#xff1a;指向北極數學表示&#xff1a; P e c e f ( x , y , z ) P_{ecef} (x,…

sql語句分頁的關鍵字是?

在 SQL 中&#xff0c;分頁通常是通過限制查詢結果的數量并指定從哪一行開始獲取數據來實現的。不同的數據庫系統使用不同的分頁關鍵字。 以下是常見數據庫系統的分頁關鍵字&#xff1a; MySQL / PostgreSQL / SQLite 使用 LIMIT 和 OFFSET 來進行分頁&#xff1a; LIMIT 限…

大模型中的剪枝、蒸餾是什么意思?

環境&#xff1a; 剪枝 蒸餾 問題描述&#xff1a; 大模型中的剪枝、蒸餾是什么意思&#xff1f; 解決方案&#xff1a; 大模型的剪枝&#xff08;Pruning&#xff09;和蒸餾&#xff08;Distillation&#xff09;是兩種常見的模型優化技術&#xff0c;用于減少模型的大小…