《Linux網路開發必學教程》7_TCP 與 UDP

TianSong發表於2022-05-05

TCP/IP 分層結構

image.png

  • 應用層:各個應用程式可以定義(使用)各種這樣的協議
  • 傳輸層:確保發出的資料能夠達到目標主機,完成資料傳輸
  • 網路層:填寫資料包地址,選擇資料傳輸路徑
  • 資料鏈路層:融合不同連線方式的鏈路,遮蔽網路差異
  • 物理層:具體連線方式,有線,無線,光纖...

TCP/IP 工作方式

image.png

image.png

TCP/IP層次結構的特點

  • 上層依賴鄰接下層的能力,下層只為直接鄰接上層服務
  • 上層不知道下層的工作機制,下層不管上層傳輸的資料內容
  • 不做跨層服務,層次結構中的角色缺一不可

image.png

深入理解網路層(IP層)

  • IP 定址:IP 地址屬於網路層地址,用於標識網路上的主機
  • 路由控制:控制資料如何到達主機(如:需要經過哪些路由器轉發)
  • 無連線:資料包根據 IP 地址在網路上傳遞(無需與目標主機建立連線)
Mac 地址:資料鏈路層所使用的硬體地址
Mac 地址與網路無關,出廠時寫入到網路裝置中
當主機從網路上每收到一個資料幀時,首先檢查資料中的 MAC 地址。如果是發往本機的資料幀則收下,之後進行其他的處理;否則就將此幀丟棄,不再進行其他的處理。

IP 地址和 MAC 地址

  • IP 地址是動態的,不屬於某個具體的硬體 (MAC 地址隸屬於具體硬體)
  • IP 地址是網路層使用的地址(用於跨網路投遞資料包)
  • MAC 地址是資料鏈路層使用的地址(用於確定目標網路中接收資料的主機)
  • 路由器中記錄了本網路中主機 IP 地址與 MAC 地址的對映關係(ARP協議完成)

IP 路由控制

  • 為了將資料發給目標主機,所有主機都維護著一張路由表
  • 路由表記錄了 IP 資料包下一步應該發給哪個路由器

image.png

IP 資料轉發

  • IP 包轉發用的是 ”盡力服務“ 策略

    • ”盡力服務“ 指 ”會努力“, 但不保證結果
    • 轉發時會通過附加資訊檢查資料合法性,但出現異常不會進行重發
    • 以包為單位進行轉發,不保證到達(發出之後,石沉網海)
TCP/IP 網路層次結構是否能提供可靠資料傳輸?

傳輸控制協議 (Transmission Control Protocol)

  • TCP 在協議實現上提供可靠資料傳輸

    • TCP 不存在 ”資料包“ 的概念,實現了流式傳輸 (資料如流水,無頭無尾)
    • TCP 內部有服務狀態,能夠精確知道資料是否已經傳送成功,是否被接收...
    • TCP 在行為上可進行阻塞控制(網路環境變差時,能夠調整資料傳送速度)

TCP 連線建立

image.png

問:三次互動結束後,建立連線,為什麼是三次?
答:防止舊的重複連線引起連線混亂問題
比如在網路環境比較複雜的情況,客戶端可能會連續傳送多次請求。如果只設計成兩次握手的情況,服務端只能一接收請求,然後返回請求資訊,也不知道客戶端是否請求成功。這些過期請求的話就會造成網路連線的混亂。
所以設計成三次握手的情況,客戶端在接收到服務端SEQ+1的返回訊息之後,就會知道這個連線是歷史連線,所以會傳送報文給服務端,告訴服務端。
所以TCP設計成三次握手的目的就是為了避免重複連線。
然後可以設計成四次握手?五次握手?不可以?答案是也是可以的,不過為了節省資源,三次握手就可以符合實際情況,所以就沒必要設計成四次握手、五次握手等等情況

image.png

TCP 的天生缺陷 (DDoS攻擊)

  • 客戶端收到 SYN,ACK 之後,不再回復最後的 ACK 訊息
  • 這將導致服務端消耗資源,但並不會實際進行通訊
  • 當多個傀儡客戶端同時對服務端進行 ”連線請求“,服務端資源將耗盡

image.png

TCP 連線斷開

image.png

問:四次互動結束後,連線斷開,為什麼是四次?
答:因為TCP是全雙工通訊的
第一次揮手:當主動方傳送斷開連線的請求(即FIN報文)給被動方時,僅僅代表主動方不會再傳送資料包文了,但主動方仍可以接收資料包文。
第二次揮手:被動方此時有可能還有相應的資料包文需要傳送,因此需要先傳送ACK報文,告知主動方“我知道你想斷開連線的請求了”。這樣主動方便不會因為沒有收到應答而繼續傳送斷開連線的請求(即FIN報文)
第三次揮手:被動方在處理完資料包文後,便傳送給主動方FIN報文;這樣可以保證資料通訊正常可靠地完成。傳送完FIN報文後,被動方進入LAST_ACK階段(超時等待)。
第四揮手:如果主動方及時傳送ACK報文進行連線中斷的確認,這時被動方就直接釋放連線,進入可用狀態。

image.png

UDP 的特點:完全繼承網路層工作方式

  • 無需連線,直接指定 IP 地址和埠即可傳送資料
  • 監聽固定埠,只要有資料,統統接收
  • 不管網路情況,只要有資料統統可傳送
  • 不關心資料是否到達

UDP 的使用場合

  • 對資料不敏感,需要實時性的場合(如:直播,實時遊戲)
  • 網路環境比較好的場合(如:物聯網家居)
  • 需要深度定製協議的場合(如:”不丟包的“UDP協議)

TCP 與 UDP 的區別

  • TCP: 瓶口到嘴上了嗎?瓶口到嘴上了嗎?瓶口到嘴上了嗎?好,給你喝水。
  • UDP:給你給你都給你,我懶得管你喝不喝得到。

image.png

相關文章