計算機網絡--傳輸層(1)

第五章 傳輸層


一、傳輸層基本功能

  1. 進程到進程的邏輯通信

    • 套接字(Socket)IP地址:端口號
      • IP地址:標識主機(網絡層功能)
      • 端口號:16位整數(0-65535),標識進程
        • 熟知端口(0-1023):如 HTTP(80)、FTP(21)
        • 注冊端口(1024-49151):由 IANA 分配(如 MySQL 3306)
        • 動態端口(49152-65535):臨時分配
  2. 數據單元

    • 傳輸層:報文段(TCP)/ 用戶數據報(UDP)
    • 對比其他層
      • 物理層:比特流
      • 鏈路層:幀
      • 網絡層:IP 數據報

二、TCP與UDP協議對比

特性TCPUDP
連接管理三次握手、四次揮手無連接
可靠性保證交付(ACK確認、重傳機制)不保證交付
有序性按序交付(序列號、確認號)可能亂序
流量控制滑動窗口機制無流量控制
擁塞控制慢啟動、擁塞避免等算法無擁塞控制
首部長度20字節(最小)+ 選項8字節
傳輸效率較低(首部開銷大,確認機制)較高(首部開銷小,無確認)

三、TCP協議深度解析

  1. TCP報文段結構

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |          Source Port          |       Destination Port        |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                        Sequence Number                        |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                    Acknowledgment Number                      |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |  Data |           |U|A|P|R|S|F|                               |
    | Offset| Reserved  |R|C|S|S|Y|I|            Window             |
    |       |           |G|K|H|T|N|N|                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |           Checksum            |         Urgent Pointer        |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                    Options                    |    Padding    |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                             Data                              |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    
    • 控制位詳解
      • URG:緊急指針有效(用于緊急數據)
      • ACK:確認號有效(僅當 ACK=1 時,確認號字段有效)
      • PSH:接收方應盡快將數據交付給應用層
      • RST:重置連接(用于異常終止)
      • SYN:同步序號(連接建立時使用)
      • FIN:結束傳輸(連接釋放時使用)
  2. 可靠性機制

    • 超時重傳:若發送方未在超時時間內收到 ACK,重傳數據
    • 流量控制:通過滑動窗口(Window 字段)告知對方接收能力
    • 擁塞控制
      • 慢啟動:初始窗口小,指數增長
      • 擁塞避免:窗口線性增長,避免網絡擁塞
      • 快速重傳:連續收到 3 個重復 ACK 時,立即重傳
  3. 三次握手

    客戶端                 服務器|                   || SYN (seq=x)       ||------------------>||                   | SYN-ACK (seq=y, ack=x+1)|<------------------|| ACK (seq=x+1, ack=y+1) ||------------------>|
    
    • 狀態轉換
      • 客戶端:CLOSEDSYN_SENTESTABLISHED
      • 服務器:CLOSEDLISTENSYN_RCVDESTABLISHED
  4. 四次揮手

    客戶端                 服務器|                   || FIN (seq=u)       ||------------------>||                   | ACK (ack=u+1)|<------------------||                   | FIN (seq=v, ack=u+1)|<------------------|| ACK (ack=v+1)     ||------------------>|
    
    • 狀態轉換
      • 客戶端:ESTABLISHEDFIN_WAIT_1FIN_WAIT_2TIME_WAITCLOSED
      • 服務器:ESTABLISHEDCLOSE_WAITLAST_ACKCLOSED
    • TIME_WAIT 狀態:等待 2MSL(最大段壽命),確保所有報文段消失

四、UDP協議深度解析

  1. UDP報文結構

    0      7 8     15 16    23 24    31
    +--------+--------+--------+--------+
    | Source | Dest   | Length | Checksum |
    | Port   | Port   |        |          |
    +--------+--------+--------+--------+
    |                 data...
    
    • 校驗和:可選字段,覆蓋首部和偽首部(包含源/目的 IP 地址)
  2. 校驗和計算

    • 發送方:將數據補全為偶數個字節,計算二進制反碼和,存入校驗和字段
    • 接收方:重新計算校驗和,若與字段值不同則丟棄

