為什么位于網絡邊緣的主機才有運輸層?
運輸層向應用層提供通信服務,屬于面向通信部分最高層,用戶功能中最低層。運輸層作用就是為相互通信的應用進程提供邏輯通信。對于應用進程的通信,通俗說法就是兩個主機進行通信,又稱為端對端的通信。邏輯通信的意思就是運輸層之間的通信可以看成水平之間的通信,沒有物理連接。
網絡邊緣部分的主機通過網絡的核心部分進行通信時,只有位于網絡邊緣部分的主機的協議棧才有運輸層,網絡核心部分沒有,只用到下三層:網絡層,數據鏈路層,物理層。
?
總的來說,運輸層有,2個主要功能:
1,為應用進程提供端對端的邏輯通信
2,對收到的報文差錯檢測
5.1.2 運輸層的兩個主要協議
先補充說明何為運輸協議數據單元TPDU:兩個對等傳輸實體通信時傳送的數據單位。
1,面向連接的TCP:傳輸控制協議
只提供最大努力的,可靠的,面向連接的服務,因此在TPDU的首部開銷較大,占用處理機資源多。邏輯信道相當全雙工可靠通道,不過信道不知經過哪些路由器,路由器也不知道運輸層是否建立連接。傳送的TPDU是TCP報文段。TCP不提供廣播,多播服務。
2,無連接的UDP:用戶數據報協議
傳送數據前不需要先建立連接,邏輯信道是不可靠信道。傳送的TPDU是UDP報文。一方運輸層收到UDP報文后不需要給對方任何確認。即便如此,有時候UDP是最有效工作方式。
5.1.3 運輸層的端口
主機如何判斷數據包屬于哪一個進程的?如網頁,還是QQ?用進程標識符。
而端口,可以想象成通信的終點。 端口是運輸層與應用層的服務接口。運輸層的復用和分用功能都要通過端口才能實現。
軟件端口:協議棧間的抽象的協議端口,應用層各種協議進程與運輸實體進行層間交互的一種地址。
硬件端口:路由器和交換機上端口,不同硬件設備間的交互接口。
TCP端口用16位端口號進行標識,端口號只具有本地意義,只是為了標志本計算機應用層中的各進程。
三類端口 :
1,熟知端口
2,登記端口號
3,客戶端口號/短暫端口號
5.2 用戶數據報協議UDP
5.2.1 UDP 概述
UDP在IP數據報中增加端口功能和差錯檢測功能,僅此而已。
主要特點:
n UDP 是無連接的,即發送數據之前不需要建立連接。
n UDP 使用盡最大努力交付,即不保證可靠交付,同時也不使用擁塞控制。
n UDP 是面向報文的。 UDP 沒有擁塞控制,很適合多媒體通信的要求。
n UDP 支持一對一、一對多、多對一和多對多的交互通信。
n UDP 的首部開銷小,只有 8 個字節。
?
5.2.2 UDP 的首部格式
?
在計算檢驗和時,臨時把“偽首部”和 UDP用戶數據報連接在一起。偽首部僅僅是為了計算檢驗和。
5.3 傳輸控制協議TCP 概述
5.3.1 TCP 最主要的特點
1,面向連接(虛連接)
2,每條TCP連接只有兩個端點,且點對點,一對一
3,提供可靠交付服務
4,提供全雙工服務
5,面向字節流
TCP 根據對方給出的窗口值和當前網絡擁塞的程度來決定一個報文段應包含多少個字節( UDP 發送的報文長度是應用進程給出的),所以 對應用進程一次把多長的報文發送到 TCP 的緩存中是不關心的,太長時,會劃分數據塊再發送。
5.3.2 TCP 的連接
TCP 連接的端點不是主機,不是主機的 IP 地址,不是應用進程,也不是運輸層的協議端口。 TCP 連接的端點叫做 套接字 (socket) 或 插口 。
端口號 拼接到 ( contatenated with) IP 地址即構成了套接字。
每一條 TCP 連接唯一地被通信兩端的兩個端點(即兩個套接字)所確定。
5.4 可靠傳輸的工作原理
5.4.1 停止等待協議
?
這種可靠傳輸協議常稱為 自動重傳請求 ARQ (Automatic Repeat reQuest ) 。
ARQ 表明重傳的請求是 自動 進行的。接收方不需要請求發送方重傳某個出錯的分組。
停止等待協議的優點是簡單,但缺點是信道利用率太低,利用流水線傳輸連續發送多個分組,可以提高信道利用率。
5.4.2 連續ARQ 協議
滑動窗口協議,圖(a)表示發送方維持的發送窗口。 發送方可 連續發送 5個分組,不必每發完一個分組就停頓下來等待對方的確認。
由于信道上一直有數據不間斷地傳送,這種傳輸方式可獲得很高的信道利用率。
?
接收方采用累積確認方式, 即不必對收到的分組逐個發送確認,而是對按序到達的最后一個分組發送確認,這樣就表示: 到這個分組為止的所有分組都已正確收到了 。
優點:容易實現,即使確認丟失也不必重傳。
缺點: 不能向發送方反映出接收方已經正確收到的所有分組的信息。
Go-back-N (回退 N ):需要再退回來重傳已發送過的N 個分組。
如發送方發送了前 5 個分組,而中間的第 3 個分組丟失了。這時接收方只能對前兩個分組發出確認。發送方無法知道后面三個分組的下落,而只好把后面的三個分組都再重傳一次。
TCP 可靠通信的具體實現 :
TCP連接每一端都有兩個窗口:發送,接收。這4個端口都是動態變化的。
TCP可靠傳輸機制用字節序號進行控制,所有確認都基于序號而非報文段。
TCP 連接的往返時間 RTT 也 不是固定不變的 。需要使用特定的算法估算較為合理的重傳時間。
5.5 TCP 報文段的首部格式
?
源端口和目的端口字段——各占 2 字節。端口是運輸層與應用層的服務接口。運輸層的復用和分用功能都要通過端口才能實現。
序號字段——占 4 字節。TCP 連接中傳送的數據流中的每一個字節都編上一個序號。序號字段的值則指的是本報文段所發送的數據的第一個字節的序號。
確認號字段——占 4 字節,是期望收到對方的下一個報文段的數據的第一個字節的序號。
數據偏移(即首部長度)——占 4 位,它指出 TCP報文段的數據起始處距離TCP報文段的起始處有多遠。“數據偏移”的單位是32 位字(以 4 字節為計算單位)。
檢驗和—— 占 2 字節。檢驗和字段檢驗的范圍包括首部和數據這兩部分。在計算檢驗和時,要在TCP報文段的前面加上12 字節的偽首部。
選項字段—— 長度可變。TCP最初只規定了一種選項,即最大報文段長度MSS。MSS 告訴對方 TCP:“我的緩存所能接收的報文段的數據字段的最大長度是 MSS個字節。”
MSS (MaximumSegment Size)是TCP 報文段中的數據字段的最大長度。數據字段加上TCP 首部才等于整個的TCP 報文段。
5.6 TCP 可靠傳輸的實現
5.6.1 以字節為單位的滑動窗口
5.6.2 超時重傳時間的選擇
5.6.3 選擇確認 SACK
5.7 TCP的流量控制
5.7.1 利用滑動窗口實現流量控制
流量控制 (flow control) 就是讓發送方的發送速率不要太快,既要讓接收方來得及接收,也不要使網絡發生擁塞。
TCP 為每一個連接設有一個 持續計時器 。
只要 TCP 連接的一方收到對方的 零窗口 通知,就啟動持續計時器。
若持續計時器設置的時間到期,就發送一個零窗口探測報文段(僅攜帶 1 字節的數據),而對方就在確認這個探測報文段時給出了現在的窗口值。
若窗口仍然是零,則收到這個報文段的一方就重新設置持續計時器。
若窗口不是零,則死鎖的僵局就可以打破了
5.7.1 必須考慮傳輸效率
若網絡中有許多資源同時產生擁塞,網絡的性能就要明顯變壞,整個網絡的吞吐量將隨輸入負荷的增大而下降。
擁塞控制 所要做的都有一個前提,就是網絡能夠承受現有的網絡負荷。
流量控制 往往指在給定的發送端和接收端之間的點對點通信量的控制。
流量控制所要做的就是抑制發送端發送數據的速率,以便使接收端來得及接收。
5.8 TCP 的擁塞控制
5.8.1 擁塞控制的一般原理:開環控制和閉環控制
5.8.2 幾種擁塞控制方法
1,慢開始和擁塞避免
發送方控制擁塞窗口的原則是:只要網絡沒有出現擁塞,擁塞窗口就再增大一些,以便把更多的分組發送出去。但只要網絡出現擁塞,擁塞窗口就減小一些,以減少注入到網絡中的分組數。
2. 快重傳和快恢復
5.9 TCP 的運輸連接管理
運輸連接3個階段:連接建立,數據傳送,連接釋放
5.9.1 TCP 的連接建立
TCP 連接的建立都是采用客戶服務器方式。
用三次握手建立 TCP 連接
?
5.9.2 TCP 的連接釋放
?
必須等待 2MSL 的時間
第一,為了保證 A 發送的最后一個 ACK 報文段能夠到達 B 。
第二,防止“已失效的連接請求報文段”出現在本連接中。 A 在發送完最后一個 ACK 報文段后,再經過時間 2MSL ,就可以使本連接持續的時間內所產生的所有報文段,都從網絡中消失。這樣就可以使下一個新的連接中不會出現這種舊的連接請求報文段。