計算機網絡基礎(三) --- TCP/IP網絡結構(運輸層)

運輸層

  • 1. 概述和運輸服務

    • 運輸層協議為運行在不同主機上的應用進程之間提供了邏輯通信功能, 運輸層協議是在端系統中而不是路由器中實現的, 網絡應用程序可以調用多種運輸層協議, 如因特網的兩種協議: TCP 和 UDP ,每種協議都能為調用的應用程序提供一組不同的運輸層服務

    • 1.1 運輸層和網絡層的關系 : 分工協作

      • 它們之間是分工協作、各司其職的關系,可以用一個經典的比喻來理解:送信與送包裹
      • 網絡層 (Network Layer - IP) - “郵政系統”
        • 職責:?提供主機到主機(Host-to-Host)的邏輯通信。它的核心任務是路由和轉發
        • 工作方式:網絡層(以IP協議為代表)只關心如何將一個個獨立的IP數據報(Packet)從源主機(例如,你的電腦)通過網絡中的路由器,盡力而為地(Best-Effort)傳遞到目標主機(例如,一個遙遠的服務器)。

        • 局限性:IP協議不關心這個數據報是屬于哪個應用程序的。它就像郵政系統,只負責把信件送到一棟大樓(目標主機),但不管這封信是給大樓里的張三(瀏覽器進程)還是李四(微信進程)。同時,它不保證信件一定送達、不保證送達順序、也不保證信件完好無損。

      • 運輸層 (Transport Layer - TCP/UDP) - “大樓里的前臺/分發員”

        • 職責:提供進程到進程(Process-to-Process 或 Application-to-Application)的端到端邏輯通信。它的核心任務是擴展IP的交付服務

        • 工作方式:運輸層位于應用程序和網絡層之間。它接收來自不同應用程序的數據,并添加上運輸層首部(包含關鍵信息:端口號),形成報文段(Segment)。然后,它將報文段交給網絡層去發送。

        • 如何解決網絡層的局限性

          • 復用 (Multiplexing) 和 分用 (Demultiplexing):通過端口號(Port Number)?這個標識,運輸層可以將來自多個應用程序的數據(復用)通過同一個網絡層接口發送出去,也能將接收到的數據準確地分發給正確的應用程序(分用)。這就是“前臺”根據信封上的房間號(端口號)把信分發給不同員工(進程)的過程。
          • 增強服務:運輸層協議(如TCP)可以在網絡層提供的不可靠服務之上,提供可靠性保證、流量控制、擁塞控制等高級功能。
      • 總結關系:
        • 網絡層是通信的“基礎設施”,負責全局的、主機級別的數據傳輸。
        • 運輸層是通信的“服務增強者”,負責局部的、應用級別的數據傳輸,并在此基礎上提供更高質量、更可控的數據傳輸服務。
        • 沒有網絡層,運輸層無法實現通信;沒有運輸層,應用程序無法直接、可靠地使用網絡層服務。???????
    • 1.2 因特網運輸層概述

      • 因特網的設計者們深刻地理解上述的分工思想,因此其運輸層提供了兩種風格迥異的核心協議,以滿足不同應用程序的多樣化需求。這就好比提供了“順豐快遞”(強調可靠、安全)和“普通信件”(強調快速、簡單)兩種服務。
      • 因特網的運輸層協議主要有兩個:

        • 傳輸控制協議 (TCP - Transmission Control Protocol)

        • 用戶數據報協議 (UDP - User Datagram Protocol)

      • 下面是一個快速的對比概述:
        • 特性TCP (傳輸控制協議)UDP (用戶數據報協議)
          連接性面向連接的 (Connection-Oriented)無連接的 (Connectionless)
          在數據傳輸前需要經過“三次握手”建立連接,傳輸結束后有“四次揮手”釋放連接。無需建立連接,可直接發送數據。
          可靠性可靠的 (Reliable)不可靠的 (Unreliable)
          通過確認、重傳、序號等機制,確保數據無差錯、不丟失、不重復且按序到達。“盡力而為”交付,不保證數據一定到達,也不保證順序。
          流量控制
          通過滑動窗口機制,確保發送方不會因為發送太快而淹沒接收方。發送方以恒定速率發送,不管接收方能否處理。
          擁塞控制
          通過復雜的算法(如慢啟動、擁塞避免)感知網絡擁堵并調整發送速率,對Internet整體穩定性至關重要。沒有擁塞控制,網絡擁堵時可能會加重負擔。
          傳輸單位字節流 (Byte Stream)報文 (Message)
          應用程序交付的數據被視為無結構的字節流,TCP會將其拆分/組合成合適的報文段。應用程序交付的每一個數據塊都封裝成一個獨立的UDP數據報。
          頭部開銷大 (通常20字節)小 (僅8字節)
          首部包含大量用于實現可靠傳輸和控制機制的字段。首部非常簡單,只有源端口、目的端口、長度和校驗和。
          典型應用Web (HTTP/HTTPS), 電子郵件 (SMTP), 文件傳輸 (FTP), 遠程終端 (SSH)域名解析 (DNS), 語音/視頻通話 (VoIP), 流媒體, 在線游戲
      • 為了簡化術語, 我們將運輸層分組稱為報文段, 然而 因特網文獻(RFC文檔) 也將TCP的運輸層分組成為報文段, 而常將UDP 的分組成為數據報, 我們在這個系列的文章將TCP 和 UDP 的分組統稱為報文段, 而將數據報的稱謂留給網絡層分組
  • 2. 多路復用與多路分解

    • 在一臺主機上,通常同時運行著多個網絡應用程序(如瀏覽器、微信、音樂播放器)。它們可能同時在使用網絡收發數據。

      • 那么問題來了:當主機從網絡層收到一個數據報時,它應該如何知道這個數據報是屬于瀏覽器進程的,還是屬于微信進程的?

      • 答案就是:通過運輸層的多路分解

      • 反過來:當主機上的多個應用程序都要發送數據時,它們的數據是如何通過同一個網絡接口卡(NIC)發送出去的?

      • 答案就是:通過運輸層的多路復用

    • 簡單定義:

      • 多路復用 (Multiplexing):在發送方,運輸層從多個不同套接字(Socket)接收應用程序數據,并為每塊數據封裝上運輸層首部信息(主要是端口號),然后將這些報文段傳遞到網絡層的過程。

      • 多路分解 (Demultiplexing):在接收方,運輸層檢查報文段中的字段(主要是目的端口號),標識出接收套接字,從而將運輸層報文段中的數據定向到正確的套接字的過程。

    • 2.1 無連接的多路復用和多路分解 (UDP)

      • UDP的多路復用與分解非常簡單直接,其socket用一個二元組來標識:(目的IP地址, 目的端口號)
      • 發送方 (多路復用):

        • 1. 應用程序創建一個UDP套接字。操作系統會為該套接字分配一個源端口號(可以是自動分配的,也可以是應用程序綁定的)。
        • 2. 應用程序通過該套接字發送數據時,UDP會為數據封裝一個首部,其中包含源端口號和目的端口號。
        • 3. 所有應用程序的UDP報文段都通過同一個“通道”(主機網絡層接口)發送出去。
      • ???????接收方 (多路分解)
        • 1. UDP維護著一個套接字表,可以理解為一張簡單的清單,記錄了本機所有正在監聽的UDP套接字及其綁定的端口號。
        • 2. 當主機收到一個UDP報文段時,UDP檢查報文段首部中的目的端口號
        • 3. UDP將該報文段的數據部分導向到正在監聽該目的端口號的那個套接字。
        • 4. 注意:UDP不關心源地址和源端口號,它只認目的端口號。這意味著,只要目的端口號相同,來自任何源IP和源端口的報文都會被送到同一個套接字。
      • 一個生動的比喻:
        UDP就像一個大學宿舍樓的公用快遞架

        • 多路復用:所有學生(應用程序)都把要寄出的快遞(數據報)放在架子上(交給網絡層),快遞單上寫著收件人的地址和宿舍號(目的IP和端口)。

        • 多路分解:快遞小哥把送來的快遞放到架子上。學生只根據快遞單上的宿舍號(目的端口)?來認領自己的快遞。他不在乎這個快遞是來自北京的媽媽還是上海的朋友(不區分源)。

    • 2.2 面向連接的多路復用和多路分解 (TCP)

      • TCP的多路分解機制比UDP要精細和復雜得多,這是由其面向連接的特性決定的。一個TCP套接字不是由一個二元組,而是由一個四元組來唯一標識的:
        (源IP地址, 源端口號, 目的IP地址, 目的端口號)
      • 為什么需要四元組?
        因為TCP是面向連接的。一臺服務器(如Web服務器)通常只在一個端口上監聽(如80),但卻要同時處理成千上萬個來自不同客戶端的連接。如果只使用目的端口號進行分解,所有客戶端的請求都會被導向同一個監聽套接字,服務器將無法區分彼此獨立的連接。

      • 接收方 (多路分解)

        • 1. 服務器有一個歡迎套接字(Welcome Socket),它被綁定在某個特定端口(如80)上,專門用于監聽新的連接請求。
        • 2. 當一個客戶端發起連接(SYN報文段到達)時,歡迎套接字會接受它,服務器內核會為這個特定的連接創建一個新的連接套接字(Connection Socket)
        • 3. 此后,所有來自這個客戶端(具有特定源IP和源端口)的報文段,在通過IP層交付后,TCP會根據其四元組信息,精確地將數據定向到為其創建的那個唯一的連接套接字中。
        • 4. 因此,服務器上最終會有一個歡迎套接字成百上千個活躍的連接套接字,每個連接套接字都通過四元組與一個客戶端連接唯一對應。
      • ???????發送方 (多路復用)
      • 在客戶端,一個TCP應用也可能同時建立多個連接(例如,瀏覽器同時打開多個標簽頁連接到同一個服務器)。TCP會為每個連接創建不同的套接字。在發送時,數據從不同套接字流出,TCP會為每個報文段封裝上對應的源和目的端口號,然后復用到網絡層。

      • 一個生動的比喻:TCP就像一個公司的前臺接待

        • 歡迎套接字:前臺總機號碼(如公司總機:12345678)。任何人打這個號碼都會連接到前臺。

        • 連接請求:一個客戶(源IP:端口 = 客戶A的手機號)打電話到總機,說要聯系銷售部。

        • 創建新套接字:前臺將電話轉接(Forward)?給銷售部的某位專員張三(創建一個新的連接套接字)。此后,客戶A與張三直接通話。

        • 多路分解:此時,另一個客戶B(另一個源IP:端口)也打電話到總機,也要找銷售部。前臺會把他的電話轉接給另一位專員李四(創建另一個新的連接套接字)。

        • 四元組的作用:這樣,雖然所有外部電話都打向同一個總機號(目的IP:80),但公司內部卻建立了多條獨立的、并發的通話線路。前臺/電話系統通過來電號碼(源IP:端口)?來區分該把電話轉給誰。

    • 2.3 Web 服務器與TCP

      • Web服務器是闡述TCP多路復用與多路分解原理的完美例子。
      • 場景:一個Web服務器(IP地址:192.168.1.1)運行著HTTP服務,監聽端口80
        • 1.?初始化
          • 服務器啟動,創建一個歡迎套接字,并將其綁定到192.168.1.1:80。這個套接字開始監聽來自任何源地址的連接請求。

        • 2.?客戶端連接

          • 客戶端A(IP:?10.0.0.2)打開瀏覽器訪問網站。操作系統為瀏覽器分配一個臨時(ephemeral)端口,例如?49152。瀏覽器發起TCP連接到?192.168.1.1:80

          • 這個連接請求的報文段包含:

            • 源地址:10.0.0.2:49152

            • 目的地址:192.168.1.1:80

          • 服務器端的TCP接收到這個SYN報文段。它檢查目的端口是80,于是知道這個請求是給HTTP服務的。它接受連接,并創建一個新的連接套接字,專門用于和客戶端A?(10.0.0.2:49152)?通信。

        • ???????3.?另一個客戶端同時連接

          • 幾乎同時,客戶端B(IP:?10.0.0.3)也訪問同一網站。其操作系統分配了另一個臨時端口?49153。它發起連接到?192.168.1.1:80

          • 這個連接請求的報文段包含:

            • 源地址:10.0.0.3:49153

            • 目的地址:192.168.1.1:80

          • 服務器端TCP再次看到目的端口是80,但它發現源地址?(10.0.0.3:49153)?與之前為客戶端A創建的套接字不同。因此,它會再創建一個新的連接套接字,專門用于和客戶端B通信。

        • ???????4.?多路分解的實現

          • 現在,服務器上有三個套接字

            • 套接字 #1:歡迎套接字,監聽?:80

            • 套接字 #2:連接套接字,關聯四元組?(10.0.0.2:49152, 192.168.1.1:80)

            • 套接字 #3:連接套接字,關聯四元組?(10.0.0.3:49153, 192.168.1.1:80)

          • 當后續的數據報文段從網絡到達時,服務器TCP棧會檢查報文段的四元組

            • 如果是?(10.0.0.2:49152, 192.168.1.1:80),數據被導向套接字 #2。

            • 如果是?(10.0.0.3:49153, 192.168.1.1:80),數據被導向套接字 #3。

          • 這樣,兩個客戶端雖然連接到服務器的同一個IP和端口,但它們的數據流被完全隔離,互不干擾。Web服務器可以為每個連接套接字單獨分配資源(如一個線程或進程),從而實現并發處理多個客戶端請求。???????

      • 核心要點:

        • ???????Web服務器通過一個固定的端口號(如80)對外提供服務。

        • 它利用TCP的四元組多路分解機制,為每個客戶端連接創建獨立的通信通道

        • 客戶端使用的臨時端口號是實現這種并發連接的關鍵,它確保了每個連接的“源IP:源端口”二元組在主機上是唯一的,從而使得四元組在全球范圍內唯一標識一個連接。

        • 這種機制是所有高性能服務器(Web、數據庫、游戲等)能夠同時服務海量客戶端的基石。

  • 3. UDP -- 無連接運輸

    • 3.1 UDP 報文段結構

    • 3.2 UDP 檢驗和

  • 4. 可靠數據傳輸原理

    • 4.1 構造可靠數據傳輸協議

    • 4.2 流水線可靠數據傳輸協議

    • 4.3 回退N步

    • 4.4 選擇重傳

  • 5. TCP -- 面向連接的運輸

    • 5.1 TCP 連接

    • 5.2 TCP 報文段結構

    • 5.3 往返時間的估計與超時

    • 5.4 可靠數據傳輸

    • 5.5 流量控制

    • 5.6 TCP 連接管理

  • 6. 擁塞控制原理

    • 6.1 擁塞原因與代價

    • 6.2 擁塞控制方法

  • 7. TCP擁塞控制

    • 7.1 公平性

    • 7.2 網絡輔助擁塞控制

  • s
  • s
  • s
  • s
  • s

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

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

