知識結構:
- 傳輸層服務
- 傳輸層功能
- 尋址與端口
- 無連接與面向連接
- UDP
- UDP數據報
- UDP校驗
- TCP
- TCP段
- 連接管理
- 可靠傳輸
- 流量控制與擁塞控制
傳輸層:提供進程間的通信,端到端;復用和分用;差錯檢測;兩種協議
端口的作用:傳輸層的端口,網絡層的IP,數據鏈路層的MAC,都是為了唯一標識某些對象
套接字 = IP + 端口號
TCP
l 源端口:標識發送該TCP報文段的應用進程
l 目的端口:標識接收該TCP報文段的應用進程
n 端口號占16 bit,范圍0-65535
n 套接字 Socket:(IP地址: 端口號)
n TCP連接::={socket1, socket2} = {(IP1: PORT1), (IP2, PORT2)}
l 序號
n 表示本報文段TCP數據的第一個字節的序號
n 4字節,序號范圍[0, -1],可表示4GB數據
n 一條TCP連接的初始序號(SYN),初始序號隨機產生
l 確認號
n 確認號是接收方對收到數據的確認
n 確認號=N,表示到序號N-1為止的所有數據都已正確收到,期望接收序號為N的數據
n 確認標志位ACK=1,確認號才有效
l 數據偏移
n 即指TCP首部長度
n 占4 bit,並以4字節為單位
l 保留和控制位
n SYN,連接建立
n FIN,連接釋放
n ACK,確認包,確認號有效
n RST,復位連接
n PSH,無需等待緩存填滿盡快交付給應用層,交互式通信,希望對方立即回復,telnet/rlogin
n URG,緊急報文,緊急指針有效(Control+C)
l 窗口
n 指接收端的接收窗口大小,用來控制對方發送的數據量。也就是后面需要講的滑動窗口的窗口大小。
n 由於TCP的頭部窗口字段只有16bit,最多表示65535字節,為了表示更大的窗口,使用了可選的放大倍數。
n Syn包option帶上放大的windows scale
l 檢驗和
n 占16 bit,檢查范圍包括TCP報文段首部和數據載荷部分
n 在計算校驗和時,要在TCP報文段的前面加上12字節的偽首部
l 緊急指針
n 緊急標志位URG=1時,緊急指針才有效
n 占16 bit,以字節為單位,用來指明緊急數據的長度
l 選項
n 長度可變,最大40字節。TCP章節的最后會介紹幾種常見選項字段
n 填充
n 由於選項的長度可變,因此使用填充來確保報文段首部總長度能被4整除
小結:
l 一個TCP連接需要四個元組來表示是同一個連接(src_ip, src_port, dst_ip, dst_port)准確說是五元組,還有一個是協議。但因為這里只是說TCP協議,所以,這里只說四元組。
l TCP首部的四個重要部分:
n Sequence Number是包的序號,用來解決網絡包亂序(reordering)問題。
n Acknowledgement Number就是ACK,用於確認收到,用來解決不丟包的問題。
n Window又叫Advertised-Window,也就是著名的滑動窗口(Sliding Window),用於解決流控的。
n TCP Flag ,也就是包的類型,主要是用於操控TCP的狀態機的。
l TCP連接建立的目的
n 通信雙方確認對方的存在
n 雙方確定自己的初始序列號,並通知對方
n 允許雙方協商一些參數(最大報文段長度、窗口大小等)
n 對傳輸實體資源進行分配
l TCP連接建立的方式
n 采用客戶端服務器方式(C/S),主動發起連接建立的應用進程叫做客戶端,被動等待連接建立的叫服務器端。
l 粗實線----Client
l 粗虛線----Server
l 細線----異常
可靠傳輸:
- 停止等待協議ARQ
- 連續ARQ協議
發送窗口根據接收方的接收窗口和網絡的擁塞情況設置
接收窗口取決於接收方的應用、系統、硬件的限制,和自身處理能力有關
擁塞控制
擁塞控制作用於點到點的網絡層
l 慢開始:指數增長
l 擁塞避免:線性增長
l 快重傳:收到3個同樣的確認就立刻重傳,不等到超時
l 快恢復:cwnd不是從1重新開始
接收端窗口rwnd,又稱通知窗口(awnd),是接收端根據目前的接收緩存大小所許諾的最新窗口值,是來自接收端的流量控制。
擁塞窗口cwnd是發送端根據自己估計的網絡阻塞程度而設置的窗口值,是來自發送端的流量控制。
UDP:
UDP |
TCP |
無連接 |
面向連接 |
支持一對一/一對多/多對多的交互通信 |
支持一對一 |
面向報文(無分段,大小要合適) |
面向字節流 |
盡最大努力交付,不可靠 |
可靠交付 |
無擁塞控制(恆定速率,允許丟失數據,不允許太大時延,IP電話/實時視頻會議) |
有擁塞控制/流量控制 |
首部開銷小,僅8個字節 |
首部最小20字節,最大60字節 |
l 細線----異常Ø 源端口:標識發送該TCP報文段的應用進程
Ø 目的端口:標識接收該TCP報文段的應用進程
Ø 端口號占16 bit,范圍0-65535
Ø 套接字 Socket:(IP地址: 端口號)
Ø TCP連接::={socket1, socket2} = {(IP1: PORT1), (IP2, PORT2)}
序號
Ø 表示本報文段TCP數據的第一個字節的序號
Ø 4字節,序號范圍[0, -1],可表示4GB數據
Ø 一條TCP連接的初始序號(SYN),初始序號隨機產生
確認號
Ø 確認號是接收方對收到數據的確認
Ø 確認號=N,表示到序號N-1為止的所有數據都已正確收到,期望接收序號為N的數據
確認標志位ACK=1,確認號才有效
Ø 數據偏移
ü 即指TCP首部長度
ü 占4 bit,並以4字節為單位
Ø 保留和控制位
ü SYN,連接建立
ü FIN,連接釋放
ü ACK,確認包,確認號有效
ü RST,復位連接
ü PSH,無需等待緩存填滿盡快交付給應用層,交互式通信,希望對方立即回復,telnet/rlogin
ü URG,緊急報文,緊急指針有效(Control+C)
Ø 窗口
ü 指接收端的接收窗口大小,用來控制對方發送的數據量。也就是后面需要講的滑動窗口的窗口大小。
ü 由於TCP的頭部窗口字段只有16bit,最多表示65535字節,為了表示更大的窗口,使用了可選的放大倍數。
ü Syn包option帶上放大的windows scale
Ø 檢驗和
ü 占16 bit,檢查范圍包括TCP報文段首部和數據載荷部分
ü 在計算校驗和時,要在TCP報文段的前面加上12字節的偽首部
Ø 緊急指針
ü 緊急標志位URG=1時,緊急指針才有效
ü 占16 bit,以字節為單位,用來指明緊急數據的長度
Ø 選項
ü 長度可變,最大40字節。TCP章節的最后會介紹幾種常見選項字段
ü 填充
ü 由於選項的長度可變,因此使用填充來確保報文段首部總長度能被4整除