數(shù)據(jù)通信與計(jì)算機(jī)網(wǎng)絡(luò)82課件_第1頁(yè)
數(shù)據(jù)通信與計(jì)算機(jī)網(wǎng)絡(luò)82課件_第2頁(yè)
數(shù)據(jù)通信與計(jì)算機(jī)網(wǎng)絡(luò)82課件_第3頁(yè)
數(shù)據(jù)通信與計(jì)算機(jī)網(wǎng)絡(luò)82課件_第4頁(yè)
數(shù)據(jù)通信與計(jì)算機(jī)網(wǎng)絡(luò)82課件_第5頁(yè)
已閱讀5頁(yè),還剩139頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、數(shù)據(jù)通信與計(jì)算機(jī)網(wǎng)絡(luò)福州大學(xué)網(wǎng)絡(luò)工程研究所第五章 運(yùn)輸層福州大學(xué)網(wǎng)絡(luò)工程研究所 蔣啟強(qiáng)主要內(nèi)容運(yùn)輸層協(xié)議概述用戶數(shù)據(jù)報(bào)協(xié)議UDP傳輸控制協(xié)議TCP概述可靠傳輸?shù)墓ぷ髟鞹CP報(bào)文段的首部格式TCP可靠傳輸?shù)膶?shí)現(xiàn)TCP的流量控制TCP的擁塞控制TCP的運(yùn)輸連接管理進(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)用進(jìn)程提

2、供了邏輯通信 54321運(yùn)輸層提供應(yīng)用進(jìn)程間的邏輯通信主機(jī) A主機(jī) B應(yīng)用進(jìn)程應(yīng)用進(jìn)程路由器 1路由器 2AP1LAN2WANAP2AP3AP4IP 層LAN1AP1AP2AP4端口端口54321IP 協(xié)議的作用范圍運(yùn)輸層協(xié)議 TCP 和 UDP 的作用范圍AP3應(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)文通過(guò)不同的端口向下交到運(yùn)輸層,再往下就共用網(wǎng)絡(luò)層提供的服務(wù)?!斑\(yùn)輸層提供應(yīng)用進(jìn)程間的邏輯通信”?!斑壿嬐ㄐ拧钡囊馑际牵哼\(yùn)輸層之間的通信好像是沿水平方向傳送數(shù)據(jù)。

3、但事實(shí)上這兩個(gè)運(yùn)輸層之間并沒(méi)有一條水平方向的物理連接。運(yùn)輸層協(xié)議和網(wǎng)絡(luò)層協(xié)議的主要區(qū)別 應(yīng)用進(jìn)程應(yīng)用進(jìn)程IP 協(xié)議的作用范圍(提供主機(jī)之間的邏輯通信)TCP 和 UDP 協(xié)議的作用范圍(提供進(jìn)程之間的邏輯通信)因 特 網(wǎng)運(yùn)輸層的主要功能 運(yùn)輸層為應(yīng)用進(jìn)程之間提供端到端的邏輯通信(但網(wǎng)絡(luò)層是為主機(jī)之間提供邏輯通信)。運(yùn)輸層還要對(duì)收到的報(bào)文進(jìn)行差錯(cuò)檢測(cè)。運(yùn)輸層需要有兩種不同的運(yùn)輸協(xié)議,即面向連接的 TCP 和無(wú)連接的 UDP。 兩種不同的運(yùn)輸協(xié)議運(yùn)輸層向高層用戶屏蔽了下面網(wǎng)絡(luò)核心的細(xì)節(jié)(如網(wǎng)絡(luò)拓?fù)?、所采用的路由選擇協(xié)議等),它使應(yīng)用進(jìn)程看見(jiàn)的就是好像在兩個(gè)運(yùn)輸層實(shí)體之間有一條端到端的邏輯通信信道。

4、當(dāng)運(yùn)輸層采用面向連接的 TCP 協(xié)議時(shí),盡管下面的網(wǎng)絡(luò)是不可靠的(只提供盡最大努力服務(wù)),但這種邏輯通信信道就相當(dāng)于一條全雙工的可靠信道。當(dāng)運(yùn)輸層采用無(wú)連接的 UDP 協(xié)議時(shí),這種邏輯通信信道是一條不可靠信道。 TCP/IP 的運(yùn)輸層有兩個(gè)不同的協(xié)議:(1) 用戶數(shù)據(jù)報(bào)協(xié)議 UDP (User Datagram Protocol)(2) 傳輸控制協(xié)議 TCP (Transmission Control Protocol)運(yùn)輸層的兩個(gè)主要協(xié)議 兩個(gè)對(duì)等運(yùn)輸實(shí)體在通信時(shí)傳送的數(shù)據(jù)單位叫作運(yùn)輸協(xié)議數(shù)據(jù)單元 TPDU (Transport Protocol Data Unit)。TCP 傳送的數(shù)據(jù)單位

5、協(xié)議是 TCP 報(bào)文段(segment) UDP 傳送的數(shù)據(jù)單位協(xié)議是 UDP 報(bào)文或用戶數(shù)據(jù)報(bào)。 TCP 與 UDP TCP/IP 體系中的運(yùn)輸層協(xié)議 TCPUDPIP應(yīng)用層與各種網(wǎng)絡(luò)接口運(yùn)輸層TCP 與 UDP UDP 在傳送數(shù)據(jù)之前不需要先建立連接。對(duì)方的運(yùn)輸層在收到 UDP 報(bào)文后,不需要給出任何確認(rèn)。雖然 UDP 不提供可靠交付,但在某些情況下 UDP 是一種最有效的工作方式。TCP 則提供面向連接的服務(wù)。TCP 不提供廣播或多播服務(wù)。由于 TCP 要提供可靠的、面向連接的運(yùn)輸服務(wù),因此不可避免地增加了許多的開(kāi)銷。這不僅使協(xié)議數(shù)據(jù)單元的首部增大很多,還要占用許多的處理機(jī)資源。 還要強(qiáng)

6、調(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)過(guò)互連網(wǎng)中許多路由器的存儲(chǔ)轉(zhuǎn)發(fā),但 UDP 用戶數(shù)據(jù)報(bào)是在運(yùn)輸層的端到端抽象的邏輯信道中傳送的。TCP 報(bào)文段是在運(yùn)輸層抽象的端到端邏輯信道中傳送,這種信道是可靠的全雙工信道。但這樣的信道卻不知道究竟經(jīng)過(guò)了哪些路由器,而這些路由器也根本不知道上面的運(yùn)輸層是否建立了 TCP 連接。 運(yùn)輸層的端口 運(yùn)行在計(jì)算機(jī)中的進(jìn)程是用進(jìn)程標(biāo)識(shí)符來(lái)標(biāo)志的。運(yùn)行在應(yīng)用層的各種應(yīng)用進(jìn)程卻不應(yīng)當(dāng)讓計(jì)算機(jī)操作系統(tǒng)指派它的進(jìn)程標(biāo)識(shí)符。這是因?yàn)樵谝蛱鼐W(wǎng)上使用的計(jì)算機(jī)的操作系統(tǒng)種類很多,而不同的操作系統(tǒng)又使用不同格式的進(jìn)程標(biāo)識(shí)符。為了使運(yùn)行不

7、同操作系統(tǒng)的計(jì)算機(jī)的應(yīng)用進(jìn)程能夠互相通信,就必須用統(tǒng)一的方法對(duì) TCP/IP 體系的應(yīng)用進(jìn)程進(jìn)行標(biāo)志。 需要解決的問(wèn)題 由于進(jìn)程的創(chuàng)建和撤銷都是動(dòng)態(tài)的,發(fā)送方幾乎無(wú)法識(shí)別其他機(jī)器上的進(jìn)程。有時(shí)我們會(huì)改換接收?qǐng)?bào)文的進(jìn)程,但并不需要通知所有發(fā)送方。我們往往需要利用目的主機(jī)提供的功能來(lái)識(shí)別終點(diǎn),而不需要知道實(shí)現(xiàn)這個(gè)功能的進(jìn)程。端口號(hào)(protocol port number)簡(jiǎn)稱為端口(port)解決這個(gè)問(wèn)題的方法就是在運(yùn)輸層使用協(xié)議端口號(hào)(protocol port number),或通常簡(jiǎn)稱為端口(port)。雖然通信的終點(diǎn)是應(yīng)用進(jìn)程,但我們可以把端口想象是通信的終點(diǎn),因?yàn)槲覀冎灰岩獋魉偷膱?bào)文

