計(jì)算機(jī)網(wǎng)絡(luò)第五章運(yùn)輸層

563 694
https://wenku.baidu.com/view/99fe72f0a6c30c2258019ed6.html?from=search

5.1運(yùn)輸層協(xié)議概述

5.1.1進(jìn)程之間的通信

  • 從通信和信息處理的角度看,運(yùn)輸層向它上面的應(yīng)用層提供通信服務(wù),它屬于面向通信部分的最高層,同時(shí)也是用戶功能的最低層
  • 當(dāng)網(wǎng)絡(luò)的邊緣部分中的兩個(gè)主機(jī)使用網(wǎng)絡(luò)的核心部分的功能進(jìn)行端到段的通信時(shí),只有位于網(wǎng)絡(luò)邊緣部分的主機(jī)的協(xié)議棧才有運(yùn)輸層,而網(wǎng)絡(luò)核心部分中的路由器在轉(zhuǎn)發(fā)分組時(shí)都只用到下三層的功能
運(yùn)輸層為相互通信的應(yīng)用提供了邏輯通信
應(yīng)用進(jìn)程之間的通信
  • 兩個(gè)主機(jī)進(jìn)行通信實(shí)際上就是兩個(gè)主機(jī)中的應(yīng)用進(jìn)程互相通信
  • 應(yīng)用進(jìn)程之間的通信又稱為端到端的通信
  • 運(yùn)輸層的一個(gè)很重要的功能就是復(fù)用和分用。應(yīng)用層不同進(jìn)程的報(bào)文通過不同的端口向下交到運(yùn)輸層,再往下就共用網(wǎng)絡(luò)層提供的服務(wù)
  • “運(yùn)輸層提供應(yīng)用進(jìn)程間的邏輯通信”。“邏輯通信”的意思是:運(yùn)輸層之間的通信好像是沿水平方向傳送數(shù)據(jù)。但事實(shí)上這兩個(gè)運(yùn)輸層之間并沒有一條水平方向的物理連接
運(yùn)輸層協(xié)議和網(wǎng)絡(luò)層協(xié)議的主要區(qū)別
運(yùn)輸層的主要功能
  • 運(yùn)輸層為應(yīng)用進(jìn)程之間提供了端到端的邏輯通信(但網(wǎng)絡(luò)層是為主機(jī)之間提供邏輯通信)
  • 運(yùn)輸層還要對收到的報(bào)文進(jìn)行差錯(cuò)檢測
  • 運(yùn)輸層需要兩種不同的運(yùn)輸協(xié)議,即面向連接的TCP和無連接的UDP
兩種不同的運(yùn)輸協(xié)議
  • 運(yùn)輸層向高層用戶屏蔽了下面網(wǎng)絡(luò)核心的細(xì)節(jié)(如網(wǎng)絡(luò)拓?fù)洹⑺捎玫穆酚蛇x擇協(xié)議等),它使應(yīng)用進(jìn)程看見的就是好像在兩個(gè)運(yùn)輸層實(shí)體之間有一條端到端的邏輯通信信道
  • 當(dāng)運(yùn)輸層采用面向連接的TCP協(xié)議時(shí),盡管下面的網(wǎng)絡(luò)是不可靠的(只提供盡最大努力服務(wù)),但這種邏輯通信信道就相當(dāng)于一條全雙工的可靠信道
  • 當(dāng)運(yùn)輸層采用無連接的UDP協(xié)議時(shí),這種邏輯通信信道是一條不可靠信道

5.1.2運(yùn)輸層的兩個(gè)主要協(xié)議

TCP/IP的運(yùn)輸層有兩個(gè)不同的協(xié)議:
(1)用戶數(shù)據(jù)報(bào)協(xié)議UDP(User Datagram Protocol)
(2)傳輸控制協(xié)議TCP(Transmission Control Protocol)

TCP與UDP
  • 兩個(gè)對等運(yùn)輸實(shí)體在通信時(shí)傳送的數(shù)據(jù)單位叫作運(yùn)輸協(xié)議數(shù)據(jù)單元TPDU(Transport Protocol Data Unit)
  • TCP傳送的數(shù)據(jù)單位協(xié)議是TCP報(bào)文段(segment)
  • UDP傳送的數(shù)據(jù)單位協(xié)議是UDP報(bào)文或用戶數(shù)據(jù)報(bào)
TCP/IP體系中的運(yùn)輸層協(xié)議
TCP與UDP
  • UDP在傳送數(shù)據(jù)之前不需要先建立連接。對方的傳輸層在收到UDO報(bào)文后,不需要給出任何確認(rèn),雖然UDP不提供可靠交付,但在某些情況下UDO是一種最有效的工作方式
  • TCP則提供面向連接的服務(wù)。TCP不提供廣播或多播服務(wù)。由于TCP要提供可靠地、面向連接的運(yùn)輸服務(wù),因此不可避免地增加了許多的開銷。這不僅使協(xié)議數(shù)據(jù)單元的首部增大很多,還要占用許多的處理機(jī)資源
強(qiáng)調(diào)兩點(diǎn)
  • 運(yùn)輸層的UDP用戶數(shù)據(jù)報(bào)與網(wǎng)際層的IP數(shù)據(jù)報(bào)有很大區(qū)別。IP數(shù)據(jù)報(bào)要經(jīng)過互連網(wǎng)中許多路由器的存儲轉(zhuǎn)發(fā),但UDP用戶數(shù)據(jù)報(bào)是在運(yùn)輸層的端到端抽象的邏輯信道中傳送的
  • TCP報(bào)文段是在運(yùn)輸層抽象的端到端邏輯信道中傳送,這種信道是可靠地全雙工信道。但這樣的信道卻不知道究竟經(jīng)過了哪些路由器,而這些路由器也根本不知道上面的運(yùn)輸層是否建立了TCP連接

5.1.3運(yùn)輸層的端口

  • 運(yùn)行在計(jì)算機(jī)中的進(jìn)程是用進(jìn)程標(biāo)識符來標(biāo)志的
  • 運(yùn)行在應(yīng)用層的各種應(yīng)用進(jìn)程卻不應(yīng)當(dāng)讓計(jì)算機(jī)操作系統(tǒng)指派它的進(jìn)程標(biāo)識符。這是因?yàn)樵谝蛱鼐W(wǎng)上使用的計(jì)算機(jī)的操作系統(tǒng)種類很多,而不同的操作系統(tǒng)又使用不同格式的進(jìn)程標(biāo)識符
  • 為了使運(yùn)行不同操作系統(tǒng)的計(jì)算機(jī)的應(yīng)用進(jìn)程能夠互相通信,就必須用統(tǒng)一的方法對TCP/IP體系的應(yīng)用進(jìn)程進(jìn)行標(biāo)志
