計算機網絡中:傳輸層和網絡層之間是如何配合的

可以把網絡層和傳輸層想成一個“快遞系統”:

  • 網絡層(IP 層) = 郵政系統:只負責把“包裹”(IP 數據報)從 A 地搬到 B 地,不保證順序、不保證不丟、不保證不重復。
  • 傳輸層(TCP/UDP 層) = 快遞公司:在郵政系統之上提供“增值服務”——對 TCP 來說,就是可靠、按序、不重復、流量受控的端到端運輸;對 UDP 來說,就是“無連接、盡力而為”的快送。

下面用一次典型的 TCP 通信 說明兩者如何“接力配合”。


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

  1. 應用層調用 connect()
    ?
  2. TCP(傳輸層) 生成 SYN 段
    ?
  3. TCP 把 SYN 交給 IP(網絡層),IP 加上源/目的 IP 地址,生成 IP 數據報,查路由表,發出去。
    ?
  4. 對端 IP 收到后上交 TCP;TCP 回 SYN-ACK,再交給 IP 發回。
    ?
  5. 發起端 IP 收到 SYN-ACK → TCP → 回 ACK → 交給 IP → 連接建立完成。

網絡層只負責把“SYN、SYN-ACK、ACK”這些 IP 數據報送到正確主機;
傳輸層負責根據這些“控制段”完成邏輯上的三次握手。


2. 數據傳輸

  • 發送端

    1. TCP 把應用數據切片成合適大小的 TCP 段,編好序號、計算校驗和、設置窗口。
    2. 每個 TCP 段被封裝成 IP 數據報(加 IP 頭),IP 根據路由逐跳轉發。
    3. 網絡層可能出現 亂序、丟包、重復,TCP 不理會,IP 也不保證。
  • 接收端

    1. IP 層收到數據報后,根據協議字段 6(TCP)上交 TCP。
    2. TCP 根據序號 重排去重確認滑動窗口流量控制
    3. 若發現丟包,TCP 啟動 重傳,重傳時仍用 IP 再發一次。
    4. 數據完整且有序后,TCP 按序交付給應用層。

網絡層只管“送到”;
傳輸層負責“整理好再交給應用”。


3. 連接拆除(四次揮手)

  • 傳輸層發送 FIN/ACK 控制段;
  • 這些控制段仍由 網絡層封裝成 IP 數據報發走;
  • 雙方 FIN + ACK 都到達后,TCP 連接正式關閉。

4. 與 UDP 的配合(簡要)

  • UDP 沒有連接、確認、重傳,只是把應用數據封裝成 UDP 數據報 → 交給 IP → IP 盡力送到對端。
  • 網絡層仍負責路由、轉發;UDP 只提供端口復用輕量校驗,不保證可靠性。

一張圖總結

應用層數據│
┌───┴──────────┐
│  傳輸層(TCP)  │  分段、編號、確認、重傳、流量控制
└───┬──────────┘│  TCP段
┌───┴──────────┐
│  網絡層(IP)   │  路由、尋址、轉發(不保證可靠性)
└───┬──────────┘│  IP數據報
┌───┴──────────┐
│   鏈路層      │  真正在物理媒介上發幀
└──────────────┘

一句話總結

網絡層提供“主機到主機”的可達性;傳輸層在網絡層之上提供“進程到進程”的端到端語義(可靠或不可靠)。二者一前一后,共同完成完整的網絡通信。


邏輯上的三次握手?啥意思

“邏輯上的三次握手”強調的是:
三次握手是一套“狀態機規則”,由傳輸層(TCP)負責完成;網絡層(IP)只負責把三次握手過程中產生的 3 個報文(SYN、SYN-ACK、ACK)當作普通數據報從 A 主機搬到 B 主機,完全不感知“握手”這件事。

換句話說:

  1. 物理、網絡層看到的
    只是 3 個普通的 IP 數據報,按路由轉發即可,不知道它們有什么順序、含義。

  2. 傳輸層(TCP)看到的
    它根據這 3 個報文里的控制位(SYN、ACK)以及序號、確認號,維護一張狀態表:

    • 收到 SYN → 回 SYN-ACK → 收到 ACK → 狀態變為 ESTABLISHED。
      這套規則就是“邏輯上的三次握手”——只在 TCP 的邏輯狀態機里存在,IP 層根本不 care。

舉個生活類比

  • IP 層像郵差:只負責把 3 封信(SYN、SYN-ACK、ACK)送到正確地址。
  • TCP 層像收信人:必須按順序讀完這三封信,并在心里完成“合同簽訂”——這就是邏輯上的三次握手。

普通客戶端中的應用程序,計算機是如何知道,某一包數據是要給自己的