8、交到目的主機(jī)的某一個(gè)合適的目的端口,剩下的工作(即最后交付目的進(jìn)程)就由 TCP 來(lái)完成。軟件端口與硬件端口在協(xié)議棧層間的抽象的協(xié)議端口是軟件端口。路由器或交換機(jī)上的端口是硬件端口。硬件端口是不同硬件設(shè)備進(jìn)行交互的接口,而軟件端口是應(yīng)用層的各種協(xié)議進(jìn)程與運(yùn)輸實(shí)體進(jìn)行層間交互的一種地址。 TCP 的端口 端口用一個(gè) 16 位端口號(hào)進(jìn)行標(biāo)志。端口號(hào)只具有本地意義,即端口號(hào)只是為了標(biāo)志本計(jì)算機(jī)應(yīng)用層中的各進(jìn)程。在因特網(wǎng)中不同計(jì)算機(jī)的相同端口號(hào)是沒(méi)有聯(lián)系的。三類端口 熟知端口,數(shù)值一般為 01023。登記端口號(hào),數(shù)值為102449151,為沒(méi)有熟知端口號(hào)的應(yīng)用程序使用的。使用這個(gè)范圍的端口號(hào)必須在 I

9、ANA 登記,以防止重復(fù)。客戶端口號(hào)或短暫端口號(hào),數(shù)值為4915265535,留給客戶進(jìn)程選擇暫時(shí)使用。當(dāng)服務(wù)器進(jìn)程收到客戶進(jìn)程的報(bào)文時(shí),就知道了客戶進(jìn)程所使用的動(dòng)態(tài)端口號(hào)。通信結(jié)束后,這個(gè)端口號(hào)可供其他客戶進(jìn)程以后使用。 主要內(nèi)容運(yùn)輸層協(xié)議概述用戶數(shù)據(jù)報(bào)協(xié)議UDP傳輸控制協(xié)議TCP概述可靠傳輸?shù)墓ぷ髟鞹CP報(bào)文段的首部格式TCP可靠傳輸?shù)膶?shí)現(xiàn)TCP的流量控制TCP的擁塞控制TCP的運(yùn)輸連接管理UDP 概述 UDP 只在 IP 的數(shù)據(jù)報(bào)服務(wù)之上增加了很少一點(diǎn)的功能,即端口的功能和差錯(cuò)檢測(cè)的功能。雖然 UDP 用戶數(shù)據(jù)報(bào)只能提供不可靠的交付,但 UDP 在某些方面有其特殊的優(yōu)點(diǎn)。UDP 的主要

10、特點(diǎn) UDP 是無(wú)連接的,即發(fā)送數(shù)據(jù)之前不需要建立連接。UDP 使用盡最大努力交付,即不保證可靠交付,同時(shí)也不使用擁塞控制。UDP 是面向報(bào)文的。UDP 沒(méi)有擁塞控制,很適合多媒體通信的要求。 UDP 支持一對(duì)一、一對(duì)多、多對(duì)一和多對(duì)多的交互通信。UDP 的首部開(kāi)銷小,只有 8 個(gè)字節(jié)。 面向報(bào)文的 UDP發(fā)送方 UDP 對(duì)應(yīng)用程序交下來(lái)的報(bào)文,在添加首部后就向下交付 IP 層。UDP 對(duì)應(yīng)用層交下來(lái)的報(bào)文,既不合并,也不拆分,而是保留這些報(bào)文的邊界。應(yīng)用層交給 UDP 多長(zhǎng)的報(bào)文,UDP 就照樣發(fā)送,即一次發(fā)送一個(gè)報(bào)文。接收方 UDP 對(duì) IP 層交上來(lái)的 UDP 用戶數(shù)據(jù)報(bào),在去除首部后就

11、原封不動(dòng)地交付上層的應(yīng)用進(jìn)程,一次交付一個(gè)完整的報(bào)文。應(yīng)用程序必須選擇合適大小的報(bào)文。UDP 是面向報(bào)文的 IP 數(shù)據(jù)報(bào)的數(shù)據(jù)部分IP 首部IP 層UDP 首部UDP 用戶數(shù)據(jù)報(bào)的數(shù)據(jù)部分運(yùn)輸層應(yīng)用層報(bào)文應(yīng)用層UDP 的首部格式 偽首部源端口目的端口長(zhǎng) 度檢驗(yàn)和數(shù) 據(jù)首 部UDP長(zhǎng)度源 IP 地址目的 IP 地址017IP 數(shù)據(jù)報(bào)字節(jié)44112122222字節(jié)發(fā)送在前數(shù) 據(jù)首 部UDP 用戶數(shù)據(jù)報(bào)UDP 基于端口的分用 IP 層UDP 數(shù)據(jù)報(bào)到達(dá)端口 2端口 3端口 1UDP 分用偽首部源端口目的端口長(zhǎng) 度檢驗(yàn)和數(shù) 據(jù)首 部UDP長(zhǎng)度源 IP 地址目的 IP 地址017IP 數(shù)據(jù)報(bào)字節(jié)4411

12、2122222字節(jié)發(fā)送在前數(shù) 據(jù)首 部UDP 用戶數(shù)據(jù)報(bào)用戶數(shù)據(jù)報(bào) UDP 有兩個(gè)字段:數(shù)據(jù)字段和首部字段。首部字段有 8 個(gè)字節(jié),由 4 個(gè)字段組成,每個(gè)字段都是兩個(gè)字節(jié)。 偽首部源端口目的端口長(zhǎng) 度檢驗(yàn)和數(shù) 據(jù)首 部UDP長(zhǎng)度源 IP 地址目的 IP 地址017IP 數(shù)據(jù)報(bào)字節(jié)44112122222字節(jié)發(fā)送在前數(shù) 據(jù)首 部UDP 用戶數(shù)據(jù)報(bào)在計(jì)算檢驗(yàn)和時(shí),臨時(shí)把“偽首部”和 UDP 用戶數(shù)據(jù)報(bào)連接在一起。偽首部?jī)H僅是為了計(jì)算檢驗(yàn)和。計(jì)算 UDP 檢驗(yàn)和的例子 10011001 00010011 153.1900001000 01101000 8.10410101011 00000011 1

13、71.300001110 00001011 14.1100000000 00010001 0 和 1700000000 00001111 1500000100 00111111 108700000000 00001101 1300000000 00001111 1500000000 00000000 0(檢驗(yàn)和)01010100 01000101 數(shù)據(jù)01010011 01010100 數(shù)據(jù)01001001 01001110 數(shù)據(jù)01000111 00000000 數(shù)據(jù)和 0(填充)10010110 11101101 求和得出的結(jié)果01101001 00010010 檢驗(yàn)和 153.19.8.

14、104171.3.14.1112 字節(jié)偽首部8 字節(jié)UDP 首部7 字節(jié)數(shù)據(jù)填充按二進(jìn)制反碼運(yùn)算求和將得出的結(jié)果求反碼全 0 17 15 1087 13 15 全 0數(shù)據(jù) 數(shù)據(jù) 數(shù)據(jù) 數(shù)據(jù)數(shù)據(jù) 數(shù)據(jù) 數(shù)據(jù) 全 0主要內(nèi)容運(yùn)輸層協(xié)議概述用戶數(shù)據(jù)報(bào)協(xié)議UDP傳輸控制協(xié)議TCP概述可靠傳輸?shù)墓ぷ髟鞹CP報(bào)文段的首部格式TCP可靠傳輸?shù)膶?shí)現(xiàn)TCP的流量控制TCP的擁塞控制TCP的運(yùn)輸連接管理TCP 最主要的特點(diǎn) TCP 是面向連接的運(yùn)輸層協(xié)議。每一條 TCP 連接只能有兩個(gè)端點(diǎn)(endpoint),每一條 TCP 連接只能是點(diǎn)對(duì)點(diǎn)的(一對(duì)一)。 TCP 提供可靠交付的服務(wù)。 TCP 提供全雙工通信。