五、常見協議與端口號
協議端口號說明
HTTP80超文本傳輸協議(明文)
HTTPS443安全 HTTP(TLS/SSL 加密)
FTP21(控制)文件傳輸協議(數據端口 20)
SSH22安全外殼協議(加密遠程登錄)
DNS53域名解析服務
DHCP67/68動態主機配置協議(服務器/客戶端)
SMTP25簡單郵件傳輸協議(發送郵件)
POP3110郵局協議版本 3(接收郵件)

六、重點題型解析

  1. TCP與UDP對比題

    • 答案:均為傳輸層協議,提供進程間通信,但 TCP 可靠、面向連接,UDP 不可靠、無連接
  2. 三次握手作用

    • 答案:同步雙方初始序號(防止歷史連接干擾),分配資源(緩存、變量)
  3. TCP滑動窗口機制

    • 答案:發送方根據接收方窗口大小調整發送速率,避免接收方緩沖區溢出
  4. UDP適用場景

    • 答案:視頻通話(實時性優先)、DNS 查詢(小數據量)、直播(允許丟包)

七、擴展知識

TCP狀態轉換圖詳解

TCP協議通過狀態機管理連接的建立、維護和釋放。狀態轉換圖描述了TCP連接在不同階段的狀態變遷,涵蓋了客戶端服務器端的主動/被動操作。以下是核心內容:


一、狀態分類與含義
狀態描述
CLOSED初始狀態,表示連接未建立或已完全關閉。
LISTEN服務器端監聽端口,等待客戶端連接請求(僅服務器端可見)。
SYN_SENT客戶端發送SYN后等待確認(主動打開連接)。
SYN_RCVD服務器端收到SYN后發送SYN+ACK,等待客戶端ACK(被動打開連接)。
ESTABLISHED連接已建立,數據可雙向傳輸。
FIN_WAIT_1主動關閉方發送FIN后等待ACK(首次關閉請求)。
FIN_WAIT_2收到對端ACK后,等待對端FIN(僅主動關閉方可見)。
TIME_WAIT主動關閉方發送最終ACK后等待2MSL(防止舊報文干擾新連接)。
CLOSE_WAIT被動關閉方收到FIN后發送ACK,等待本地應用關閉連接。
LAST_ACK被動關閉方發送FIN后等待ACK(最終關閉請求)。
CLOSING雙方同時發送FIN(罕見狀態,需額外處理)。

二、狀態轉換路徑

1. 常規連接建立(三次握手)

  • 客戶端
    CLOSED → SYN_SENT → ESTABLISHED
  • 服務器端
    CLOSED → LISTEN → SYN_RCVD → ESTABLISHED

2. 常規連接關閉(四次揮手)

  • 主動關閉方(如客戶端)
    ESTABLISHED → FIN_WAIT_1 → FIN_WAIT_2 → TIME_WAIT → CLOSED
  • 被動關閉方(如服務器端)
    ESTABLISHED → CLOSE_WAIT → LAST_ACK → CLOSED

3. 同時打開連接(雙方主動發起)

  • 客戶端A:CLOSED → SYN_SENT → SYN_RCVD → ESTABLISHED
  • 客戶端B:CLOSED → SYN_SENT → SYN_RCVD → ESTABLISHED
  • 觸發條件:雙方同時發送SYN,交換ACK后直接進入ESTABLISHED

4. 同時關閉連接(雙方主動關閉)

  • 雙方均發送FIN后進入CLOSING狀態,最終通過交換ACK進入TIME_WAITCLOSED

