TCP/IP

IP

Internet Protocols
主要作用: 兩邊主機的路由和尋址並進行傳送

TCP

Transmission Control Protocols
主要作用: 在不可靠的網路傳輸中 提供確保正確傳輸的功能
目前幾乎所有 http 流量都使用 TCP 進行傳輸

1. 丟包重發
2. 雍塞控制
3. 確保數據完整

三方交握


任何使用 TCP 的連線都需要使用三方交握建立連線 

SYN (Synchronize sequence numbers)
如果有設置,才發出連線請求,用來同步 序列號。

ACK (Acknowledgment field significant)
如果有設置,使 確認號欄位 有效。


Client -> Server
傳送 SYN = 1 和隨機數字 seq 到 server
server 了解要和 Client 建立連線

Client <- Server
Server 回傳 SYN = 1, ACK = 1 , ack number = seq + 1 , seq = random()

Client -> Server
檢查 ack number 是否正確 和 ACK 是否 = 1
正確即傳送
ACK = 1, ack number= server seq + 1,ACK=1

結束即建立連線

TCP 擁塞


TCP 擁塞代表網絡中數據傳輸過多,超過了網絡設備或路徑的處理能力,導致數據包丟失、延遲增加等問題

TCP 壅塞控制解法

  1. 流量控制

主要目的: 預防發送端送出過多資料到接收端的機制

在傳送機制上 多加緩衝區大小 rwnd 避免傳送端回傳過多資料
  1. 慢啟動

主要目的: 動態的增加發送端可傳輸的資料量 

參數名稱 cwnd: 發送端對接收端的資料量限制

最大可傳輸資料會取 rwnd 和 cwnd 中的最小值

運作方式:
RTT(Round-Trip Time,往返时间)是指从发送端发送数据到接收端,并接收到接收端的确认(ACK)所经历的时间
每經過一個 RTT cwnd 即 * 2

ssthresh(Slow Start Threshold,慢启动阈值)是拥塞控制机制中的一个关键参数,它决定了 TCP 连接从“慢启动”阶段切换到“拥塞避免”阶段的时间点。

cwnd 超過 ssthresh 進入 壅塞預防階段
  1. 壅塞預防


當 cwnd 超過 ssthresh 或有資料丟失時進入
主要目的: 將 cwnd 由指數增長改為線性增長

關閉連線


TCP 連線的關閉過程稱為「四次握手」(Four-Way Handshake)。它涉及發送和接收特定的 TCP 封包來安全地終止連接。關閉流程分為以下四個步驟:

1. 第一次握手 (FIN):
client端發送一個 FIN(Finish)封包,告知 server 端它不再發送數據,並希望關閉連接。此時,client端進入 FIN_WAIT_1 狀態。

2. 第二次握手 (ACK):
server 端收到 FIN 後,回覆一個 ACK 封包,確認收到了對方的關閉請求。此時,server端仍然可以繼續傳送數據,而client端進入 FIN_WAIT_2 狀態,等待最終的關閉確認。

3. 第三次握手 (FIN):
server 端在完成它的數據傳輸後,也會發送一個 FIN 封包,表示它也要關閉連接。這時,server 端進入 CLOSE_WAIT 狀態,而client端收到這個 FIN 後進入 TIME_WAIT 狀態。

4. 第四次握手 (ACK):
client端收到 FIN 後,回覆一個最終的 ACK,確認收到了關閉請求。這時,主動方進入 TIME_WAIT 狀態,等待一段時間以確保被動方也能夠完全接收到 ACK,然後最終關閉連接,進入 CLOSED 狀態。

Last updated