15、面向字節(jié)流。 768HTCP 面向流的概念 發(fā)送 TCP 報(bào)文段發(fā)送方接收方把字節(jié)寫(xiě)入發(fā)送緩存從接收緩存讀取字節(jié)應(yīng)用進(jìn)程應(yīng)用進(jìn)程1230181716151419202145131211H109H加上 TCP 首部構(gòu)成 TCP 報(bào)文段TCPTCP字節(jié)流字節(jié)流H表示 TCP 報(bào)文段的首部x表示序號(hào)為 x 的數(shù)據(jù)字節(jié)TCP 連接應(yīng)當(dāng)注意TCP 連接是一條虛連接而不是一條真正的物理連接。TCP 對(duì)應(yīng)用進(jìn)程一次把多長(zhǎng)的報(bào)文發(fā)送到TCP 的緩存中是不關(guān)心的。TCP 根據(jù)對(duì)方給出的窗口值和當(dāng)前網(wǎng)絡(luò)擁塞的程度來(lái)決定一個(gè)報(bào)文段應(yīng)包含多少個(gè)字節(jié)(UDP 發(fā)送的報(bào)文長(zhǎng)度是應(yīng)用進(jìn)程給出的)。TCP 可把太長(zhǎng)的數(shù)據(jù)塊劃

16、分短一些再傳送。TCP 也可等待積累有足夠多的字節(jié)后再構(gòu)成報(bào)文段發(fā)送出去。 TCP 的連接 TCP 把連接作為最基本的抽象。每一條 TCP 連接有兩個(gè)端點(diǎn)。TCP 連接的端點(diǎn)不是主機(jī),不是主機(jī)的IP 地址,不是應(yīng)用進(jìn)程,也不是運(yùn)輸層的協(xié)議端口。TCP 連接的端點(diǎn)叫做套接字(socket)或插口。端口號(hào)拼接到(contatenated with) IP 地址即構(gòu)成了套接字。 套接字 (socket) 套接字 socket = (IP地址: 端口號(hào)) (5-1)每一條 TCP 連接唯一地被通信兩端的兩個(gè)端點(diǎn)(即兩個(gè)套接字)所確定。即: TCP 連接 := socket1, socket2 = (I

17、P1: port1), (IP2: port2) (5-2)同一個(gè)名詞 socket有多種不同的意思 應(yīng)用編程接口 API 稱為 socket API, 簡(jiǎn)稱為 socket。socket API 中使用的一個(gè)函數(shù)名也叫作 socket。調(diào)用 socket 函數(shù)的端點(diǎn)稱為 socket。調(diào)用 socket 函數(shù)時(shí)其返回值稱為 socket 描述符,可簡(jiǎn)稱為 socket。在操作系統(tǒng)內(nèi)核中連網(wǎng)協(xié)議的 Berkeley 實(shí)現(xiàn),稱為 socket 實(shí)現(xiàn)。 主要內(nèi)容運(yùn)輸層協(xié)議概述用戶數(shù)據(jù)報(bào)協(xié)議UDP傳輸控制協(xié)議TCP概述可靠傳輸?shù)墓ぷ髟鞹CP報(bào)文段的首部格式TCP可靠傳輸?shù)膶?shí)現(xiàn)TCP的流量控制TCP

18、的擁塞控制TCP的運(yùn)輸連接管理停止等待協(xié)議 (a) 無(wú)差錯(cuò)情況A發(fā)送 M1確認(rèn) M1B發(fā)送 M2發(fā)送 M3確認(rèn) M2確認(rèn) M3A發(fā)送 M1B超時(shí)重傳 M1發(fā)送 M2確認(rèn) M1丟棄有差錯(cuò)的報(bào)文(b) 超時(shí)重傳tttt請(qǐng)注意在發(fā)送完一個(gè)分組后,必須暫時(shí)保留已發(fā)送的分組的副本。分組和確認(rèn)分組都必須進(jìn)行編號(hào)。超時(shí)計(jì)時(shí)器的重傳時(shí)間應(yīng)當(dāng)比數(shù)據(jù)在分組傳輸?shù)钠骄禃r(shí)間更長(zhǎng)一些。 確認(rèn)丟失和確認(rèn)遲到 A發(fā)送 M1B超時(shí)重傳 M1發(fā)送 M2丟棄重復(fù)的 M1重傳確認(rèn) M1(a) 確認(rèn)丟失確認(rèn) M1A發(fā)送 M1B超時(shí)重傳 M1發(fā)送 M2丟棄重復(fù)的 M1重傳確認(rèn)M1(b) 確認(rèn)遲到確認(rèn) M1收下遲到的確認(rèn)但什么也不做

19、tttt可靠通信的實(shí)現(xiàn)使用上述的確認(rèn)和重傳機(jī)制,我們就可以在不可靠的傳輸網(wǎng)絡(luò)上實(shí)現(xiàn)可靠的通信。這種可靠傳輸協(xié)議常稱為自動(dòng)重傳請(qǐng)求ARQ (Automatic Repeat reQuest)。ARQ 表明重傳的請(qǐng)求是自動(dòng)進(jìn)行的。接收方不需要請(qǐng)求發(fā)送方重傳某個(gè)出錯(cuò)的分組 。信道利用率 停止等待協(xié)議的優(yōu)點(diǎn)是簡(jiǎn)單,但缺點(diǎn)是信道利用率太低。 TDRTTATD + RTT + TAB分組確認(rèn)tt分組確認(rèn)信道的利用率 U (5-3)流水線傳輸 發(fā)送方可連續(xù)發(fā)送多個(gè)分組,不必每發(fā)完一個(gè)分組就停頓下來(lái)等待對(duì)方的確認(rèn)。由于信道上一直有數(shù)據(jù)不間斷地傳送,這種傳輸方式可獲得很高的信道利用率。 B分組ttAACK連續(xù)

20、ARQ 協(xié)議 123456789101112(a) 發(fā)送方維持發(fā)送窗口(發(fā)送窗口是 5)發(fā)送窗口(b) 收到一個(gè)確認(rèn)后發(fā)送窗口向前滑動(dòng)向前123456789101112發(fā)送窗口累積確認(rèn) 接收方一般采用累積確認(rèn)的方式。即不必對(duì)收到的分組逐個(gè)發(fā)送確認(rèn),而是對(duì)按序到達(dá)的最后一個(gè)分組發(fā)送確認(rèn),這樣就表示:到這個(gè)分組為止的所有分組都已正確收到了。累積確認(rèn)有的優(yōu)點(diǎn)是:容易實(shí)現(xiàn),即使確認(rèn)丟失也不必重傳。缺點(diǎn)是:不能向發(fā)送方反映出接收方已經(jīng)正確收到的所有分組的信息。Go-back-N(回退 N) 如果發(fā)送方發(fā)送了前 5 個(gè)分組,而中間的第 3 個(gè)分組丟失了。這時(shí)接收方只能對(duì)前兩個(gè)分組發(fā)出確認(rèn)。發(fā)送方無(wú)法知道后

21、面三個(gè)分組的下落,而只好把后面的三個(gè)分組都再重傳一次。這就叫做 Go-back-N(回退 N),表示需要再退回來(lái)重傳已發(fā)送過(guò)的 N 個(gè)分組??梢?jiàn)當(dāng)通信線路質(zhì)量不好時(shí),連續(xù) ARQ 協(xié)議會(huì)帶來(lái)負(fù)面的影響。 TCP 可靠通信的具體實(shí)現(xiàn) TCP 連接的每一端都必須設(shè)有兩個(gè)窗口一個(gè)發(fā)送窗口和一個(gè)接收窗口。 TCP 的可靠傳輸機(jī)制用字節(jié)的序號(hào)進(jìn)行控制。TCP 所有的確認(rèn)都是基于序號(hào)而不是基于報(bào)文段。 TCP 兩端的四個(gè)窗口經(jīng)常處于動(dòng)態(tài)變化之中。TCP連接的往返時(shí)間 RTT 也不是固定不變的。需要使用特定的算法估算較為合理的重傳時(shí)間。 主要內(nèi)容運(yùn)輸層協(xié)議概述用戶數(shù)據(jù)報(bào)協(xié)議UDP傳輸控制協(xié)議TCP概述可靠傳

