計算機網絡 第 5 章運輸層_第1頁
計算機網絡 第 5 章運輸層_第2頁
計算機網絡 第 5 章運輸層_第3頁
計算機網絡 第 5 章運輸層_第4頁
計算機網絡 第 5 章運輸層_第5頁
已閱讀5頁,還剩132頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、計算機網絡(第 5 版) 第 5 章 運輸層 課件制作人:謝希仁 第 5 章 運輸層 5.1 運輸層協議概述 5.1.1 進程之間的通信 5.1.2 運輸層的兩個主要協議 5.1.3 運輸層的端口 5.2 用戶數據報協議 udp 5.2.1 udp 概述 5.2.2 udp 的首部格式 課件制作人:謝希仁 第 5 章 運輸層(續(xù)) 5.3 傳輸控制協議 tcp 概述 5.3.1 tcp 最主要的特點 5.3.2 tcp 的連接 5.4 可靠傳輸的工作原理 5.4.1 停止等待協議 5.4.2 連續(xù) arq 協議 5.5 tcp 報文段的首部格式 課件制作人:謝希仁 第 5 章 運輸層(續(xù)) 5

2、.6 tcp 可靠傳輸的實現 5.6.1 以字節(jié)為單位的滑動窗口 5.6.2 超時重傳時間的選擇 5.6.3 選擇確認 sack 5.7 tcp的流量控制 5.7.1 利用滑動窗口實現流量控制 5.7.1 必須考慮傳輸效率 課件制作人:謝希仁 第 5 章 運輸層(續(xù)) 5.8 tcp 的擁塞控制 5.8.1 擁塞控制的一般原理 5.8.2 幾種擁塞控制方法 5.8.3 隨機早期檢測 red 5.9 tcp 的運輸連接管理 5.9.1 tcp 的連接建立 5.9.2 tcp 的連接釋放 5.9.3 tcp 的有限狀態(tài)機 課件制作人:謝希仁 5.1 運輸層協議概述 5.1.1 進程之間的通信 n從

3、通信和信息處理的角度看,運輸層向 它上面的應用層提供通信服務,它屬于 面向通信部分的最高層,同時也是用戶 功能中的最低層。 n當網絡的邊緣部分中的兩個主機使用網 絡的核心部分的功能進行端到端的通信 時,只有位于網絡邊緣部分的主機的協 議棧才有運輸層,而網絡核心部分中的 路由器在轉發(fā)分組時都只用到下三層的 功能。 運輸層為相互通信的應用進程提供了 邏輯通信 5 4 3 2 1 運輸層提供應用進程間的邏輯通信 主機 a主機 b 應用進程應用進程 路由器 1路由器 2 ap1 lan2wan ap2 ap3 ap4 ip 層 lan1 ap1 ap2 ap4 端口 端口5 4 3 2 1 ip 協議

4、的作用范圍 運輸層協議 tcp 和 udp 的作用范圍 ap3 課件制作人:謝希仁 應用進程之間的通信 n兩個主機進行通信實際上就是兩個主機中的應 用進程互相通信。 n應用進程之間的通信又稱為端到端的通信。 n運輸層的一個很重要的功能就是復用和分用。 應用層不同進程的報文通過不同的端口向下交 到運輸層,再往下就共用網絡層提供的服務。 n“運輸層提供應用進程間的邏輯通信”?!斑?輯通信”的意思是:運輸層之間的通信好像是 沿水平方向傳送數據。但事實上這兩個運輸層 之間并沒有一條水平方向的物理連接。 課件制作人:謝希仁 運輸層協議和網絡層協議 的主要區(qū)別 應用進程 應用進程 ip 協議的作用范圍 (

5、提供主機之間的邏輯通信) tcp 和 udp 協議的作用范圍 (提供進程之間的邏輯通信) 因 特 網 課件制作人:謝希仁 運輸層的主要功能 n運輸層為應用進程之間提供端到端的邏輯通信 (但網絡層是為主機之間提供邏輯通信)。 n運輸層還要對收到的報文進行差錯檢測。 n運輸層需要有兩種不同的運輸協議,即面向連 接的 tcp 和無連接的 udp。 課件制作人:謝希仁 兩種不同的運輸協議 n運輸層向高層用戶屏蔽了下面網絡核心的細節(jié) (如網絡拓撲、所采用的路由選擇協議等), 它使應用進程看見的就是好像在兩個運輸層實 體之間有一條端到端的邏輯通信信道。 n當運輸層采用面向連接的 tcp 協議時,盡管 下面

6、的網絡是不可靠的(只提供盡最大努力服 務),但這種邏輯通信信道就相當于一條全雙 工的可靠信道。 n當運輸層采用無連接的 udp 協議時,這種邏 輯通信信道是一條不可靠信道。 課件制作人:謝希仁 tcp/ip 的運輸層有兩個不同的協議: (1) 用戶數據報協議 udp (user datagram protocol) (2) 傳輸控制協議 tcp (transmission control protocol) 5.1.2 運輸層的兩個主要協議 課件制作人:謝希仁 n兩個對等運輸實體在通信時傳送的數據單位叫作 運輸協議數據單元 tpdu (transport protocol data unit)

7、。 ntcp 傳送的數據單位協議是 tcp 報文段 (segment) n udp 傳送的數據單位協議是 udp 報文或用戶數 據報。 tcp 與 udp 課件制作人:謝希仁 tcp/ip 體系中的運輸層協議 tcpudp ip 應用層 與各種網絡接口 運輸層 課件制作人:謝希仁 tcp 與 udp nudp 在傳送數據之前不需要先建立連接。對 方的運輸層在收到 udp 報文后,不需要給出 任何確認。雖然 udp 不提供可靠交付,但在 某些情況下 udp 是一種最有效的工作方式。 ntcp 則提供面向連接的服務。tcp 不提供廣 播或多播服務。由于 tcp 要提供可靠的、面 向連接的運輸服務,