需要解決的問題
  • 由于進(jìn)程的創(chuàng)建和撤銷都是動(dòng)態(tài)地,發(fā)送方幾乎無法識別其他機(jī)器上的進(jìn)程
  • 有時(shí)我們會改換接收報(bào)文的進(jìn)程,但并不需要通知所有發(fā)送方
  • 我們往往需要利用目的主機(jī)提供的功能來識別終點(diǎn),而不需要知道實(shí)現(xiàn)這個(gè)功能的進(jìn)程
端口號(protocol port number)
  • 解決這個(gè)問題的方法及時(shí)在運(yùn)輸層使用協(xié)議端口號,或通常簡稱為端口
  • 雖然通信的終點(diǎn)時(shí)應(yīng)用進(jìn)程,但我們可以把端口想象是通信的終點(diǎn),因?yàn)槲覀冎灰岩獋魉偷膱?bào)文交到目的主機(jī)的某一個(gè)合適的目的端口,剩下的工作(即最后交付的目的進(jìn)程)就由TCP來完成
軟件端口和硬件端口
  • 在協(xié)議棧層間的抽象協(xié)議端口是軟件端口
  • 路由器或交換機(jī)上的端口是硬件端口
  • 硬件端口是不同硬件設(shè)備進(jìn)行交互的接口,而軟件端口是應(yīng)用層的各種協(xié)議進(jìn)程與運(yùn)輸實(shí)體進(jìn)行層間交互的一種地址
TCP端口
  • 端口用一個(gè)16位端口號進(jìn)行標(biāo)志
  • 端口號只具有本地意義,即端口號只是為了標(biāo)志本計(jì)算機(jī)應(yīng)用層中的各進(jìn)程,在因特網(wǎng)中不同計(jì)算機(jī)的相同端口號是沒有聯(lián)系的
三類端口
  • 熟知端口,是指一般為0 ~ 1023
  • 登記端口號,數(shù)值為1024 ~ 49151,為沒有熟知端口號的應(yīng)用程序使用的。使用這個(gè)范圍的端口必須在IANA登記,以防止重復(fù)
  • 客戶端口號或短暫端口號,數(shù)值為49152 ~ 65535,留給客戶進(jìn)程選擇暫時(shí)使用。當(dāng)服務(wù)器進(jìn)程收到客戶進(jìn)程的報(bào)文時(shí),就知道了客戶進(jìn)程所使用的動(dòng)態(tài)端口號。通信結(jié)束后,這個(gè)端口號可供其他客戶進(jìn)程以后使用

5.2用戶數(shù)據(jù)報(bào)協(xié)議UDP

5.2.1UDP概述

  • UDP只在IP的數(shù)據(jù)報(bào)服務(wù)至上增加了很少一點(diǎn)的功能,即端口的功能和差錯(cuò)檢測的功能
  • 雖然UDP用戶數(shù)據(jù)報(bào)只能提供不可靠的交付,但UDP在某些方面有其特殊的優(yōu)點(diǎn)
UDP的主要特點(diǎn)
  • UDP是無連接的,即發(fā)送數(shù)據(jù)之前需要建立連接
  • UDP使用盡最大努力交付,即不保證可靠交付,同時(shí)也不使用擁塞控制
  • UDP是面向報(bào)文的。UDP沒有擁塞控制,很適合多媒體通信的要求
  • UDP支持一對一、一對多、多對一和多對多的交互通信
  • UDP的首部開銷小,只有8個(gè)字節(jié)
面向報(bào)文的UDP
  • 發(fā)送方UDP對應(yīng)用程序交下來的報(bào)文,在添加首部后就向下交付IP層。UDP對應(yīng)用層交下來的報(bào)文,既不合并,也不拆分,而是保留這些報(bào)文的邊界
  • 應(yīng)用交給UDP多長的報(bào)文,UDP就照樣發(fā)送,即一次發(fā)送一個(gè)報(bào)文
  • 接收方UDP對IP層交上來的UDP用戶數(shù)據(jù)報(bào),在去除首部后就原封不動(dòng)地交付上層的應(yīng)用進(jìn)程,一次交付一個(gè)完整的報(bào)文
  • 應(yīng)用程序必須選擇合適大小的報(bào)文
UDP是面向報(bào)文的

5.2.2UDP的首部格式

UDP基于端口的分用
  • 用戶數(shù)據(jù)報(bào)UDP有兩個(gè)字段:數(shù)據(jù)字段和首部字段。首部字段有8個(gè)字節(jié),由4個(gè)子彈組成,每個(gè)字段都是兩個(gè)字節(jié)。


  • 在計(jì)算校驗(yàn)和時(shí),臨時(shí)把“偽首部”和UDP用戶數(shù)據(jù)報(bào)連接在一起。偽首部僅僅是為了計(jì)算校驗(yàn)和


5.3傳輸控制協(xié)議TCP概述

5.3.1 TCP最主要的特點(diǎn)

  • TCP是面向連接的運(yùn)輸層協(xié)議
  • 每一條TCP連接只能有兩個(gè)端點(diǎn)(endpoint,每一條TCP連接只能是點(diǎn)對點(diǎn)的(一對一))。
  • TCP提供可靠交付的服務(wù)
  • TCP提供全雙工通信
  • 面向字節(jié)流
TCP面向流的概念
應(yīng)當(dāng)注意
  • TCP連接時(shí)一條虛連接而不是一條真正的物理連接
  • TCP對應(yīng)用進(jìn)程一次把多長的報(bào)文發(fā)送到TCP的緩存中是不關(guān)心的
  • TCP根據(jù)對方給出的窗口值和當(dāng)前網(wǎng)絡(luò)擁塞的程度來決定一個(gè)報(bào)文段應(yīng)包含多少個(gè)字節(jié)(UDP發(fā)送的報(bào)文長度是應(yīng)用進(jìn)程給出的)
  • TCP可把太長的數(shù)據(jù)塊劃分短一些再傳送。TCP也可等待積累有足夠多的字節(jié)后再構(gòu)成報(bào)文段發(fā)送出去