22、輸?shù)墓ぷ髟鞹CP報(bào)文段的首部格式TCP可靠傳輸?shù)膶?shí)現(xiàn)TCP的流量控制TCP的擁塞控制TCP的運(yùn)輸連接管理TCP首部20 字節(jié)的固定首部目 的 端 口數(shù)據(jù)偏移檢 驗(yàn) 和選 項(xiàng) (長(zhǎng) 度 可 變)源 端 口序 號(hào)緊 急 指 針窗 口確 認(rèn) 號(hào)保 留FIN32 位SYNRSTPSHACKURG位 0 8 16 24 31填 充TCP 數(shù)據(jù)部分TCP 首部TCP 報(bào)文段IP 數(shù)據(jù)部分IP 首部發(fā)送在前TCP 報(bào)文段的首部格式 TCP首部20字節(jié)固定首部目 的 端 口數(shù)據(jù)偏移檢 驗(yàn) 和選 項(xiàng) (長(zhǎng) 度 可 變)源 端 口序 號(hào)緊 急 指 針窗 口確 認(rèn) 號(hào)保 留FINSYNRSTPSHACKURG位

23、0 8 16 24 31填 充源端口和目的端口字段各占 2 字節(jié)。端口是運(yùn)輸層與應(yīng)用層的服務(wù)接口。運(yùn)輸層的復(fù)用和分用功能都要通過(guò)端口才能實(shí)現(xiàn)。 TCP首部20字節(jié)固定首部目 的 端 口數(shù)據(jù)偏移檢 驗(yàn) 和選 項(xiàng) (長(zhǎng) 度 可 變)源 端 口序 號(hào)緊 急 指 針窗 口確 認(rèn) 號(hào)保 留FINSYNRSTPSHACKURG位 0 8 16 24 31填 充序號(hào)字段占 4 字節(jié)。TCP 連接中傳送的數(shù)據(jù)流中的每一個(gè)字節(jié)都編上一個(gè)序號(hào)。序號(hào)字段的值則指的是本報(bào)文段所發(fā)送的數(shù)據(jù)的第一個(gè)字節(jié)的序號(hào)。 TCP首部20字節(jié)固定首部目 的 端 口數(shù)據(jù)偏移檢 驗(yàn) 和選 項(xiàng) (長(zhǎng) 度 可 變)源 端 口序 號(hào)緊 急 指

24、 針窗 口確 認(rèn) 號(hào)保 留FINSYNRSTPSHACKURG位 0 8 16 24 31填 充確認(rèn)號(hào)字段占 4 字節(jié),是期望收到對(duì)方的下一個(gè)報(bào)文段的數(shù)據(jù)的第一個(gè)字節(jié)的序號(hào)。 TCP首部20字節(jié)固定首部目 的 端 口數(shù)據(jù)偏移檢 驗(yàn) 和選 項(xiàng) (長(zhǎng) 度 可 變)源 端 口序 號(hào)緊 急 指 針窗 口確 認(rèn) 號(hào)保 留FINSYNRSTPSHACKURG位 0 8 16 24 31填 充數(shù)據(jù)偏移(即首部長(zhǎng)度)占 4 位,它指出 TCP 報(bào)文段的數(shù)據(jù)起始處距離 TCP 報(bào)文段的起始處有多遠(yuǎn)。“數(shù)據(jù)偏移”的單位是 32 位字(以 4 字節(jié)為計(jì)算單位)。 TCP首部20字節(jié)固定首部目 的 端 口數(shù)據(jù)偏移檢

25、驗(yàn) 和選 項(xiàng) (長(zhǎng) 度 可 變)源 端 口序 號(hào)緊 急 指 針窗 口確 認(rèn) 號(hào)保 留FINSYNRSTPSHACKURG位 0 8 16 24 31填 充保留字段占 6 位,保留為今后使用,但目前應(yīng)置為 0。 TCP首部20字節(jié)固定首部目 的 端 口數(shù)據(jù)偏移檢 驗(yàn) 和選 項(xiàng) (長(zhǎng) 度 可 變)源 端 口序 號(hào)緊 急 指 針窗 口確 認(rèn) 號(hào)保 留FINSYNRSTPSHACKURG位 0 8 16 24 31填 充緊急 URG 當(dāng) URG 1 時(shí),表明緊急指針字段有效。它告訴系統(tǒng)此報(bào)文段中有緊急數(shù)據(jù),應(yīng)盡快傳送(相當(dāng)于高優(yōu)先級(jí)的數(shù)據(jù))。 TCP首部20字節(jié)固定首部目 的 端 口數(shù)據(jù)偏移檢 驗(yàn) 和

26、選 項(xiàng) (長(zhǎng) 度 可 變)源 端 口序 號(hào)緊 急 指 針窗 口確 認(rèn) 號(hào)保 留FINSYNRSTPSHACKURG位 0 8 16 24 31填 充確認(rèn) ACK 只有當(dāng) ACK 1 時(shí)確認(rèn)號(hào)字段才有效。當(dāng) ACK 0 時(shí),確認(rèn)號(hào)無(wú)效。 TCP首部20字節(jié)固定首部目 的 端 口數(shù)據(jù)偏移檢 驗(yàn) 和選 項(xiàng) (長(zhǎng) 度 可 變)源 端 口序 號(hào)緊 急 指 針窗 口確 認(rèn) 號(hào)保 留FINSYNRSTPSHACKURG位 0 8 16 24 31填 充推送 PSH (PuSH) 接收 TCP 收到 PSH = 1 的報(bào)文段,就盡快地交付接收應(yīng)用進(jìn)程,而不再等到整個(gè)緩存都填滿了后再向上交付。 TCP首部20字

27、節(jié)固定首部目 的 端 口數(shù)據(jù)偏移檢 驗(yàn) 和選 項(xiàng) (長(zhǎng) 度 可 變)源 端 口序 號(hào)緊 急 指 針窗 口確 認(rèn) 號(hào)保 留FINSYNRSTPSHACKURG位 0 8 16 24 31填 充復(fù)位 RST (ReSeT) 當(dāng) RST 1 時(shí),表明 TCP 連接中出現(xiàn)嚴(yán)重差錯(cuò)(如由于主機(jī)崩潰或其他原因),必須釋放連接,然后再重新建立運(yùn)輸連接。 TCP首部20字節(jié)固定首部目 的 端 口數(shù)據(jù)偏移檢 驗(yàn) 和選 項(xiàng) (長(zhǎng) 度 可 變)源 端 口序 號(hào)緊 急 指 針窗 口確 認(rèn) 號(hào)保 留FINSYNRSTPSHACKURG位 0 8 16 24 31填 充同步 SYN 同步 SYN = 1 表示這是一個(gè)連接

28、請(qǐng)求或連接接受報(bào)文。 TCP首部20字節(jié)固定首部目 的 端 口數(shù)據(jù)偏移檢 驗(yàn) 和選 項(xiàng) (長(zhǎng) 度 可 變)源 端 口序 號(hào)緊 急 指 針窗 口確 認(rèn) 號(hào)保 留FINSYNRSTPSHACKURG位 0 8 16 24 31填 充終止 FIN (FINis) 用來(lái)釋放一個(gè)連接。FIN 1 表明此報(bào)文段的發(fā)送端的數(shù)據(jù)已發(fā)送完畢,并要求釋放運(yùn)輸連接。 TCP首部20字節(jié)固定首部目 的 端 口數(shù)據(jù)偏移檢 驗(yàn) 和選 項(xiàng) (長(zhǎng) 度 可 變)源 端 口序 號(hào)緊 急 指 針窗 口確 認(rèn) 號(hào)保 留FINSYNRSTPSHACKURG位 0 8 16 24 31填 充窗口字段 占 2 字節(jié),用來(lái)讓對(duì)方設(shè)置發(fā)送窗口