一句話:
客戶端進程并不會「監聽端口」,但它仍然
① 臨時占用了操作系統分配的端口
② 在 TCP/UDP 首部里寫明了「四元組」
③ 操作系統根據四元組把返回包直接交給該進程


1. 四元組——“身份證”

每個網絡連接在客戶端發起時就確定了一個唯一標識:

(源IP, 源Port, 目的IP, 目的Port)
  • 瀏覽器訪問 www.example.com:80 時,Windows 會給這個進程隨機分配一個臨時端口,例如 52341。
  • 于是四元組變成:
    (本機IP, 52341, 93.184.216.34, 80)
    

2. 操作系統如何“認識”返回包

  • 服務器回包的 IP 首部里:
    源 IP = 93.184.216.34,目的 IP = 本機
  • TCP/UDP 首部里:
    源端口 = 80,目的端口 = 52341
  • 操作系統維護一張“套接字表”
    四元組 → 進程句柄
    
    收到報文后,按表查找,直接把數據拷到對應進程的內核緩沖區。

3. 客戶端不需要 listen,但仍“登記”

  • 發起 connect() 時,內核把這條四元組登記進表。
  • 關閉連接(或進程退出)后,表項被刪除,端口回收。
  • 因此返回包總能精確找到進程,不會出現“誰都能收”的情況。

4. 類比生活

  • 瀏覽器 ≈ 張三
  • 操作系統 ≈ 小區門衛
  • 張三給快遞站寄包裹,包裹上寫
    發件人:張三,A棟523室  
    收件人:快遞站
    
  • 快遞站回寄時,包裹上寫
    發件人:快遞站  
    收件人:張三,A棟523室
    
  • 門衛一看門牌號,直接送到張三家門口,不會送錯。

一句話總結

客戶端進程不監聽端口,但操作系統為它臨時“注冊”了四元組;所有返回包按四元組精準投遞,因此絕不會搞錯收件人。

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

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

相關文章

【NLP輿情分析】基于python微博輿情分析可視化系統(flask+pandas+echarts) 視頻教程 - 用戶登錄實現

大家好,我是java1234_小鋒老師,最近寫了一套【NLP輿情分析】基于python微博輿情分析可視化系統(flaskpandasecharts)視頻教程,持續更新中,計劃月底更新完,感謝支持。今天講解用戶登錄實現 視頻在線地址: …

Redis主從復制數據同步實現原理詳細介紹

文章目錄一、主從復制的概念二、全量復制(完整重同步)三、增量復制(部分重同步)1. 增量復制的核心思想2. 增量復制的實現3. 復制偏移量(replicationoffset)4. 復制積壓緩沖區(replicationbacklo…

docker 軟件bug 誤導他人 筆記

DockerDesktopInstaller.exe install --installation-dirX:\AI-AI\docker\pro\ 由于 Docker官方隨便修改安裝命令,這個在4.4一下是無法使用的,存在誤導他人

Python 進階(六): Word 基本操作

目錄 1. 概述2. 寫入 2.1 標題2.2 段落2.3 表格2.4 圖片2.5 樣式 3. 讀取 1. 概述 Word 是一個十分常用的文字處理工具,通常我們都是手動來操作它,本節我們來看一下如何通過 Python 來操作。 Python 提供了 python-docx 庫,該庫就是為 Wo…

OpenLayers 入門指南【三】:API概要

目錄一、官方文檔二、核心類三、總結一、官方文檔 首頁右側有四個欄目分別是 Docs(文檔):也可以理解為使用指南,涵蓋一下四個模塊 Quick Start(快速入門):介紹如何快速引入并使用OpenLayers快速構建一個地圖應用FAQ(問答):介紹一些常見問題的…

JAVA面試寶典 -《Kafka 高吞吐量架構實戰:原理解析與性能優化全攻略》

🚀 Kafka 高吞吐量架構實戰:原理解析與性能優化全攻略 隨著大數據技術在日志收集、埋點監控、訂單流處理等場景的普及,Kafka 已成為流處理架構中的核心組件。它之所以能在海量數據場景下保持高吞吐、低延遲,源于其在架構層面和底…

把sudo搞壞了怎么修復:報錯sudo: /etc/sudo.conf is owned by uid 1000, should be 0

今天部署 NFS 的時候一不小心給/etc目錄下所有的文件都所有者給改了,然后使用sudo的時候就出現了下面的問題: sudo: /etc/sudo.conf is owned by uid 1000, should be 0 sudo: /etc/sudo.conf is owned by uid 1000, should be 0 sudo: /etc/sudoers i…

VUE前端項目開發1.0.1版本

項目包含用戶權限管理、表單提交、數據上傳下載、儀表盤可視化等功能,非常適合新手從零開始學習Vue3前端開發,下述包含所有開發源代碼,敬請食用 廢話少說先上圖: 登陸界面: 儀表盤管理系統: 用戶管理: 對于普通用戶只有儀表盤和個人信息界…

低代碼平臺能否完全取代傳統前端開發

低代碼平臺不能完全取代傳統前端開發,主要原因包括靈活性有限、性能優化能力不足、復雜定制需求難以實現。 低代碼平臺盡管能快速開發出相對標準化的應用,但在處理復雜、個性化的業務需求時,明顯表現出不足。尤其在需要精細化控制UI界面、高性…

Git 中如何比較不同版本之間的差異?常用命令有哪些?

回答重點1&#xff09; git diff <commit1> <commit2> &#xff1a;比較兩個指定的提交之間的差異。2&#xff09; git diff <branch1> <branch2> &#xff1a;比較兩個分支之間的差異。3&#xff09; git diff <path> &#xff1a;比較工作目錄…

MySQL 8.0 OCP 1Z0-908 題目解析(32)

題目125 Choose three. Identify three functions of MySQL Enterprise Monitor. □ A) Analyze query performance. □ B) Start a logical backup. □ C) Determine the availability of monitored MySQL servers. □ D) Centrally manage users. □ E) Start a MySQL Enterp…