8、因此不可避免地增加了許 多的開銷。這不僅使協議數據單元的首部增大 很多,還要占用許多的處理機資源。 課件制作人:謝希仁 還要強調兩點 n運輸層的 udp 用戶數據報與網際層的ip數據報 有很大區(qū)別。ip 數據報要經過互連網中許多路 由器的存儲轉發(fā),但 udp 用戶數據報是在運輸 層的端到端抽象的邏輯信道中傳送的。 ntcp 報文段是在運輸層抽象的端到端邏輯信道 中傳送,這種信道是可靠的全雙工信道。但這 樣的信道卻不知道究竟經過了哪些路由器,而 這些路由器也根本不知道上面的運輸層是否建 立了 tcp 連接。 課件制作人:謝希仁 5.1.3 運輸層的端口 n運行在計算機中的進程是用進程標識符來標志

9、的。 n運行在應用層的各種應用進程卻不應當讓計算機操 作系統指派它的進程標識符。這是因為在因特網上 使用的計算機的操作系統種類很多,而不同的操作 系統又使用不同格式的進程標識符。 n為了使運行不同操作系統的計算機的應用進程能夠 互相通信,就必須用統一的方法對 tcp/ip 體系的 應用進程進行標志。 課件制作人:謝希仁 需要解決的問題 n由于進程的創(chuàng)建和撤銷都是動態(tài)的,發(fā) 送方幾乎無法識別其他機器上的進程。 n有時我們會改換接收報文的進程,但并 不需要通知所有發(fā)送方。 n我們往往需要利用目的主機提供的功能 來識別終點,而不需要知道實現這個功 能的進程。 課件制作人:謝希仁 端口號(protoc

10、ol port number) 簡稱為端口(port) n解決這個問題的方法就是在運輸層使用協議端 口號(protocol port number),或通常簡稱為端 口(port)。 n雖然通信的終點是應用進程,但我們可以把端 口想象是通信的終點,因為我們只要把要傳送 的報文交到目的主機的某一個合適的目的端口, 剩下的工作(即最后交付目的進程)就由 tcp 來完成。 課件制作人:謝希仁 軟件端口與硬件端口 n在協議棧層間的抽象的協議端口是軟件 端口。 n路由器或交換機上的端口是硬件端口。 n硬件端口是不同硬件設備進行交互的接 口,而軟件端口是應用層的各種協議進 程與運輸實體進行層間交互的一種地

11、址。 課件制作人:謝希仁 tcp 的端口 n端口用一個 16 位端口號進行標志。 n端口號只具有本地意義,即端口號只是為 了標志本計算機應用層中的各進程。在因 特網中不同計算機的相同端口號是沒有聯 系的。 課件制作人:謝希仁 三類端口 n熟知端口,數值一般為 01023。 n登記端口號,數值為102449151,為沒有熟 知端口號的應用程序使用的。使用這個范圍的 端口號必須在 iana 登記,以防止重復。 n客戶端口號或短暫端口號,數值為 4915265535,留給客戶進程選擇暫時使用。 當服務器進程收到客戶進程的報文時,就知道 了客戶進程所使用的動態(tài)端口號。通信結束后, 這個端口號可供其他客

12、戶進程以后使用。 課件制作人:謝希仁 5.2 用戶數據報協議 udp 5.2.1 udp 概述 nudp 只在 ip 的數據報服務之上增加 了很少一點的功能,即端口的功能和 差錯檢測的功能。 n雖然 udp 用戶數據報只能提供不可靠 的交付,但 udp 在某些方面有其特殊 的優(yōu)點。 課件制作人:謝希仁 udp 的主要特點 nudp 是無連接的,即發(fā)送數據之前不 需要建立連接。 nudp 使用盡最大努力交付,即不保證 可靠交付,同時也不使用擁塞控制。 nudp 是面向報文的。udp 沒有擁塞控 制,很適合多媒體通信的要求。 nudp 支持一對一、一對多、多對一和 多對多的交互通信。 nudp 的

13、首部開銷小,只有 8 個字節(jié)。 課件制作人:謝希仁 面向報文的 udp n發(fā)送方 udp 對應用程序交下來的報文,在添 加首部后就向下交付 ip 層。udp 對應用層交 下來的報文,既不合并,也不拆分,而是保留 這些報文的邊界。 n應用層交給 udp 多長的報文,udp 就照樣發(fā) 送,即一次發(fā)送一個報文。 n接收方 udp 對 ip 層交上來的 udp 用戶數據 報,在去除首部后就原封不動地交付上層的應 用進程,一次交付一個完整的報文。 n應用程序必須選擇合適大小的報文。 課件制作人:謝希仁 udp 是面向報文的 ip 數據報的數據部分ip 首部 ip 層 udp 首部udp 用戶數據報的數據

14、部分運輸層 應用層報文 應用層 課件制作人:謝希仁 5.2.2 udp 的首部格式 偽首部源端口目的端口長 度檢驗和 數 據首 部 udp長度源 ip 地址目的 ip 地址017 ip 數據報 字節(jié)44112 122222字節(jié) 發(fā)送在前 數 據首 部 udp 用戶數據報 課件制作人:謝希仁 udp 基于端口的分用 ip 層 udp 數據報到達 端口 2端口 3端口 1 udp 分用 偽首部源端口目的端口長 度檢驗和 數 據首 部 udp長度源 ip 地址目的 ip 地址017 ip 數據報 字節(jié)44112 122222字節(jié) 發(fā)送在前 數 據首 部udp 用戶數據報 用戶數據報 udp 有兩個字