5.3.2 TCP的連接

  • TCP把連接作為最基本的抽象
  • 每一條TCP連接有兩個(gè)端點(diǎn)
  • TCP連接的端點(diǎn)不是主機(jī),不是主機(jī)的IP地址,不是應(yīng)用進(jìn)程,也不是運(yùn)輸層的協(xié)議端口。TCP連接的端點(diǎn)叫做套接字(Socket)或插口
  • 端口號拼接到(concatenated with)IP地址即構(gòu)成了套接字
套接字(Socket)

套接字 socket = (IP地址:端口號)

  • 每一條TCP連接唯一地被通信兩端的兩個(gè)端點(diǎn)(即兩個(gè)套接字)所確定。即:
    TCP連接 :: = {socket1,socket2} = {(IP1:port1),(IP2:port2)}
同一個(gè)名詞socket有多重不同的意思
  • 應(yīng)用編程接口API稱為socket API,簡稱為socket
  • socket API中使用的一個(gè)函數(shù)名也叫做socket。
  • 調(diào)用socket函數(shù)的端點(diǎn)稱為socket
  • 調(diào)用socket函數(shù)時(shí)其返回值稱為socket描述符,可簡稱為socket
  • 在操作系統(tǒng)內(nèi)核中聯(lián)網(wǎng)協(xié)議Berkeley實(shí)現(xiàn),稱為socket實(shí)現(xiàn)

5.4可靠傳輸?shù)墓ぷ髟?/h3>

5.4.1停止等待協(xié)議

注意
  • 在發(fā)送完一個(gè)分組后,必須暫時(shí)保留已發(fā)送的分組的副本
  • 分組和確認(rèn)分組都必須進(jìn)行編號
  • 超時(shí)計(jì)時(shí)器的重傳時(shí)間應(yīng)當(dāng)比數(shù)據(jù)在分組傳輸?shù)钠骄禃r(shí)間更長一些
確認(rèn)丟失和確認(rèn)遲到
可靠通信的實(shí)現(xiàn)
  • 使用上述的確認(rèn)和重傳機(jī)制,我們就可以在不可靠的傳輸網(wǎng)絡(luò)上實(shí)現(xiàn)可靠地通信
  • 這種可靠傳輸協(xié)議常稱為自動(dòng)重傳請求ARQ(Automatic Repeat reQuest)
  • ARQ表明重傳的請求是自動(dòng)進(jìn)行的。接收方不需要請求發(fā)送方重傳某個(gè)出錯(cuò)的分組
信道利用率
  • 停止等待協(xié)議的有點(diǎn)是簡單,但缺點(diǎn)是信道利用率太低


U(信道利用率) = \frac{T_D}{T_D + RTT + T_A}

流水線傳輸
  • 發(fā)送方可連續(xù)發(fā)送多個(gè)分組,不必每發(fā)完一個(gè)分組就停頓下來等待對方的確認(rèn)
  • 由于信道上一直有數(shù)據(jù)不間斷地傳送,這種傳輸方式可獲得很高的信道利用率


5.4.2連續(xù)ARQ協(xié)議

累積確認(rèn)
  • 接收方一般采用累積確認(rèn)的方式。即不必對收到的分組逐個(gè)發(fā)送確認(rèn),而是對按序到達(dá)的最后一個(gè)分組發(fā)送確認(rèn),這樣就表示:到這個(gè)分組為止的所有分組都已正確收到了
  • 累積確認(rèn)有的優(yōu)點(diǎn)是:容易實(shí)現(xiàn),即使確認(rèn)丟失也不必重傳。缺點(diǎn)是:不能向發(fā)送方反映出接收方已經(jīng)確認(rèn)收到的所有分組的信息
Go-back-N(回退N)
  • 如果發(fā)送方發(fā)送了前5個(gè)分組,而中間的第3個(gè)分組丟失了。這時(shí)接收方只能對前兩個(gè)分組發(fā)出確認(rèn)。發(fā)送方無法知道后面三個(gè)分組的下落,而只好把后面的三個(gè)分組都再重傳一次
  • 這就叫做Go-back-N(回退N),表示需要再退回來重傳已發(fā)送過的N個(gè)分組
  • 可見當(dāng)通信線路質(zhì)量不好時(shí),連續(xù)ARQ協(xié)議會帶來負(fù)面影響
TCP可靠通信的具體實(shí)現(xiàn)
  • TCP連接的每一端都必須設(shè)有兩個(gè)窗口——一個(gè)發(fā)送窗口和一個(gè)接收窗口
  • TCP的可靠傳輸機(jī)制用字節(jié)的序號進(jìn)行控制。TCP所有的確認(rèn)都是基于序號而不是基于報(bào)文段
  • TCp兩端的四個(gè)窗口經(jīng)常處于動(dòng)態(tài)變化之中
  • TCP連接的往返時(shí)間RTT也不是固定不變的。需要使用特定的算法估算較為合理的重傳時(shí)間

