1. 程式人生 > >計算機網路:TCP與UDP

計算機網路:TCP與UDP

TCP,UDP協議區別

  1. TCP協議:面向連線,傳輸可靠,位元組流傳輸,傳輸效率慢,所需資源多,應用場景(要求通訊資料可靠:檔案傳輸,郵件傳輸,遠端登入),首部位元組20-60;
  2. UDP協議:無連線,不可靠,以資料報文段的形式傳輸,傳輸效率快,所需資源少,應用場景(要求通訊速度快,如域名轉換,qq語音,直播),首部位元組8個,由4個欄位組成;

UDP 在傳送資料之前不需要先建立連線,遠地主機在收到 UDP 報文後,不需要給出任何確認。雖然 UDP 不提供可靠交付,但在某些情況下 UDP 確是一種最有效的工作方式(一般用於即時通訊),比如: QQ 語音、 QQ 視訊 、直播等等

TCP 提供面向連線的服務。在傳送資料之前必須先建立連線,資料傳送結束後要釋放連線。 TCP 不提供廣播或多播服務。由於 TCP 要提供可靠的,面向連線的運輸服務(TCP的可靠體現在TCP在傳遞資料之前,會有三次握手來建立連線,而且在資料傳遞時,有確認、視窗、重傳、擁塞控制機制,在資料傳完後,還會斷開連線用來節約系統資源),這一難以避免增加了許多開銷,如確認,流量控制,計時器以及連線管理等。這不僅使協議資料單元的首部增大很多,還要佔用許多處理機資源。TCP 一般用於檔案傳輸、傳送和接收郵件、遠端登入等場景。

開啟一個連結 --》顯示主頁的過程

在這裡插入圖片描述
OSPF:Open Shortest Path First開放式最短路徑優先
ARP:Address Resolution Protocol地址解析協議
MAC:(Media Access Control或者Medium Access Control)地址,意譯為媒體訪問控制,或稱為實體地址、硬體地址,用來定義網路裝置的位置。在OSI模型中,第三層網路層負責 IP地址,第二層資料鏈路層則負責 MAC地址。因此一個主機會有一個MAC地址,而每個網路位置會有一個專屬於它的IP地址。 [1]
MAC地址是網絡卡決定的,是固定的

TCP三次握手和四次揮手

在這裡插入圖片描述

客戶端–傳送帶有 SYN 標誌的資料包–一次握手–服務端
服務端–傳送帶有 SYN/ACK 標誌的資料包–二次握手–客戶端
客戶端–傳送帶有帶有 ACK 標誌的資料包–三次握手–服務端

為什麼要三次握手?
三次握手的目的是建立可靠的通訊通道,說到通訊,簡單來說就是資料的傳送與接收,而三次握手最主要的目的就是雙方確認自己與對方的傳送與接收是正常的。
第一次握手:Client 什麼都不能確認;Server 確認了對方傳送正常
第二次握手:Client 確認了:自己傳送、接收正常,對方傳送、接收正常;Server 確認了:自己接收正常,對方傳送正常
第三次握手:Client 確認了:自己傳送、接收正常,對方傳送、接收正常;Server 確認了:自己傳送、接收正常,對方傳送接收正常
所以三次握手就能確認雙發收發功能都正常,缺一不可。

為什麼要傳回 SYN

接收端傳回傳送端所傳送的 SYN 是為了告訴傳送端,我接收到的資訊確實就是你所傳送的訊號了。

SYN 是 TCP/IP 建立連線時使用的握手訊號。在客戶機和伺服器之間建立正常的 TCP 網路連線時,客戶機首先發出一個 SYN 訊息,伺服器使用 SYN-ACK 應答表示接收到了這個訊息,最後客戶機再以 ACK(Acknowledgement[漢譯:確認字元 ,在資料通訊傳輸中,接收站發給傳送站的一種傳輸控制字元。它表示確認發來的資料已經接受無誤。 ])訊息響應。這樣在客戶機和伺服器之間才能建立起可靠的TCP連線,資料才可以在客戶機和伺服器之間傳遞。

傳了 SYN,為啥還要傳 ACK

雙方通訊無誤必須是兩者互相傳送資訊都無誤。傳了 SYN,證明發送方到接收方的通道沒有問題,但是接收方到傳送方的通道還需要 ACK 訊號來進行驗證。

斷開一個 TCP 連線則需要“四次揮手”:

客戶端-傳送一個 FIN,用來關閉客戶端到伺服器的資料傳送
伺服器-收到這個 FIN,它發回一 個 ACK,確認序號為收到的序號加1 。和 SYN 一樣,一個 FIN 將佔用一個序號
伺服器-關閉與客戶端的連線,傳送一個FIN給客戶端
客戶端-發回 ACK 報文確認,並將確認序號設定為收到序號加1

為什麼要四次揮手

任何一方都可以在資料傳送結束後發出連線釋放的通知,待對方確認後進入半關閉狀態。當另一方也沒有資料再發送的時候,則發出連線釋放通知,對方確認後就完全關閉了TCP連線。
舉個例子:A 和 B 打電話,通話即將結束後,A 說“我沒啥要說的了”,B回答“我知道了”,但是 B 可能還會有要說的話,A 不能要求 B 跟著自己的節奏結束通話,於是 B 可能又巴拉巴拉說了一通,最後 B 說“我說完了”,A 回答“知道了”,這樣通話才算結束。
上面講的比較概括,推薦一篇講的比較細緻的文章:

blog.csdn.net/qzcsu/artic…

參考:https://juejin.im/post/5ba591386fb9a05cd31eb85f