相關文章

JdbcTemplate和MyBatis的區別

在 Java 后端開發中,JdbcTemplate(Spring 框架提供)和 MyBatis(持久層框架)都是用于簡化數據庫操作的工具,但它們的設計理念、使用方式、靈活性和適用場景有顯著差異。下面從核心定位、核心特性、使用方式、…

埃氏篩|樹dfs|差分計數

lc525把數組里的0換成-1&#xff0c;求子數組和為零的最長長度用哈希表記錄前綴和首次出現的位置通過找相同前綴和的位置差得出最長的0和1數量相等的子數組長度。class Solution { public:int findMaxLength(vector<int>& nums) {unordered_map<int,int>hashta…

(JVM)Java 對象創建的完整過程

在日常開發和面試中&#xff0c;經常會被問到 “Java 中對象是如何被創建的&#xff1f;” 表面上只是一個 new 關鍵字&#xff0c;但 JVM 在幕后完成了一系列復雜操作。 可以總結為以下 六大步驟&#xff1a;類加載檢查 → 分配內存 → 內存清零 → 設置對象頭 → 執行構造函數…

數據庫優化提速(三)JSON數據類型在酒店管理系統搜索—仙盟創夢IDE

在 MySQL 中&#xff0c;JSONB 類型&#xff08;MySQL 中實際為 JSON 類型&#xff0c;功能類似 PostgreSQL 的 JSONB&#xff0c;支持高效的 JSON 數據存儲和查詢&#xff09;非常適合存儲半結構化數據&#xff0c;例如酒店入住客人的復雜信息&#xff08;包含客人基本信息、入…

