計算機網絡——運輸層


概述

計算機網絡體系結構中的物理層、數據鏈路層以及網絡層它們共同解決了將主機通過異構網絡互聯起來所面臨的問題,實現了主機到主機的通信

但實際上在計算機網絡中進行通信的真正實體是位於通信兩端主機中的進程

如何為運行在不同主機上的應用進程提供直接的通信服務是運輸層的任務,運輸層又稱為端到端協議。

根據應用需求的不同,因特網的運輸層為應用層提供了兩種不同的運輸協議,即面向連接的 TCP無連接的 UDP

運輸層端口號、復用與分用

端口號

因特網上的計算機並不是使用統一的操作系統,不同的操作系統(如 Windows、Linux、Mac OS)使用不同格式的進程標識符 PID。

為了使運行不同操作系統的計算機的應用進程之間能夠進行網絡通信,就必須使用統一的方法對 TCP/IP 體系的應用進程進行標識

TCP/IP 體系的運輸層使用端口號來區分應用層的不同應用進程。

  • 端口號使用 16 比特表示,取值范圍為 0~65535;
    • 熟知端口號:0~1023,IANA 把這些端口號指派給了 TCP/IP 體系中最重要的一些網絡協議,例如:FTP 使用 21/20,HTTP 使用 80,DNS 使用 53。
    • 登記端口號:1024~49151,為沒有熟知端口號的應用程序使用。使用這類端口號必須在 IANA 按照規定的手續登記,以防止重復。例如,微軟 mstsc 端口號 3389。
    • 短暫端口號:49152~65535,留給客戶進程選擇暫時使用。當服務器進程收到客戶進程的報文時,就知道了客戶進程所使用的動態端口號。通信結束后,這個端口號可供其他客戶進程以后使用。
  • 端口號只具有本地意義,即端口號只是為了標識本計算機應用層中的各進程,在因特網中,不同計算機中的相同端口號是沒有聯系的

發送方的復用和接收方的分用

發送方的某些應用進程發送的不同應用報文在運輸層使用 UDP 協議進行封裝,這稱為 UDP 復用;而另一些應用進程所發送的不同應用報文,在運輸層使用 TCP 協議進行封裝,這稱為 TCP 復用

運輸層使用端口號來區分不同的應用進程。不管是使用運輸層的 UDP 協議封裝成的 UDP 用戶數據報,還是使用 TCP 協議封裝成的 TCP 報文段在網絡層都需要使用 IP 協議封裝成 IP 數據報,這稱為 IP 復用

IP 數據報首部中協議字段的值用來表明 IP 數據報的數據載荷部分封裝的是何種協議數據單元。取值為 6,表示封裝的是 TCP 報文數據段;取值為 17,表示封裝的是 UDP 用戶數據報;

接收方的網絡層收到 IP 數據報后進行 IP 分用。若 IP 數據報首部中協議字段的值為 17,則把 IP 數據報的數據載荷部分所封裝的 UDP 用戶數據報上交運輸層的 UDP;若協議字段的值為 6,則把 IP 數據報的數據載荷部分所封裝的 TCP 報文段上交運輸層的 TCP。

運輸層對 UDP 用戶數據報進行 UDP 分用,對 TCP 報文段進行 TCP 分用。也就是根據端口號,將它們交付給上層相應的應用進程

UDP 和 TCP 的對比

UDP 和 TCP 是 TCP/IP 體系結構運輸層中的兩個重要協議。

  • 用戶數據報協議 UDP(User Datagram Protocol)
  • 傳輸控制協議 TCP(Transmission Control Protocol)
UDP TCP
是否面向連接 無連接 面向連接
發送目標 單播 單播、多播、廣播
對應用報文的處理 面向應用報文 面向字節流
傳輸可靠性 不可靠 可靠
首部字節 8 個字節(源端口、目的端口、長度、校驗和) 20-60 個字節

TCP 的流量控制

一般來說,我們總是希望數據傳輸得更快一些,但如果發送方把數據發送得過快,接收方就可能來不及接收,這就會造成數據的丟失。

所謂流量控制(flow control)就是讓發送方的發送速率不要太快,要讓接收方來得及接收

利用滑動窗口機制可以很方便地在 TCP 連接上實現對發送方的流量控制。

  • TCP 接收方利用自己的接收窗口大小來限制發送方發送窗口的大小。
  • TCP 發送方收到接收方的零窗口通知后,應啟動持續計時器。持續計時器超時后,向接收方發送零窗口探測報文

TCP 的擁塞控制

在某段時間,若對網絡中某一資源的需求超過了該資源所能提供的可用部分,網絡性能就要變壞。這種情況就叫做擁塞(congestion)。

在計算機網絡中的鏈路容量(即帶寬)、交換節點中的緩存和處理機等,都是網絡的資源

出現擁塞而不進行控制,整個網絡的吞吐量(單位時間內從網絡輸出的分組數量)將隨輸入負載(單位時間內輸入給網絡的分組數量)的增大而下降

四種擁塞控制算法:

  • 慢開始(slow-start)
  • 擁塞避免(congestion avoidance)
  • 快重傳(fast retransmit)
  • 快恢復(fast recovery)

假設:發送方向接收方發送 TCP 數據報文段,接收方向發送方發送 TCP 確認報文段。