15、段:數據字段和首部 字段。首部字段有 8 個字節(jié),由 4 個字段組成, 每個字段都是兩個字節(jié)。 偽首部源端口目的端口長 度檢驗和 數 據首 部 udp長度源 ip 地址目的 ip 地址017 ip 數據報 字節(jié)44112 122222字節(jié) 發(fā)送在前 數 據首 部udp 用戶數據報 在計算檢驗和時,臨時把“偽首部”和 udp 用戶數據 報連接在一起。偽首部僅僅是為了計算檢驗和。 計算 udp 檢驗和的例子 10011001 00010011 153.19 00001000 01101000 8.104 10101011 00000011 171.3 00001110 00001011 14.11

16、 00000000 00010001 0 和 17 00000000 00001111 15 00000100 00111111 1087 00000000 00001101 13 00000000 00001111 15 00000000 00000000 0(檢驗和) 01010100 01000101 數據 01010011 01010100 數據 01001001 01001110 數據 01000111 00000000 數據和 0(填充) 10010110 11101101 求和得出的結果 01101001 00010010 檢驗和 153.19.8.104 171.3.14.11

17、 12 字節(jié) 偽首部 8 字節(jié) udp 首部 7 字節(jié) 數據 填充 按二進制反碼運算求和 將得出的結果求反碼 全 0 17 15 1087 13 15 全 0 數據 數據 數據 數據 數據 數據 數據 全 0 課件制作人:謝希仁 5.3 傳輸控制協議 tcp 概述 5.3.1 tcp 最主要的特點 ntcp 是面向連接的運輸層協議。 n每一條 tcp 連接只能有兩個端點 (endpoint),每一條 tcp 連接只能是點 對點的(一對一)。 ntcp 提供可靠交付的服務。 n tcp 提供全雙工通信。 n面向字節(jié)流。 課件制作人:謝希仁 7 68h tcp 面向流的概念 發(fā)送 tcp 報文段

18、發(fā)送方接收方 把字節(jié)寫入 發(fā)送緩存 從接收緩存 讀取字節(jié) 應用進程 應用進程 1 2 3 0 1817161514 19 20 21 45 131211h109 h 加上 tcp 首部 構成 tcp 報文段 tcptcp 字節(jié)流字節(jié)流 h表示 tcp 報文段的首部 x表示序號為 x 的數據字節(jié) tcp 連接 課件制作人:謝希仁 應當注意 ntcp 連接是一條虛連接而不是一條真正的物理連 接。 ntcp 對應用進程一次把多長的報文發(fā)送到tcp 的 緩存中是不關心的。 ntcp 根據對方給出的窗口值和當前網絡擁塞的程 度來決定一個報文段應包含多少個字節(jié)(udp 發(fā) 送的報文長度是應用進程給出的)。

19、 ntcp 可把太長的數據塊劃分短一些再傳送。tcp 也可等待積累有足夠多的字節(jié)后再構成報文段發(fā) 送出去。 課件制作人:謝希仁 5.3.2 tcp 的連接 ntcp 把連接作為最基本的抽象。 n每一條 tcp 連接有兩個端點。 ntcp 連接的端點不是主機,不是主機的 ip 地址,不是應用進程,也不是運輸層 的協議端口。tcp 連接的端點叫做套接 字(socket)或插口。 n端口號拼接到(contatenated with) ip 地 址即構成了套接字。 課件制作人:謝希仁 套接字 (socket) 套接字 socket = (ip地址: 端口號) (5-1) n每一條 tcp 連接唯一地被

20、通信兩端的兩個 端點(即兩個套接字)所確定。即: tcp 連接 := socket1, socket2 = (ip1: port1), (ip2: port2) (5-2) 課件制作人:謝希仁 同一個名詞 socket 有多種不同的意思 n應用編程接口 api 稱為 socket api, 簡稱為 socket。 nsocket api 中使用的一個函數名也叫作 socket。 n調用 socket 函數的端點稱為 socket。 n調用 socket 函數時其返回值稱為 socket 描述符, 可簡稱為 socket。 n在操作系統內核中連網協議的 berkeley 實現,稱 為 socke

21、t 實現。 5.4 可靠傳輸的工作原理 5.4.1 停止等待協議 (a) 無差錯情況 a 發(fā)送 m1 確認 m1 b 發(fā)送 m2 發(fā)送 m3 確認 m2 確認 m3 a 發(fā)送 m1 b 超時重傳 m1 發(fā)送 m2 確認 m1 丟棄有差錯 的報文 (b) 超時重傳 tttt 課件制作人:謝希仁 請注意 n在發(fā)送完一個分組后,必須暫時保留已 發(fā)送的分組的副本。 n分組和確認分組都必須進行編號。 n超時計時器的重傳時間應當比數據在分 組傳輸的平均往返時間更長一些。 課件制作人:謝希仁 確認丟失和確認遲到 a 發(fā)送 m1 b 超時 重傳 m1 發(fā)送 m2 丟棄 重復的 m1 重傳確認 m1 (a) 確

22、認丟失 確認 m1 a 發(fā)送 m1 b 超時 重傳 m1 發(fā)送 m2 丟棄 重復的 m1 重傳確認m1 (b) 確認遲到 確認 m1 收下遲到 的確認 但什么也不做 tttt 課件制作人:謝希仁 可靠通信的實現 n使用上述的確認和重傳機制,我們就可 以在不可靠的傳輸網絡上實現可靠的通 信。 n這種可靠傳輸協議常稱為自動重傳請求 arq (automatic repeat request)。 narq 表明重傳的請求是自動進行的。接 收方不需要請求發(fā)送方重傳某個出錯的 分組 。 課件制作人:謝希仁 信道利用率 n停止等待協議的優(yōu)點是簡單,但缺點是 信道利用率太低。 tdrtt a td + rt