小程序全局狀態管理:使用MobX進行跨組件數據共享詳解(九)

一、定義全局數據共享&#xff08;又叫&#xff1a;狀態管理&#xff09;是為了解決組件之間數據共享的問題&#xff1b;全局數據共享方案&#xff1a;VueX、Redux、MobX等&#xff1b;二、小程序全局數據共享方案使用mobx-miniprogram配合mobx-miniprogram-bindings實現全局數…

生成模型 | DDPM -> Imrpoved DDPM -> DDIM

DDPM: Denoising Diffusion Probabilistic Models 采樣過程中的迭代計算為&#xff1a; xt?11αt(xt?1?αt1?αˉ?θ(xt,t))β~tzx_{t-1} \frac{1}{\sqrt{\alpha_t}}(x_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}}}\epsilon_{\theta}(x_t, t)) \sqrt{\tilde{\beta…

Linux驅動之DMA(三)

目錄一、驅動內容1. 核心結構體解析2. 關鍵模塊解析3. 驅動初始化流程4. 關鍵寄存器操作5. 典型工作流程6. 代碼特點7. 重要函數列表8. 使用示例二、驅動中DMA的使用1. DMA通道初始化&#xff08;imx_uart_dma_init&#xff09;2. DMA發送流程&#xff08;imx_uart_dma_tx&…