29、的依據(jù),單位為字節(jié)。TCP首部20字節(jié)固定首部目 的 端 口數(shù)據(jù)偏移檢 驗(yàn) 和選 項(xiàng) (長(zhǎng) 度 可 變)源 端 口序 號(hào)緊 急 指 針窗 口確 認(rèn) 號(hào)保 留FINSYNRSTPSHACKURG位 0 8 16 24 31填 充檢驗(yàn)和 占 2 字節(jié)。檢驗(yàn)和字段檢驗(yàn)的范圍包括首部和數(shù)據(jù)這兩部分。在計(jì)算檢驗(yàn)和時(shí),要在 TCP 報(bào)文段的前面加上 12 字節(jié)的偽首部。TCP首部20字節(jié)固定首部目 的 端 口數(shù)據(jù)偏移檢 驗(yàn) 和選 項(xiàng) (長(zhǎng) 度 可 變)源 端 口序 號(hào)緊 急 指 針窗 口確 認(rèn) 號(hào)保 留FINSYNRSTPSHACKURG位 0 8 16 24 31填 充緊急指針字段 占 16 位,指出在

30、本報(bào)文段中緊急數(shù)據(jù)共有多少個(gè)字節(jié)(緊急數(shù)據(jù)放在本報(bào)文段數(shù)據(jù)的最前面)。 TCP首部20字節(jié)固定首部目 的 端 口數(shù)據(jù)偏移檢 驗(yàn) 和選 項(xiàng) (長(zhǎng) 度 可 變)源 端 口序 號(hào)緊 急 指 針窗 口確 認(rèn) 號(hào)保 留FINSYNRSTPSHACKURG比特 0 8 16 24 31填 充選項(xiàng)字段 長(zhǎng)度可變。TCP 最初只規(guī)定了一種選項(xiàng),即最大報(bào)文段長(zhǎng)度 MSS。MSS 告訴對(duì)方 TCP:“我的緩存所能接收的報(bào)文段的數(shù)據(jù)字段的最大長(zhǎng)度是 MSS 個(gè)字節(jié)?!?MSS (Maximum Segment Size)是 TCP 報(bào)文段中的數(shù)據(jù)字段的最大長(zhǎng)度。數(shù)據(jù)字段加上 TCP 首部才等于整個(gè)的 TCP 報(bào)文段

31、。其他選項(xiàng)窗口擴(kuò)大選項(xiàng) 占 3 字節(jié),其中有一個(gè)字節(jié)表示移位值 S。新的窗口值等于TCP 首部中的窗口位數(shù)增大到(16 + S),相當(dāng)于把窗口值向左移動(dòng) S 位后獲得實(shí)際的窗口大小。時(shí)間戳選項(xiàng)占10 字節(jié),其中最主要的字段時(shí)間戳值字段(4 字節(jié))和時(shí)間戳回送回答字段(4 字節(jié))。選擇確認(rèn)選項(xiàng)在后面的 5.6.3 節(jié)介紹。 TCP首部20字節(jié)固定首部目 的 端 口數(shù)據(jù)偏移檢 驗(yàn) 和選 項(xiàng) (長(zhǎng) 度 可 變)源 端 口序 號(hào)緊 急 指 針窗 口確 認(rèn) 號(hào)保 留FINSYNRSTPSHACKURG位 0 8 16 24 31填 充填充字段 這是為了使整個(gè)首部長(zhǎng)度是 4 字節(jié)的整數(shù)倍。 主要內(nèi)容運(yùn)輸層

32、協(xié)議概述用戶數(shù)據(jù)報(bào)協(xié)議UDP傳輸控制協(xié)議TCP概述可靠傳輸?shù)墓ぷ髟鞹CP報(bào)文段的首部格式TCP可靠傳輸?shù)膶?shí)現(xiàn)TCP的流量控制TCP的擁塞控制TCP的運(yùn)輸連接管理以字節(jié)為單位的滑動(dòng)窗口前移不允許發(fā)送已發(fā)送并收到確認(rèn)A 的發(fā)送窗口 = 20允許發(fā)送的序號(hào)26272829303132333435363738394041424344454647484950515253545556B 期望收到的序號(hào)前沿后沿前移收縮根據(jù) B 給出的窗口值A(chǔ) 構(gòu)造出自己的發(fā)送窗口 TCP 標(biāo)準(zhǔn)強(qiáng)烈不贊成發(fā)送窗口前沿向后收縮 不允許發(fā)送已發(fā)送并收到確認(rèn)A 的發(fā)送窗口位置不變?cè)试S發(fā)送但尚未發(fā)送2627282930313233

33、34353637383940414243444546474849505152535455已發(fā)送但未收到確認(rèn)56P1P2P3不允許接收已發(fā)送確認(rèn)并交付主機(jī)B 的接收窗口允許接收26272829303132333435363738394041424344454647484950515253545556未按序收到可用窗口A 發(fā)送了 11 個(gè)字節(jié)的數(shù)據(jù) P3 P1 = A 的發(fā)送窗口(又稱為通知窗口)P2 P1 = 已發(fā)送但尚未收到確認(rèn)的字節(jié)數(shù)P3 P2 = 允許發(fā)送但尚未發(fā)送的字節(jié)數(shù)(又稱為可用窗口) 允許發(fā)送但尚未發(fā)送A 的發(fā)送窗口向前滑動(dòng)26272829303132333435363738394

34、0414243444546474849505152535455已發(fā)送并收到確認(rèn)不允許發(fā)送已發(fā)送但未收到確認(rèn)56P1P2P3允許接收B 的接收窗口向前滑動(dòng)262728293031323334353637383940414243444546474849505152535455已發(fā)送確認(rèn)并交付主機(jī)不允許接收56未按序收到A 收到新的確認(rèn)號(hào),發(fā)送窗口向前滑動(dòng) 先存下,等待缺少的數(shù)據(jù)的到達(dá)不允許發(fā)送已發(fā)送并收到確認(rèn)A 的發(fā)送窗口已滿,有效窗口為零262728293031323334353637383940414243444546474849505152535455已發(fā)送但未收到確認(rèn)56P1P2P3A 的

35、發(fā)送窗口內(nèi)的序號(hào)都已用完,但還沒(méi)有再收到確認(rèn),必須停止發(fā)送。 發(fā)送緩存 最后被確認(rèn)的字節(jié)發(fā)送應(yīng)用程序發(fā)送緩存最后發(fā)送的字節(jié)發(fā)送窗口已發(fā)送TCP序號(hào)增大接收緩存接收應(yīng)用程序已收到接收窗口TCP接收緩存下一個(gè)讀取的字節(jié)序號(hào)增大下一個(gè)期望收到的字節(jié)(確認(rèn)號(hào))發(fā)送緩存與接收緩存的作用發(fā)送緩存用來(lái)暫時(shí)存放: 發(fā)送應(yīng)用程序傳送給發(fā)送方 TCP 準(zhǔn)備發(fā)送的數(shù)據(jù); TCP 已發(fā)送出但尚未收到確認(rèn)的數(shù)據(jù)。接收緩存用來(lái)暫時(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)沒(méi)有規(guī)定對(duì)不按序到達(dá)的數(shù)

36、據(jù)應(yīng)如何處理。通常是先臨時(shí)存放在接收窗口中,等到字節(jié)流中所缺少的字節(jié)收到后,再按序交付上層的應(yīng)用進(jìn)程。TCP 要求接收方必須有累積確認(rèn)的功能,這樣可以減小傳輸開(kāi)銷。 超時(shí)重傳時(shí)間的選擇重傳機(jī)制是 TCP 中最重要和最復(fù)雜的問(wèn)題之一。TCP 每發(fā)送一個(gè)報(bào)文段,就對(duì)這個(gè)報(bào)文段設(shè)置一次計(jì)時(shí)器。只要計(jì)時(shí)器設(shè)置的重傳時(shí)間到但還沒(méi)有收到確認(rèn),就要重傳這一報(bào)文段。往返時(shí)延的方差很大由于 TCP 的下層是一個(gè)互聯(lián)網(wǎng)環(huán)境,IP 數(shù)據(jù)報(bào)所選擇的路由變化很大。因而運(yùn)輸層的往返時(shí)間的方差也很大。時(shí)間數(shù)據(jù)鏈路層運(yùn)輸層T1T2T3往返時(shí)間的概率分布加權(quán)平均往返時(shí)間TCP 保留了 RTT 的一個(gè)加權(quán)平均往返時(shí)間 RTTS(

37、這又稱為平滑的往返時(shí)間)。第一次測(cè)量到 RTT 樣本時(shí),RTTS 值就取為所測(cè)量到的 RTT 樣本值。以后每測(cè)量到一個(gè)新的 RTT 樣本,就按下式重新計(jì)算一次 RTTS: 新的 RTTS (1 ) (舊的 RTTS) (新的 RTT 樣本) (5-4)式中,0 1。若 很接近于零,表示 RTT 值更新較慢。若選擇 接近于 1,則表示 RTT 值更新較快。RFC 2988 推薦的 值為 1/8,即 0.125。 超時(shí)重傳時(shí)間 RTO (RetransmissionTime-Out) RTO 應(yīng)略大于上面得出的加權(quán)平均往返時(shí)間 RTTS。RFC 2988 建議使用下式計(jì)算 RTO: RTO RTT