23、t + ta b 分組 確認 t t 分組 確認 課件制作人:謝希仁 信道的利用率 u ad d tt t u rtt (5-3) 課件制作人:謝希仁 流水線傳輸 n發(fā)送方可連續(xù)發(fā)送多個分組,不必每發(fā)完一個分 組就停頓下來等待對方的確認。 n由于信道上一直有數據不間斷地傳送,這種傳輸 方式可獲得很高的信道利用率。 b 分組 t t a ack 課件制作人:謝希仁 5.4.2 連續(xù) arq 協議 123456789101112 (a) 發(fā)送方維持發(fā)送窗口(發(fā)送窗口是 5) 發(fā)送窗口 (b) 收到一個確認后發(fā)送窗口向前滑動 向前 123456789101112 發(fā)送窗口 課件制作人:謝希仁 累積確

24、認 n接收方一般采用累積確認的方式。即不 必對收到的分組逐個發(fā)送確認,而是對 按序到達的最后一個分組發(fā)送確認,這 樣就表示:到這個分組為止的所有分組 都已正確收到了。 n累積確認有的優(yōu)點是:容易實現,即使 確認丟失也不必重傳。缺點是:不能向 發(fā)送方反映出接收方已經正確收到的所 有分組的信息。 課件制作人:謝希仁 go-back-n(回退 n) n如果發(fā)送方發(fā)送了前 5 個分組,而中間 的第 3 個分組丟失了。這時接收方只能 對前兩個分組發(fā)出確認。發(fā)送方無法知 道后面三個分組的下落,而只好把后面 的三個分組都再重傳一次。 n這就叫做 go-back-n(回退 n),表示 需要再退回來重傳已發(fā)送過

25、的 n 個分組。 n可見當通信線路質量不好時,連續(xù) arq 協議會帶來負面的影響。 課件制作人:謝希仁 tcp 可靠通信的具體實現 ntcp 連接的每一端都必須設有兩個窗 口一個發(fā)送窗口和一個接收窗口。 n tcp 的可靠傳輸機制用字節(jié)的序號進行 控制。tcp 所有的確認都是基于序號而 不是基于報文段。 n tcp 兩端的四個窗口經常處于動態(tài)變化 之中。 ntcp連接的往返時間 rtt 也不是固定不 變的。需要使用特定的算法估算較為合 理的重傳時間。 tcp 首部 20 字節(jié)的 固定首部 目 的 端 口 數據 偏移 檢 驗 和 選 項 (長 度 可 變) 源 端 口 序 號 緊 急 指 針 窗

26、 口 確 認 號 保 留 f i n 32 位 s y n r s t p s h a c k u r g 位 0 8 16 24 31 填 充 tcp 數據部分tcp 首部 tcp 報文段 ip 數據部分ip 首部 發(fā)送在前 5.5 tcp 報文段的首部格式 tcp 首部 20 字節(jié) 固定 首部 目 的 端 口 數據 偏移 檢 驗 和 選 項 (長 度 可 變 ) 源 端 口 序 號 緊 急 指 針 窗 口 確 認 號 保 留 f i n s y n r s t p s h a c k u r g 位 0 8 16 24 31 填 充 源端口和目的端口字段各占 2 字節(jié)。端口是運輸 層與應用

27、層的服務接口。運輸層的復用和分用功能都 要通過端口才能實現。 tcp 首部 20 字節(jié) 固定 首部 目 的 端 口 數據 偏移 檢 驗 和 選 項 (長 度 可 變 ) 源 端 口 序 號 緊 急 指 針 窗 口 確 認 號 保 留 f i n s y n r s t p s h a c k u r g 位 0 8 16 24 31 填 充 序號字段占 4 字節(jié)。tcp 連接中傳送的數據流 中的每一個字節(jié)都編上一個序號。序號字段的值則指 的是本報文段所發(fā)送的數據的第一個字節(jié)的序號。 tcp 首部 20 字節(jié) 固定 首部 目 的 端 口 數據 偏移 檢 驗 和 選 項 (長 度 可 變 ) 源

28、端 口 序 號 緊 急 指 針 窗 口 確 認 號 保 留 f i n s y n r s t p s h a c k u r g 位 0 8 16 24 31 填 充 確認號字段占 4 字節(jié),是期望收到對方的下一個 報文段的數據的第一個字節(jié)的序號。 tcp 首部 20 字節(jié) 固定 首部 目 的 端 口 數據 偏移 檢 驗 和 選 項 (長 度 可 變 ) 源 端 口 序 號 緊 急 指 針 窗 口 確 認 號 保 留 f i n s y n r s t p s h a c k u r g 位 0 8 16 24 31 填 充 數據偏移(即首部長度)占 4 位,它指出 tcp 報文 段的數據起

29、始處距離 tcp 報文段的起始處有多遠?!皵?據偏移”的單位是 32 位字(以 4 字節(jié)為計算單位)。 tcp 首部 20 字節(jié) 固定 首部 目 的 端 口 數據 偏移 檢 驗 和 選 項 (長 度 可 變 ) 源 端 口 序 號 緊 急 指 針 窗 口 確 認 號 保 留 f i n s y n r s t p s h a c k u r g 位 0 8 16 24 31 填 充 保留字段占 6 位,保留為今后使用,但目前 應置為 0。 tcp 首部 20 字節(jié) 固定 首部 目 的 端 口 數據 偏移 檢 驗 和 選 項 (長 度 可 變 ) 源 端 口 序 號 緊 急 指 針 窗 口 確

30、認 號 保 留 f i n s y n r s t p s h a c k u r g 位 0 8 16 24 31 填 充 緊急 urg 當 urg 1 時,表明緊急指針字 段有效。它告訴系統此報文段中有緊急數據,應盡 快傳送(相當于高優(yōu)先級的數據)。 tcp 首部 20 字節(jié) 固定 首部 目 的 端 口 數據 偏移 檢 驗 和 選 項 (長 度 可 變 ) 源 端 口 序 號 緊 急 指 針 窗 口 確 認 號 保 留 f i n s y n r s t p s h a c k u r g 位 0 8 16 24 31 填 充 確認 ack 只有當 ack 1 時確認號字段才 有效。當 a

