TCP與UDP學習小結

TCP六個標誌位:

  • SYN – 同步(建立聯機)
  • ACK – 確認
  • PSH – 傳送
  • FIN – 結束
  • RST – 重置
  • URG – 緊急

TCP通訊過程

tcp

1. 三次握手建立連接

  • 客戶端發一個SYN握手包給服務端
  • 服務端發一個ACK確認包和SYN握手包給客戶端
  • 客戶端發一個ACK確認包給服務端
    此時,客戶端和服務端都得到了對方確認,開啓傳輸通道,拋出線程處理連接

2. 數據傳輸

  • 數據發送端傳輸PSH包
  • 數據接受端回覆ACK包

3. 四次揮手斷開連接

爲什麼要有四次揮手?計算機資源有限,不使用的時候需要釋放

  • 客戶端發送一個FIN結束包給服務端,證明數據請求完畢
  • 服務端發送一個ACK確認包給客戶端,證明已經收到FIN
  • 服務端發送一個FIN結束包給客戶端,證明數據發送完畢
  • 客戶端發送一個ACK確認包給服務端,證明已經收到FIN

至此,客戶端和服務端都已經確認要斷開連接,連接斷開,釋放資源

四次握手不是關閉TCP的唯一方法,在以下情況會發送RST包關閉連接

  • 主機需要儘快關閉連接
  • 連接超時(對方長時間無響應)
  • 端口或主機不可達(對方意外斷開連接)

TCP和UDP區別

1. TCP特性

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的小結,如有錯誤歡迎指正。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章