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 壅塞控制解法
流量控制
主要目的: 預防發送端送出過多資料到接收端的機制
在傳送機制上 多加緩衝區大小 rwnd 避免傳送端回傳過多資料
慢啟動
主要目的: 動態的增加發送端可傳輸的資料量
參數名稱 cwnd: 發送端對接收端的資料量限制
最大可傳輸資料會取 rwnd 和 cwnd 中的最小值
運作方式:
RTT(Round-Trip Time,往返时间)是指从发送端发送数据到接收端,并接收到接收端的确认(ACK)所经历的时间
每經過一個 RTT cwnd 即 * 2
ssthresh(Slow Start Threshold,慢启动阈值)是拥塞控制机制中的一个关键参数,它决定了 TCP 连接从“慢启动”阶段切换到“拥塞避免”阶段的时间点。
cwnd 超過 ssthresh 進入 壅塞預防階段
壅塞預防
當 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