5.5 TCP報(bào)文的首部格式

  • 源端口和目的端口字段——各占2字節(jié)。端口是運(yùn)輸層與應(yīng)用層的服務(wù)接口。運(yùn)輸層的復(fù)用和分用功能都要通過端口才能實(shí)現(xiàn)

  • 序號字段——占4字節(jié)。TCP連接中發(fā)送的數(shù)據(jù)流猴子那個(gè)的每一個(gè)字節(jié)都編上一個(gè)序號。序號字段的值則指的是本報(bào)文段所發(fā)送的數(shù)據(jù)的第一個(gè)字節(jié)的序號

  • 確認(rèn)好字段——占4個(gè)字節(jié),是期望收到對方的下一個(gè)報(bào)文段的數(shù)據(jù)的第一個(gè)字節(jié)的序號

  • 數(shù)據(jù)偏移(即首部長度)——占4位,它指出TCP報(bào)文段的數(shù)據(jù)起始處距離TCP報(bào)文段的起始處有多遠(yuǎn)。“數(shù)據(jù)偏移”的單位是32位字(以4字節(jié)為計(jì)算單位)

  • 保留字段——占6位,保留為今后使用,但目前應(yīng)置為0

  • 緊急URG——當(dāng)URG=1時(shí),表明緊急指針字段有效。它告訴系統(tǒng)此報(bào)文段中有緊急數(shù)據(jù),應(yīng)盡快傳送(相當(dāng)于高優(yōu)先級的數(shù)據(jù))

  • 確認(rèn)ACK——只有當(dāng)ACK=1時(shí)確認(rèn)號字段才有效。當(dāng)ACK=0時(shí),確認(rèn)號無效

  • 推送PSH(PUSH)——接受TCP收到PSH=1的報(bào)文段,就盡快地交付接收應(yīng)用進(jìn)程,而不再等到整個(gè)緩存都填滿了后再向上交付

  • 復(fù)位RST(ReSeT)- 當(dāng)RST=1時(shí),表明TCP連接中出現(xiàn)嚴(yán)重差錯(cuò)(如由主機(jī)奔潰或其他原因),必須釋放連接,然后重新建立運(yùn)輸連接

  • 同步SYN——同步SYN=1表示這是一個(gè)連接請求或連接接受報(bào)文

  • 終止FIN(FINis)——用來釋放一個(gè)連接。FIN=1表明此報(bào)文段的發(fā)送端的數(shù)據(jù)已發(fā)送完畢,并要求釋放運(yùn)輸連接

  • 窗口字段——占2字節(jié),用來讓對方設(shè)置發(fā)送窗口的依據(jù),單位為字節(jié)

  • 校驗(yàn)和——占2字節(jié)。校驗(yàn)和字段校驗(yàn)的范圍包括首部和數(shù)據(jù)這兩部分。在計(jì)算校驗(yàn)和時(shí),要在TCP報(bào)文段的前面加上12字節(jié)的偽首部

  • 緊急指針字段——占16位,指出在本報(bào)文段中緊急數(shù)據(jù)共有多少個(gè)字節(jié)(緊急數(shù)據(jù)放在本報(bào)文段數(shù)據(jù)的最前面)

  • 選項(xiàng)字段——長度可變。TCP最初之規(guī)定了一種選項(xiàng),即最大報(bào)文段長度MSS。MSS告訴對方TCP:“我的緩存所能接受的報(bào)文段的數(shù)據(jù)字段的最大長度是MSS個(gè)字節(jié)”。

  • MSS(Maximum Segment Size)是TCP報(bào)文段中的數(shù)據(jù)字段的最大長度。數(shù)據(jù)字段加上TCP首部才等于整個(gè)TCP報(bào)文段。

  • 填充——這是為了使整個(gè)首部長度是4字節(jié)的整數(shù)倍

其它選項(xiàng)
  • 窗口擴(kuò)大選項(xiàng)——占3字節(jié),其中有一個(gè)字節(jié)表示移位值S。新的串口值等于TCP首部中的窗口位數(shù)增大到(16+S),相當(dāng)于把窗口值向左移動(dòng)S位后獲得實(shí)際的窗口大小
  • 時(shí)間戳選項(xiàng)——占10個(gè)字節(jié),其中最主要的字段時(shí)間戳字段(4字節(jié))和時(shí)間戳回送回答字段
  • 選項(xiàng)確認(rèn)選項(xiàng)

5.6 TCP可靠傳輸?shù)膶?shí)現(xiàn)

5.6.1 以字節(jié)位單位的滑動(dòng)窗口

根據(jù)B給出的窗口值A(chǔ)構(gòu)造出自己的發(fā)送窗口
A發(fā)送了11個(gè)字節(jié)

P_3 - P_1 = A的發(fā)送窗口(又稱為通知窗口)
P_2 - P_1 = 已發(fā)送但尚未收到確認(rèn)的字節(jié)數(shù)
P_3 - P_2 = 允許發(fā)送但尚未發(fā)送的字節(jié)數(shù)(又稱為可用窗口)

A收到新的確認(rèn)號,發(fā)送窗口向前滑動(dòng)
A的發(fā)送窗口內(nèi)的序號都已用完,但還沒有再收到確認(rèn),必須停止發(fā)送
發(fā)送緩存
接收緩存
發(fā)送緩存和接收緩存的作用
  • 發(fā)送緩存用來暫時(shí)存放存放:
    • 發(fā)送應(yīng)用程序傳送給發(fā)送方TCP準(zhǔn)備發(fā)送的數(shù)據(jù);
    • TCP已發(fā)送出但尚未收到確認(rèn)的數(shù)據(jù)
  • 接收緩存用來暫時(shí)存放:
    • 按序到達(dá)的、但尚未被接收應(yīng)用程序讀取的數(shù)據(jù);
    • 不按序到達(dá)的數(shù)據(jù)
需要強(qiáng)調(diào)三點(diǎn)
  • A的發(fā)送窗口并不總是和B的接收窗口一樣大(因?yàn)橛幸欢ǖ臅r(shí)間滯后)
  • TCP標(biāo)準(zhǔn)沒有規(guī)定對不按序到達(dá)的數(shù)據(jù)應(yīng)如何處理。通常是先臨時(shí)存放在接收窗口中,等到字節(jié)流中所缺少的字節(jié)接收后,再按序交付上層的應(yīng)用進(jìn)程
  • TCP要求接收方必須累積確認(rèn)的功能,這樣可以減少傳輸開銷

5.6.2超時(shí)重傳時(shí)間的選擇

  • 重傳機(jī)制是TCP中最重要和最復(fù)雜的問題之一
  • TCP每發(fā)送一個(gè)報(bào)文段,就對這個(gè)報(bào)文設(shè)置一次計(jì)時(shí)器。只要計(jì)時(shí)器設(shè)置的重傳時(shí)間到但沒有收到確認(rèn),就要重傳這一段報(bào)文
往返時(shí)延的方差很大
  • 由于TCP的下層是一個(gè)互聯(lián)網(wǎng),IP數(shù)據(jù)報(bào)所選擇的路由變化很大。因而運(yùn)輸層的往返時(shí)間的方差也很大


加權(quán)平均往返時(shí)間
  • TCP保留了RTT的一個(gè)加權(quán)平均往返時(shí)間RTT_S(這又稱為平滑的往返時(shí)間)
  • 第一次測量到RTT樣本,RTT_S值就去取為所測量到的RTT樣本值。以后每測量到一個(gè)RTT樣本,就按下式重新計(jì)算一次RTT_S
    新RTT_S = (1 - \alpha)\times (舊的RTT_S) + \alpha \times (新的RTT樣本)
  • 式中,0 < \alpha <1。若\alpha 很接近于零,表示RTT值更新較慢。若選擇\alpha 接近于1,則表示RTT值更新較快
  • RFC 2988推薦的\alpha 值為1/8,即0.125