38、S + 4 RTTD (5-5)RTTD 是 RTT 的偏差的加權(quán)平均值。RFC 2988 建議這樣計(jì)算 RTTD。第一次測(cè)量時(shí),RTTD 值取為測(cè)量到的 RTT 樣本值的一半。在以后的測(cè)量中,則使用下式計(jì)算加權(quán)平均的 RTTD:新的 RTTD = (1 ) (舊的RTTD) + RTTS 新的 RTT 樣本 (5-6) 是個(gè)小于 1 的系數(shù),其推薦值是 1/4,即 0.25。往返時(shí)間 RTT?往返時(shí)間的測(cè)量相當(dāng)復(fù)雜 TCP 報(bào)文段 1 沒(méi)有收到確認(rèn)。重傳(即報(bào)文段 2)后,收到了確認(rèn)報(bào)文段 ACK。如何判定此確認(rèn)報(bào)文段是對(duì)原來(lái)的報(bào)文段 1 的確認(rèn),還是對(duì)重傳的報(bào)文段 2 的確認(rèn)? 發(fā)送一個(gè)T

39、CP 報(bào)文段超時(shí)重傳TCP 報(bào)文段收到 ACK時(shí)間12往返時(shí)間 RTT?是對(duì)哪一個(gè)報(bào)文段的確認(rèn)?Karn 算法 在計(jì)算平均往返時(shí)間 RTT 時(shí),只要報(bào)文段重傳了,就不采用其往返時(shí)間樣本。這樣得出的加權(quán)平均平均往返時(shí)間 RTTS 和超時(shí)重傳時(shí)間 RTO 就較準(zhǔn)確。 報(bào)文段每重傳一次,就把 RTO 增大一些:新的 RTO (舊的 RTO) 系數(shù) 的典型值是 2 。當(dāng)不再發(fā)生報(bào)文段的重傳時(shí),才根據(jù)報(bào)文段的往返時(shí)延更新平均往返時(shí)延 RTT 和超時(shí)重傳時(shí)間 RTO 的數(shù)值。實(shí)踐證明,這種策略較為合理。 修正的 Karn 算法 選擇確認(rèn) SACK(Selective ACK) 接收方收到了和前面的字節(jié)流不

40、連續(xù)的兩個(gè)字節(jié)塊。如果這些字節(jié)的序號(hào)都在接收窗口之內(nèi),那么接收方就先收下這些數(shù)據(jù),但要把這些信息準(zhǔn)確地告訴發(fā)送方,使發(fā)送方不要再重復(fù)發(fā)送這些已收到的數(shù)據(jù)。 1 1000 1501 3000 3501 4500確認(rèn)號(hào) = 1001L1 = 1501L2 = 3501R1 = 3001R1 = 4501接收到的字節(jié)流序號(hào)不連續(xù) 連續(xù)的字節(jié)流第一個(gè)字節(jié)塊第二個(gè)字節(jié)塊 和前后字節(jié)不連續(xù)的每一個(gè)字節(jié)塊都有兩個(gè)邊界: 左邊界和右邊界。圖中用四個(gè)指針標(biāo)記這些邊界。 第一個(gè)字節(jié)塊的左邊界 L1 = 1501,但右邊界 R1 = 3001。 左邊界指出字節(jié)塊的第一個(gè)字節(jié)的序號(hào),但右邊界減 1 才是 字節(jié)塊中的最

41、后一個(gè)序號(hào)。 第二個(gè)字節(jié)塊的左邊界 L2 = 3501,而右邊界 R2 = 4501。 RFC 2018 的規(guī)定如果要使用選擇確認(rèn),那么在建立 TCP 連接時(shí),就要在 TCP 首部的選項(xiàng)中加上“允許 SACK”的選項(xiàng),而雙方必須都事先商定好。如果使用選擇確認(rèn),那么原來(lái)首部中的“確認(rèn)號(hào)字段”的用法仍然不變。只是以后在 TCP 報(bào)文段的首部中都增加了 SACK 選項(xiàng),以便報(bào)告收到的不連續(xù)的字節(jié)塊的邊界。由于首部選項(xiàng)的長(zhǎng)度最多只有 40 字節(jié),而指明一個(gè)邊界就要用掉 4 字節(jié),因此在選項(xiàng)中最多只能指明 4 個(gè)字節(jié)塊的邊界信息。主要內(nèi)容運(yùn)輸層協(xié)議概述用戶數(shù)據(jù)報(bào)協(xié)議UDP傳輸控制協(xié)議TCP概述可靠傳輸?shù)?/p>

42、工作原理TCP報(bào)文段的首部格式TCP可靠傳輸?shù)膶?shí)現(xiàn)TCP的流量控制TCP的擁塞控制TCP的運(yùn)輸連接管理利用滑動(dòng)窗口實(shí)現(xiàn)流量控制一般說(shuō)來(lái),我們總是希望數(shù)據(jù)傳輸?shù)酶煲恍?。但如果發(fā)送方把數(shù)據(jù)發(fā)送得過(guò)快,接收方就可能來(lái)不及接收,這就會(huì)造成數(shù)據(jù)的丟失。流量控制(flow control)就是讓發(fā)送方的發(fā)送速率不要太快,既要讓接收方來(lái)得及接收,也不要使網(wǎng)絡(luò)發(fā)生擁塞。利用滑動(dòng)窗口機(jī)制可以很方便地在 TCP 連接上實(shí)現(xiàn)流量控制。 seq = 1, DATAseq = 201, DATAseq = 401, DATAseq = 301, DATAseq = 101, DATAseq = 201, DATAse

43、q = 501, DATAACK = 1, ack = 201, rwnd = 300ACK = 1, ack = 601, rwnd = 0ACK = 1, ack = 501, rwnd = 100AB允許 A 發(fā)送序號(hào) 201 至 500 共 300 字節(jié)A 發(fā)送了序號(hào) 101 至 200,還能發(fā)送 200 字節(jié)A 發(fā)送了序號(hào) 301 至 400,還能再發(fā)送 100 字節(jié)新數(shù)據(jù)A 發(fā)送了序號(hào) 1 至 100,還能發(fā)送 300 字節(jié)A 發(fā)送了序號(hào) 401 至 500,不能再發(fā)送新數(shù)據(jù)了A 超時(shí)重傳舊的數(shù)據(jù),但不能發(fā)送新的數(shù)據(jù)允許 A 發(fā)送序號(hào) 501 至 600 共 100 字節(jié)A 發(fā)送了

44、序號(hào) 501 至 600,不能再發(fā)送了不允許 A 再發(fā)送(到序號(hào) 600 為止的數(shù)據(jù)都收到了)丟失!流量控制舉例A 向 B 發(fā)送數(shù)據(jù)。在連接建立時(shí),B 告訴 A:“我的接收窗口 rwnd = 400(字節(jié))”。持續(xù)計(jì)時(shí)器(persistence timer)。TCP 為每一個(gè)連接設(shè)有一個(gè)持續(xù)計(jì)時(shí)器。只要 TCP 連接的一方收到對(duì)方的零窗口通知,就啟動(dòng)持續(xù)計(jì)時(shí)器。若持續(xù)計(jì)時(shí)器設(shè)置的時(shí)間到期,就發(fā)送一個(gè)零窗口探測(cè)報(bào)文段(僅攜帶 1 字節(jié)的數(shù)據(jù)),而對(duì)方就在確認(rèn)這個(gè)探測(cè)報(bào)文段時(shí)給出了現(xiàn)在的窗口值。若窗口仍然是零,則收到這個(gè)報(bào)文段的一方就重新設(shè)置持續(xù)計(jì)時(shí)器。若窗口不是零,則死鎖的僵局就可以打破了。 必

