Network - TCP / UDP
TCP
TCP / IP:
- Transmission Control Protocol (TCP): is responsible for data delivery once that IP address has been found.
- Internet Protocol (IP): is the part that obtains the address to which data is sent.
->
TCP decides the way to send; IP decide location to send.
TCP 幾個特點:
- 面向連接協議(connection-oriented)
- 具有可靠性
TCP segment structure
- Source Port Address: 傳送來源
- Destination Port Address: 傳送對象
- Sequence Number: 序列號一串數字,用來表明接收後封包的重組順序
- Acknowledgment Number: 確認號碼,告知接收者期待下次要接收的信息,也就是告知接收的狀態如何
- Header Length (HLEN): 標頭長度
- Control flags: 包含六個1 bit長度的信息,用於控制connection建立、終止、中斷、流的控制、傳輸模式等
- URG: Urgent pointer is valid
- ACK: Acknowledgment number is valid (used in case of cumulative acknowledgment)
- PSH: Request for push
- RST: Reset the connection
- SYN: Synchronize sequence numbers
- FIN: Terminate the connection
- Window size: 傳送的TCP視窗(窗口)大小
- Checksum: 用於錯誤控制的檢驗值,此值在TCP是必須的,但在UDP非必要存在
- Urgent pointer: 僅當URG控制標誌存在而使用,用於指示需求最早傳送的數據
Protocol operation
【TCP State】
State | Subject | Desc |
---|---|---|
LISTEN | server | 等待(監聽)連線的TCP與端口 |
SYN-SENT | client | 發送連線請求(request)後並等待連線響應 |
SYN-RECEIVED | server | 連線確認 |
ESTABLISHED | both server and client | 連線成功並開啟狀態,可以互相傳送數據 |
FIN-WAIT-1 | both server and client | 等待終止連線的請求(from remote TCP & previous request) |
FIN-WAIT-2 | both server and client | 等待終止連線的請求(from remote TCP) |
CLOSE-WAIT | both server and client | 等待終止連線的確認(from local user) |
CLOSING | both server and client | 等待終止連線的確認(from remote TCP) |
LAST-ACK | both server and client | 最後終止連線的確認 |
TIME-WAIT | either server or client | 等待足夠的時候以獲得連線終止請求與確認的響應 |
CLOSED | both server and client | 無任何連線 |
【Connection establishment】
三次握手建立連接
過程:
首先 B 处于 LISTEN(监听)状态,等待客户的连接请求。
- A 向 B 发送连接请求报文,SYN=1,ACK=0,选择一个初始的序号 x。
- B 收到连接请求报文,如果同意建立连接,则向 A 发送连接确认报文,SYN=1,ACK=1,确认号为 x+1,同时也选择一个初始的序号 y。
- A 收到 B 的连接确认报文后,还要向 B 发出确认,确认号为 y+1,序号为 x+1。
B 收到 A 的确认后,连接建立。
原因:
- 為了保證正確的連線傳送到server,避免錯誤的連線請求的後果
- 每次握手都會確認對方是否正確響應,也會表明自己狀態正常
- 只有三次最低限度才能保證連線是正確無誤的
【Connection termination】
四次揮手關閉連接
過程:
- 客户端发送一个 FIN 段,并包含一个希望接收者看到的自己当前的序列号 K. 同时还包含一个 ACK 表示确认对方最近一次发过来的数据。
- 服务端将 K 值加 1 作为 ACK 序号值,表明收到了上一个包。这时上层的应用程序会被告知另一端发起了关闭操作,通常这将引起应用程序发起自己的关闭操作。
- 服务端发起自己的 FIN 段,ACK=K+1, Seq=L。
- 客户端确认。进入 TIME-WAIT 状态,等待 2 MSL(最大报文存活时间)后释放连接。ACK=L+1。
原因:
- 在連線狀態時只要成功後,都可以同時向對方互相傳送數據,但是當一方要關閉連接時,需要雙方的互相確認
- 一方先發起信息告知要關閉了,但是另一方仍可以繼續傳送數據(可能數據尚未傳送完畢)
- 等待數據傳送都結束時,傳送端會發送FIN標誌來關閉連接,接收端發送ACK確認關閉連接
【TIME_WAIT】
當收到server FIN標誌後會進入此狀態,而不是直接終止(CLOSED),有以下理由:
- 確保最後一個確認報文能夠正確送達,若在一定時間內都沒有收到確認報文,那麼將會重新發送請求報文
- 為了將本連接內的所有數據、報文全部處理完畢,並在網絡上清零,使下次全新的連接不會有上次連線的干擾
TCP Sequence and Acknowledgement
TCP Flow Control
to avoid buffer overflow
TCP Window Control
TCP Retransmission
Vulnerabilities
- Denial of service: 通過發送錯誤或是欺騙性的標誌來消耗、攻擊系統
- Connection hijacking: 竊聽、劫持TCP連線,並獲得永久連接的控制
- TCP veto: 竊聽TCP連線,但不會破壞中止現有連接
UDP
User Datagram Protocol (UDP):
- 沒有握手的流程,與不保存UDP發送消息的狀態特性,因此具有不可靠性
- 它是無狀態、無重傳延遲,因此適合串流應用
- 適用於不需要在程序執行中進行錯誤檢測與糾錯的目的,達到減少開銷的效能
Compare
- TCP是面向連接的協議,而UDP是無連接協議。
- TCP的速度較慢,而UDP的速度較快
- TCP使用SYN,SYN-ACK,ACK等握手協議,而UDP不使用握手協議
- TCP執行錯誤檢查並進行錯誤恢復,另一方面,UDP執行錯誤檢查,但會丟棄錯誤的數據包。
- TCP具有確認段,但是UDP沒有任何確認段。
- TCP是重量級的,而UDP是輕量級的。
TCP | UDP | |
---|---|---|
Reliable | Unreliable | |
Sequenced | Unsequenced | |
Connection-oriented | Connectionless | |
Virtual circuit | Low Overhead | |
Acknowledgement | No Acknowledgement | |
Window flow control | No any type control |
Reference
Wiki:
TCP:
TCP segment structure:
Protocol operation:
Compare:
- TCP vs UDP: What’s the Difference?
- TCP vs UDP - Difference and Comparison | Diffen
- TCP vs. UDP: Understanding the Difference
Interview: