TCP協(xié)議和UDP協(xié)議最核心的區別是什么?
奈圖爾科技(www.ntooler.com)整理消息:
對于TCP協(xié)議和UDP協(xié)議,大家應該都有所耳聞。TCP協(xié)議和UDP協(xié)議都工作在傳輸層,他們的目標都是在應用之間傳輸數據。我們常用的網(wǎng)絡(luò )通信,比如瀏覽網(wǎng)頁(yè),查看郵件,電話(huà)通信等,都是通過(guò)這兩種協(xié)議來(lái)進(jìn)行數據傳輸的。
01 TCP與UDP的區別
這兩種協(xié)議有什么區別呢?他們又是如何工作的?跟著(zhù)文檔君往下看~
TCP協(xié)議和UDP協(xié)議最核心的區別是什么?看看下邊圖片你就知道了。
TCP(Transmission Control Protocol,傳輸控制協(xié)議)是一種面向連接的、可靠的、基于字節流的傳輸層通信協(xié)議??煽啃?,是TCP的最 大特點(diǎn),主要體現在:數據無(wú)丟失、無(wú)錯誤、無(wú)失序、無(wú)重復到達。就如同上圖,TCP能將“孩子”(數據包)十分安全地傳送給接收者。
UDP(User Datagram Protocol,用戶(hù)數據報協(xié)議)是一種無(wú)連接、不可靠、快速傳輸的傳輸層通信協(xié)議??焖賯鬏?,是UDP的最 大特點(diǎn),主要體現在:數據發(fā)送前,不需要提前建立連接,能更高效地傳輸數據,但可靠性無(wú)法保證。就如同上圖,UDP只負責把“孩子”(數據包)送出去,不管接收者有無(wú)收到。
直觀(guān)感受了TCP協(xié)議與UDP協(xié)議的區別后,咱們來(lái)看看TCP協(xié)議是如何工作的?
02 TCP是如何工作的?
TCP通信的連接管理機制(可靠機制)總結為:三次握手建立連接,四次揮手斷開(kāi)連接。
< 三次握手建立連接 >
TCP 是面向連接的協(xié)議,所以每次發(fā)出的請求都需要對方進(jìn)行確認。TCP 客戶(hù)端與 TCP 服務(wù)器在通信之前需要完成三次握手才能建立連接。
第 一次握手
目的:這是一個(gè)請求建立連接的數據包,客戶(hù)端先向服務(wù)器發(fā)送一個(gè)同步數據包。
數據包的TCP首部?jì)热?/strong>:
同步SYN=1(客戶(hù)端請求建立連接)
序號seq=x(客戶(hù)端所傳送數據的第 一個(gè)字節的序號)
第二次握手
目的:服務(wù)器收到客戶(hù)端發(fā)送的第 一個(gè)數據包后,判斷出為主動(dòng)建立連接的數據包。若服務(wù)器同意連接,則服務(wù)器發(fā)送一個(gè)數據包進(jìn)行回應。
數據包的TCP首部?jì)热?/strong>:
同步SYN=1(服務(wù)器建立連接)
確認標記ACK=1(服務(wù)器同意連接)
序號seq=y(服務(wù)器所傳送數據的第 一個(gè)字節的序號)
確認號ack=x+1(已經(jīng)收到客戶(hù)端發(fā)送的x個(gè)字節數據,并告訴客戶(hù)端下次應從數據的第x+1個(gè)字節開(kāi)始發(fā)送)
第三次握手
目的:客戶(hù)端收到服務(wù)器的確認之后,再給服務(wù)器發(fā)送一個(gè)數據包。
數據包的TCP首部?jì)热?/strong>:
同步SYN=1(雙方已同意建立連接)
確認標記ACK=1(收到服務(wù)器的確認數據包)
序號seq=x+1(發(fā)出的數據包就是數據的第x+1個(gè)字節)
確認號ack=y+1(收到服務(wù)器發(fā)送y字節數據,并告訴服務(wù)器下次應從數據的第y+1個(gè)字節開(kāi)始發(fā)送)
Tips
在客戶(hù)端與服務(wù)器端傳輸的TCP數據中,雙方的序號seq和確認號ack的值,都是在彼此seq和ack值的基礎上進(jìn)行計算的,這樣做保證了TCP數據傳輸的連貫性。一旦出現某一方發(fā)出的TCP數據丟失,便無(wú)法繼續"握手",以此確保了"三次握手"的順利完成。
< 四次揮手斷開(kāi)連接 >
聚散終有時(shí),當數據傳輸完成后,TCP客戶(hù)端與TCP服務(wù)器需要通過(guò)四次會(huì )話(huà)斷開(kāi)連接,這個(gè)過(guò)程我們稱(chēng)之為四次揮手。
第 一次揮手
目的:客戶(hù)端向服務(wù)器發(fā)送連接釋放的請求數據包,并停止發(fā)送數據。
在連接釋放數據包的TCP首部中:
終止FIN=1(客戶(hù)端要主動(dòng)釋放客戶(hù)端和服務(wù)器的TCP連接)
序號seq=x(x由客戶(hù)端指定。隨后等待服務(wù)器的確認)
第二次揮手
目的:服務(wù)器在收到連接釋放的報文之后,給客戶(hù)端發(fā)送確認報文。因此,客戶(hù)端到服務(wù)器方向上的連接釋放,TCP連接此時(shí)處于半關(guān)閉狀態(tài)。半閉因為客戶(hù)端已無(wú)法發(fā)送數據給服務(wù)器,半開(kāi)因為服務(wù)器仍可以發(fā)送數據給客戶(hù)端并被其接收。
在服務(wù)器發(fā)送給客戶(hù)端確認報文的TCP首部中:
確認標記ACK=1(收到了客戶(hù)端發(fā)送的數據包,同意客戶(hù)端釋放連接)
確認號ack=x+1(在收到客戶(hù)端報文的基礎上,將其序號seq值加1作為本段報文確認號ack的值)
序號seq=y(y由服務(wù)器指定。隨后等待客戶(hù)端的確認)
第三次揮手
目的:若服務(wù)器已停止向客戶(hù)端發(fā)送的數據,則釋放連接,并向客戶(hù)端發(fā)送確認報文。
在確認報文的TCP首部中:
終止FIN=1(服務(wù)器釋放服務(wù)器到客戶(hù)端的TCP連接,不再向客戶(hù)端發(fā)送數據)
確認標記ACK=1(服務(wù)器對客戶(hù)端的數據傳送完畢)
確認號ack=x+1(在收到客戶(hù)端報文的基礎上,將其序號seq值加1作為本段報文確認號ack的值)
序號seq=z(z由服務(wù)器指定。隨后等待客戶(hù)端的確認)
第四次揮手
目的:客戶(hù)端收到服務(wù)器的連接釋放報文段后,向服務(wù)器發(fā)出確認報文。
在確認報文的TCP首部中:
終止FIN = 1(客戶(hù)端和服務(wù)器斷開(kāi)連接)
確認標記ACK=1(收到服務(wù)器的確認報文,并同意服務(wù)器釋放連接)
確認號ack=z+1(在收到服務(wù)端報文的基礎上,將其序號seq值加1作為本段報文確認號ack的值)
序列號seq=x+1(在收到服務(wù)端報文的基礎上,將其確認號作為本段報文序列號的值)
了解完TCP后,再來(lái)了解一下UDP是如何工作的~
03 UDP是如何工作的?
UDP協(xié)議是面向無(wú)連接的,即發(fā)送數據之前不需要建立連接(無(wú)TCP協(xié)議復雜的三次握手,四次揮手的過(guò)程),發(fā)送數據就是簡(jiǎn)單的把數據包封裝一下,然后從網(wǎng)卡發(fā)出去,數據包之間并沒(méi)有狀態(tài)上的聯(lián)系。UDP 協(xié)議基本上是 IP 協(xié)議與上層協(xié)議的接口,UDP協(xié)議使用IP層提供的服務(wù)將應用層得到的數據從一臺主機的某個(gè)應用進(jìn)程傳遞到另一臺主機的某個(gè)應用進(jìn)程。
舉個(gè)栗子~
當傳輸層從IP層收到UDP數據報文時(shí),根據UDP數據報文首部中的目的端口,把UDP數據報文通過(guò)相應的端口傳遞給應用進(jìn)程,如下圖所示。
如上圖中應用進(jìn)程4與端口2,如果接收方UDP發(fā)現收到的報文中的目的端口號不正確(即不存在對應于端口號的應用進(jìn)程),則丟棄該報文,并由ICMP發(fā)送“端口不可達"差錯報文給發(fā)送方。
Tips
ICMP(Internet Control Message Protocol,Internet控制報文協(xié)議)是TCP/IP協(xié)議簇的一個(gè)子協(xié)議,用于在IP主機、路由器之間傳遞控制消息??刂葡⑹侵?span style="text-decoration:underline;">網(wǎng)絡(luò )通不通、主機是否可達、路由是否可用等網(wǎng)絡(luò )本身的消息。
04 總結一下
數據傳輸看似簡(jiǎn)單,其實(shí)非常智慧~
TCP和UDP服務(wù)的是程序,但程序和人是一樣的,可以你來(lái)我往進(jìn)行交流,也可以一股腦的傾訴。TCP就是彼此之間坦誠交流。消息有沒(méi)有收到,收到的信息是否一致,都可以有及時(shí)的反饋。
優(yōu)點(diǎn):可靠。
缺點(diǎn):傳輸速率慢。
適用場(chǎng)景:通信軟件的賬戶(hù)登錄、支付等相關(guān)功能,采用可靠的TCP。
UDP就是傾訴,我不管你有沒(méi)有聽(tīng)進(jìn)去,不管你有無(wú)反饋,我就要不停地說(shuō)。
優(yōu)點(diǎn):傳輸速率快。
缺點(diǎn):不可靠。
適用場(chǎng)景:QQ、微信等即時(shí)通信軟件進(jìn)行點(diǎn)對點(diǎn)通信,或者音視頻通話(huà)時(shí),通常采用傳輸快速的UDP。
TCP和UDP各有優(yōu)缺點(diǎn),就看你實(shí)際需求啦~
掃一掃,關(guān)注我們