一文讀懂TCP、UDP協議區別和應用場景
TCP(Transmission Control Protocol,傳輸控制協議)和UDP(User Data Protocol ,用戶數據報協議)都屬于TCP/IP協議簇。TCP/IP協議集包括了超文本傳輸協議(HTTP)、文本傳輸協議(FTP)、遠程登錄協議(Telnet)、internet協議(IP)、internet控制信息協議(IMCP)等,而今天要講的傳輸控制協議(TCP)和用戶數據報協議(UDP)正是運行在協議簇的傳輸層。

OSI協議模型、TCP/IP協議模型
TCP和UDP的區別
連接性
TCP是面向連接的協議,在收發數據前必須和對方建立可靠的連接,建立連接的3次握手、斷開連接的4次揮手,為數據傳輸打下可靠基礎;UDP是一個面向無連接的協議,數據傳輸前,源端和終端不建立連接,發送端盡可能快的將數據扔到網絡上,接收端從消息隊列中讀取消息段。
可靠性
TCP提供可靠交付的服務,傳輸過程中采用許多方法保證在連接上提供可靠的傳輸服務,如編號與確認、流量控制、計時器等,確保數據無差錯,不丟失,不重復且按序到達;UDP使用盡可能最大努力交付,但不保證可靠交付。
報文首部
TCP報文首部有20個字節,額外開銷大;UDP報文首部只有8個字節,標題短,開銷小。

UDP報文結構

TCP報文結構
報文傳輸
TCP協議面向字節流,將應用層報文看成一串無結構的字節流,分解為多個TCP報文段傳輸后,在目的站重新裝配;UDP協議面向報文,不拆分應用層報文,只保留報文邊界,一次發送一個報文,接收方去除報文首部后,原封不動將報文交給上層應用。
吞吐量控制
TCP擁塞控制、流量控制、重傳機制、滑動窗口等機制保證傳輸質量;UDP沒有。
雙工性
TCP只能點對點全雙工通信;UDP支持一對一、一對多、多對一和多堆垛的交互通信。
TCP和UDP的編程步驟

TCP編程步驟

UDP編程步驟
從上面TCP、UDP編程步驟可以看出,UDP 服務器端不需要調用監聽(listen)和接收(accept)客戶端連接,而客戶端也不需要連接服務器端(connect)。UDP協議中,任何一方建立socket后,都可以用sendto發送數據、用recvfrom接收數據,不必關心對方是否存在,是否發送了數據。
TCP和UDP的使用場景
為了實現TCP網絡通信的可靠性,增加校驗和、序號標識、滑動窗口、確認應答、擁塞控制等復雜的機制,建立了繁瑣的握手過程,增加了TCP對系統資源的消耗;TCP的重傳機制、順序控制機制等對數據傳輸有一定延時影響,降低了傳輸效率。TCP適合對傳輸效率要求低,但準確率要求高的應用場景,比如萬維網(HTTP)、文件傳輸(FTP)、電子郵件(SMTP)等。
UDP是無連接的,不可靠傳輸,盡最大努力交付數據,協議簡單、資源要求少、傳輸速度快、實時性高的特點,適用于對傳輸效率要求高,但準確率要求低的應用場景,比如域名轉換(DNS)、遠程文件服務器(NFS)等。