題目三: 使用 TCP 傳輸時,須先建立連線(connection),此連線過程包含三個步驟,也就是一個 three-way handshake,請以 A 為 TCP 主動端(通常為 client),B 為被動端(通常為 server)之情境, 依序說明這三個步驟分別須由誰傳送給誰甚麼封包(packet)?以及每個封包的序號(Sequence number)、回應序號(ACK number)、Window size 的內容應該為何?【10 分】
詳解 (共 1 筆)
詳解
步驟 1:Client → Server (SYN)
誰傳給誰? A (Client) → B (Server)
傳送什麼封包? SYN (synchronize) 封包
封包內容:
Sequence Number (SEQ): 由 A 隨機選擇一個初始數值 X
Acknowledgment Number (ACK): 無 (因為這是連線的開始)
Flags: SYN=1,ACK=0
Window Size: A 端的接收窗口大小
誰傳給誰? A (Client) → B (Server)
傳送什麼封包? SYN (synchronize) 封包
封包內容:
Sequence Number (SEQ): 由 A 隨機選擇一個初始數值 X
Acknowledgment Number (ACK): 無 (因為這是連線的開始)
Flags: SYN=1,ACK=0
Window Size: A 端的接收窗口大小
步驟 2:Server → Client (SYN-ACK)
誰傳給誰? B (Server) → A (Client)
傳送什麼封包? SYN-ACK (synchronize-acknowledge) 封包
誰傳給誰? B (Server) → A (Client)
傳送什麼封包? SYN-ACK (synchronize-acknowledge) 封包
封包內容:
Sequence Number (SEQ): 由 B 隨機選擇一個初始數值 Y
Acknowledgment Number (ACK): X+1(表示確認 A 發送的 SYN)
Flags: SYN=1,ACK=1
Window Size: B 端的接收窗口大小
步驟 3:Client → Server (ACK)
誰傳給誰? A (Client) → B (Server)
傳送什麼封包? ACK (acknowledge) 封包
封包內容:
Sequence Number (SEQ): X+1(延續 A 端的序號)
Acknowledgment Number (ACK): Y+1(確認 B 端的 SYN)
Flags: SYN=0,ACK=1
Window Size: A 端的接收窗口大小
誰傳給誰? A (Client) → B (Server)
傳送什麼封包? ACK (acknowledge) 封包
封包內容:
Sequence Number (SEQ): X+1(延續 A 端的序號)
Acknowledgment Number (ACK): Y+1(確認 B 端的 SYN)
Flags: SYN=0,ACK=1
Window Size: A 端的接收窗口大小