31、ck 0 時,確認號無效。 tcp 首部 20 字節(jié) 固定 首部 目 的 端 口 數據 偏移 檢 驗 和 選 項 (長 度 可 變 ) 源 端 口 序 號 緊 急 指 針 窗 口 確 認 號 保 留 f i n s y n r s t p s h a c k u r g 位 0 8 16 24 31 填 充 推送 psh (push) 接收 tcp 收到 psh = 1 的報 文段,就盡快地交付接收應用進程,而不再等到整個 緩存都填滿了后再向上交付。 tcp 首部 20 字節(jié) 固定 首部 目 的 端 口 數據 偏移 檢 驗 和 選 項 (長 度 可 變 ) 源 端 口 序 號 緊 急 指 針

32、窗 口 確 認 號 保 留 f i n s y n r s t p s h a c k u r g 位 0 8 16 24 31 填 充 復位 rst (reset) 當 rst 1 時,表明 tcp 連 接中出現嚴重差錯(如由于主機崩潰或其他原因),必 須釋放連接,然后再重新建立運輸連接。 tcp 首部 20 字節(jié) 固定 首部 目 的 端 口 數據 偏移 檢 驗 和 選 項 (長 度 可 變 ) 源 端 口 序 號 緊 急 指 針 窗 口 確 認 號 保 留 f i n s y n r s t p s h a c k u r g 位 0 8 16 24 31 填 充 同步 syn 同步 sy

33、n = 1 表示這是一個連接請 求或連接接受報文。 tcp 首部 20 字節(jié) 固定 首部 目 的 端 口 數據 偏移 檢 驗 和 選 項 (長 度 可 變 ) 源 端 口 序 號 緊 急 指 針 窗 口 確 認 號 保 留 f i n s y n r s t p s h a c k u r g 位 0 8 16 24 31 填 充 終止 fin (finis) 用來釋放一個連接。fin 1 表明此報文段的發(fā)送端的數據已發(fā)送完畢,并要求釋 放運輸連接。 tcp 首部 20 字節(jié) 固定 首部 目 的 端 口 數據 偏移 檢 驗 和 選 項 (長 度 可 變 ) 源 端 口 序 號 緊 急 指 針

34、窗 口 確 認 號 保 留 f i n s y n r s t p s h a c k u r g 位 0 8 16 24 31 填 充 窗口字段 占 2 字節(jié),用來讓對方設置發(fā)送窗口的 依據,單位為字節(jié)。 tcp 首部 20 字節(jié) 固定 首部 目 的 端 口 數據 偏移 檢 驗 和 選 項 (長 度 可 變 ) 源 端 口 序 號 緊 急 指 針 窗 口 確 認 號 保 留 f i n s y n r s t p s h a c k u r g 位 0 8 16 24 31 填 充 檢驗和 占 2 字節(jié)。檢驗和字段檢驗的范圍包括 首部和數據這兩部分。在計算檢驗和時,要在 tcp 報文段的前面

35、加上 12 字節(jié)的偽首部。 tcp 首部 20 字節(jié) 固定 首部 目 的 端 口 數據 偏移 檢 驗 和 選 項 (長 度 可 變 ) 源 端 口 序 號 緊 急 指 針 窗 口 確 認 號 保 留 f i n s y n r s t p s h a c k u r g 位 0 8 16 24 31 填 充 緊急指針字段 占 16 位,指出在本報文段中緊 急數據共有多少個字節(jié)(緊急數據放在本報文段數 據的最前面)。 tcp 首部 20 字節(jié) 固定 首部 目 的 端 口 數據 偏移 檢 驗 和 選 項 (長 度 可 變 ) 源 端 口 序 號 緊 急 指 針 窗 口 確 認 號 保 留 f i

36、n s y n r s t p s h a c k u r g 比特 0 8 16 24 31 填 充 選項字段 長度可變。tcp 最初只規(guī)定了一種選 項,即最大報文段長度 mss。mss 告訴對方 tcp: “我的緩存所能接收的報文段的數據字段的最大長 度是 mss 個字節(jié)?!?mss (maximum segment size) 是 tcp 報文段中的數據字段的最大長度。 數據字段加上 tcp 首部 才等于整個的 tcp 報文段。 課件制作人:謝希仁 其他選項 n窗口擴大選項 占 3 字節(jié),其中有一個字 節(jié)表示移位值 s。新的窗口值等于tcp 首部中 的窗口位數增大到(16 + s),相當

37、于把窗口值 向左移動 s 位后獲得實際的窗口大小。 n時間戳選項占10 字節(jié),其中最主要的字 段時間戳值字段(4 字節(jié))和時間戳回送回答 字段(4 字節(jié))。 n選擇確認選項在后面的 5.6.3 節(jié)介紹。 tcp 首部 20 字節(jié) 固定 首部 目 的 端 口 數據 偏移 檢 驗 和 選 項 (長 度 可 變 ) 源 端 口 序 號 緊 急 指 針 窗 口 確 認 號 保 留 f i n s y n r s t p s h a c k u r g 位 0 8 16 24 31 填 充 填充字段 這是為了使整個首部長度是 4 字節(jié)的 整數倍。 課件制作人:謝希仁 5.6 tcp 可靠傳輸的實現 5.

38、6.1 以字節(jié)為單位的滑動窗口 前移 不允許發(fā)送 已發(fā)送并 收到確認 a 的發(fā)送窗口 = 20 允許發(fā)送的序號 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 b 期望 收到的序號 前沿后沿 前移收縮 根據 b 給出的窗口值 a 構造出自己的發(fā)送窗口 tcp 標準強烈不贊成 發(fā)送窗口前沿向后收縮 不允許發(fā)送已發(fā)送并 收到確認 a 的發(fā)送窗口位置不變 允許發(fā)送但尚未發(fā)送 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

