終於懂了TCP和UDP協議區別
老樣子先認識一下這倆夥計
TCP和UDP
都是來自
於傳輸層
的協議
。
傳輸層是位於第2層的,如下圖所示。
傳輸層位於應用層和網路層之間,負責位於不同主機中程式之間的通訊。
之前一位老哥問我:不同電腦之間是如何通訊的呢?是不是還要自己開發協議什麼的。
分析:這位老哥覺得如果開發一個應用需要自己定義協議。其實也並不是沒有道理的,協議是什麼?協議就是雙方通訊共同遵守的規則,被稱之為協議
。像怎麼使用的HTTP,FTP這些都屬於應用服務,為什麼叫應用服務?因為是專門服務其他人的應用。像QQ、微信、淘寶、瀏覽器這些通常稱之為應用客戶端,當然了這些的服務端我們們是看不到摸不著的,除非你是參與其中開發的人員。QQ使用的是OICQ協議,HTTP服務則使用的HTTP協議,這些協議肯定都是自定義的。如果你使用HTTP伺服器的話,你就必須遵守這個規則,否則人家是不認你的。其實都是基於TCP或UDP的。
Internet的傳輸層提供兩種
不同的服務
,應用開發者必須選擇
其中的一種
。
- TCP
是
面向連線
的可靠的傳輸層協議。
- UDP
是
無連線
的不可靠的傳輸層協議。
何來可靠和不可靠之說?
UDP相對於IP來說,只新增了process到process的分發服務和錯誤檢驗機制,因為,提供的也是不可靠的服務。
而TCP為應用提供了包括可靠資料傳輸、流量控制和擁塞控制等在內的服務。
有了可靠的TCP,為什麼還要UDP?
- 應用可以
更精細
控制何時
傳送何種
資料無需
事先建立連線
就可以傳送資料- 無連線狀態,實現簡單
- 頭部開銷小
擴充套件:
- 1、應用可更好控制何時傳送何種資料:無須建立連線,UDP可儘快將訊息發給網路層;TCP可能需要重傳在規定時間內沒有收到確認的Segment。UDP沒有建立連線所引入的延遲,這可能是DNS選擇UDP而不是TCP的最主要原因。
- 2、實現簡單:UDP因為是無連線的,Host因而無須維護連線狀態,實現簡單;
- 3、頭部開銷小:UDP的Segment頭部欄位共8個位元組;而TCP的頭部共包括20個位元組.
UDP被多數多媒體應用
使用。但是…
- UDP
通常
被認為是不負責任
的- UDP流量
通常
不容易穿透防火牆- 因此TCP的多媒體應用越來越多了…
總結
TCP的優點:
- 可靠,穩定。
- TCP的可靠體現在TCP在傳輸資料之前會有三次握手來建立連線,而且在資料傳遞時,有確認、視窗、重傳、擁塞控制機制,在資料傳完後,還會斷開連線用來節約系統資源。
TCP的缺點:
- 慢,效率低,佔用資源高,易被攻擊;TCP在傳遞資料之前要先建立連線,這會消耗時間,而且在資料傳遞時,確認機制,重傳機制,擁塞控制機制等都會消耗大量的實踐,而且要在每臺裝置上維護所有的傳輸連線。事實上每個連線都會佔用系統的CPU、記憶體等硬體資源。
- 因為TCP有確認機制、三次握手機制,這些優點在成了缺陷,導致TCP容易被人利用,實現DOS、DDOS、CC、猜測攻擊等。
UDP的優點:
- 快,比TCP稍安全。
- UDP沒有TCP的握手、確認、視窗、重傳、擁塞控制,UDP是一個無狀態的傳輸協議,所以它在傳遞資料時非常快。
- 沒有TCP的這些機制(如:三次握手),攻擊者利用UDP的漏洞就要少一些。但是UDP也是無法避免攻擊的,比如:UDPFlood等。
UDP的缺點:
- 不可靠,不穩定。
- 因為UDP沒有TCP那些可靠的機制,在資料傳遞時,如果網路質量不好,就會很容易丟包。
在UDP和TCP協議面前,如何選擇並使用?
基於上面的優點和缺點的分析
什麼時候應該使用TCP傳輸協議:
當網路通訊有要求的時候,比如:整個資料要準確無誤的傳遞給對方,這往往用於一些可靠的應用,比如:HTTP,HTTPS,FTP等傳輸檔案的協議,POP、SMTP等郵件傳輸協議。
什麼時候應該使用UDP:
當網路通訊質量要求不高的時候,要求網路通訊速度能儘量的快,這時就可以使用UDP。比如:QQ語言、QQ視訊等。
面試經常會問道:TCP和UDP協議的區別是什麼?
簡化很多字的總結
- 1、TCP面向連線,UDP無連線;
- 2、TCP佔用系統資源較多,UDP少;
- 3、TCP結構複雜,UDP絞簡單;
- 4、TCP基於流模式,UDP時資料包模式;
- 5、TCP保證資料正確性,UDP可能丟包;
- 6、TCP保證資料順序,UDP不保證。
相關文章
- 淺談TCP和UDP協議的區別TCPUDP協議
- TCP和UDP協議TCPUDP協議
- TCP 和 UDP 協議簡介TCPUDP協議
- 傳輸層協議 TCP 和 UDP協議TCPUDP
- tcp和udp的區別TCPUDP
- TCP和UDP協議有什麼區別?工業閘道器能用嗎?TCPUDP協議
- UDP 和 TCP 兩種協議簡介UDPTCP協議
- TCP/IP、UDP/IP協議TCPUDP協議
- Python教程之udp和tcp協議介紹PythonUDPTCP協議
- php中TCP和UDP的區別PHPTCPUDP
- 系列TCP/IP協議-UDP(009)TCP協議UDP
- MQTT是TCP還是UDP?TCP與UDP區別MQQTTCPUDP
- TCP對應的協議和UDP對應的協議(簡單概述)TCP協議UDP
- UDP與TCP的區別UDPTCP
- TCP與UDP的區別TCPUDP
- HTTP與UDP/TCP區別HTTPUDPTCP
- 基於TCP/UDP的Socket程式設計,HTTP/HTTPS協議TCPUDP程式設計HTTP協議
- TCP和UDP的優缺點及區別TCPUDP
- DNS何時使用TCP與UDP協議?DNSTCPUDP協議
- TCP與UDP區別詳解TCPUDP
- 知其所以然~tcp和udp的區別TCPUDP
- 如何理解UDP 和 TCP? 區別? 應用場景?UDPTCP
- Python 關於TCP簡介以及與UDP的區別PythonTCPUDP
- Gossip協議和Grpc協議的區別Go協議RPC
- 網路程式設計協議(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的區別TCPUDP
- 系列TCP/IP協議-TCP建立與終止連線(012)TCP協議
- 系列TCP/IP協議-TCP協議概述(011)TCP協議
- 在Linux中,我們都知道,dns採用了tcp協議,又採用了udp協議,什麼時候採用tcp協議?什麼 時候採用udp協議?為什麼要這麼設計?LinuxDNSTCP協議UDP
- 工業4G插卡無線路由器解決方案串列埠轉網口通訊TCP/IP協議與UDP協議的區別路由器串列埠TCP協議UDP
- 通訊協議和網路協議有什麼區別協議
- TCP協議TCP協議
- Android與物聯網裝置通訊-UDP&TCP協議AndroidUDPTCP協議