MongoDB 分片集群把非分片集合轉成分片集合

記得關注一下博主&#xff0c;博主每天都會更新IT技術&#xff0c;讓你有意想不到的小收獲哦^_^ 文章目錄*記得關注一下博主&#xff0c;博主每天都會更新IT技術&#xff0c;讓你有意想不到的小收獲哦^_^*一、MongDB集群啟停止1、MonogoDB分片集群服務啟動順序(三臺主機都要操作…

mybatis過渡到mybatis-plus過程中需要注意的地方

將 MyBatis 升級為 MyBatis-Plus&#xff08;簡稱 MP&#xff09;是一個平滑過渡的過程&#xff0c;因為 MP 是 MyBatis 的增強工具&#xff08;而非替代&#xff09;&#xff0c;但仍有一些關鍵注意事項需要關注&#xff0c;以確保升級后功能兼容且能充分利用 MP 的特性&#…

openEuler系統中如何將docker安裝在指定目錄

在 openEuler 中&#xff0c;Docker 的默認數據存儲目錄為 /var/lib/docker&#xff08;程序文件通常安裝在系統默認路徑&#xff0c;一般無需修改&#xff09;。若需將 Docker 數據&#xff08;鏡像、容器、卷等&#xff09;存儲到指定目錄&#xff0c;可通過修改 Docker 配置…