39、41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 已發(fā)送但未收到確認 56 p1p2p3 不允許接收已發(fā)送確認 并交付主機 b 的接收窗口 允許接收 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 未按序收到 可用窗口 a 發(fā)送了 11 個字節(jié)的數據 p3 p1 = a 的發(fā)送窗口(又稱為通知窗口) p2 p1 = 已發(fā)送但尚未收到確認的字節(jié)數 p3 p2 = 允許發(fā)送但尚未發(fā)送的字節(jié)數(又稱為可用窗口) 允許發(fā)送但尚

40、未發(fā)送 a 的發(fā)送窗口向前滑動 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 已發(fā)送并收到確認 不允許 發(fā)送 已發(fā)送 但未收到確認 56 p1p2p3 允許接收 b 的接收窗口向前滑動 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 已發(fā)送確認 并交付主機 不允許 接收 56 未按序收到 a 收到新的確認號,發(fā)送窗口向前滑動 先存下

41、,等待缺少的 數據的到達 不允許 發(fā)送 已發(fā)送并收到確認 a 的發(fā)送窗口已滿,有效窗口為零 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 已發(fā)送但未收到確認 56 p1p2 p3 a 的發(fā)送窗口內的序號都已用完, 但還沒有再收到確認,必須停止發(fā)送。 課件制作人:謝希仁 發(fā)送緩存 最后被確認 的字節(jié) 發(fā)送應用程序 發(fā)送緩存 最后發(fā)送 的字節(jié) 發(fā)送窗口 tcp 序號增大 課件制作人:謝希仁 接收緩存 接收應用程序 已收到 接收窗口 tcp 接收緩存 下一個讀取 的字

42、節(jié) 序號增大 下一個期望收到的 字節(jié)(確認號) 課件制作人:謝希仁 發(fā)送緩存與接收緩存的作用 n發(fā)送緩存用來暫時存放: n 發(fā)送應用程序傳送給發(fā)送方 tcp 準備發(fā)送 的數據; n tcp 已發(fā)送出但尚未收到確認的數據。 n接收緩存用來暫時存放: n 按序到達的、但尚未被接收應用程序讀取 的數據; n 不按序到達的數據。 課件制作人:謝希仁 需要強調三點 na 的發(fā)送窗口并不總是和 b 的接收窗口一樣大 (因為有一定的時間滯后)。 ntcp 標準沒有規(guī)定對不按序到達的數據應如何 處理。通常是先臨時存放在接收窗口中,等到 字節(jié)流中所缺少的字節(jié)收到后,再按序交付上 層的應用進程。 ntcp 要求接

43、收方必須有累積確認的功能,這樣 可以減小傳輸開銷。 課件制作人:謝希仁 5.6.2 超時重傳時間的選擇 n重傳機制是 tcp 中最重要和最復雜的問 題之一。 ntcp 每發(fā)送一個報文段,就對這個報文 段設置一次計時器。只要計時器設置的 重傳時間到但還沒有收到確認,就要重 傳這一報文段。 課件制作人:謝希仁 往返時延的方差很大 n由于 tcp 的下層是一個互聯網環(huán)境,ip 數據 報所選擇的路由變化很大。因而運輸層的往返 時間的方差也很大。 時間 數據鏈路層 運輸層 t1t2t3 往返時間的 概率分布 課件制作人:謝希仁 加權平均往返時間 ntcp 保留了 rtt 的一個加權平均往返時間 rtts

44、(這 又稱為平滑的往返時間)。 n第一次測量到 rtt 樣本時,rtts 值就取為所測量到 的 rtt 樣本值。以后每測量到一個新的 rtt 樣本, 就按下式重新計算一次 rtts: 新的 rtts (1 ) (舊的 rtts) (新的 rtt 樣本) (5-4) n式中,0 1。若 很接近于零,表示 rtt 值更新 較慢。若選擇 接近于 1,則表示 rtt 值更新較快。 nrfc 2988 推薦的 值為 1/8,即 0.125。 課件制作人:謝希仁 超時重傳時間 rto (retransmissiontime-out) nrto 應略大于上面得出的加權平均往返時間 rtts。 nrfc 29

45、88 建議使用下式計算 rto: n rto rtts + 4 rttd (5-5) nrttd 是 rtt 的偏差的加權平均值。 nrfc 2988 建議這樣計算 rttd。第一次測量時, rttd 值取為測量到的 rtt 樣本值的一半。在以后的 測量中,則使用下式計算加權平均的 rttd: 新的 rttd = (1 ) (舊的rttd) + rtts 新的 rtt 樣本 (5-6) n 是個小于 1 的系數,其推薦值是 1/4,即 0.25。 課件制作人:謝希仁 往返時間 rtt? 往返時間的測量相當復雜 ntcp 報文段 1 沒有收到確認。重傳(即報文 段 2)后,收到了確認報文段 ac

46、k。 n如何判定此確認報文段是對原來的報文段 1 的 確認,還是對重傳的報文段 2 的確認? 發(fā)送一個 tcp 報文段 超時重傳 tcp 報文段 收到 ack 時間12 往返時間 rtt? 是對哪一個報文段 的確認? 課件制作人:謝希仁 karn 算法 n在計算平均往返時間 rtt 時,只要報文 段重傳了,就不采用其往返時間樣本。 n這樣得出的加權平均平均往返時間 rtts 和超時重傳時間 rto 就較準確。 課件制作人:謝希仁 n報文段每重傳一次,就把 rto 增大一些: 新的 rto (舊的 rto) n系數 的典型值是 2 。 n當不再發(fā)生報文段的重傳時,才根據報文段的往返 時延更新平均