超時(shí)重傳時(shí)間RTO(Retransmission Time-Out)
  • RTO應(yīng)略大于上面得出的甲醛平均往返時(shí)間RTT_S
  • RFO 2988建議使用下式計(jì)算RTO:
    RTO = RTT_S + 4 \times RTT_D
  • RTT_D是RTT的偏差的加權(quán)平均值
  • RFC 2988建議這樣計(jì)算RTT_D。第一次測量時(shí),RTT_D值取為測量用到的RTT樣本值的一半。在以后的測量中,則使用下式計(jì)算加權(quán)平均的RTT_D

新的RTT_D = (1 - \beta)\times (舊的RTT_D) + \beta \times |RTT_S- 新的RTT樣本|

  • \beta是個(gè)小于1的洗漱,其推薦值是1/4,即0.25
往返時(shí)間的測量相當(dāng)復(fù)雜
  • TCP報(bào)文段1沒有收到確認(rèn)。重傳(即報(bào)文段2)后,收到了確認(rèn)報(bào)文段ACK
  • 如何判定此確認(rèn)報(bào)文段是對原來的報(bào)文段1的確認(rèn),還是對重傳的報(bào)文段2的確認(rèn)?


Karn算法
  • 在計(jì)算平均往返時(shí)間RTT時(shí),只要報(bào)文段重傳了,就不采用其往返時(shí)間樣本。
  • 這樣得出的加權(quán)平均往返時(shí)間RTT_S和超時(shí)重傳時(shí)間RTO就較為準(zhǔn)確
修正的Karn算法
  • 報(bào)文段每重傳一次,就把RTO增大一些:
    新的RTO = \gamma \times (舊的RTO)
  • 系數(shù)\gamma的典型值是2
  • 當(dāng)不再發(fā)生報(bào)文段的重傳時(shí),才根據(jù)報(bào)文段往返時(shí)延更新平均往返時(shí)延RTT和超時(shí)重傳時(shí)間RTO的數(shù)值
  • 實(shí)踐證明,這種策略較為合理

5.6.3選擇確認(rèn)SACK(Selective ACK)

  • 接收方收到了和前面的字節(jié)流不連續(xù)的兩個(gè)字節(jié)塊
  • 如果這些字節(jié)的序號都在接收窗口之內(nèi),那么接收方就先收下這些數(shù)據(jù),但要把這些信息準(zhǔn)確地告訴發(fā)送方,使發(fā)送方不要再重復(fù)發(fā)送這些已收到的數(shù)據(jù)
接收的字節(jié)流序號不連續(xù)
  • 和前后字節(jié)不連續(xù)的每一個(gè)字節(jié)塊都有兩個(gè)邊界:左邊界和右邊界。圖中用四個(gè)指針標(biāo)記這些邊界。
  • 第一個(gè)字節(jié)塊的左邊L_1 = 1501,但右邊界
    R_1 = 3001
  • 左邊界指出的字節(jié)塊的第一個(gè)字節(jié)的序號,但右邊界減1才是字節(jié)塊中的最后一個(gè)序號
  • 第二個(gè)字節(jié)塊的左邊界L_2 = 3501,而右邊界R_2 = 4501
RFC 2018的規(guī)定
  • 如果要使用選擇確認(rèn),那么在建立TCP連接時(shí),就要在TCP首部的選項(xiàng)中加上“允許SACK”的選項(xiàng),而雙方必須都事先商定好
  • 如果使用選擇確認(rèn),那么原來首部中的“確認(rèn)號字段”的用法仍然不變。只是以后在TCP報(bào)文段的首部中都增加了SACK選項(xiàng),以便報(bào)告收到的不連續(xù)的字節(jié)塊的邊界
  • 由于首部選項(xiàng)的長度最多只有40字節(jié),而知名一個(gè)邊界就要用掉4字節(jié),因此在選項(xiàng)中最多只能指明4個(gè)字節(jié)塊的邊界信息

5.7 TCP流量控制

5.7.1 利用滑動(dòng)窗口實(shí)現(xiàn)流量控制

  • 一般來說,我們總是希望數(shù)據(jù)傳輸?shù)酶煨5绻l(fā)送方把數(shù)據(jù)發(fā)送得過快,接收方就可能來不及接收,這就會造成數(shù)據(jù)的丟失
  • 流量控制(flow control)就是讓發(fā)送方的發(fā)送速率不要太快,既要讓接收方來得及接收,也不要使網(wǎng)絡(luò)發(fā)生阻塞
  • 利用滑動(dòng)窗口機(jī)制可以很方便地在TCP連接上實(shí)現(xiàn)流量控制
流量控制舉例
  • A向B發(fā)送數(shù)據(jù)。在建立時(shí),B告訴A:“我的接收窗口rwnd = 400(字節(jié))”
持續(xù)計(jì)時(shí)器(persistence timer)
  • TCP為每一個(gè)連接設(shè)有一個(gè)持續(xù)計(jì)時(shí)器
  • 只要TCP連接的乙方收到對方的零窗口通知,就啟動(dòng)持續(xù)計(jì)時(shí)器
  • 若持續(xù)計(jì)時(shí)器設(shè)置的時(shí)間到期,就發(fā)送一個(gè)零窗口探測報(bào)文段(僅攜帶1字節(jié)的數(shù)據(jù)),而對方就在確認(rèn)這個(gè)探測報(bào)文段時(shí)給出了現(xiàn)在的窗口值
  • 若窗口仍然為零,則收到這個(gè)報(bào)文段的一方就重新設(shè)置持續(xù)計(jì)時(shí)器
  • 若窗口不是零,則死鎖的僵局就可以打破了

5.7.2 必須考慮傳輸效率

  • 可以用不同的機(jī)制來控制TCP報(bào)文段的發(fā)送時(shí)機(jī):
  • 第一種機(jī)制是TCP維持一個(gè)變量,它等于最大報(bào)文段長度MSS時(shí)。只要緩存中存放的數(shù)據(jù)達(dá)到MSS字節(jié)時(shí),就組成一個(gè)TCP報(bào)文段發(fā)送出去
  • 第二種機(jī)制是由發(fā)送方的應(yīng)用進(jìn)程指明要求發(fā)送報(bào)文段,即TCP支持的推送(push)操作
  • 第三種機(jī)制是發(fā)送方的一個(gè)計(jì)時(shí)器期限到了,這時(shí)就把當(dāng)前已有的緩存數(shù)據(jù)裝入報(bào)文段(但長度不能超過MSS)發(fā)送出去