三、關鍵狀態解析
  1. TIME_WAIT(2MSL等待)

    • 作用
      • 確保最后一個ACK被對端接收(若丟失,對端重傳FIN,可再次發送ACK)。
      • 防止舊連接的延遲報文干擾新連接(通過2MSL超時清除殘留報文)。
    • MSL值:通常為30秒(Linux)或2分鐘(RFC建議),總等待時間為2×MSL
  2. CLOSE_WAIT(被動關閉等待)

    • 常見問題:若服務器端長期處于此狀態,可能因未調用close()導致連接泄漏(需檢查代碼邏輯)。
  3. SYN_RCVD(半連接狀態)

    • 風險:服務器端收到SYN但未完成握手時,可能遭受SYN洪水攻擊(需通過SYN Cookie等機制防御)。

四、狀態轉換觸發條件
操作/事件狀態變化
客戶端調用connect()CLOSED → SYN_SENT
服務器調用listen()CLOSED → LISTEN
收到SYN并回復SYN+ACKLISTEN → SYN_RCVD(服務器端)
收到ACK完成三次握手SYN_RCVD → ESTABLISHED(服務器端)
主動調用close()ESTABLISHED → FIN_WAIT_1(主動關閉方)
收到FIN并回復ACKESTABLISHED → CLOSE_WAIT(被動關閉方)
被動方調用close()CLOSE_WAIT → LAST_ACK
收到最終ACKLAST_ACK → CLOSED(被動關閉方)

五、特殊場景與處理
  1. FIN_WAIT_2持續

    • 原因:對端未發送FIN(如進程崩潰)。
    • 解決:系統超時機制強制關閉(默認超時時間可配置)。
  2. TIME_WAIT過多

    • 影響:占用端口資源,導致新連接無法綁定相同端口。
    • 優化
      • 調整內核參數(如net.ipv4.tcp_tw_reuse)。
      • 確保HTTP服務器主動關閉連接(將TIME_WAIT轉移至客戶端)。
  3. RST報文觸發

    • 場景:收到無效報文(如端口未監聽)時,直接發送RST強制關閉連接。

六、狀態轉換圖示例
客戶端路徑(主動關閉):
CLOSED → SYN_SENT → ESTABLISHED → FIN_WAIT_1 → FIN_WAIT_2 → TIME_WAIT → CLOSED服務器路徑(被動關閉):
CLOSED → LISTEN → SYN_RCVD → ESTABLISHED → CLOSE_WAIT → LAST_ACK → CLOSED

七、調試與監控工具
  1. netstat命令
    netstat -ant | grep <端口號>  # 查看當前TCP連接狀態
    
  2. ss命令(替代netstat):
    ss -tulnp  # 顯示所有TCP/UDP監聽端口及進程
    
  3. Wireshark抓包:分析握手/揮手過程中的報文序列和狀態變化。

總結:理解TCP狀態轉換圖是排查網絡問題(如連接泄漏、端口占用)的關鍵。需結合代碼邏輯(如close()調用位置)和系統參數調優,確保連接高效釋放。

  • 關鍵狀態ESTABLISHED(連接成功)、CLOSE_WAIT(被動關閉等待)

