第1 章 - Google Drive
Download
Report
Transcript 第1 章 - Google Drive
第 12 章
UDP 與 TCP
Ren-Jie Wang,王 仁 傑, Ph.D.
[email protected]
課程網頁: http://home.scs.ntit.edu.tw/rjwang/
1
2
UDP 與 TCP
在 DoD 模型中, 傳輸層位於網路層與應用層之
間, 主要的功能是負責應用程式之間的通訊。
舉凡連接埠管理、流量控制、錯誤處理, 與資
料重送皆是傳輸層的工作。
本章將介紹 TCP/IP 在傳輸層的兩個協定:
UDP 與 TCP, 藉此說明傳輸層的各項功能。
3
UDP (User Datagram protocol) 特性
記錄連接埠資訊。
非連接式 (Connectionless) 的傳送特性。
在傳送過程中若發生問題, UDP 並不具有確認、重
送等機制, 而是必須仰賴上層 (應用層) 的協定來處
理這些問題。
4
使用 UDP 的考量
降低對電腦資源的需求。
應用程式本身已提供資料完整性的檢查機制。
或非關鍵性資料的傳送。
例: DNS
例: routing table的交換
使用多點傳送 (Multicast) 或廣播傳送
(Broadcast) 的傳送方式時。
5
連接埠port
什麼是連接埠?
連接埠編號的原則。
IP:port
socket address
IANA (Internet Assigned
Numbers Authority) *
0~1023 well-known
1024~49151 registered
49152~65535 dynamic
Windows200
0~1023 well-known
1024~5000 用戶端程式
使用自訂的伺服器連接埠編號。
*IANA is operated by the Internet Corporation for Assigned Names
and Numbers, 網際網路網域名稱與位域管理機構(ICANN)
6
UDP 封包簡介
UDP 表頭:
記錄來源與目的端應用程式所用的連接埠編號。
UDP 資料:
載送上層協定 (Application Layer) 的資訊。
7
UDP 表頭
來源連接埠編號 (Source Port)
目的連接埠編號 (Destination Port)
記錄目的端應用程式所用的連接埠編號。
長度 (Length)
記錄來源端應用程式所用的連接埠編號。
記錄 UDP 封包的總長度。
錯誤檢查碼 (Checksum)
記錄 UDP 封包的錯誤檢查碼。
8
錯誤檢查碼計算方式
計算錯誤檢查碼時, 會產生『Pseudo Header』(假表
頭), 包括以下欄位:
來源位址:IP 表頭中來源端的 IP 位址
目的位址:IP 表頭中目的端 的 IP 位址
未用欄位:長度為 8 Bits, 填入 0
上層協定:IP 表頭中紀錄上層協定的欄位
封包長度:UDP 表頭中的封包長度欄位
錯誤檢查碼的計算範圍是2的倍數(利用padding調整)
9
Pseudo Header 的功用
來源電腦傳送UDP封包之前,產生Pseudo
Header 附加在 UDP 封包前面,後面加
padding成偶數Bytes,以計算錯誤檢查碼, 實
際傳送封包時不會送出。
目的電腦收到UDP封包,從IP表頭讀取相關訊
息再度產生Pseudo Header 及padding,計算
出錯誤檢查碼,與UDP表頭中的錯誤檢查碼比
對。
10
擷
取
U
D
P
封
包
11
UDP 封包說明
1.
2.
3.
4.
5.
來源端連接埠編號。49292 屬於用戶端的
Dynamic 的連接埠編號。
目的端連接埠編號。53 為 DNS 伺服器的
Well-Know 連接埠編號。
UDP 封包的總長度。
錯誤檢查碼。
這是 UDP 資料內容, 從 Name 欄位可知此為查
詢 stjtw.msn.com 的 IP 位址的DNS Query 封
包 (詳見第 13 章)。
12
TCP 特性
資料確認與重送 (error control)
流量控制 (flow control)
連線導向
13
TCP 傳送機制 – 確認與重送
1. A傳送Packet1封包給B
開始計時並等待B回應
A
B
Packet 1
3. A在預定時間內收到
ACK1, 可確定Packet1
已正常到達, 再送出
Packet2,開始計時並等
待B回應
ACK 1
2. B收到Packet1
送出ACK1給A
Packet 2
ACK 2
4. B收到Packet2
送出ACK2給A
圖12-05 利用確認與重送的機制來傳送封包
14
TCP 傳送機制 – 確認與重送
A在預定時間內沒有收
到ACK2, 即重送Packet2
Q: 這個簡單的機制有何問題?
圖12-06 利用確認與重送機制來處理傳送過程中的錯誤
15
TCP 傳送機制 – 滑動視窗Sliding Window (1)
16
TCP 傳送機制 – Sliding Window (2)
最左邊的封包收到
ACK, Send window
才可向右移動
圖12-08 收到ACK1後, A 的 Sliding Window 首先將 Packet 1 標示為『完成』
17
TCP 傳送機制 –Sliding Window (2)
送出新進到Sliding
window的封包
圖12-09 A 的 Sliding Window 往右滑動
18
TCP 傳送機制– Sliding Window (3)
A
將進入Sliding window
的新封包送出
1
B
2 3
Packet 1
Packet 2
Packet 3
收到ack, 將封包標示為完成
將Sliding window向右滑動
一格, 並將新進入的封包送出
ACK1
1
22 33 4
ACK2
2 33 44 5
ACK3
Packet 4
Packet 5
3 44 55 6
Packet 6
圖 12-10 A的Sliding Window 狀態
會隨著收到ACK封包而變化
19
TCP 傳送機制 – Send/Receive Window (1)
圖 11-12 開始傳送時, B 的 Receive Window
20
TCP 傳送機制 – Send/Receive Window (2)
圖 12-13 收到 Packet 3 後, B 的 Receive Window 。由於
Packet3不是最左封包,所以不必送出ack,也不移動Receive
window 。
21
TCP 傳送機制 – Send/Receive Window (3)
送出ACK1,移動
一格Receive window
圖 12-14 收到 Packet 1 後, B 的 Receive Window 的變化
22
TCP 傳送機制 – Send/Receive Window (4)
送出ACK2,ACK3,移動
二格Receive window
圖 12-15 收到 Packet 2後, B 的 Receive Window
23
TCP 傳送機制 – Send/Receive Window (5)
24
TCP 傳送機制 – Window Size
Window size 與流量控制(flow control)
Window Size 變小流量變慢。
Window Size 變大流量變快。
25
TCP 傳送機制 –以 Byte 為單位 (1)
ISN 若為 1000, 當 A 依序送出長度為 100、200、
300 Byte 的封包給 B 時, 各封包的序號值為:
26
TCP 傳送機制 –以 Byte 為單位 (2)
100Bytes
200Bytes
300Bytes
圖 12-17 序號與封包之間的關係
27
TCP 傳送機制 –以 Byte 為單位 (3)
100Bytes
希望下一個收到序號 1101
28
TCP 傳送機制 –以 Byte 為單位 (4)
圖 12-18 以 Byte 為單位定義 Send Window 的邊界
29
TCP 傳送機制 –以 Byte 為單位 (5)
圖 12-19 以 Byte 為單位定義 Receive Window 的邊界
30
TCP 傳送機制 – 雙向傳輸
圖 12-20 TCP 連線是由兩條單向傳輸的管道結合而成
31
TCP 傳送機制 – 雙向傳輸
A送出序號 1001封包
(100 Bytes)
同時告知B使用2001作
為ACK之序號
收到封包後, B依要求送回
SN為2001之ACK封包, 並
告知A, 下一個希望收到的
封包是SN 1101 (表示已經
收到100Bytes)
圖 12-21 每個 TCP 封包可能包含雙向傳輸的資訊
32
TCP 傳送機制 – 小結
確認與重送的機制。
流量控制的機制。
Bytes Stream。
雙向傳輸的協定。
33
TCP 連線 – 連線定義
圖 12-22 TCP 連線是由連線兩端的 IP 位址與連接埠編號所定義
Socket
34
TCP 連線 – 連線定義
35
TCP 連線 – 建立連線
在建立連線時, 必須交換以下資訊:
雙方的 ISN (初始序號) 。
雙方的 Window Size。
雙方支援的 TCP 選擇性功能。
建立連線的過程稱為『Handshaking』
3-way Handshaking
三向交握
36
建立連線 ( Handshaking ) 3 步驟
3-way Handshaking
三向交握
TCP 49192 > http [SYN] Seq=0 Win=8192 Len=0
TCP http > 49192 [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0
TCP 49192 > http [ACK] Seq=1 Ack=1 Win=65700 Len=0
37
傳送資料
連線建立後, 開始傳送資料(以WWW為例)
A (Browser)
B (Web server)
HTTP get
HTTP response
38
TCP 連線 – 中止連線
經由特定的連線中止步驟, 才能將連線所用的
資源 (連接埠、記憶體等等) 釋放出來。
雙方都可以主動提出中止連線的要求。
39
中止連線 4 步驟
A提出中止連線
A→B終止
B継續送完data
B提出中止連線
A←B終止
40
TCP 封包格式
將 TCP 封包交付給 IP (Network 層的協定),
成為 IP Payload:
41
TCP 表頭
來源連接埠編號
目的連接埠編號
序號
回應序號
標示位元
Window Size
42
標示位元 (Flags)
長度為 6 Bits, 每個 Bit 可代表 TCP 封包的一
種 Flag。共有 6 種 Flag,
Urgent
Acknowledge
Push Function
Reset
Synchronize
Finish
43
Window Size (視窗大小)
長度為 2 Bytes。
設定來源端的 Receive Window 大小, 用來控
制『來源端←目的端』的流量。
44
檢查碼 (Checksum)
長度為 2 Bytes, 記錄錯誤檢查碼。
TCP 在計算錯誤檢查碼時, 會加上 TCP Pseudo
Header。
運作方式與 UDP 的錯誤檢查碼相同。
45
Options 與 Padding
Options 欄位長度不定, 可用來擴充 TCP 的功
能。
Padding 欄位是為了讓 TCP 表頭 (包含
Options 欄位) 剛好是 4 Bytes 的倍數。
UDP是填成2 Bytes的倍數
46
TCP 常見的擴充功能
MSS ( Maximum Segment Size)
SACK (Selective Acknowledgment)
建立連線時, 用來指定TCP資料的最大長度
Ethernet MSS=1460 Bytes
用來告知對方不必重送那些封包
SACK-Permitted
在連線建立時用來宣告具有SACK的能力
47
MSS (Maximum Segment Size)
在連線建立時, 用來指定所能傳送 TCP 資料最
大的長度。
預設值為 MTU 減去 IP 表頭的最小長度, 再減
去 TCP 表頭的最小長度。
以乙太網路為例, MTU 為 1500 Bytes, 減去
IP 表頭的最小長度 (20 Bytes), 再減去 TCP
表頭的最小長度 (20 Bytes), 則 MSS 預設值
為 1460。
48
SACK-Permitted 與 SACK
SACK-Permitted:
在連線建立時, 雙方互
相溝通是否要使用
SACK 功能。
SACK:連線建立後
的傳送過程中, 用來告
知對方不必重送哪些
封包。
49
12-6 實作練習:擷取 TCP 封包
接下來我們利用 Wireshark 擷取 TCP 連線建
立時的封包, 以及傳送資料的封包, 實際檢視封
包的內容。
50
12-6-1 環境設定
我們使用如右兩部電腦來擷取封包:
開始擷取封包後, 我們從 Brower 連線到 Web
Server, 擷取一開始建立 TCP 連線的封包。
51
擷取建立 TCP 連線時的封包
第一步驟的封包 (1)
TCP 49192 > http [SYN] Seq=0 Win=8192 Len=0 MSS=1460
52
擷取建立 TCP 連線時的封包
第一步驟的封包 (2)
1. Browser 所用的連接埠, 屬於 Registered /
Dynamic。
2. Web Server 所用的連接埠。已被解讀為 HTTP 所
用的 Well-Known 連接埠。
3. 由 Browser 端系統隨機選取的 Initial Sequence
Number (ISN Browser → Server)。
尚未收到 Web Server 的 ISN, 所以此處為 0。
4. TCP 表頭的長度。
5. Flag 欄位, 只有 SYN Flag 設為 1。
53
擷取建立 TCP 連線時的封包
第一步驟的封包 (3)
6. Browser 預設的 Receive Window 大小。
7. 錯誤檢查碼。
8. MMS 選項, 乙太網路值為 1460 Bytes。
9.SACK-Permitted 選項, 表示 Browser 端可接受帶有
SACK 選項的 ACK 封包。
54
擷取建立 TCP 連線時的封包
第二步驟的封包 (1)
TCP http > 49192 [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1460
55
擷取建立 TCP 連線時的封包
第二步驟的封包 (2)
1. Web Server 所用的連接埠, 網路監視器自動以
Hypertext Transfer Protocol 取代 80。
2. Browser 所用的連接埠。
3. 由 Web Server 端系統隨機選取的 Initial Sequence
Number ( ISN Browser ← Server )。
4. ISN (Browser → Server) + 1 =0 + 1 = 1 。
5. TCP 表頭的長度。表頭中固定長度的欄位佔了 20
Bytes, 另外又加上 12 Bytes的選項。
56
擷取建立 TCP 連線時的封包
第二步驟的封包 (3)
6. Flag 欄位, ACK 與 SYN Flag 皆設為 1。
7. Web Server 預設的 Receive Window 大小。
8. 錯誤檢查碼。
9. MMS 選項, 乙太網路值為 1460 Bytes。
10.SACK-Permitted 選項, 表示 Web Server 端
可接受帶有 SACK 選項的 ACK 封包。
57
擷取建立 TCP 連線時的封包
第三步驟的封包 (1)
TCP 49192 > http [ACK] Seq=1 Ack=1 Win=65700 Len=0 MSS=1460
58
擷取建立 TCP 連線時的封包
第三步驟的封包 (2)
1. ISN ( Browser → Server ) + 1。
2.ISN ( Browser ← Server ) + 1。
3.TCP 表頭的長度。由於未使用任何選項,
因此長度為 20 Bytes。
4.Flag 欄位, 只有 ACK Flag 皆設為 1。
5.Browser 的 Receive Window 大小。
59
擷取傳送資料時的 TCP 封包
HTTP GET (1)
圖 11-34 Browser 傳給 Web Server 的封包
60
擷取傳送資料時的 TCP 封包
HTTP GET (2)
1. 連線建立完畢後, Browser → Server 的
Sequence Number 仍停留在 ISN (Browser →
Server) + 1。
2. 連線建立完畢後, Browser ← Server 的
Sequence Number 仍停留在 ISN (Browser ←
Server) + 1。
3. 未使用任何選項, 因此表頭長度為 20 Bytes。
4. Flag 欄位, ACK 與 Push Flag 皆設為 1。
61
擷取傳送資料時的 TCP 封包
HTTP Response
圖 11-35 Web Server 傳給 Browser 的 封包
1. 連線建立完畢後, Browser ← Server 的 Sequence Number
仍停留在 ISN (Browser ← Server) + 1。
2. ISN (Browser → Server) + 1 + 345。
62