2.4 我國金融市場的監管體制

1、國務院金融發展委員會職責 2、中國人民銀行職責

PHP - 實例屬性訪問與靜態方法調用的性能差異解析

觀察到了一個看似矛盾的現象&#xff1a;實例屬性訪問更快&#xff0c;但靜態方法調用更快。這實際上是兩種不同的操作&#xff0c;下面我將詳細解釋其中的原理和差異。1. 實例屬性訪問為什么快訪問機制class MyClass {public $instanceProp 1; }$obj new MyClass(); $value …

音視頻面試題集錦第 31 期

音視頻面試題集錦第 31 期&#xff1a; 1、I 幀、P 幀和 B 幀的概念及區別&#xff1f;2、視頻編碼中的碼率控制技術有哪些&#xff1f;3、音頻采樣參數有哪些&#xff1f;4、RTMP 和 HLS 協議各有什么特點&#xff1f;如何選擇&#xff1f;5、WebRTC 中的 ICE、STUN、TURN 各…

企業視頻庫管理高效策略

內容概要本文全面探討企業視頻庫管理的高效策略&#xff0c;旨在幫助組織優化視頻資源處理。首先&#xff0c;我們將介紹企業視頻庫管理的基本概念和核心價值。接著&#xff0c;深入分析智能分類核心技術如何通過AI算法實現視頻自動歸類。之后&#xff0c;闡述云集成實現路徑&a…