5.8 TCP的擁塞控制

5.8.1 擁塞控制的一般原理

  • 在某段時(shí)間,若對網(wǎng)絡(luò)中某資源的需求超過了該資源所能提供的可用部分,網(wǎng)絡(luò)的性能就要變壞——產(chǎn)生擁塞(congestion)
  • 出現(xiàn)資源擁塞的條件:
    對資源的需要的總和 > 可用資源
  • 若網(wǎng)絡(luò)中有許多資源同時(shí)產(chǎn)生擁塞,網(wǎng)絡(luò)的性能就要明顯變壞,整個(gè)網(wǎng)絡(luò)的吞吐量將隨輸入負(fù)荷的增大而下降
擁塞控制與流量控制
  • 擁塞控制所要做的都有一個(gè)前提,就是網(wǎng)絡(luò)能夠承受現(xiàn)有的網(wǎng)絡(luò)負(fù)荷
  • 擁塞控制是一個(gè)全局性的過程,涉及到所有的主機(jī)、所有的路由器,以及與降低網(wǎng)絡(luò)傳輸性能有關(guān)的所有因素
  • 流量控制往往指在給定的發(fā)送端和接收端之間的點(diǎn)對點(diǎn)通信量的控制
  • 流量控制所要做的就是抑制發(fā)送端發(fā)送數(shù)據(jù)的速率,以便使接收端來得及接收
擁塞控制所起的作用
擁塞控制的一般原理
  • 擁塞控制是很難設(shè)計(jì)的,因?yàn)樗且粋€(gè)動(dòng)態(tài)地(而不是靜態(tài)的)問題
  • 當(dāng)前網(wǎng)絡(luò)正朝著高速化的方向發(fā)展,這很容易出現(xiàn)緩存不夠大而造成分組的丟棄。但分組的丟失是網(wǎng)絡(luò)發(fā)生擁塞的征兆而不是原因
  • 在許多情況下,甚至正是擁塞控制本身稱為引起網(wǎng)絡(luò)性能惡化甚至發(fā)生死鎖的原因。這點(diǎn)應(yīng)特別引起重視
開環(huán)控制和閉環(huán)控制
  • 開環(huán)控制方法就是在設(shè)計(jì)網(wǎng)絡(luò)時(shí)事先將有關(guān)發(fā)生阻塞的因素考慮周到,力求網(wǎng)絡(luò)在工作時(shí)不產(chǎn)生擁塞
  • 閉環(huán)控制是基于反饋環(huán)路的概念。屬于閉環(huán)控制的有以下幾種措施:
    • 檢測網(wǎng)絡(luò)系統(tǒng)以便檢測到擁塞在何時(shí)、何處發(fā)生
    • 將調(diào)整發(fā)生的信息傳送到可采取行動(dòng)的地方
    • 調(diào)整網(wǎng)絡(luò)系統(tǒng)的運(yùn)行以解決出現(xiàn)的問題

5.8.2 幾種擁塞控制方法

1.慢開始和擁塞避免
  • 發(fā)送方維持一個(gè)叫做擁塞窗口cwnd(congestion window)的狀態(tài)變量。擁塞窗口的大小取決于網(wǎng)絡(luò)的擁塞程度,并且動(dòng)態(tài)地在變化。發(fā)送方讓字節(jié)的發(fā)送窗口等于擁塞窗口。如再考慮到接收方的接收能力,則發(fā)送窗口還可能小于擁塞窗口
  • 發(fā)送方控制擁塞窗口的原則是:只要網(wǎng)絡(luò)沒有出現(xiàn)擁塞,擁塞窗口就再增大一些,以便把更多的分組發(fā)送出去。但只要網(wǎng)絡(luò)出現(xiàn)擁塞,擁塞窗口就減小一些,以減小注入網(wǎng)絡(luò)中的分組數(shù)
慢開始算法的原理
  • 在主機(jī)剛剛開始發(fā)送報(bào)文段時(shí)可先設(shè)置擁塞窗口cwnd = 1,即設(shè)置為一個(gè)最大報(bào)文段MSS的數(shù)值
  • 在每收到一個(gè)隊(duì)新的報(bào)文的確認(rèn)后,將擁塞窗口加1,即增加一個(gè)MSS的數(shù)值
  • 用這樣的方法逐步增大阿松段的擁塞窗口cwnd,可以使分組注入網(wǎng)絡(luò)的速率更加合理
發(fā)送方每收到一個(gè)對新報(bào)文段的確認(rèn)(重傳的不算在內(nèi))就使cwnd加1
傳輸輪次(transmission round)
  • 使用慢開始算法后,每經(jīng)過一個(gè)傳輸次輪,擁塞窗口cwnd就加倍
  • 一個(gè)傳輸輪次所經(jīng)歷的時(shí)間其實(shí)就是往返時(shí)間RTT
  • “傳輸輪次”更加強(qiáng)調(diào):把擁塞窗口cwnd所允許發(fā)送的報(bào)文段都連續(xù)發(fā)送出去,并受到了對已發(fā)送的最后一個(gè)字節(jié)的確認(rèn)
  • 例如,擁塞窗口cwnd = 4,這時(shí)的往返時(shí)間RTT就是發(fā)送方連續(xù)發(fā)送4個(gè)報(bào)文段,并受到這4個(gè)報(bào)文段的確認(rèn),總共經(jīng)歷的時(shí)間
設(shè)置慢開始門限狀態(tài)變量ssthresh
  • 慢開始門限ssthresh的用法如下:
  • 當(dāng)cwnd < ssthresh時(shí),使用慢開始算法
  • 當(dāng)cwnd > ssthresh時(shí),停止使用慢開始算法而改用擁塞避免算法
  • 當(dāng)cwnd = ssthresh時(shí),即可使用慢開始算法,也可使用擁塞避免算法
  • 擁塞避免算法的思路是讓擁塞窗口cwnd緩慢地增大,即沒經(jīng)過一個(gè)往返時(shí)間RTT就把發(fā)送方的擁塞窗口cwnd加1,而不是加倍,使擁塞窗口cwnd按線性規(guī)律增長