Spring處理器和Bean的生命周期

Spring處理器和Bean的生命周期Spring處理器是對Bean對象的的開發可以對BeanDifinition進行操作&#xff0c;例如動態添加、修改BeanDefinition、動態修改Bean。&#xff0c;也可以在Bean對象創建后對Bean對象進行代理增強。注意&#xff1a;對于處理器要又一個正確的認知&#…

Spring Framework源碼解析——BeanFactory

版權聲明 本文原創作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl1. BeanFactory 概述 BeanFactory 是 Spring IoC 容器的最基礎接口&#xff0c;它定義了獲取、配置和管理 Bean 的核心方法。它是 Spring 框架中容器體系的頂層接口之一&#…

C# 計算梯形面積和周長的程序(Program to calculate area and perimeter of Trapezium)

梯形是至少有一對邊平行&#xff0c;其他兩條邊可以不平行的四邊形。平行邊稱為梯形的底&#xff0c;其他兩條邊稱為梯形的腿。平行邊之間的垂直距離稱為梯形的高。公式 &#xff1a; 梯形面積&#xff1a; 0.5 * (a b) * h梯形周長&#xff1a; a b c d例子&#xff1a; 輸…

【計算機考研(408)- 數據結構】數組和特殊矩陣

數組和特殊矩陣 數組 數組的定義 數組是由n(n>1)個相同類型的數據元素構成的有限序列。每個數據元素稱為一個數組元素&#xff0c;每個元素在n個線性關系中的序號稱之為該元素的下標&#xff0c;下標的取值范圍稱為數組的維界。 數組是[[線性表]]的推廣&#xff0c;一維數組…

Agent架構與工作原理:理解智能體的核心機制

Agent架構與工作原理&#xff1a;深入理解智能體的核心機制 AI Agent的核心組成部分 一個完整的AI Agent通常由以下幾個核心模塊組成&#xff1a; 1. 規劃模塊&#xff08;Planning Module&#xff09; 規劃模塊是Agent的"大腦"&#xff0c;負責制定行動策略。它接收…

解決vscode中vue格式化后縮進太小的問題,并去除分號 - 設置Vetur tabSize從2到4,設置prettier取消分號semi

效果圖 左邊原來的&#xff0c;右邊是設置后的效果 實現步驟 安裝插件 Vetur 安裝插件 prettier Vscode > 文件 > 首選項 > 設置 搜索vetur > 找到比較下面的“Vetur > Format > Options: Tab Size” > 設置縮進為4 在附近找到“Vetur > Format: De…

計算機發展史:電子管時代的輝煌與局限

在計算機的發展歷程中&#xff0c;電子管時代猶如一顆璀璨的流星&#xff0c;短暫卻耀眼。它接過了機械計算裝置的接力棒&#xff0c;以電子管為核心元件&#xff0c;開啟了計算機的電子化征程&#xff0c;為后續的計算機發展奠定了堅實的基礎。這段從 20 世紀 40 年代到 50 年…

div和span區別

區別1區別2App.vue代碼 <template><div class"container"><h1>&#x1f3af; DIV 和 SPAN 標簽的區別演示</h1><!-- 第一部分&#xff1a;基本區別演示 --><section class"demo-section"><h2>&#x1f4e6; 1. …

channel_up和lane_up

一、channel_up 1.當aurora通道完成初始化&#xff0c;channel準備發送或者接收數據的時候拉高 2.channel_up屬于協議的鏈路層 3.當所有的通道的lane_up都成功拉高&#xff0c;并且完成通道綁定channel bonding,就拉高channel_up二、lane_up 1.lane初始化成功后拉高&#xff1b…