在 it 圈混跡多年的小夥伴們,對 tcp 和 udp 肯定再熟悉不過了。作為計算機網路專業畢業多年的二狗子,除了 osi 七層和 tcp/ip 四層模型,就是對網路協議印象比較深刻了。在面試中,網路協議也是我們必須要掌握的知識。作為 tcp/ip 中兩個最具有代表性的傳輸層協議,tcp 和 udp 經常被拿出來相互比較。
今天我們就來簡單聊聊 tcp 和 udp,不過在講 tcp 和 udp之前,我們先來了解一下 tcp/ip。
tcp/ip 網路模型
tcp/ip 是網際網路相關的各類協議族的總稱,它以兩個原始協議:傳輸控制協議(tcp)和internet 協議(ip)來命名。比如:tcp,udp,ip,ftp,http,icmp,smtp 等都屬於 tcp/ip 族內的協議。tcp/ip 模型是網際網路的基礎,它可以劃分為四層,分別為鏈路層、網路層、傳輸層和應用層。
osi 七層模型
tcp/ip 四層模型
相關網路協議
應用層應用層
表示層telnet, rlogin, snmp, gopher
會話層smtp, dns
傳輸層傳輸層
tcp, udp
網路層網路層
ip, icmp, arp, rarp, akp, uucp
資料鏈路層
鏈路層fddi, ethernet, arpanet, pdn, slip, ppp
物理層ieee 802.1a, ieee 802.2 到 ieee 802.11
下面我們主要來介紹一下傳輸層協議:tcp 和 udp。
tcp
tcp 全稱為傳輸控制協議(transmission control protocol),它由 ietf 的 rfc 793 定義,是一種面向連線的點對點傳輸通訊協議,它以有序順序將資料報作為非結構化位元組流傳送。
tcp 通過使用序列號和確認訊息,從傳送節點提供有關傳輸到目標節點的資料報的傳遞的資訊。tcp 確保資料的可靠性,端到端傳遞,重新排序和重傳,直到達到超時條件或接收到資料報的確認為止。
tcp 是 internet 上最常用的協議。當我們在瀏覽器中請求網頁時,計算機會將 tcp 資料報傳送到 web 伺服器的位址,要求它將網頁返還給我們。web 伺服器通過傳送 tcp 資料報流進行響應,然後瀏覽器將這些資料報縫合在一起以形成網頁。tcp 的全部意義在於它的可靠性,它通過對資料報編號來對其進行排序,而且它會通過讓伺服器將響應傳送回瀏覽器說「已收到」來進行錯誤檢查。因此在傳輸過程中不會丟失或破壞任何資料。
我們接下來看下 tcp 的連線過程:
1.tcp 的連線過程(三次握手)
2.tcp 終止連線
tcp 是全雙工的,在斷開連線時兩端都需要傳送 fin 和 ack。
udp
使用者資料報協議(user datagram protocol)是一種無連線的傳輸層通訊協議,用於建立低容錯和丟失等待時間的連線,可以在網路內或跨網路傳遞服務或資料報。udp 有不提供資料報分組、組裝和不能對資料報進行排序的缺點。也就是說,當報文傳送之後,是無法得知其是否安全完整到達的。
當應用程式使用 udp 時,資料報僅傳送到目標。傳送者不必等待確保接收者已收到該資料報,它會繼續傳送下乙個資料報。如果目標錯過了一些資料報,則它們只會被丟掉,傳送者不會重新傳送它們。這也意味著裝置可以更快地進行通訊。
例如在遊戲中,如果我們因為網路原因錯過了接收一些 udp 資料報,那當收到較新的資料報時,遊戲畫面可能會跳幀。如果錯過了舊資料報,錯過了就是錯過了,因為就算沒有我們,遊戲也會繼續執行。在遊戲中重要的是正在發生的事情,而不是幾秒鐘前發生的事情。拋棄一些錯誤有助於加快遊戲連線速度並減少延遲。
大多數應用程式都需要 tcp 的可靠性和糾錯機制,但是某些應用程式也需要 udp 的高效性和降低開銷。我們可以通過一些諸如 wireshark、fiddler 等網路分析工具,就可以看到傳送和接收不同型別的資料報。
tcp 和 udp 有許多區別和相似之處。它們都是通過 internet 傳送資料報的最常用的協議。並且它們都在 tcp/ip 協議棧的傳輸層上工作。
乙個簡單的例子,可以清楚地了解兩者的差異:
假設有兩座房子,house1 和 house2,並且必須從 h1 傳送一封信到 h2。但是這兩座房子之間有一條河。現在我們如何寄信?
解決方案 1:在河上架橋,然後將其交付。
解決方案 2:通過鴿子運送。
將第乙個解決方案視為 tcp,必須進行連線(橋)才能傳遞資料(信)。
這樣得到的資料是可靠的,因為它可以直接到達另一端而不會丟失或者出錯。
第二種解決方案類似 udp,無需連線即可傳送資料。與需要建立連線(橋)的 tcp 相比,該過程更快。但是資料並不可靠:因為我們並不知道這只鴿子是否會朝正確的方向前進,或者會在途中掉信或遇到一些其他問題。
簡單總結下 tcp 和 udp 的區別:
連線和無連線:tcp 是面向連線的協議,而 udp 是無連線協議。tcp 可以在傳送資料之前在傳送方和接收方之間建立連線。而 udp 在傳送資料之前不會先建立連線。
可靠性:tcp 是可靠的。使用 tcp 協議傳送的資料可以保證傳遞到接收。如果資料在傳輸過程中丟失,它會恢復資料並重新傳送。tcp 還將檢查資料報中的錯誤並跟蹤資料報,以保證資料不會丟失或損壞。
而 udp 是不可靠的,它不能提供***質量的傳遞,並且資料報包可能會在傳輸中損壞或丟失。
流量控制:tcp 使用流控制機制來確保傳送者不會一次傳送太多資料報而壓倒接收者。tcp 將資料儲存在傳送緩衝區中,並在接收緩衝區中接收資料。當應用程式準備就緒時,它將從接收緩衝區讀取資料。如果接收緩衝區已滿,則接收器將無法處理更多資料並將其丟棄。為了保持可以傳送給接收方的資料量,接收方會告訴傳送方接收緩衝區中有多少剩餘空間(接收視窗)。每次接收到資料報時,都會使用當前接收視窗的值向傳送方傳送一條訊息。udp 不提供流控制。使用 udp,資料報以連續流的形式到達或被丟棄。
速度:tcp 比 udp 慢,因為它「顧慮」比較多:tcp 必須建立連線,進行錯誤檢查,並確保按照傳送順序接收檔案。而 udp 則更簡單,更高效。
使用場景:tcp 最適合用於對時序不太關心的,且要求高可靠性的應用程式。
udp 最適合需要速度和效率的應用程式。
聊了這麼多,相信你對 tcp 和 udp 也有了基本的了解,那麼你認為:tcp 和 udp,哪個更勝一籌呢?
分享、點讚、在看
三連擊,小拍獎金 +5 元
C 接收和傳送UDP資料
除了點對點,通常udp資料的傳遞方式有兩種,一種是broadcast,一種是multicast。中文一般把它們翻譯作廣播和組播。前者是簡單的在區域網裡面廣播 後者是借助路由器將資料傳送到包括英特網在內的任何多個位址。在c 裡面,處理udp通訊最簡單的方法就是使用udpclient。具體使用方法我也不...
C 接收和傳送UDP資料
除了點對點,通常udp資料的傳遞方式有兩種,一種是broadcast,一種是multicast。中文一般把它們翻譯作廣播和組播。前者是簡單的在區域網裡面廣播 後者是借助路由器將資料傳送到包括英特網在內的任何多個位址。在c 裡面,處理udp通訊最簡單的方法就是使用udpclient。具體使用方法我也不...
分析udp資料報 網路協議之TCP和UDP
首先強調一點,tcp ip協議是乙個協議簇。裡面包括很多協議的,udp只是其中的乙個,之所以命名為tcp ip協議,因為tcp ip協議是兩個很重要的協議,就用他兩命名了。兩個協議的區別實際使用時,只需要記住 tcp正常連線傳送資料時一般不會產生丟包 排除上下層其他因素 而udp產生丟包是很常見的事...