當(dāng)網(wǎng)絡(luò)出現(xiàn)擁塞時(shí)
  • 無論在慢開始階段還是在擁塞階段,只要發(fā)送方判斷網(wǎng)絡(luò)出現(xiàn)擁塞(其根據(jù)就是沒有按時(shí)收到確認(rèn)),就要把慢開始門限ssthresh設(shè)置發(fā)出現(xiàn)擁塞時(shí)的發(fā)送方窗口值的一半(但不能小于2)
  • 然后把擁塞窗口cwnd重新設(shè)置為1,執(zhí)行慢開始算法
  • 這樣做的目的就是要迅速減少主機(jī)發(fā)送到網(wǎng)絡(luò)中的分組數(shù),使得發(fā)生擁塞的路由器有足夠時(shí)間把隊(duì)列中積壓的分組處理完畢
慢開始和擁塞避免算法實(shí)現(xiàn)舉例
  • 當(dāng)TCP連接進(jìn)行初始化時(shí),將擁塞窗口置為1.圖中的窗口單位不使用字節(jié)而使用報(bào)文段

  • 慢開始門限的初始值設(shè)置為16個(gè)報(bào)文段,即ssthresh = 16

  • 發(fā)送端的發(fā)送窗口不能超過擁塞窗口cwnd和接收窗口rwnd中的最小值。我們假定接收端窗口足夠大,因而現(xiàn)在發(fā)送窗口的數(shù)值等于擁塞窗口的數(shù)值
  • 在執(zhí)行慢開始算法時(shí),擁塞窗口cwnd的初始值為1,發(fā)送第一個(gè)報(bào)文段M_0

  • 發(fā)送端每收到一個(gè)確認(rèn),就把cwnd加1.于是發(fā)送端可以接著發(fā)送M_1M_2兩個(gè)報(bào)文段

  • 接收端共發(fā)回兩個(gè)確認(rèn)。發(fā)送端每收到一個(gè)對報(bào)文段的確認(rèn),就把發(fā)送端的cwnd加1.現(xiàn)在cwnd從2增大到4,并可接著發(fā)送后面的4個(gè)報(bào)文段
  • 發(fā)送端每收到一個(gè)對新報(bào)文段的確認(rèn),就把發(fā)送端的擁塞窗口加1,因此擁塞窗口cwnd隨著傳輸輪次按指數(shù)規(guī)律增長
  • 當(dāng)擁塞敞口cwnd增長到慢開始門限值ssthresh時(shí)(即當(dāng)cwnd = 16時(shí)),就改為執(zhí)行擁塞避免算法,擁塞窗口按線性規(guī)律增長
  • 假定擁塞窗口的數(shù)值增長到24時(shí),網(wǎng)絡(luò)出現(xiàn)超時(shí),表明網(wǎng)絡(luò)擁塞了。
  • 更新后的ssthresh值變?yōu)?2(即發(fā)送窗口數(shù)值24的一半),擁塞窗口再重新設(shè)置為1,并執(zhí)行慢開始算法


  • 當(dāng)cwnd = 12時(shí)改為執(zhí)行擁塞避免算法,擁塞窗口按線性規(guī)律增長,每經(jīng)過一個(gè)往返時(shí)延就增加了一個(gè)MSS的大小
乘法減小
  • “乘法減小”是指不論在慢慢開始階段還是擁塞避免階段,只要出現(xiàn)一次超時(shí)(即出現(xiàn)一次網(wǎng)絡(luò)擁塞),就把慢開始門限值ssthresh設(shè)置為擋圈的擁塞窗口乘以0.5
  • 當(dāng)網(wǎng)絡(luò)頻繁出現(xiàn)阻塞時(shí),ssthresh值就下降得很快,以大大減少注入網(wǎng)絡(luò)中的分組數(shù)
加法增大
  • “加法增大”是執(zhí)行擁塞避免算法后,在收到對所有報(bào)文段的確認(rèn)后(即經(jīng)過一個(gè)往返時(shí)間),就把擁塞窗口cwnd增加一個(gè)MSS大小,使擁塞窗口緩慢增大,以防止網(wǎng)絡(luò)過早出現(xiàn)擁塞
必須強(qiáng)調(diào)指出
  • “擁塞避免”并非完全能夠避免了擁塞。利用以上的措施要完全避免網(wǎng)絡(luò)擁塞還是不可能的
  • “擁塞避免”是說在擁塞避免階段把擁塞窗口控制為按線性規(guī)律增長,使網(wǎng)絡(luò)比較不容易出現(xiàn)擁塞
2.快重傳和快恢復(fù)
  • 快重傳算法首先要求接收方每收到一個(gè)失序的報(bào)文段就立即發(fā)出重復(fù)確認(rèn)。這樣做可以讓發(fā)送方及早知道有報(bào)文段沒有到達(dá)接收方
  • 發(fā)送方只要一連收到三個(gè)重復(fù)就勇當(dāng)立即重傳對方尚未收到的報(bào)文段
  • 不難看出,快重傳并非取消重傳計(jì)時(shí)器,而是在某些情況下可更早地重傳丟失的報(bào)文段
快重傳舉例
快恢復(fù)算法

(1)當(dāng)發(fā)送端收到連續(xù)三個(gè)重復(fù)的確認(rèn)時(shí),就執(zhí)行“乘法減小”算法,把慢開始門限ssthresh減半。但接下去不執(zhí)行慢開始算法
(2)由于發(fā)送方現(xiàn)在認(rèn)為網(wǎng)絡(luò)很可能沒有發(fā)生擁塞,因此現(xiàn)在不執(zhí)行慢開始算法,即擁塞窗口cwnd現(xiàn)在不設(shè)置為1,而是設(shè)置為慢開始門限ssthresh減半后的數(shù)值,然后開始執(zhí)行擁塞避免算法(“加法增大”),使擁塞窗口緩慢地線性增大

從連續(xù)收到三個(gè)重復(fù)的確認(rèn)轉(zhuǎn)入擁塞避免
發(fā)送窗口的上限值
  • 發(fā)送方的發(fā)送窗口的上限值應(yīng)當(dāng)取為接收方窗口rwnd和擁塞窗口cwnd這兩個(gè)變量中較小的一個(gè),即應(yīng)按以下公式確定:

發(fā)送窗口的上限值 = Min [rwnd,cwnd]

  • 當(dāng)rwnd < cwnd時(shí),是接收方的接收能力限制發(fā)送窗口的最大值
  • 當(dāng)cwnd < rwnd時(shí),則是網(wǎng)絡(luò)的擁塞限制發(fā)送窗口的最大值