47、往返時延 rtt 和超時重傳時間 rto 的數值。 n實踐證明,這種策略較為合理。 修正的 karn 算法 課件制作人:謝希仁 5.6.3 選擇確認 sack (selective ack) n接收方收到了和前面的字節(jié)流不連續(xù)的 兩個字節(jié)塊。 n如果這些字節(jié)的序號都在接收窗口之內, 那么接收方就先收下這些數據,但要把 這些信息準確地告訴發(fā)送方,使發(fā)送方 不要再重復發(fā)送這些已收到的數據。 課件制作人:謝希仁 1 1000 1501 3000 3501 4500 確認號 = 1001l1 = 1501l2 = 3501r1 = 3001r1 = 4501 接收到的字節(jié)流序號不連續(xù) 連續(xù)的字節(jié)流 第

48、一個字節(jié)塊第二個字節(jié)塊 和前后字節(jié)不連續(xù)的每一個字節(jié)塊都有兩個邊界: 左邊界和右邊界。圖中用四個指針標記這些邊界。 第一個字節(jié)塊的左邊界 l1 = 1501,但右邊界 r1 = 3001。 左邊界指出字節(jié)塊的第一個字節(jié)的序號,但右邊界減 1 才是 字節(jié)塊中的最后一個序號。 第二個字節(jié)塊的左邊界 l2 = 3501,而右邊界 r2 = 4501。 課件制作人:謝希仁 rfc 2018 的規(guī)定 n如果要使用選擇確認,那么在建立 tcp 連接時,就要 在 tcp 首部的選項中加上“允許 sack”的選項,而 雙方必須都事先商定好。 n如果使用選擇確認,那么原來首部中的“確認號字段” 的用法仍然不變。

49、只是以后在 tcp 報文段的首部中都 增加了 sack 選項,以便報告收到的不連續(xù)的字節(jié)塊 的邊界。 n由于首部選項的長度最多只有 40 字節(jié),而指明一個邊 界就要用掉 4 字節(jié),因此在選項中最多只能指明 4 個 字節(jié)塊的邊界信息。 課件制作人:謝希仁 5.7 tcp 的流量控制 5.7.1 利用滑動窗口實現流量控制 n一般說來,我們總是希望數據傳輸得更 快一些。但如果發(fā)送方把數據發(fā)送得過 快,接收方就可能來不及接收,這就會 造成數據的丟失。 n流量控制(flow control)就是讓發(fā)送方的發(fā) 送速率不要太快,既要讓接收方來得及 接收,也不要使網絡發(fā)生擁塞。 n利用滑動窗口機制可以很方便地

50、在 tcp 連接上實現流量控制。 seq = 1, data seq = 201, data seq = 401, data seq = 301, data seq = 101, data seq = 201, data seq = 501, data ack = 1, ack = 201, rwnd = 300 ack = 1, ack = 601, rwnd = 0 ack = 1, ack = 501, rwnd = 100 ab 允許 a 發(fā)送序號 201 至 500 共 300 字節(jié) a 發(fā)送了序號 101 至 200,還能發(fā)送 200 字節(jié) a 發(fā)送了序號 301 至 400,還能

51、再發(fā)送 100 字節(jié)新數據 a 發(fā)送了序號 1 至 100,還能發(fā)送 300 字節(jié) a 發(fā)送了序號 401 至 500,不能再發(fā)送新數據了 a 超時重傳舊的數據,但不能發(fā)送新的數據 允許 a 發(fā)送序號 501 至 600 共 100 字節(jié) a 發(fā)送了序號 501 至 600,不能再發(fā)送了 不允許 a 再發(fā)送(到序號 600 為止的數據都收到了) 丟失! 流量控制舉例 a 向 b 發(fā)送數據。在連接建立時, b 告訴 a:“我的接收窗口 rwnd = 400(字節(jié))”。 課件制作人:謝希仁 持續(xù)計時器 (persistence timer)。 ntcp 為每一個連接設有一個持續(xù)計時器。 n只要 t

52、cp 連接的一方收到對方的零窗口通知, 就啟動持續(xù)計時器。 n若持續(xù)計時器設置的時間到期,就發(fā)送一個零 窗口探測報文段(僅攜帶 1 字節(jié)的數據),而 對方就在確認這個探測報文段時給出了現在的 窗口值。 n若窗口仍然是零,則收到這個報文段的一方就 重新設置持續(xù)計時器。 n若窗口不是零,則死鎖的僵局就可以打破了。 課件制作人:謝希仁 5.7.2 必須考慮傳輸效率 n可以用不同的機制來控制 tcp 報文段的發(fā)送 時機: n第一種機制是 tcp 維持一個變量,它等于最 大報文段長度 mss。只要緩存中存放的數據 達到 mss 字節(jié)時,就組裝成一個 tcp 報文段 發(fā)送出去。 n第二種機制是由發(fā)送方的應

53、用進程指明要求發(fā) 送報文段,即 tcp 支持的推送(push)操作。 n第三種機制是發(fā)送方的一個計時器期限到了, 這時就把當前已有的緩存數據裝入報文段(但 長度不能超過 mss)發(fā)送出去。 課件制作人:謝希仁 5.8 tcp的擁塞控制 5.8.1 擁塞控制的一般原理 n在某段時間,若對網絡中某資源的需求超過了 該資源所能提供的可用部分,網絡的性能就要 變壞產生擁塞(congestion)。 n出現資源擁塞的條件: 對資源需求的總和 可用資源 (5-7) n若網絡中有許多資源同時產生擁塞,網絡的性 能就要明顯變壞,整個網絡的吞吐量將隨輸入 負荷的增大而下降。 課件制作人:謝希仁 擁塞控制與流量控

54、制的關系 n擁塞控制所要做的都有一個前提,就是網絡能夠 承受現有的網絡負荷。 n擁塞控制是一個全局性的過程,涉及到所有的主 機、所有的路由器,以及與降低網絡傳輸性能有 關的所有因素。 n流量控制往往指在給定的發(fā)送端和接收端之間的 點對點通信量的控制。 n流量控制所要做的就是抑制發(fā)送端發(fā)送數據的速 率,以便使接收端來得及接收。 課件制作人:謝希仁 擁塞控制所起的作用 提供的負載 吞吐量 理想的擁塞控制 實際的擁塞控制 0 死鎖(吞吐量 = 0) 無擁塞控制 擁塞 輕度 擁塞 課件制作人:謝希仁 擁塞控制的一般原理 n擁塞控制是很難設計的,因為它是一個動 態(tài)的(而不是靜態(tài)的)問題。 n當前網絡正朝

55、著高速化的方向發(fā)展,這很 容易出現緩存不夠大而造成分組的丟失。 但分組的丟失是網絡發(fā)生擁塞的征兆而不 是原因。 n在許多情況下,甚至正是擁塞控制本身成 為引起網絡性能惡化甚至發(fā)生死鎖的原因。 這點應特別引起重視。 課件制作人:謝希仁 開環(huán)控制和閉環(huán)控制 n開環(huán)控制方法就是在設計網絡時事先將有 關發(fā)生擁塞的因素考慮周到,力求網絡在 工作時不產生擁塞。 n閉環(huán)控制是基于反饋環(huán)路的概念。屬于閉 環(huán)控制的有以下幾種措施: n監(jiān)測網絡系統以便檢測到擁塞在何時、何處發(fā) 生。 n將擁塞發(fā)生的信息傳送到可采取行動的地方。 n調整網絡系統的運行以解決出現的問題。 課件制作人:謝希仁 5.8.2 幾種擁塞控制方法

56、 1. 慢開始和擁塞避免 n發(fā)送方維持一個叫做擁塞窗口 cwnd (congestion window)的狀態(tài)變量。擁塞窗口的大小取決于網 絡的擁塞程度,并且動態(tài)地在變化。發(fā)送方讓自 己的發(fā)送窗口等于擁塞窗口。如再考慮到接收方 的接收能力,則發(fā)送窗口還可能小于擁塞窗口。 n發(fā)送方控制擁塞窗口的原則是:只要網絡沒有出 現擁塞,擁塞窗口就再增大一些,以便把更多的 分組發(fā)送出去。但只要網絡出現擁塞,擁塞窗口 就減小一些,以減少注入到網絡中的分組數。 課件制作人:謝希仁 慢開始算法的原理 n在主機剛剛開始發(fā)送報文段時可先設置擁塞窗 口 cwnd = 1,即設置為一個最大報文段 mss 的數值。 n在每

57、收到一個對新的報文段的確認后,將擁塞 窗口加 1,即增加一個 mss 的數值。 n用這樣的方法逐步增大發(fā)送端的擁塞窗口 cwnd,可以使分組注入到網絡的速率更加合理。 發(fā)送方接收方 發(fā)送 m1 確認 m1 發(fā)送 m2m3 確認 m2m3 發(fā)送 m4m7 確認 m4m7 cwnd = 1 cwnd = 2 cwnd = 4 發(fā)送 m8m15cwnd = 8 tt 發(fā)送方每收到一個對新報文段的確認 (重傳的不算在內)就使 cwnd 加 1。 輪次 1 輪次 2 輪次 3 課件制作人:謝希仁 傳輸輪次 (transmission round) n使用慢開始算法后,每經過一個傳輸輪次,擁塞窗口 cwn

58、d 就加倍。 n一個傳輸輪次所經歷的時間其實就是往返時間 rtt。 n“傳輸輪次”更加強調:把擁塞窗口 cwnd 所允許發(fā) 送的報文段都連續(xù)發(fā)送出去,并收到了對已發(fā)送的最 后一個字節(jié)的確認。 n例如,擁塞窗口 cwnd = 4,這時的往返時間 rtt 就 是發(fā)送方連續(xù)發(fā)送 4 個報文段,并收到這 4 個報文段 的確認,總共經歷的時間。 課件制作人:謝希仁 設置慢開始門限狀態(tài)變量 ssthresh n慢開始門限 ssthresh 的用法如下: n當 cwnd ssthresh 時,停止使用慢開始算法而改用 擁塞避免算法。 n當 cwnd = ssthresh 時,既可使用慢開始算法,也可 使用擁

59、塞避免算法。 n擁塞避免算法的思路是讓擁塞窗口 cwnd 緩慢地增大, 即每經過一個往返時間 rtt 就把發(fā)送方的擁塞窗口 cwnd 加 1,而不是加倍,使擁塞窗口 cwnd 按線性規(guī) 律緩慢增長。 課件制作人:謝希仁 當網絡出現擁塞時 n無論在慢開始階段還是在擁塞避免階段,只要 發(fā)送方判斷網絡出現擁塞(其根據就是沒有按 時收到確認),就要把慢開始門限 ssthresh 設 置為出現擁塞時的發(fā)送方窗口值的一半(但不 能小于2)。 n然后把擁塞窗口 cwnd 重新設置為 1,執(zhí)行慢 開始算法。 n這樣做的目的就是要迅速減少主機發(fā)送到網絡 中的分組數,使得發(fā)生擁塞的路由器有足夠時 間把隊列中積壓的

60、分組處理完畢。 22 16 慢開始和擁塞避免算法的實現舉例 當 tcp 連接進行初始化時,將擁塞窗口置為 1。圖中 的窗口單位不使用字節(jié)而使用報文段。 慢開始門限的初始值設置為 16 個報文段, 即 ssthresh = 16。 “乘法減小” 24681012141618200 0 4 8 12 20 24 擁塞窗口 cwnd 新的 ssthresh 值 網絡擁塞 指數規(guī)律增長 ssthresh 的初始值 慢開始 慢開始 慢開始 擁塞避免 “加法增大” 擁塞避免 “加法增大” 傳輸輪次 慢開始和擁塞避免算法的實現舉例 發(fā)送端的發(fā)送窗口不能超過擁塞窗口 cwnd 和接收端 窗口 rwnd 中的最

溫馨提示

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

評論

0/150

提交評論