WebSocket和跨域問題

WebSocket 特點 WebSocket 是一種在單個 TCP 連接上進行全雙工通信的協議。簡單來說&#xff0c;它就像是在客戶端和服務器之間建立了一條"專用通道"&#xff0c;雙方可以隨時主動發送消息給對方&#xff0c;而不需要像HTTP那樣總是由客戶端發起請求。 同一時間、雙向…

微服務-19.什么是網關

一.網關曾經我們的項目是單體項目&#xff0c;前端只需要請求8080端口&#xff0c;就可以獲取所有需要的數據和服務并進行渲染。但是拆分成微服務后&#xff0c;會面臨幾大問題&#xff1a;1.但是現在我們將該單體項目拆分成了微服務項目&#xff0c;每個項目都有自己獨立的端口…

從字節碼層面剖析以太坊智能合約創建原理

1. 引言 閱讀完本文之后&#xff0c;將能理解一下字節碼含義&#xff1a; 608060405260405160893803806089833981016040819052601e916025565b600055603d565b600060208284031215603657600080fd5b5051919050565b603f80604a6000396000f3fe6080604052600080fdfea2646970667358221…

typora無需激活版及最新激活版方法!雙擊安裝就能用

介紹 Typora 是一款Markdown編輯器&#xff0c;支持實時預覽&#xff0c;所見即所得。跨平臺&#xff0c;支持Windows、macOS、Linux。適合寫作、筆記、技術文檔等。本教程將提供合法安全的安裝方案&#xff0c;并解決常見問題&#xff0c;助你高效完成部署&#xff01; 直接…

基于Java、GeoTools與PostGIS的對跖點求解研究

目錄 前言 一、對跖點簡介 1、地理學定義 2、人生哲學含義 二、對跖點求解 1、Java求解 2、Geotools求解 3、PostGIS求解 4、三種計算方法的對比 5、Leaflet展示對跖點 三、總結 前言 在地理信息系統&#xff08;GIS&#xff09;領域&#xff0c;對跖點&#xff08;A…

Linux-函數的使用-編寫監控腳本

Linux-函數的使用-編寫監控腳本前言一、監控cpu二、采集內存的使用信息三、采集磁盤和分區的使用信息四、顯示進程的信息前言 編寫監控腳本實現以下功能 監控cpu&#xff0c;內存&#xff0c;磁盤&#xff0c;進程等信息&#xff0c;每隔5分鐘記錄這些信息到日志文件里perform…