計(jì)算機(jī)網(wǎng)絡(luò)-運(yùn)輸層
運(yùn)輸層協(xié)議概述
進(jìn)程間的通信
運(yùn)輸層向它上面的應(yīng)用層提供通信服務(wù)关带,它屬于面向通信部分的最高層,同時也是用戶功能中的最低層
通信的真正端點(diǎn)并不是主機(jī)而是主機(jī)中的進(jìn)程
網(wǎng)絡(luò)層和運(yùn)輸層的區(qū)別
運(yùn)輸層的兩個主要協(xié)議
- TCP 傳輸控制協(xié)議
- UDP 用戶數(shù)據(jù)報協(xié)議
UDP:一種無連接協(xié)議
提供無連接服務(wù)虚吟。
在傳送數(shù)據(jù)之前不需要先建立連接邀摆。
傳送的數(shù)據(jù)單位協(xié)議是 UDP 報文或用戶數(shù)據(jù)報羔挡。
對方的運(yùn)輸層在收到 UDP 報文后洁奈,不需要給出任何確認(rèn)。
雖然 UDP 不提供可靠交付绞灼,但在某些情況下 UDP 是一種最有效的工作方式利术。
TCP:一種面向連接的協(xié)議
提供面向連接的服務(wù)。
傳送的數(shù)據(jù)單位協(xié)議是 TCP 報文段 (segment)低矮。
TCP 不提供廣播或多播服務(wù)印叁。
由于 TCP 要提供可靠的、面向連接的運(yùn)輸服務(wù)军掂,因此不可避免地增加了許多的開銷轮蜕。這不僅使協(xié)議數(shù)據(jù)單元的首部增大很多,還要占用許多的處理機(jī)資源蝗锥。
運(yùn)輸層的端口
為了標(biāo)志本計(jì)算機(jī)應(yīng)用層中的各進(jìn)程
服務(wù)端端口跃洛!=客戶端端口
客戶端端口-短暫端口
當(dāng)服務(wù)器進(jìn)程收到客戶進(jìn)程的報文時,就知道了客戶進(jìn)程所使用的動態(tài)端口號终议。通信結(jié)束后汇竭,這個端口號可供其他客戶進(jìn)程以后使用。
UDP 協(xié)議
UDP 只在 IP 的數(shù)據(jù)報服務(wù)之上增加了很少一點(diǎn)的功能:
- 復(fù)用和分用的功能
- 差錯檢測的功能
特點(diǎn)
- UDP 是無連接的穴张,發(fā)送數(shù)據(jù)之前不需要建立連接细燎,,因此減少了開銷和發(fā)送數(shù)據(jù)之前的時延陆馁。
- UDP 使用盡最大努力交付找颓,即不保證可靠交付合愈,因此主機(jī)不需要維持復(fù)雜的連接狀態(tài)表叮贩。
- UDP 是面向報文的击狮。UDP 對應(yīng)用層交下來的報文,既不合并益老,也不拆分彪蓬,而是保留這些報文的邊界。UDP 一次交付一個完整的報文捺萌。
- UDP 沒有擁塞控制档冬,因此網(wǎng)絡(luò)出現(xiàn)的擁塞不會使源主機(jī)的發(fā)送速率降低。這對某些實(shí)時應(yīng)用是很重要的桃纯。很適合多媒體通信的要求酷誓。
- UDP 支持一對一、一對多态坦、多對一和多對多的交互通信盐数。
- UDP 的首部開銷小,只有 8 個字節(jié)伞梯,比 TCP 的 20 個字節(jié)的首部要短玫氢。
UDP 首部格式
偽首部僅僅是為了計(jì)算檢驗(yàn)和
端口分用
當(dāng)運(yùn)輸層從 IP 層收到 UDP 數(shù)據(jù)報時,就根據(jù)首部中的目的端口谜诫,把 UDP 數(shù)據(jù)報通過相應(yīng)的端口漾峡,上交最后的終點(diǎn)——應(yīng)用進(jìn)程
傳輸控制協(xié)議 TCP
- TCP 是面向連接的運(yùn)輸層協(xié)議。
- 每一條 TCP 連接只能有兩個端點(diǎn) (endpoint)喻旷,每一條 TCP 連接只能是點(diǎn)對點(diǎn)的(一對一)生逸。
- TCP 提供可靠交付的服務(wù)。
- TCP 提供全雙工通信掰邢。
- 面向字節(jié)流
- TCP 中的“流”(stream) 指的是流入或流出進(jìn)程的字節(jié)序列牺陶。
- “面向字節(jié)流”的含義是:雖然應(yīng)用程序和 TCP 的交互是一次一個數(shù)據(jù)塊,但 TCP 把應(yīng)用程序交下來的數(shù)據(jù)看成僅僅是一連串無結(jié)構(gòu)的字節(jié)流辣之。
TCP 不關(guān)心應(yīng)用進(jìn)程一次把多長的報文發(fā)送到 TCP 緩存掰伸。
TCP 對連續(xù)的字節(jié)流進(jìn)行分段,形成 TCP 報文段
TCP 根據(jù)對方給出的窗口值和當(dāng)前網(wǎng)絡(luò)擁塞的程度來決定一個報文段應(yīng)包含多少個字節(jié)(UDP 發(fā)送的報文長度是應(yīng)用進(jìn)程給出的)
TCP連接
同一個 IP 地址可以有多個不同的 TCP 連接怀估。
同一個端口號也可以出現(xiàn)在多個不同的 TCP 連接中
TCP 連接的端點(diǎn)叫做套接字 (socket)
套接字
每一條 TCP 連接唯一地被通信兩端的兩個端點(diǎn)(即兩個套接字)所確定
可靠傳輸工作原理
理想傳輸條件
- 傳輸信道不產(chǎn)生差錯狮鸭。
- 不管發(fā)送方以多快的速度發(fā)送數(shù)據(jù),接收方總是來得及處理收到的數(shù)據(jù)多搀。
在這樣的理想傳輸條件下歧蕉,不需要采取任何措施就能夠?qū)崿F(xiàn)可靠傳輸。
然而實(shí)際的網(wǎng)絡(luò)都不具備以上兩個理想條件康铭。必須使用一些可靠傳輸協(xié)議惯退,在不可靠的傳輸信道實(shí)現(xiàn)可靠傳輸。
停止等待協(xié)議
每發(fā)送完一個分組就停止發(fā)送从藤,等待對方的確認(rèn)催跪。在收到確認(rèn)后再發(fā)送下一個分組锁蠕。
出現(xiàn)插查錯
- 接收方B 接收數(shù)據(jù)后檢測出現(xiàn)錯誤,丟棄
- 傳輸過程中丟失
超時重傳
接收方B 不會發(fā)送任何消息回發(fā)送方懊蒸,此時發(fā)送方A 超過一定時間后荣倾,會重新發(fā)送到接收方
確認(rèn)丟失
接收方發(fā)B 送給發(fā)送方A 的確認(rèn)丟失
這會觸發(fā)發(fā)送方A 超時重傳,接收方又收到了重傳的分組M1 骑丸。這時 接收方B 應(yīng)采取兩個行動:
- 丟棄這個重復(fù)的分組 M1舌仍,不向上層交付。
- 向 發(fā)送方A 發(fā)送確認(rèn)通危。不能認(rèn)為已經(jīng)發(fā)送過確認(rèn)就不再發(fā)送铸豁,因?yàn)?發(fā)送方A 之所以重傳分組M1 就表示 A 沒有收到對 M1 的確認(rèn)。
確認(rèn)遲到
傳輸過程中沒有出現(xiàn)差錯菊碟,但 接收方B 對分組 M1 的確認(rèn)遲到了推姻。
發(fā)送方A 會收到重復(fù)的確認(rèn)。對重復(fù)的確認(rèn)的處理很簡單:收下后就丟棄框沟。
接收方B 仍然會收到重復(fù)的 分組M1藏古,并且同樣要丟棄重復(fù)的 M1,并重傳確認(rèn)分組忍燥。
自動重傳請求 ARQ
重傳的請求是自動進(jìn)行的拧晕,接收方不需要請求發(fā)送方重傳某個出錯的分組。
連續(xù)ARQ協(xié)議
滑動窗口協(xié)議比較復(fù)雜梅垄,是 TCP 協(xié)議的精髓所在厂捞。
發(fā)送方維持的發(fā)送窗口,它的意義是:位于發(fā)送窗口內(nèi)的分組都可連續(xù)發(fā)送出去队丝,而不需要等待對方的確認(rèn)靡馁。這樣,信道利用率就提高了机久。
連續(xù) ARQ 協(xié)議規(guī)定臭墨,發(fā)送方每收到一個確認(rèn),就把發(fā)送窗口向前滑動一個分組的位置
累計(jì)確認(rèn)
對按序到達(dá)的最后一個分組發(fā)送確認(rèn)膘盖,到這個分組為止的所有分組都已正確收到了
Go-back-N
如果發(fā)送方發(fā)送了前 5 個分組胧弛,而中間的第 3 個分組丟失了。這時接收方只能對前兩個分組發(fā)出確認(rèn)侠畔。發(fā)送方無法知道后面三個分組的下落结缚,而只好把后面的三個分組都再重傳一次。
這就叫做 Go-back-N(回退 N)软棺,表示需要再退回來重傳已發(fā)送過的 N 個分組
TCP 報文段首部格式
- 源端口和目的端口字段——各占 2 字節(jié)
端口是運(yùn)輸層與應(yīng)用層的服務(wù)接口红竭。運(yùn)輸層的復(fù)用和分用功能都要通過端口才能實(shí)現(xiàn)。 - 序號字段——占 4 字節(jié)
TCP 連接中傳送的數(shù)據(jù)流中的每一個字節(jié)都編上一個序號。序號字段的值則指的是本報文段所發(fā)送的數(shù)據(jù)的第一個字節(jié)的序號茵宪。 - 確認(rèn)號字段——占 4 字節(jié)
是期望收到對方的下一個報文段的數(shù)據(jù)的第一個字節(jié)的序號 - 數(shù)據(jù)偏移(即首部長度)——占 4 位
它指出 TCP 報文段的數(shù)據(jù)起始處距離 TCP 報文段的起始處有多遠(yuǎn)斥黑。“數(shù)據(jù)偏移”的單位是 32 位字(以 4 字節(jié)為計(jì)算單位) - 保留字段——占 6 位
保留為今后使用眉厨,但目前應(yīng)置為 0 - 緊急 URG
當(dāng) URG =1 時,表明緊急指針字段有效兽狭。它告訴系統(tǒng)此報文段中有緊急數(shù)據(jù)憾股,應(yīng)盡快傳送(相當(dāng)于高優(yōu)先級的數(shù)據(jù)) - 確認(rèn) ACK
只有當(dāng) ACK = 1 時確認(rèn)號字段才有效。當(dāng) ACK = 0 時箕慧,確認(rèn)號無效服球。 - 推送 PSH (PuSH)
接收 TCP 收到 PSH = 1 的報文段,就盡快地交付接收應(yīng)用進(jìn)程颠焦,而不再等到整個緩存都填滿了后再向上交付 - 復(fù)位 RST (ReSeT)
當(dāng) RST = 1 時斩熊,表明 TCP 連接中出現(xiàn)嚴(yán)重差錯(如由于主機(jī)崩潰或其他原因),必須釋放連接伐庭,然后再重新建立運(yùn)輸連接 - 同步 SYN
同步 SYN = 1 表示這是一個連接請求或連接接受報文 - 終止 FIN (FINish)
用來釋放一個連接粉渠。FIN ? 1 表明此報文段的發(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)和時集乔,要在 TCP 報文段的前面加上 12 字節(jié)的偽首部(源ip去件,目的ip,0扰路,17尤溜,長度)
TCP 的運(yùn)輸連接管理
- 連接建立
- 數(shù)據(jù)傳送
- 連接釋放