(Net)第5章 運輸層
技術標籤:Conclusion(總結)計算機網路
第5章 運輸層
文章目錄
協議一直是兩個實體水平方向上的邏輯通訊
網路層解決倆機器怎麼傳
運輸層解決倆機器對應的程序怎麼通訊(通過 Port)
5.1 運輸層協議概述
運輸層協議最重要的就是提供埠 Port
1.無連線的 UDP 協議
-
使用者資料報協議 UDP(User Datagram Protocol)
PDU: UDP 使用者資料報
看個電影啥的沒必要用 TCP,廣播組播只能用 UDP,傳多媒體這種大量位元組的也用 UDP
2.面向連線的 TCP 協議
-
傳輸控制協議 TCP(Transmission Control Protocol)
PDU: TCP 報文段(segment)
提供可靠性,每個位元組都編號、排序,(較麻煩)且只能一對一
16 位埠號(0-65535)
熟知埠號(well-known port number,知名埠號,系統埠號,大明星埠)【0~1023】
常用:應用層常用的協議
應用程式 | FTP | TELNET | SMTP | DNS | HTTP |
---|---|---|---|---|---|
知名埠號 | 21 | 23 | 25 | 53 | 80 |
登記埠號,小明星埠(也有規定)【1024~49151】
臨時埠,野埠【49152~65535】
5.2 使用者資料報協議UDP
- 無連線
- 盡最大努力交付
- 面向報文
啥都不做,8個位元組往上一加就完事了(麻袋一套)
8個位元組的首部格式:(無需協議號,直接交到程序了)
源埠 | 目的埠 | UDP長度 | 檢驗和 |
---|---|---|---|
2 位元組 | 2 | 2 | 2 |
還有個偽首部,不傳送,但是算校驗和的時候用(UDP 17,TCP 6)
(和反碼,與IP校驗類似,正常加,不模2,max不進位或尾加1)
5.3 傳輸控制協議TCP 概述
只能一對一
全雙工,面向位元組流(UDP 是面向報文的,TCP 全拆成位元組,然後編號)【不關心應用層報文多長】
TCP 連線是一條虛連線(即邏輯連線),而不是一條真正的物理連線
套
接
字
s
o
c
k
e
t
=
(
I
P
地
址
:
端
口
號
)
套接字\ socket = (IP\ 地址:埠號)
套接字socket=(IP地址:端口號)
IP 地址確定兩臺主機,埠號確定對應程序
每一條 TCP 連線唯一地被通訊兩端的兩個端點(即兩個套接字)所確定【一對套接字確定一條 TCP 連線】
5.4 可靠傳輸的工作原理
確保可靠性:確認 + 重傳
停止等待協議:停等協議,是一個理想協議(死等確認)
為了防止死等,在發後啟動重傳計時器(超時重傳),t 略大於 往返時間,這段時間裡A保留副本(要有編號)
三點:(分組定義泛化為 PDU)
-
t 時間內必須保留副本
-
分組和確認分組都要有編號
-
t 略大於平均往返時間
如果確認丟了,或者確認遲到了,問題不大,分組和確認都有編號(認不錯)
至此,我們在不可靠的傳輸網路上實現了可靠的通訊
ARQ 協議(Automatic Repeat reQuest,自動重傳協議),有計時器,是自動進行的
T
D
:
發
送
分
組
需
要
的
時
間
T
A
:
發
送
確
認
分
組
需
要
的
時
間
R
T
T
:
平
均
往
返
時
間
(
非
固
定
,
網
絡
是
變
動
的
,
有
專
門
的
算
法
)
T_D: 傳送分組需要的時間\\ T_A: 傳送確認分組需要的時間\\ RTT: 平均往返時間(非固定,網路是變動的,有專門的演算法)
TD:發送分組需要的時間TA:發送確認分組需要的時間RTT:平均往返時間(非固定,網絡是變動的,有專門的算法)
通道利用率 : T D T D + R T T + T A \colorbox{yellow}{通道利用率}:\ {\frac {T_D} {T_D + RTT + T_A}} 信道利用率:TD+RTT+TATD
停等協議的通道利用率較低,RTT 內傻等確認,超時自動重傳
解決辦法:用流水線,一次發多(n)個報文,但佔的資源多,n 個計時器(故只能有限個)
連續 ARQ 協議,滑動視窗,在視窗內的可以發
傳送視窗,滑出去後就丟棄副本,【累積確認】【Go-back-N 回退】(1 3 4,等2來後累積確認,若2丟則234全重傳)
5.5 TCP 報文段的首部格式
雖然 TCP 是面向位元組流的,但其 PDU 仍是報文段
首部前20位元組固定
再分五行,一行四位元組
第一行:2位元組源埠,2位元組目的埠
第二行:4位元組序號 seq
- 第一個位元組的編號【接下來每個位元組就按順序編號】,號碼用完後再從0開始
第三行:4位元組確認號 ack
- 是期望收到對方下一個報文段的首位元組的序號,還沒發【確認號是N的話就是對前N - 1個全部確認】
第四行:4位資料偏移 + 6位保留 + 6位控制 + 2位元組視窗
-
資料偏移,偏移了一個首部的長度(單位是4位元組)
-
6個控制位
緊急 URG(URGent),配合緊急指標使用 確認 ACK(ACKnowledg),ACK = 1 時,帶有確認 推送 PSH(PuSH),PSH = 1 時,不等到填滿再交了,直接推 復位 RST,一般不用 同步 SYN(SYNchronization),各自的第一個報文段,建立連線用,SYN置1 終止 FIN(FINis),結束連線
-
視窗,指接收視窗(我的接受能力),從而決定傳送視窗的大小【視窗值經常在動態變化著】
第五行:2位元組檢驗和,2位元組緊急指標
- 緊急指標:緊急資料的長度(從第一個開始)
後面可變的選項不確定長度,有個填充幫忙填充至4的倍數
最初只規定了一種選項,最大報文長度 MSS(Maximum Segment Size),不算首部
5.6 TCP 可靠傳輸的實現
重點理解(以位元組為單位的)滑動視窗
假定 A 發資料,B 給確認
根據 B 確定傳送視窗的大小,等累積確認後,滑動
為啥視窗的大小會變?
傳送緩衝區:包括已傳送待確認的 + 未傳送的
接收緩衝區:包括已確認未遞交的 + 未確認的(遞交到應用層)
5.7 TCP 的流量控制
流量控制,就是告訴傳送方:悠著點,別發太快(傳送視窗別比我的接收視窗還大),讓接收方來得及接收
【反饋控制】
window(wnd),接收視窗(rwnd)
A 發前 200,B 收到後給個確認:ack = 201,rwnd = 300
(前200收到了但還未遞交,緩衝佔了200所以 rwnd=300,此時能接300)
若快取佔滿,B 給的確認:ack = 501,rwnd = 0【注意,死鎖了】
A 不再發了,B 也無法再通過確認告訴 A 視窗大小了
【增加一個機制:持續計時器(persistence timer),從收到 0 開始到時間 A 就發一個位元組過去(零視窗探測報文段)】
控制 TCP 傳送報文段的時機的機制:
- 往快取中放資料,放到 MSS 後就封裝成一個報文段發出去
- 應用程式指明發送(推送 push 操作),不等了,直接發
- 傳送計時器,不能狠等
5.8 TCP 的擁塞控制
擁塞控制,(是個全域性的概念)和傳送、接收方無關,全網傳送的時候都要悠著點
網路可用的資源小於需求,網路效能變壞,擁塞產生(congestion)
也用【反饋控制】
開環控制:事先將有關發生擁塞的因素考慮周到(這個思想程式設計可以有)
閉環控制:反饋控制(更可靠)
擁塞視窗(cwnd),大小取決於網路的擁塞程度
swnd 取 rwnd 和 cwnd 的最小值(互不影響,完全分開研究)
擁塞控制的三個階段
一階段:慢開始(slow-start),由小到大逐漸增大擁塞視窗數值
- 每經過一個傳輸輪次,翻一倍(單位是 SMSS 最大報文段)【只要不堵塞】
二階段:擁塞避免(congestion)
- 慢開始門限(自己定的閾值),到閾值後緩慢增長,cwnd + 1 / 輪次
- 一旦出現超時重傳,開始擁塞
三階段:一旦擁塞,門限值調為當前的一半,cwnd 回 1
TCP Tahoe 版本用的是慢開始(已廢棄)
TCP Reno 版本用的是快重傳
快重傳,若一連收到 3 個重複確認,不等超時了,立即傳(自此擁塞分了兩種,快重傳和超時重傳,而且快重傳可能沒擁塞)
快恢復,認為可能並沒有擁塞,cwnd 調到和門限值一樣(掉一半)
5.9 TCP 的運輸連線管理
一對一的連線
用的都是客戶伺服器方式(知道伺服器的IP、埠)
客戶:A,伺服器: B
三次握手建立連線
A 主動開啟,發控制報文:SYN = 1,seq = x(這些控制報文 Data 都為 1位元組)
B 收到後發確認:SYN = 1, ACK = 1, seq = y,ack = x+1
A 收到確認後發確認:ACK = 1,seq = x+1,ack = y+1(A 已經可以發資料了)
B 收到應答後連線建立
四次握手釋放連線
A 主動關閉,發控制報文:FIN = 1,seq = u
B 收到後發個確認:ACK = 1, seq = v,ack = u+1,然後繼續發資料但 A 一直不回確認
B 最後發個結束:FIN = 1,ACK = 1, seq = w,ack = u+1(被動關閉)
A 收到結束後發個確認:ACK = 1,seq = u+1,ack = w+1 (表示w及之前的資料都收到了,累積確認)
B 收到該確認後馬上關閉,A 再等 B 收到後再關閉(2MSL 等報文生存時間 * 2)
MSL (Maximum Segment Lifetime,最長報文段壽命)
A:分吧
B: blabla…(仍不甘心)
B:分就分
A:好!
E n d . End. End.