MTU與MSS

  • MTU(最大傳輸單元):鏈路層允許的最大數據幀長度(通常 1500 字節)
  • MSS(最大段長度):TCP 報文段數據部分的最大長度(MTU - IP首部 - TCP首部
    . TCP粘包問題
  • 原因:TCP 將多個小報文合并發送,導致應用層無法區分邊界
  • 解決方案:添加消息長度字段、使用分隔符(如 HTTP 的 Content-Length

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

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

相關文章

指定 Python 3.12.6-slim 作為基礎鏡像

指定 Python 3.12.6-slim 作為基礎鏡像&#xff0c;意思就是&#xff1a; &#x1f449; 用官方的 Python 3.12.6&#xff08;精簡版&#xff09;作為容器的起點&#xff0c;里面已經有 Python 3.12.6 預裝好了&#xff0c;你不用自己裝。 &#x1f539; 為什么用 -slim&…

【藍橋杯】算法筆記1

1.暴力枚舉 給定一個正整數n,請找出所有滿足a + b = n的整數對(a, b),其中a和b都是正整數,且a ≤ b。 輸入格式:一個正整數n (1 ≤ n ≤ 10?) 輸出格式:所有符合條件的(a, b)對,每行一對,按a的升序排列。如果沒有符合條件的對,輸出"No solution"。 問題分…

專注自習室:番茄工作法實踐

專注自習室&#xff1a;番茄工作法實踐 我需要一個任務管理工具&#xff0c;但在網上找了很多都找不到合適的工具。市面上的大多數產品過于強調任務完成性&#xff0c;給我帶來了很強的心理壓力&#xff0c;這種壓力最終反而降低了我的工作效率。于是我決定自己動手&#xff0…

VUE3項目VITE打包優化

VUE3項目VITE打包優化 代碼加密依賴配置效果對比圖 自動導入依賴配置 代碼壓縮依賴配置效果對比圖 圖片壓縮依賴配置效果對比圖 字體壓縮總結與實踐運用效果 代碼加密 依賴 npm install -D vite-plugin-bundle-obfuscator配置 import vitePluginBundleObfuscator from "…

文章記單詞 | 第14篇(六級)

一&#xff0c;單詞釋義 affection&#xff1a;n. 喜愛&#xff0c;鐘愛&#xff1b;愛慕之情&#xff1b;感情stream&#xff1a;n. 小河&#xff0c;溪流&#xff1b;一連串&#xff0c;源源不斷&#xff1b;水流&#xff0c;氣流&#xff1b;vi. 流&#xff0c;流動&#x…

歐幾里得距離(Euclidean Distance)公式

歐幾里得距離公式 歐幾里得距離&#xff08;Euclidean Distance&#xff09;是計算兩點之間直線距離的一種方法。它是最常見的距離度量方式之一&#xff0c;廣泛應用于數學、物理、機器學習、計算機視覺等領域。 公式定義 1. 二維空間 在二維平面上&#xff0c;假設有兩個點…

機器學習——LightGBM

LightGBM(light gradient boosting machine&#xff0c;輕量梯度提升機)是對XGBoost進行改進的模型版本&#xff0c;其三者之間的演變關系為&#xff1a;GBDT-》XGBoost-》LightGBM&#xff0c;依次對性能進行優化&#xff0c;盡管XGBoost已經很高效了&#xff0c;但是仍然有缺…

內網服務器無法通過公網地址訪問映射到公網的內網服務

內網服務器無法通過公網地址訪問映射到公網的內網服務 問題現象問題原因解決方法總結 前幾天遇到一個網絡問題&#xff0c;在這里做下記錄&#xff0c;希望能幫助到有相同問題的朋友。 問題現象 網絡拓撲如上所示&#xff0c;服務器1和服務器2在同一內網&#xff0c;網段均為1…

python每日十題(13)

一般把計算機完成一條指令所花費的時間稱為一個指令周期。指令周期越短&#xff0c;指令執行就越快。本題答案為D選項。 順序程序具有順序性、封閉性和可再現性的特點&#xff0c;使得程序設計者能夠控制程序執行的過程(包括執行順序、執行時間&#xff09;&#xff0c;對程序執…

Python 裝飾器(Decorators)

什么是裝飾器&#xff1f; 裝飾器&#xff08;Decorator&#xff09;本質上是一個 修改其他函數功能的函數。它的核心思想是&#xff1a;不修改原函數代碼&#xff0c;動態添加新功能。比如&#xff1a; 記錄函數執行時間 檢查用戶權限 緩存計算結果 自動重試失敗操作 理解…

uWebSockets開發入門

一、常用C++ WebSocket開源庫 一些常用的 C++ WebSocket 開源庫,它們支持 WebSocket 協議的實現,適用于客戶端或服務器端開發。 1. Boost.Beast (推薦) 特點:基于 Boost.Asio 的高性能庫,支持 HTTP/WebSocket,屬于 Boost 官方庫的一部分,穩定且跨平臺。 適用場景:需要高…

多智能體功能分化的核心優勢是什么:提升效率,查漏補缺

多智能體功能分化的核心優勢是什么:提升效率,查漏補缺 在于通過分工協作提升整體效率、靈活性和魯棒性。 1. 提升效率與專業性 原理:單一智能體無需處理全流程,通過專業化分工減少冗余計算和決策延遲。 示例: 自動駕駛系統: 感知智能體:專門處理攝像頭、激光雷達等傳…

項目復盤:websocket不受跨域限制的原理

主要還是因為&#xff1a; 1、WebSocket 是獨立于 HTTP 的應用層協議&#xff0c;通過 HTTP 建立連接后&#xff0c;完全脫離 HTTP 語義約束。這意味著 不受 HTTP 同源策略限制 不需要預檢請求 不依賴 CORS 頭機制 2、建立連接時的握手請求仍使用 HTTP 格式&#xff0c;但…

COMPASS:通過殘差強化學習和技能合成實現跨具身移動策略

25年2月來自 Nvidia、UC Berkeley 和 UT Austin 的論文“COMPASS: Cross-embOdiment Mobility Policy via ResiduAl RL and Skill Synthesis”。 隨著機器人越來越多地部署在不同的應用領域&#xff0c;可泛化的跨具身移動策略變得越來越重要。雖然經典的移動棧已被證明在特定…

無人機,雷達定點飛行時,位置發散,位置很飄,原因分析

參考&#xff1a; 無人車傳感器 IMU與GPS數據融合進行定位機制_gps imu 組合定位原始數-CSDN博客 我的無人機使用雷達定位&#xff0c;位置模式很飄 雷達的更新頻率也是10HZ&#xff0c; 而px飛控的頻率是100HZ&#xff0c;沒有對兩者之間的頻率差異做出處理 所以才導致無人…

學習threejs,使用Sprite精靈、SpriteMaterial精靈材質

&#x1f468;??? 主頁&#xff1a; gis分享者 &#x1f468;??? 感謝各位大佬 點贊&#x1f44d; 收藏? 留言&#x1f4dd; 加關注?! &#x1f468;??? 收錄于專欄&#xff1a;threejs gis工程師 文章目錄 一、&#x1f340;前言1.1 ??THREE.Sprite1.1.1 ??代碼…

外星人入侵(python設計小游戲)

這個游戲簡而言之就是操作一個飛機對前方的飛船進行射擊&#xff0c;和一款很久之前的游戲很像&#xff0c;這里是超級低配版那個游戲&#xff0c;先來看看效果圖&#xff1a; 由于設計的是全屏的&#xff0c;所以電腦不能截圖。。。。 下面的就是你操控的飛船&#xff0c;上面…

什么是CMS?常用CMS有哪些?

一、內容管理系統&#xff08;Content Management System&#xff09;? ?什么是CMS?&#xff1a;位于 Web 前端&#xff08;服務器&#xff09;和后端辦公系統之間的軟件系統&#xff0c;用于內容創建、編輯、審批和發布。支持文本、圖片、視頻、數據庫等各類數字內容的管理…

Go 語言規范學習(3)

文章目錄 Properties of types and valuesRepresentation of valuesUnderlying types【底層類型】Core types【核心類型】Type identityAssignabilityRepresentabilityMethod sets BlocksDeclarations and scopeLabel scopesBlank identifierPredeclared identifiersExported i…

在 Ubuntu 上安裝 Docker 的完整指南

1. 卸載舊版本(如有) 在安裝新版本前,建議先卸載舊版本: sudo apt remove docker docker-engine docker.io containerd runc 2. 安裝依賴包 更新軟件包索引并安裝必要的依賴: sudo apt update sudo apt install -y ca-certificates curl gnupg lsb-release 3. 添加 Do…