45、須考慮傳輸效率可以用不同的機(jī)制來(lái)控制 TCP 報(bào)文段的發(fā)送時(shí)機(jī):第一種機(jī)制是 TCP 維持一個(gè)變量,它等于最大報(bào)文段長(zhǎng)度 MSS。只要緩存中存放的數(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)文段(但長(zhǎng)度不能超過(guò) MSS)發(fā)送出去。主要內(nèi)容運(yùn)輸層協(xié)議概述用戶數(shù)據(jù)報(bào)協(xié)議UDP傳輸控制協(xié)議TCP概述可靠傳輸?shù)墓ぷ髟鞹CP報(bào)文段的首部格式TCP可靠傳輸?shù)膶?shí)現(xiàn)TCP的流量控制TCP的擁塞控制TCP的運(yùn)輸連接管理?yè)砣刂频囊?/p>

46、般原理 在某段時(shí)間,若對(duì)網(wǎng)絡(luò)中某資源的需求超過(guò)了該資源所能提供的可用部分,網(wǎng)絡(luò)的性能就要變壞產(chǎn)生擁塞(congestion)。出現(xiàn)資源擁塞的條件: 對(duì)資源需求的總和 可用資源 (5-7) 若網(wǎng)絡(luò)中有許多資源同時(shí)產(chǎn)生擁塞,網(wǎng)絡(luò)的性能就要明顯變壞,整個(gè)網(wǎng)絡(luò)的吞吐量將隨輸入負(fù)荷的增大而下降。 擁塞控制與流量控制的關(guān)系 擁塞控制所要做的都有一個(gè)前提,就是網(wǎng)絡(luò)能夠承受現(xiàn)有的網(wǎng)絡(luò)負(fù)荷。擁塞控制是一個(gè)全局性的過(guò)程,涉及到所有的主機(jī)、所有的路由器,以及與降低網(wǎng)絡(luò)傳輸性能有關(guān)的所有因素。 流量控制往往指在給定的發(fā)送端和接收端之間的點(diǎn)對(duì)點(diǎn)通信量的控制。 流量控制所要做的就是抑制發(fā)送端發(fā)送數(shù)據(jù)的速率,以便使接收端來(lái)

47、得及接收。 擁塞控制所起的作用 提供的負(fù)載吞吐量理想的擁塞控制實(shí)際的擁塞控制0死鎖(吞吐量 = 0)無(wú)擁塞控制擁塞輕度擁塞擁塞控制的一般原理 擁塞控制是很難設(shè)計(jì)的,因?yàn)樗且粋€(gè)動(dòng)態(tài)的(而不是靜態(tài)的)問(wèn)題。當(dāng)前網(wǎng)絡(luò)正朝著高速化的方向發(fā)展,這很容易出現(xiàn)緩存不夠大而造成分組的丟失。但分組的丟失是網(wǎng)絡(luò)發(fā)生擁塞的征兆而不是原因。在許多情況下,甚至正是擁塞控制本身成為引起網(wǎng)絡(luò)性能惡化甚至發(fā)生死鎖的原因。這點(diǎn)應(yīng)特別引起重視。 開(kāi)環(huán)控制和閉環(huán)控制 開(kāi)環(huán)控制方法就是在設(shè)計(jì)網(wǎng)絡(luò)時(shí)事先將有關(guān)發(fā)生擁塞的因素考慮周到,力求網(wǎng)絡(luò)在工作時(shí)不產(chǎn)生擁塞。 閉環(huán)控制是基于反饋環(huán)路的概念。屬于閉環(huán)控制的有以下幾種措施: 監(jiān)測(cè)網(wǎng)絡(luò)系

48、統(tǒng)以便檢測(cè)到擁塞在何時(shí)、何處發(fā)生。將擁塞發(fā)生的信息傳送到可采取行動(dòng)的地方。調(diào)整網(wǎng)絡(luò)系統(tǒng)的運(yùn)行以解決出現(xiàn)的問(wèn)題。幾種擁塞控制方法1. 慢開(kāi)始和擁塞避免發(fā)送方維持一個(gè)叫做擁塞窗口 cwnd (congestion window)的狀態(tài)變量。擁塞窗口的大小取決于網(wǎng)絡(luò)的擁塞程度,并且動(dòng)態(tài)地在變化。發(fā)送方讓自己的發(fā)送窗口等于擁塞窗口。如再考慮到接收方的接收能力,則發(fā)送窗口還可能小于擁塞窗口。發(fā)送方控制擁塞窗口的原則是:只要網(wǎng)絡(luò)沒(méi)有出現(xiàn)擁塞,擁塞窗口就再增大一些,以便把更多的分組發(fā)送出去。但只要網(wǎng)絡(luò)出現(xiàn)擁塞,擁塞窗口就減小一些,以減少注入到網(wǎng)絡(luò)中的分組數(shù)。 慢開(kāi)始算法的原理 在主機(jī)剛剛開(kāi)始發(fā)送報(bào)文段時(shí)可先

49、設(shè)置擁塞窗口 cwnd = 1,即設(shè)置為一個(gè)最大報(bào)文段 MSS 的數(shù)值。在每收到一個(gè)對(duì)新的報(bào)文段的確認(rèn)后,將擁塞窗口加 1,即增加一個(gè) MSS 的數(shù)值。用這樣的方法逐步增大發(fā)送端的擁塞窗口 cwnd,可以使分組注入到網(wǎng)絡(luò)的速率更加合理。 發(fā)送方接收方發(fā)送 M1 確認(rèn) M1發(fā)送 M2M3 確認(rèn) M2M3 發(fā)送 M4M7 確認(rèn) M4M7 cwnd = 1 cwnd = 2 cwnd = 4 發(fā)送 M8M15cwnd = 8 tt發(fā)送方每收到一個(gè)對(duì)新報(bào)文段的確認(rèn)(重傳的不算在內(nèi))就使 cwnd 加 1。 輪次 1輪次 2輪次 3傳輸輪次(transmission round)使用慢開(kāi)始算法后,每經(jīng)過(guò)

50、一個(gè)傳輸輪次,擁塞窗口 cwnd 就加倍。 一個(gè)傳輸輪次所經(jīng)歷的時(shí)間其實(shí)就是往返時(shí)間 RTT。“傳輸輪次”更加強(qiáng)調(diào):把擁塞窗口 cwnd 所允許發(fā)送的報(bào)文段都連續(xù)發(fā)送出去,并收到了對(duì)已發(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è)置慢開(kāi)始門限狀態(tài)變量ssthresh慢開(kāi)始門限 ssthresh 的用法如下:當(dāng) cwnd ssthresh 時(shí),停止使用慢開(kāi)始算法而改用擁塞避免算法。當(dāng) cwnd = ssthresh 時(shí),既可使用慢開(kāi)始算法,也可使用擁塞避免算法。擁塞避免算法的

51、思路是讓擁塞窗口 cwnd 緩慢地增大,即每經(jīng)過(guò)一個(gè)往返時(shí)間 RTT 就把發(fā)送方的擁塞窗口 cwnd 加 1,而不是加倍,使擁塞窗口 cwnd 按線性規(guī)律緩慢增長(zhǎng)。當(dāng)網(wǎng)絡(luò)出現(xiàn)擁塞時(shí)無(wú)論在慢開(kāi)始階段還是在擁塞避免階段,只要發(fā)送方判斷網(wǎng)絡(luò)出現(xiàn)擁塞(其根據(jù)就是沒(méi)有按時(shí)收到確認(rèn)),就要把慢開(kāi)始門限 ssthresh 設(shè)置為出現(xiàn)擁塞時(shí)的發(fā)送方窗口值的一半(但不能小于2)。然后把擁塞窗口 cwnd 重新設(shè)置為 1,執(zhí)行慢開(kāi)始算法。這樣做的目的就是要迅速減少主機(jī)發(fā)送到網(wǎng)絡(luò)中的分組數(shù),使得發(fā)生擁塞的路由器有足夠時(shí)間把隊(duì)列中積壓的分組處理完畢。 2216慢開(kāi)始和擁塞避免算法的實(shí)現(xiàn)舉例 當(dāng) TCP 連接進(jìn)行初始化

