TCP和UDP協議
TCP
(1)概述
同其他任何協議棧一樣,TCP
向相鄰的高層提供服務。因為TCP
的上一層就是應用層,因此,TCP
資料傳輸實現了從一個應用程式到另一個應用程式的資料傳遞。應用程式通過程式設計呼叫 TCP 並使用 TCP 服務,提供需要準備傳送的資料,用來區分接收資料應用的目的地址和埠號。通常應用程式通過開啟一個socket
來使用 TCP 服務,TCP 管理到其他 socket 的資料傳遞。可以說,通過 IP 的源/目的可以惟一地區分網路中兩個裝置的關聯,通過 socket 的源/目的可以惟一地區分網路中兩個應用程式的關聯。
(2)三次握手協議
TCP 對話通過三次握手來初始化的。三次握手的目的是使資料段的傳送和接收同步,告訴其他主機其一次可接收的資料量,並建立虛連線。
下面描述了這三次握手的簡單過程。
- 初始化主機通過一個同步標誌置位的資料段發出會話請求。
- 接收主機通過發回具有以下專案的資料段表示回覆: 同步標誌置位、 即將傳送的資料段的起始位元組的順序號、應答並帶有將收到的下一個資料段的位元組順序號。
- 請求主機再回送一個資料段,並帶有確認順序號和確認號。
下圖就是這個流程的簡單示意圖。
TCP 實體所採用的基本協議是滑動視窗協議。當傳送方傳送一個資料包時,它將啟動計時器。當該資料包到達目的地後,接收方的 TCP 實體向回傳送一個資料包,其中包含有一個確認序號,它意思是希望收到的下一個資料包的順序號。如果傳送方的定時器在確認資訊到達之前超時,那麼傳送方會重發該資料包。
(3)TCP 資料包頭
下圖給出了 TCP 資料包頭的格式。
TCP 資料包頭的含義如下所示。
- 源埠、目的埠:16 位長。標識出遠端和本地的埠號。
- 序號:32 位長。標識傳送的資料包的順序。
- 確認號:32 位長。希望收到的下一個資料包的序列號。
- TCP 頭長:4 位長。表明 TCP 頭中包含多少個 32 位字。
- 6 位未用。
- ACK:ACK 位置 1 表明確認號是合法的。如果 ACK 為 0,那麼資料包不包含確認資訊,確認欄位被省略。
- PSH:表示是帶有 PUSH 標誌的資料。接收方因此請求資料包一到便可送往應用程式而不必等到緩衝區裝滿時才傳送。
- RST:用於復位由於主機崩潰或其他原因而出現的錯誤的連線。還可以用於拒絕非法的資料包或拒絕連線請求。
- SYN:用於建立連線。
- FIN:用於釋放連線。
- 視窗大小:16 位長。視窗大小欄位表示在確認了位元組之後還可以傳送多少個位元組。
- 校驗和:16 位長。是為了確保高可靠性而設定的。它校驗頭部、資料和偽 TCP 頭部之和。
- 可選項:0 個或多個 32 位字。包括最大 TCP 載荷,視窗比例、選擇重發資料包等選項。
UDP
(1)概述
UDP 即使用者資料包協議,它是一種無連線協議,因此不需要像 TCP 那樣通過三次握手來建立一個連線。同時,一個 UDP 應用可同時作為應用的客戶或伺服器方。由於 UDP 協議並不需要建立一個明確的連線,因此建立 UDP 應用要比建立 TCP 應用簡單得多。
UDP 協議從問世至今已經被使用了很多年, 雖然其最初的光彩已經被一些類似協議所掩蓋,但是在網路質量越來越高的今天,UDP 的應用得到了大大的增強。它比 TCP 協議更為高效,也能更好地解決實時性的問題。如今,包括網路視訊會議系統在內的眾多的客戶/伺服器模式的網路應用都使用 UDP 協議。
(2)UDP 資料包頭
UDP 資料包頭如下圖所示。
- 源地址、目的地址:16 位長。標識出遠端和本地的埠號。
- 資料包的長度是指包括報頭和資料部分在內的總的位元組數。因為報頭的長度是固定的,所以該域主要用來計算可變長度的資料部分(又稱為資料負載)。
協議的選擇
協議的選擇應該考慮到以下 3 個方面。
(1)對資料可靠性的要求
對資料要求高可靠性的應用需選擇 TCP 協議,如驗證、密碼欄位的傳送都是不允許出錯的,而對資料的可靠性要求不那麼高的應用可選擇 UDP 傳送。
(2)應用的實時性
由於 TCP 協議在傳送過程中要進行三次握手、重傳確認等手段來保證資料傳輸的可靠性。使用 TCP 協議會有較大的時延,因此不適合對實時性要求較高的應用,如 VOIP、視訊監控等。相反,UDP 協議則在這些應用中能發揮很好的作用。
(3)網路的可靠性
由於 TCP 協議的提出主要是解決網路的可靠性問題,它通過各種機制來減少錯誤發生的概率。因此,在網路狀況不是很好的情況下需選用 TCP 協議(如在廣域網等情況),但是若在網路狀況很好的情況下(如區域網等)就不需要再採用 TCP 協議,選擇 UDP 協議來減少網路負荷。
相關文章
- TCP 和 UDP 協議簡介TCPUDP協議
- 傳輸層協議 TCP 和 UDP協議TCPUDP
- UDP 和 TCP 兩種協議簡介UDPTCP協議
- TCP/IP、UDP/IP協議TCPUDP協議
- 終於懂了TCP和UDP協議區別TCPUDP協議
- 淺談TCP和UDP協議的區別TCPUDP協議
- Python教程之udp和tcp協議介紹PythonUDPTCP協議
- 系列TCP/IP協議-UDP(009)TCP協議UDP
- TCP對應的協議和UDP對應的協議(簡單概述)TCP協議UDP
- DNS何時使用TCP與UDP協議?DNSTCPUDP協議
- 網路程式設計協議(TCP和UDP協議,黏包問題)以及socketserver模組程式設計協議TCPUDPServer
- 淺談TCP、UDP、ICMP三種常見協議TCPUDP協議
- KCP協議:從TCP到UDP家族QUIC/KCP/ENET協議TCPUDPUI
- TCP 和 UDPTCPUDP
- TCP和UDPTCPUDP
- 好程式設計師Python培訓分享udp和tcp協議介紹程式設計師PythonUDPTCP協議
- 基於TCP/UDP的Socket程式設計,HTTP/HTTPS協議TCPUDP程式設計HTTP協議
- TCP和UDP協議有什麼區別?工業閘道器能用嗎?TCPUDP協議
- 系列TCP/IP協議-TCP協議概述(011)TCP協議
- 在Linux中,我們都知道,dns採用了tcp協議,又採用了udp協議,什麼時候採用tcp協議?什麼 時候採用udp協議?為什麼要這麼設計?LinuxDNSTCP協議UDP
- TCP協議TCP協議
- Android與物聯網裝置通訊-UDP&TCP協議AndroidUDPTCP協議
- Socket:UDP協議小白UDP協議
- UDP協議詳解UDP協議
- tcp/ip協議和opc協議對比詳解TCP協議
- 實用TCP協議(1):TCP 協議簡介TCP協議
- TCP和UDP比較TCPUDP
- UDP和TCP以及HTTPUDPTCPHTTP
- TCP和UDP對比TCPUDP
- TCP協議、演算法和原理TCP協議演算法
- 網路基礎和 TCP、IP 協議TCP協議
- mysql索引優化和TCP協議MySql索引優化TCP協議
- tcp/ip協議TCP協議
- UDP和TCP的差異UDPTCP
- tcp和udp的區別TCPUDP
- UDP協議抓包分析 -- wiresharkUDP協議
- netty系列之:使用UDP協議NettyUDP協議
- TCP/IP協議族TCP協議