TCP六個標誌位:
- SYN – 同步(建立聯機)
- ACK – 確認
- PSH – 傳送
- FIN – 結束
- RST – 重置
- URG – 緊急
TCP通訊過程
1. 三次握手建立連接
- 客戶端發一個SYN握手包給服務端
- 服務端發一個ACK確認包和SYN握手包給客戶端
- 客戶端發一個ACK確認包給服務端
此時,客戶端和服務端都得到了對方確認,開啓傳輸通道,拋出線程處理連接
2. 數據傳輸
- 數據發送端傳輸PSH包
- 數據接受端回覆ACK包
3. 四次揮手斷開連接
爲什麼要有四次揮手?計算機資源有限,不使用的時候需要釋放
- 客戶端發送一個FIN結束包給服務端,證明數據請求完畢
- 服務端發送一個ACK確認包給客戶端,證明已經收到FIN
- 服務端發送一個FIN結束包給客戶端,證明數據發送完畢
- 客戶端發送一個ACK確認包給服務端,證明已經收到FIN
至此,客戶端和服務端都已經確認要斷開連接,連接斷開,釋放資源
四次握手不是關閉TCP的唯一方法,在以下情況會發送RST包關閉連接
- 主機需要儘快關閉連接
- 連接超時(對方長時間無響應)
- 端口或主機不可達(對方意外斷開連接)
TCP和UDP區別
1. TCP特性
- 面向連接
通過三次握手建立連接,四次揮手斷開連接 - 面向字節流
發送端應用層傳入數據字節流(爲了不發生丟包現象,每個數據包都會標註序號),在傳輸層TCP將字節流分成適當長度的報文段,然後傳送至網絡層,經過各種協議到達接受端的傳輸層按序讀取字節傳給應用層。
- 可靠性
- 確認信號:每次收到完整的TCP報文後都會返回ACK確認包
- 超時重傳:每次發出一個報文都會啓動計時器,若在規定時間內未收到對方傳回的ACK包,會重新發送
- 檢驗和:TCP始終保持首部和數據的檢驗和,如果收到的報文檢驗和有差錯,則丟棄報文,不返回ACK包
- 重新排序:由於IP數據報達到可能失序,TCP會將數據進行重新排序交給應用層
- 丟棄重複:TCP會丟棄重複的IP數據包
- 流量控制:接收端將自己可接受的緩衝區大小放入TCP首部,通過ACK告知發送端,發送端以此爲依據來傳輸數據,針對發送方和接收方速度不匹配的問題
- 擁塞控制:針對過多的數據注入網絡中,使得網絡中路由器或鏈路不致過載問題
2. UDP特性
-
無連接
發送報文段之前發送端和接受端沒有握手,並且可以實現一對多通信 -
面向報文
發送方直接將應用層傳入的報文加上首部後進行傳輸,不合並也不拆分,無論應用層交給UDP多長的報文,都作爲一個報文發送,接收方接到後直接去除首部傳給應用層 -
不可靠
UDP只有一個socket接收緩衝區,沒有socket發送緩衝區,即只要有數據就發,不管對方是否可以正確接收,也沒有TCP的一系列可靠機制 -
速度快
UDP頭部只有8字節,不需要建立連接,並且沒有可靠的丟失重發機制(UDP檢驗和提供了差錯檢測,但它對差錯恢復無能爲力)
以上爲近期學習TCP和UDP的小結,如有錯誤歡迎指正。。。