tcp與udp區別:
tcp面向連線的 可靠的 位元組流服務 tcp伺服器必須給每個連線分配資源
udp無連線 不可靠的 資料報服務 udp伺服器不需要給每個連線分配資源
tcp:
①位元組流服務(資料收發的一種方式):
如圖:傳送端:
傳送了三個資料,send了三次。(應用層)
將三個資料放入傳送緩衝區中。(核心中)
底層有可能將這三個資料拆分成兩個資料段傳送到接收端,具體怎麼發我們無法控制,後面有
流量控制方法控制它怎麼傳送(網路中)
接收端:
最上面為應用層進行recv。(recv若較大可一次接收,若不夠大也可多次接收)
接收端接收資料時會有乙個接收緩衝區存在,底層接收到這個資料會將tcp報文段放入接收緩
沖區中,接收端接收資料時會從接收緩衝區中獲取資料。(資料不會丟失)
位元組流服務的特點:
1.傳送端send的次數與接收端recv的次數不相等
2.傳送端send的次數與網路層封裝的tcp報文段的個數不相等
3.接收端recv一次如果沒有將資料讀取完成,則下次recv會繼續讀取後續資料(因為有接受有緩衝區)
②可靠的:tcp可以保證資料安全地到達對端
資料的可靠性傳輸定義:
1.所有的資料都能到達對端(確認機制和超時重傳保證)
2.資料不亂序(tcp報頭中的序號來保證,序號還能處理重複的報文段)
3.資料不出錯(16位校驗和,不僅校驗頭部而且還校驗資料部分)
4.擁塞控制&滑動視窗(保證資料傳輸中最小的丟包率)
tcp為什麼可以安全地保證資料到達對端?
與tcp的協議有關,協議最重要的是它怎麼對傳輸的流程進行控制。資料在傳送時,只要到達傳輸層,
若選tcp則包含tcp報頭,報頭資訊則是做傳送控制的,多加了一些資料保證安全。
詳情:tcp首部及tcp首部各個字段
udp:
①資料報服務(資料收發的一種方式):
如圖:傳送端:
傳送了三次資料,sendto了三次(應用層)
sendto一次直接將資料發給傳輸層變成udp報文段(sendto幾次就會有幾個udp報文段)
通過底層傳輸資料被傳送到接收端。
接收端:
通過底層對應接收到了三個udp報文段。
三個udp報文段在應用層讀取時候對應三個recvfrom。即傳送幾次收幾次
資料報服務的特點(相比於位元組流服務稍微快一點):
1.傳送方sendto的次數和接收方recvfrom的次數相等
2.傳送方sendto的次數與網路底層封裝的udp報文段的個數相等
3.如果接收方一次recvfrom沒有將乙個udp報文段的資料接收完,則此報文段中剩餘的資料會被丟棄
linux下udp位元組流服務的測試:
1.若將接收的大小改為5個位元組大小,傳送hello world與this is linux情況(recv發生阻塞,只接收5個字元,後面資料丟失)
2.伺服器先睡眠20s,客戶端傳送資料,先啟客戶端再啟動伺服器(每隔20s接收到乙個資料,全部接收到了且傳送次數與接收次數相等)
②不可靠的:udp校驗和只負責校驗此資料是否有錯,並不糾錯,如果錯了,就丟失,因此不可靠。
小問題思考:udp本身是不可靠的,如果非要使用udp來實現資料的可靠傳輸該怎麼做?
一些小思路(不一定正確):
udp本身報頭8個位元組是固定的,無法更改,所以我們只能在應用層進行控制。
應用層:自己寫的協議得包含相應的控制資訊,接收端接收到資料時候要根據應用層這些協議做相應處理,例如:排序、丟掉重複報文、進行相應冗餘檢驗。
應用層實現存在弊端:是傳送資料還是做控制。得啟動兩個程序,乙個進行傳送資料,另外乙個檢測資料,再傳送回來(程序間通訊)。
應用層還要實現快取機制。
TCP和UDP的區別
tcp transimission control protocol 傳輸控制協議 和udp user datagram protocol 是傳輸層的兩種實現版本!它們之間提供基本的服務又各有所長。因此,根據對特定服務質量的要求,應用層軟體單元可以選擇通過傳輸層的tcp版本或者udp版本來傳輸資料。...
TCP和UDP的區別
tcp和udp都是傳輸層的協議,他們的區別主要如下 1 tcp,全名 傳輸控制協議 是面向連線的,也就是說在傳送方和接收方在傳送資料之前,必須通過三次握手建立連線,相當於現實生活中的打 功能,必須先撥號,接通後才能說話,udp,全名 使用者資料報協議 是無連線的,其中一方向向另一方傳送資料時不需要建...
TCP和UDP的區別
tcp transmission control protocol,傳輸控制協議 是基於連線的協議,也就是說,在正式收發資料前,必須和對方建立可靠的連線。乙個tcp連線必須要經過三次 對話 才能建立起來,其中的過程非常複雜,我們這裡只做簡單 形象的介紹,你只要做到能夠理解這個過程即可。我們來看看這三...