5.8.3 隨機(jī)早期檢測RED(Random Early Detection)

  • 使路由器的隊(duì)列維持兩個(gè)參數(shù),即隊(duì)列長度最小門限TH_min和最大門限TH_max
  • RED對每一個(gè)到達(dá)的數(shù)據(jù)報(bào)都先計(jì)算平均隊(duì)列長度L_{AV}
  • 若平均隊(duì)列長度小于最小門限TH_min,則將新到達(dá)的數(shù)據(jù)報(bào)放入隊(duì)列進(jìn)行排隊(duì)
  • 若平均隊(duì)列長度超過最大門限TH_max,則將新到達(dá)的數(shù)據(jù)報(bào)丟棄
  • 若平均隊(duì)列長度超過最大門限TH_max,則將新到達(dá)的數(shù)據(jù)報(bào)丟棄
  • 若平均隊(duì)列長度在最小門限TH_min和最大門限TH_max之間,則按照某一概率p將新到達(dá)的數(shù)據(jù)報(bào)丟棄
RED將路由器的到達(dá)隊(duì)列劃分稱為三個(gè)區(qū)域
丟棄概率p與TH_minTH_max的關(guān)系
  • 當(dāng)L_AV < TH_min時(shí),丟棄概率p = 0
  • 當(dāng)L_AV > TH_max時(shí),丟失概率p = 1
  • 當(dāng)TH_min < L_AV < TH_max時(shí),0 < p < 1
    例如,按線性規(guī)律變化,從0變到p_max
瞬時(shí)隊(duì)列長度和平均隊(duì)列長度的區(qū)別

5.9 TCP的運(yùn)輸連接管理

1.運(yùn)輸連接的三個(gè)階段

  • 運(yùn)輸連接就有三個(gè)階段,即:連接建立、數(shù)據(jù)傳送和連接釋放。運(yùn)輸連接的管理就是使運(yùn)輸連接的建立和釋放都能正常地進(jìn)行
  • 連接建立過程中要解決一下三個(gè)問題:
    • 要使每一方能夠確制對方的存在
    • 要允許雙方協(xié)商一些參數(shù)(如最大報(bào)文段長度,最大窗口大小,服務(wù)質(zhì)量等)
    • 能夠?qū)\(yùn)輸實(shí)體資源(如緩存大小,連接表中的項(xiàng)目)進(jìn)行分配
客戶服務(wù)器方式
  • TCP連接的建立都是采用客戶服務(wù)器方式
  • 主動(dòng)連接建立的應(yīng)用進(jìn)程叫做客戶
  • 被動(dòng)等待連接建立的應(yīng)用進(jìn)程叫做服務(wù)器

5.9.1 TCP的連接建立

用三次握手建立TCP
  • A的TCP向B發(fā)出連接請求報(bào)文段,其首部中的同步位SYN = 1,并選擇序號 seq = x,表明傳送數(shù)據(jù)時(shí)的第一個(gè)數(shù)據(jù)字節(jié)的序號是x


  • B的TCP收到連接請求報(bào)文段后,如同意,則發(fā)回確認(rèn)。
  • B在確認(rèn)報(bào)文段中應(yīng)使SYN = 1,使ACK = 1,其確認(rèn)號ack = x + 1,自己選擇的序號seq = y
  • A收到此報(bào)文段后向B給出確認(rèn),其ACK = 1,確認(rèn)號ack =y + 1.
  • A的TCP通知上層應(yīng)用進(jìn)程,進(jìn)程已經(jīng)建立
  • B的TCP收到主機(jī)A的確認(rèn),也通知其上層 應(yīng)用進(jìn)程:TCP連接已經(jīng)建立。


5.9.2 TCP的連接釋放

  • 數(shù)據(jù)傳輸結(jié)束后,通信的雙方都可釋放連接。現(xiàn)在A的應(yīng)用進(jìn)程先向其TCP發(fā)出連接釋放報(bào)文段,并停止再發(fā)送數(shù)據(jù),主動(dòng)關(guān)閉TCP連接
  • A把連接釋放報(bào)文段首部的FIN = 1,其序號seq = u,等待B的確認(rèn)


  • B發(fā)出確認(rèn),確認(rèn)號ack = u + 1,而這個(gè)報(bào)文段自己的序號seq = v。
  • TCP服務(wù)器進(jìn)程通知高層應(yīng)用進(jìn)程。
  • 從A到B這個(gè)方向的連接就釋放了,TCP連接處于半封閉狀態(tài)。B若發(fā)送數(shù)據(jù),A仍要接收


  • 若B已經(jīng)沒有要向A發(fā)送的數(shù)據(jù),其應(yīng)用進(jìn)程就通知TCP釋放連接


  • A收到連接釋放報(bào)文段后,必須發(fā)出確認(rèn)


  • 在確認(rèn)確認(rèn)報(bào)文段中ACK = 1,確認(rèn)號ack = w + 1,自己的序號seq = u + 1
  • TCP連接必須經(jīng)過時(shí)間2MSL后才釋放掉
A必須等待2MSL的時(shí)間
  • 第一,為了保證A發(fā)送的最后一個(gè)ACK報(bào)文段能夠到達(dá)B
  • 第二,防止“已失效的連接請求報(bào)文段”出現(xiàn)在本連接中。A在發(fā)送完最后一個(gè)ACK報(bào)文段后,再經(jīng)過時(shí)間2MSL,就可以使本連接持續(xù)的時(shí)間內(nèi)所產(chǎn)生的所有報(bào)文段,都從網(wǎng)絡(luò)中消失。這樣就可以使下一個(gè)新的連接中不會出現(xiàn)這樣舊的連接請求報(bào)文段

5.9.3 TCP的有限狀態(tài)機(jī)

  • TCP有限狀態(tài)機(jī)的圖中每一個(gè)方框都是TCP可能具有的狀態(tài)
  • 每個(gè)方框中的大寫英文字符串是TCP標(biāo)準(zhǔn)所使用的TCP連接狀態(tài)名。狀態(tài)之間的箭頭表示可能發(fā)生的狀態(tài)變遷
  • 箭頭旁邊的字,表明引起這種變遷的原因,或表示發(fā)生狀態(tài)變遷后又出現(xiàn)什么動(dòng)作
  • 圖中有三種不同的箭頭
    • 粗實(shí)線箭頭表示對客戶進(jìn)程的正常變遷
    • 粗虛線箭頭表示對對服務(wù)器進(jìn)程的正常變遷
    • 另一種細(xì)線箭頭表示異常變遷
TCP的有限狀態(tài)機(jī)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容