52、時(shí),將擁塞窗口置為 1。圖中的窗口單位不使用字節(jié)而使用報(bào)文段。慢開(kāi)始門限的初始值設(shè)置為 16 個(gè)報(bào)文段,即 ssthresh = 16?!俺朔p小”24681012141618200048122024擁塞窗口 cwnd新的 ssthresh 值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長(zhǎng)ssthresh 的初始值慢開(kāi)始慢開(kāi)始慢開(kāi)始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次慢開(kāi)始和擁塞避免算法的實(shí)現(xiàn)舉例 發(fā)送端的發(fā)送窗口不能超過(guò)擁塞窗口 cwnd 和接收端窗口 rwnd 中的最小值。我們假定接收端窗口足夠大,因此現(xiàn)在發(fā)送窗口的數(shù)值等于擁塞窗口的數(shù)值。2216“乘法減小”2468101214161820004812

53、2024擁塞窗口 cwnd新的 ssthresh 值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長(zhǎng)ssthresh 的初始值慢開(kāi)始慢開(kāi)始慢開(kāi)始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次慢開(kāi)始和擁塞避免算法的實(shí)現(xiàn)舉例 在執(zhí)行慢開(kāi)始算法時(shí),擁塞窗口 cwnd 的初始值為 1,發(fā)送第一個(gè)報(bào)文段 M0。 2216“乘法減小”24681012141618200048122024擁塞窗口 cwnd新的 ssthresh 值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長(zhǎng)ssthresh 的初始值慢開(kāi)始慢開(kāi)始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次慢開(kāi)始和擁塞避免算法的實(shí)現(xiàn)舉例 發(fā)送端每收到一個(gè)確認(rèn) ,就把 cwnd 加 1。于是發(fā)送端可以接著發(fā)

54、送 M1 和 M2 兩個(gè)報(bào)文段。 2216“乘法減小”24681012141618200048122024擁塞窗口 cwnd新的 ssthresh 值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長(zhǎng)ssthresh 的初始值慢開(kāi)始慢開(kāi)始慢開(kāi)始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次慢開(kāi)始和擁塞避免算法的實(shí)現(xiàn)舉例 接收端共發(fā)回兩個(gè)確認(rèn)。發(fā)送端每收到一個(gè)對(duì)新報(bào)文段的確認(rèn),就把發(fā)送端的 cwnd 加 1?,F(xiàn)在 cwnd 從 2 增大到 4,并可接著發(fā)送后面的 4 個(gè)報(bào)文段。 2216“乘法減小”24681012141618200048122024擁塞窗口 cwnd新的 ssthresh 值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長(zhǎng)ssthr

55、esh 的初始值慢開(kāi)始慢開(kāi)始慢開(kāi)始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次慢開(kāi)始和擁塞避免算法的實(shí)現(xiàn)舉例 發(fā)送端每收到一個(gè)對(duì)新報(bào)文段的確認(rèn),就把發(fā)送端的擁塞窗口加 1,因此擁塞窗口 cwnd 隨著傳輸輪次按指數(shù)規(guī)律增長(zhǎng)。 2216“乘法減小”24681012141618200048122024擁塞窗口 cwnd新的 ssthresh 值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長(zhǎng)ssthresh 的初始值慢開(kāi)始慢開(kāi)始慢開(kāi)始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次慢開(kāi)始和擁塞避免算法的實(shí)現(xiàn)舉例 當(dāng)擁塞窗口 cwnd 增長(zhǎng)到慢開(kāi)始門限值 ssthresh 時(shí)(即當(dāng) cwnd = 16 時(shí)),就改為執(zhí)行擁塞

56、避免算法,擁塞窗口按線性規(guī)律增長(zhǎng)。 2216“乘法減小”24681012141618200048122024擁塞窗口 cwnd新的 ssthresh 值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長(zhǎng)ssthresh 的初始值慢開(kāi)始慢開(kāi)始慢開(kāi)始擁塞避免“加法增大”擁塞避免“加法增大”傳輸輪次2216“乘法減小”24681012141618200048122024擁塞窗口 cwnd新的 ssthresh 值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長(zhǎng)ssthresh 的初始值慢開(kāi)始慢開(kāi)始慢開(kāi)始擁塞避免“加法增大”擁塞避免“加法增大”慢開(kāi)始和擁塞避免算法的實(shí)現(xiàn)舉例 假定擁塞窗口的數(shù)值增長(zhǎng)到 24 時(shí),網(wǎng)絡(luò)出現(xiàn)超時(shí),表明網(wǎng)絡(luò)擁塞了。 傳輸輪次2216

57、“乘法減小”24681012141618200048122024擁塞窗口 cwnd新的 ssthresh 值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長(zhǎng)ssthresh 的初始值慢開(kāi)始慢開(kāi)始慢開(kāi)始擁塞避免“加法增大”擁塞避免“加法增大”慢開(kāi)始和擁塞避免算法的實(shí)現(xiàn)舉例 更新后的 ssthresh 值變?yōu)?12(即發(fā)送窗口數(shù)值 24 的一半),擁塞窗口再重新設(shè)置為 1,并執(zhí)行慢開(kāi)始算法。 傳輸輪次2216“乘法減小”24681012141618200048122024擁塞窗口 cwnd新的 ssthresh 值網(wǎng)絡(luò)擁塞指數(shù)規(guī)律增長(zhǎng)ssthresh 的初始值慢開(kāi)始慢開(kāi)始慢開(kāi)始擁塞避免“加法增大”擁塞避免“加法增大”慢開(kāi)始和

58、擁塞避免算法的實(shí)現(xiàn)舉例 當(dāng) cwnd = 12 時(shí)改為執(zhí)行擁塞避免算法,擁塞窗口按按線性規(guī)律增長(zhǎng),每經(jīng)過(guò)一個(gè)往返時(shí)延就增加一個(gè) MSS 的大小。 傳輸輪次乘法減小(multiplicative decrease) “乘法減小“是指不論在慢開(kāi)始階段還是擁塞避免階段,只要出現(xiàn)一次超時(shí)(即出現(xiàn)一次網(wǎng)絡(luò)擁塞),就把慢開(kāi)始門限值 ssthresh 設(shè)置為當(dāng)前的擁塞窗口值乘以 0.5。當(dāng)網(wǎng)絡(luò)頻繁出現(xiàn)擁塞時(shí),ssthresh 值就下降得很快,以大大減少注入到網(wǎng)絡(luò)中的分組數(shù)。 加法增大(additive increase) “加法增大”是指執(zhí)行擁塞避免算法后,在收到對(duì)所有報(bào)文段的確認(rèn)后(即經(jīng)過(guò)一個(gè)往返時(shí)間),

59、就把擁塞窗口 cwnd增加一個(gè) MSS 大小,使擁塞窗口緩慢增大,以防止網(wǎng)絡(luò)過(guò)早出現(xiàn)擁塞。 必須強(qiáng)調(diào)指出 “擁塞避免”并非指完全能夠避免了擁塞。利用以上的措施要完全避免網(wǎng)絡(luò)擁塞還是不可能的。“擁塞避免”是說(shuō)在擁塞避免階段把擁塞窗口控制為按線性規(guī)律增長(zhǎng),使網(wǎng)絡(luò)比較不容易出現(xiàn)擁塞。 2. 快重傳和快恢復(fù)快重傳算法首先要求接收方每收到一個(gè)失序的報(bào)文段后就立即發(fā)出重復(fù)確認(rèn)。這樣做可以讓發(fā)送方及早知道有報(bào)文段沒(méi)有到達(dá)接收方。 發(fā)送方只要一連收到三個(gè)重復(fù)確認(rèn)就應(yīng)當(dāng)立即重傳對(duì)方尚未收到的報(bào)文段。 不難看出,快重傳并非取消重傳計(jì)時(shí)器,而是在某些情況下可更早地重傳丟失的報(bào)文段。 快重傳舉例發(fā)送方接收方發(fā)送 M1

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

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論