發送方維護一個叫做擁塞窗口 cwnd 的狀態變量,其值取決於網絡的擁塞程度,並且動態變化

  • 擁塞窗口 cwnd 的維護原則:只要網絡沒有出現擁塞擁塞窗口就再增大一些;但只要網絡出現擁塞擁塞窗口就減少一些。(敵進我退,敵退我進
  • 判斷出現網絡擁塞的依據:沒有按時收到應當到達的確認報文(即發生超時重傳)。

發送方將擁塞窗口作為發送窗口 swnd,即 swnd = cwnd

發送方維護一個慢開始門限 ssthresh 狀態變量:

  • 當 cwnd < ssthresh 時,使用慢開始算法;
  • 當 cwnd < ssthresh 時,停止使用慢開始算法而改用擁塞避免算法;
  • 當 cwnd = ssthresh 時,既可以使用慢開始算法,也可使用擁塞避免算法。

TCP 超時重傳時間的選擇

超時重傳時間 RTO 應略大於往返時間 RTT。但是由於 TCP 下層是復雜的互聯網環境,主機所發送的報文段可能只經過一個高速率的局域網,也有可能經過多個低速率的網絡,並且,每個 IP 數據報的轉發路由還可能不同。每次的往返時間 RTT 通常不同。

不能直接使用某次測量得到的 RTT 樣本來計算超時重傳時間 RTO。應該利用每次測量得到的 RTT 樣本,計算加權平均往返時間 RTTs(又稱為平滑的往返時間)。

\[RTT_{S1} = RTT_1 \\ 新的RTT_S = (1-\alpha) \times 舊的RTT_S + \alpha \times 新的RTT樣本 \]

在上式中,\(0 \leq \alpha < 1\)

\(\alpha\) 很接近於 \(0\),則新的 \(RTT\) 樣本對 \(RTT_s\) 的影響不大;
\(\alpha\) 很接近於 \(1\),則新的 \(RTT\) 樣本對 \(RTT_s\) 的影響較大;
已成為建議標准的 RFC6298 推薦的 \(\alpha\) 值為 \(1/8\),即 \(0.125\)

用這種方法得出的加權平均往返時間 \(RTT_s\) 就比測量出的 RTT 值更加平滑。

RFC6298 建議使用下式計算超時重傳時間 RTO:

\(RTO = RTT_s + 4 \times RTT_D\)

\(RTT_D\):RTT 偏差的加權平均
(計算公式略)

TCP 可靠傳輸的實現

TCP 基於以字節為單位的滑動窗口來實現可靠傳輸

TCP 的通信是全雙工通信

TCP 的運輸連接管理

TCP 的連接建立

三次握手,略

TCP 的連接釋放

四次揮手,略

TCP 報文段的首部格式

固定首部(20 字節)

源端口(16 比特)

寫入源端口號,用來標識發送該 TCP 報文段的應用進程。

目的端口(16 比特)

寫入目的端口號,用來標識接收該 TCP 報文段的應用進程。

序號 seq(32 比特)

取值范圍 \([0, 2^{32}-1]\),序號增加到最后一個后,下一個序號就又回到 0。

指出本 TCP 報文段數據載荷的第一個字節的序號

確認號 ack(32 比特)與確認標志位 ACK(1 比特)

取值范圍 \([0, 2^{32}-1]\),確認號增加到最后一個后,下一個確認號就又回到 0。

指出期望收到對方下一個 TCP 報文段的數據載荷的第一個字節的序號,同時也是對之前收到的所有數據的確認。

只有當確認標志位 ACK 取值為 1 時確認號字段才有效。

TCP 規定,在連接建立后所有傳送的 TCP 報文段都必須把 ACK 置 1。

數據偏移(4 比特)

以 4 字節為單位。用來指出 TCP 報文段的數據載荷部分的起始處距離 TCP 報文段的起始處有多遠。(實際上是指出了 TCP 報文段的首部長度)

保留(6 比特)

置為 0,保留為今后使用。

窗口(16 比特)

以字節為單位。指出發送本報文段的一方的接收窗口

窗口值作為接收方讓發送方設置其發送窗口的一句這是以接收方的接受能力來控制發送方的發送能力,稱為流量控制。

校驗和(16 比特)

檢查范圍包括 TCP 報文段的首部和數據載荷兩部分。

同步標志位 SYN(1 比特)

在 TCP 連接建立時用來同步序號。

終止標志位 FIN(1 比特)

用來釋放 TCP 連接。

復位標志位(1 比特)

用來復位 TCP 連接。

當 RST = 1 時:

  1. TCP 連接出現了異常,必須釋放連接,然后再重新建立連接。
  2. 拒絕一個非法的報文段或拒絕打開一個 TCP 連接。
推送標志位 PSH(1 比特)

接收方的 TCP 收到該標志位為 1 的報文段會盡快上交應用進程,而不必等到接收緩存都堆滿后再向上交付。

緊急指針(16 比特)與緊急標志位 URG(1 比特)

以字節為單位,用來指明緊急數據的長度。將緊急數據插隊到發送緩存的最前面。

只有當緊急標志位取值為 1 時,緊急指針字段才有效。

擴展首部(最大 40 字節)

選項(長度可變)

最大報文段長度 MSS 選項:TCP 報文段數據載荷部分的最大長度。

窗口擴大選項:為了擴大窗口(提高吞吐率)。

時間戳選項

  • 用來計算往返時間 RTT
  • 用來處理序號超范圍的情況,又稱為防止序號繞回 PAWS

選擇確認選項:用來實現選擇確認功能。

填充

由於選項的長度可變,因此使用填充來確保報文段首部能被 4 整除。(因為數據偏移字段以 4 字節為單位)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM