计算机网络第五章:运输层
生活随笔
收集整理的這篇文章主要介紹了
计算机网络第五章:运输层
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
目錄
- 1 運輸層協(xié)議概述
- 1.1 進程之間的通信
- 1.2 運輸層的兩個主要協(xié)議
- 1.3 運輸層的端口
- 2 用戶數(shù)據(jù)報協(xié)議 UDP
- 2.1 UDP 概述
- 2.2 UDP 的首部格式
- 3 傳輸控制協(xié)議 TCP 概述
- 3.1 TCP 最主要的特點
- 3.2 TCP 的連接
- 4 可靠傳輸?shù)墓ぷ髟?/li>
- 4.1 停止等待協(xié)議
- 4.2 連續(xù) ARQ 協(xié)議
- 5 TCP 報文段的首部格式
- 6 TCP 可靠傳輸?shù)膶崿F(xiàn)
- 6.1 以字節(jié)為單位的滑動窗口
- 7 TCP 的流量控制
- 7.1 利用滑動窗口實現(xiàn)流量控制
- 7.2 必須考慮傳輸效率
- 8 TCP的擁塞控制
- 8.1 擁塞控制的一般原理
- 8.2 幾種擁塞控制方法
- 8.2.1 慢開始和擁塞避免
1 運輸層協(xié)議概述
1.1 進程之間的通信
- 從通信和信息處理的角度看,運輸層向它上面的應(yīng)用層提供通信服務(wù),它屬于面向通信部分的最高層,同時也是用戶功能中的最低層
- 當網(wǎng)絡(luò)的邊緣部分中的兩個主機使用網(wǎng)絡(luò)的核心部分的功能進行端到端的通信時,只有位于網(wǎng)絡(luò)邊緣部分的主機的協(xié)議棧才有運輸層,而網(wǎng)絡(luò)核心部分中的路由器在轉(zhuǎn)發(fā)分組時都只用到下三層的功能
- 運輸層為相互通信的應(yīng)用進程提供了邏輯通信
- 兩個主機進行通信實際上就是兩個主機中的應(yīng)用進程互相通信
- 應(yīng)用進程之間的通信又稱為端到端的通信
- 運輸層的一個很重要的功能就是復(fù)用和分用。應(yīng)用層不同進程的報文通過不同的端口向下交到運輸層,再往下就共用網(wǎng)絡(luò)層提供的服務(wù)
- “運輸層提供應(yīng)用進程間的邏輯通信”。“邏輯通信”的意思是:運輸層之間的通信好像是沿水平方向傳送數(shù)據(jù)。但事實上這兩個運輸層之間并沒有一條水平方向的物理連接
- 運輸層協(xié)議和網(wǎng)絡(luò)層協(xié)議的主要區(qū)別
1.2 運輸層的兩個主要協(xié)議
TCP/IP 的運輸層有兩個不同的協(xié)議:
TCP 與 UDP:
- 兩個對等運輸實體在通信時傳送的數(shù)據(jù)單位叫作運輸協(xié)議數(shù)據(jù)單元 TPDU (Transport Protocol Data Unit)
- TCP 傳送的數(shù)據(jù)單位協(xié)議是 TCP 報文段(segment)
- UDP 傳送的數(shù)據(jù)單位協(xié)議是 UDP 報文或用戶數(shù)據(jù)報
TCP/IP 體系中的運輸層協(xié)議:
- UDP 在傳送數(shù)據(jù)之前不需要先建立連接。對方的運輸層在收到 UDP 報文后,不需要給出任何確認。雖然 UDP 不提供可靠交付,但在某些情況下 UDP 是一種最有效的工作方式
- TCP 則提供面向連接的服務(wù)。TCP 不提供廣播或多播服務(wù)。由于 TCP 要提供可靠的、面向連接的運輸服務(wù),因此不可避免地增加了許多的開銷。這不僅使協(xié)議數(shù)據(jù)單元的首部增大很多,還要占用許多的處理機資源
1.3 運輸層的端口
- 運行在計算機中的進程是用進程標識符來標志的
- 運行在應(yīng)用層的各種應(yīng)用進程卻不應(yīng)當讓計算機操作系統(tǒng)指派它的進程標識符。這是因為在因特網(wǎng)上使用的計算機的操作系統(tǒng)種類很多,而不同的操作系統(tǒng)又使用不同格式的進程標識符
- 為了使運行不同操作系統(tǒng)的計算機的應(yīng)用進程能夠互相通信,就必須用統(tǒng)一的方法對 TCP/IP 體系的應(yīng)用進程進行標志
需要解決的問題:
- 由于進程的創(chuàng)建和撤銷都是動態(tài)的,發(fā)送方幾乎無法識別其他機器上的進程
- 有時我們會改換接收報文的進程,但并不需要通知所有發(fā)送方
- 我們往往需要利用目的主機提供的功能來識別終點,而不需要知道實現(xiàn)這個功能的進程
端口號(protocol port number)簡稱為端口(port):
- 解決這個問題的方法就是在運輸層使用協(xié)議端口號(protocol port number),或通常簡稱為端口(port)
- 雖然通信的終點是應(yīng)用進程,但我們可以把端口想象是通信的終點,因為我們只要把要傳送的報文交到目的主機的某一個合適的目的端口,剩下的工作(即最后交付目的進程)就由 TCP 來完成
軟件端口與硬件端口:
- 在協(xié)議棧層間的抽象的協(xié)議端口是軟件端口
- 路由器或交換機上的端口是硬件端口
- 硬件端口是不同硬件設(shè)備進行交互的接口,而軟件端口是應(yīng)用層的各種協(xié)議進程與運輸實體進行層間交互的一種地址
TCP 的端口:
- 端口用一個 16 位端口號進行標志
- 端口號只具有本地意義,即端口號只是為了標志本計算機應(yīng)用層中的各進程。在因特網(wǎng)中不同計算機的相同端口號是沒有聯(lián)系的
三類端口:
- 熟知端口,數(shù)值一般為 0~1023
- 登記端口號,數(shù)值為1024~49151,為沒有熟知端口號的應(yīng)用程序使用的。使用這個范圍的端口號必須在 IANA 登記,以防止重復(fù)
- 客戶端口號或短暫端口號,數(shù)值為49152~65535,留給客戶進程選擇暫時使用。當服務(wù)器進程收到客戶進程的報文時,就知道了客戶進程所使用的動態(tài)端口號。通信結(jié)束后,這個端口號可供其他客戶進程以后使用
2 用戶數(shù)據(jù)報協(xié)議 UDP
2.1 UDP 概述
- UDP 只在 IP 的數(shù)據(jù)報服務(wù)之上增加了很少一點的功能,即端口的功能和差錯檢測的功能
- 雖然 UDP 用戶數(shù)據(jù)報只能提供不可靠的交付,但 UDP 在某些方面有其特殊的優(yōu)點
UDP 的主要特點:
- UDP 是無連接的,即發(fā)送數(shù)據(jù)之前不需要建立連接
- UDP 使用盡最大努力交付,即不保證可靠交付,同時也不使用擁塞控制
- UDP 是面向報文的。UDP 沒有擁塞控制,很適合多媒體通信的要求
- UDP 支持一對一、一對多、多對一和多對多的交互通信
- UDP 的首部開銷小,只有 8 個字節(jié)
面向報文的 UDP:
- 發(fā)送方 UDP 對應(yīng)用程序交下來的報文,在添加首部后就向下交付 IP 層。UDP 對應(yīng)用層交下來的報文,既不合并,也不拆分,而是保留這些報文的邊界
- 應(yīng)用層交給 UDP 多長的報文,UDP 就照樣發(fā)送,即一次發(fā)送一個報文
- 接收方 UDP 對 IP 層交上來的 UDP 用戶數(shù)據(jù)報,在去除首部后就原封不動地交付上層的應(yīng)用進程,一次交付一個完整的報文
- 應(yīng)用程序必須選擇合適大小的報文
2.2 UDP 的首部格式
3 傳輸控制協(xié)議 TCP 概述
3.1 TCP 最主要的特點
- TCP 是面向連接的運輸層協(xié)議
- 每一條 TCP 連接只能有兩個端點(endpoint),每一條 TCP 連接只能是點對點的(一對一)
- TCP 提供可靠交付的服務(wù)
- TCP 提供全雙工通信
- 面向字節(jié)流
TCP 面向流的概念:
應(yīng)當注意:
- TCP 連接是一條虛連接而不是一條真正的物理連接
- TCP 對應(yīng)用進程一次把多長的報文發(fā)送到TCP 的緩存中是不關(guān)心的
- TCP 根據(jù)對方給出的窗口值和當前網(wǎng)絡(luò)擁塞的程度來決定一個報文段應(yīng)包含多少個字節(jié)(UDP 發(fā)送的報文長度是應(yīng)用進程給出的)
- TCP 可把太長的數(shù)據(jù)塊劃分短一些再傳送。TCP 也可等待積累有足夠多的字節(jié)后再構(gòu)成報文段發(fā)送出去
3.2 TCP 的連接
- TCP 把連接作為最基本的抽象
- 每一條 TCP 連接有兩個端點
- TCP 連接的端點不是主機,不是主機的IP 地址,不是應(yīng)用進程,也不是運輸層的協(xié)議端口。TCP 連接的端點叫做套接字(socket)或插口
- 端口號拼接到(contatenated with) IP 地址即構(gòu)成了套接字
套接字 (socket):
4 可靠傳輸?shù)墓ぷ髟?/h1>
4.1 停止等待協(xié)議
注意:
- 在發(fā)送完一個分組后,必須暫時保留已發(fā)送的分組的副本
- 分組和確認分組都必須進行編號
- 超時計時器的重傳時間應(yīng)當比數(shù)據(jù)在分組傳輸?shù)钠骄禃r間更長一些
確認丟失和確認遲到:
可靠通信的實現(xiàn):
- 使用上述的確認和重傳機制,我們就可以在不可靠的傳輸網(wǎng)絡(luò)上實現(xiàn)可靠的通信
- 這種可靠傳輸協(xié)議常稱為自動重傳請求ARQ (Automatic Repeat reQuest)
- ARQ 表明重傳的請求是自動進行的。接收方不需要請求發(fā)送方重傳某個出錯的分組
停止等待協(xié)議的優(yōu)點是簡單,但缺點是信道利用率太低:
信道的利用率 U=TDTD+RTT+TAU=\frac{T_D}{T_D+RTT+T_A}U=TD?+RTT+TA?TD??
流水線傳輸:
- 發(fā)送方可連續(xù)發(fā)送多個分組,不必每發(fā)完一個分組就停頓下來等待對方的確認
- 由于信道上一直有數(shù)據(jù)不間斷地傳送,這種傳輸方式可獲得很高的信道利用率
4.2 連續(xù) ARQ 協(xié)議
累積確認:
- 接收方一般采用累積確認的方式。即不必對收到的分組逐個發(fā)送確認,而是對按序到達的最后一個分組發(fā)送確認,這樣就表示:到這個分組為止的所有分組都已正確收到了
- 累積確認有的優(yōu)點是:容易實現(xiàn),即使確認丟失也不必重傳。缺點是:不能向發(fā)送方反映出接收方已經(jīng)正確收到的所有分組的信息
Go-back-N(回退 N):
- 如果發(fā)送方發(fā)送了前 5 個分組,而中間的第 3 個分組丟失了。這時接收方只能對前兩個分組發(fā)出確認。發(fā)送方無法知道后面三個分組的下落,而只好把后面的三個分組都再重傳一次
- 這就叫做 Go-back-N(回退 N),表示需要再退回來重傳已發(fā)送過的 N 個分組
- 可見當通信線路質(zhì)量不好時,連續(xù) ARQ 協(xié)議會帶來負面的影響
TCP 可靠通信的具體實現(xiàn):
- TCP 連接的每一端都必須設(shè)有兩個窗口——一個發(fā)送窗口和一個接收窗口
- TCP 的可靠傳輸機制用字節(jié)的序號進行控制。TCP 所有的確認都是基于序號而不是基于報文段
- TCP 兩端的四個窗口經(jīng)常處于動態(tài)變化之中
- TCP連接的往返時間 RTT 也不是固定不變的。需要使用特定的算法估算較為合理的重傳時間
5 TCP 報文段的首部格式
- 源端口和目的端口字段——各占 2 字節(jié)。端口是運輸層與應(yīng)用層的服務(wù)接口。運輸層的復(fù)用和分用功能都要通過端口才能實現(xiàn)
- 序號字段——占 4 字節(jié)。TCP 連接中傳送的數(shù)據(jù)流中的每一個字節(jié)都編上一個序號。序號字段的值則指的是本報文段所發(fā)送的數(shù)據(jù)的第一個字節(jié)的序號
- 確認號字段——占 4 字節(jié),是期望收到對方的下一個報文段的數(shù)據(jù)的第一個字節(jié)的序號
- 數(shù)據(jù)偏移(即首部長度)——占 4 位,它指出 TCP 報文段的數(shù)據(jù)起始處距離 TCP 報文段的起始處有多遠。“數(shù)據(jù)偏移”的單位是 32 位字(以 4 字節(jié)為計算單位)
- 保留字段——占 6 位,保留為今后使用,但目前應(yīng)置為 0
- 緊急 URG —— 當 URG ? 1 時,表明緊急指針字段有效。它告訴系統(tǒng)此報文段中有緊急數(shù)據(jù),應(yīng)盡快傳送(相當于高優(yōu)先級的數(shù)據(jù))
- 確認 ACK —— 只有當 ACK ? 1 時確認號字段才有效。當 ACK ? 0 時,確認號無效
- 推送 PSH (PuSH) —— 接收 TCP 收到 PSH = 1 的報文段,就盡快地交付接收應(yīng)用進程,而不再等到整個緩存都填滿了后再向上交付
- 復(fù)位 RST (ReSeT) —— 當 RST ? 1 時,表明 TCP 連接中出現(xiàn)嚴重差錯(如由于主機崩潰或其他原因),必須釋放連接,然后再重新建立運輸連接
- 同步 SYN —— 同步 SYN = 1 表示這是一個連接請求或連接接受報文
- 終止 FIN (FINis) —— 用來釋放一個連接。FIN ? 1 表明此報文段的發(fā)送端的數(shù)據(jù)已發(fā)送完畢,并要求釋放運輸連接
- 窗口字段 —— 占 2 字節(jié),用來讓對方設(shè)置發(fā)送窗口的依據(jù),單位為字節(jié)
- 檢驗和 —— 占 2 字節(jié)。檢驗和字段檢驗的范圍包括首部和數(shù)據(jù)這兩部分。在計算檢驗和時,要在 TCP 報文段的前面加上 12 字節(jié)的偽首部
- 緊急指針字段 —— 占 16 位,指出在本報文段中緊急數(shù)據(jù)共有多少個字節(jié)(緊急數(shù)據(jù)放在本報文段數(shù)據(jù)的最前面)
- 選項字段 —— 長度可變。TCP 最初只規(guī)定了一種選項,即最大報文段長度 MSS。MSS 告訴對方 TCP:“我的緩存所能接收的報文段的數(shù)據(jù)字段的最大長度是 MSS 個字節(jié)。”
其他選項:
- 窗口擴大選項 ——占 3 字節(jié),其中有一個字節(jié)表示移位值 S。新的窗口值等于TCP 首部中的窗口位數(shù)增大到(16 + S),相當于把窗口值向左移動 S 位后獲得實際的窗口大小
- 時間戳選項——占10 字節(jié),其中最主要的字段時間戳值字段(4 字節(jié))和時間戳回送回答字段(4 字節(jié))
- 填充字段 —— 這是為了使整個首部長度是 4 字節(jié)的整數(shù)倍
6 TCP 可靠傳輸?shù)膶崿F(xiàn)
6.1 以字節(jié)為單位的滑動窗口
發(fā)送緩存:
接收緩存:
發(fā)送緩存與接收緩存的作用:
- 發(fā)送緩存用來暫時存放:發(fā)送應(yīng)用程序傳送給發(fā)送方 TCP 準備發(fā)送的數(shù)據(jù),TCP 已發(fā)送出但尚未收到確認的數(shù)據(jù)
- 接收緩存用來暫時存放:按序到達的、但尚未被接收應(yīng)用程序讀取的數(shù)據(jù),不按序到達的數(shù)據(jù)
注意:
- A 的發(fā)送窗口并不總是和 B 的接收窗口一樣大(因為有一定的時間滯后)
- TCP 標準沒有規(guī)定對不按序到達的數(shù)據(jù)應(yīng)如何處理。通常是先臨時存放在接收窗口中,等到字節(jié)流中所缺少的字節(jié)收到后,再按序交付上層的應(yīng)用進程
- TCP 要求接收方必須有累積確認的功能,這樣可以減小傳輸開銷
7 TCP 的流量控制
7.1 利用滑動窗口實現(xiàn)流量控制
- 一般說來,我們總是希望數(shù)據(jù)傳輸?shù)酶煲恍5绻l(fā)送方把數(shù)據(jù)發(fā)送得過快,接收方就可能來不及接收,這就會造成數(shù)據(jù)的丟失
- 流量控制(flow control)就是讓發(fā)送方的發(fā)送速率不要太快,既要讓接收方來得及接收,也不要使網(wǎng)絡(luò)發(fā)生擁塞
- 利用滑動窗口機制可以很方便地在 TCP 連接上實現(xiàn)流量控制
流量控制舉例:
持續(xù)計時器(persistence timer):
- TCP 為每一個連接設(shè)有一個持續(xù)計時器
- 只要 TCP 連接的一方收到對方的零窗口通知,就啟動持續(xù)計時器
- 若持續(xù)計時器設(shè)置的時間到期,就發(fā)送一個零窗口探測報文段(僅攜帶 1 字節(jié)的數(shù)據(jù)),而對方就在確認這個探測報文段時給出了現(xiàn)在的窗口值
- 若窗口仍然是零,則收到這個報文段的一方就重新設(shè)置持續(xù)計時器
- 若窗口不是零,則死鎖的僵局就可以打破了
7.2 必須考慮傳輸效率
- 可以用不同的機制來控制 TCP 報文段的發(fā)送時機
- 第一種機制是 TCP 維持一個變量,它等于最大報文段長度 MSS。只要緩存中存放的數(shù)據(jù)達到 MSS 字節(jié)時,就組裝成一個 TCP 報文段發(fā)送出去
- 第二種機制是由發(fā)送方的應(yīng)用進程指明要求發(fā)送報文段,即 TCP 支持的推送(push)操作
- 第三種機制是發(fā)送方的一個計時器期限到了,這時就把當前已有的緩存數(shù)據(jù)裝入報文段(但長度不能超過 MSS)發(fā)送出去
8 TCP的擁塞控制
8.1 擁塞控制的一般原理
- 在某段時間,若對網(wǎng)絡(luò)中某資源的需求超過了該資源所能提供的可用部分,網(wǎng)絡(luò)的性能就要變壞——產(chǎn)生擁塞(congestion)
- 出現(xiàn)資源擁塞的條件: 對資源需求的總和 > 可用資源
- 若網(wǎng)絡(luò)中有許多資源同時產(chǎn)生擁塞,網(wǎng)絡(luò)的性能就要明顯變壞,整個網(wǎng)絡(luò)的吞吐量將隨輸入負荷的增大而下降
擁塞控制與流量控制的關(guān)系:
- 擁塞控制所要做的都有一個前提,就是網(wǎng)絡(luò)能夠承受現(xiàn)有的網(wǎng)絡(luò)負荷
- 擁塞控制是一個全局性的過程,涉及到所有的主機、所有的路由器,以及與降低網(wǎng)絡(luò)傳輸性能有關(guān)的所有因素
- 流量控制往往指在給定的發(fā)送端和接收端之間的點對點通信量的控制
- 流量控制所要做的就是抑制發(fā)送端發(fā)送數(shù)據(jù)的速率,以便使接收端來得及接收
8.2 幾種擁塞控制方法
8.2.1 慢開始和擁塞避免
- 發(fā)送方維持一個叫做擁塞窗口 cwnd (congestion window)的狀態(tài)變量。擁塞窗口的大小取決于網(wǎng)絡(luò)的擁塞程度,并且動態(tài)地在變化。發(fā)送方讓自己的發(fā)送窗口等于擁塞窗口。如再考慮到接收方的接收能力,則發(fā)送窗口還可能小于擁塞窗口
- 發(fā)送方控制擁塞窗口的原則是:只要網(wǎng)絡(luò)沒有出現(xiàn)擁塞,擁塞窗口就再增大一些,以便把更多的分組發(fā)送出去。但只要網(wǎng)絡(luò)出現(xiàn)擁塞,擁塞窗口就減小一些,以減少注入到網(wǎng)絡(luò)中的分組數(shù)
慢開始算法的原理:
- 在主機剛剛開始發(fā)送報文段時可先設(shè)置擁塞窗口 cwnd = 1,即設(shè)置為一個最大報文段 MSS 的數(shù)值
- 在每收到一個對新的報文段的確認后,將擁塞窗口加 1,即增加一個 MSS 的數(shù)值
- 用這樣的方法逐步增大發(fā)送端的擁塞窗口 cwnd,可以使分組注入到網(wǎng)絡(luò)的速率更加合理
設(shè)置慢開始門限狀態(tài)變量ssthresh:
- 當 cwnd < ssthresh 時,使用慢開始算法
- 當 cwnd > ssthresh 時,停止使用慢開始算法而改用擁塞避免算法
- 當 cwnd = ssthresh 時,既可使用慢開始算法,也可使用擁塞避免算法
- 擁塞避免算法的思路是讓擁塞窗口 cwnd 緩慢地增大,即每經(jīng)過一個往返時間 RTT 就把發(fā)送方的擁塞窗口 cwnd 加 1,而不是加倍,使擁塞窗口 cwnd 按線性規(guī)律緩慢增長
總結(jié)
以上是生活随笔為你收集整理的计算机网络第五章:运输层的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言经典例100-将学生成绩写入文件
- 下一篇: 计算机网络第六章:应用层