知其所以然 tcp和udp的區別

2022-02-18 15:50:45 字數 2101 閱讀 3576

基於連線與無連線

tcp要求系統資源較多,udp較少;

udp程式結構較簡單

流模式(tcp)與資料報模式(udp);

tcp保證資料正確性,udp可能丟包

tcp保證資料順序,udp不保證

面向資料報方式

網路資料大多為短訊息

擁有大量client

對資料安全性無特殊要求

網路負擔非常重,但對響應速度要求高

socket()的引數不同

udp server不需要呼叫listen和accept

udp收發資料用sendto/recvfrom函式

tcp:位址資訊在connect/accept時確定

udp:shutdown函式無效

tcp程式設計的伺服器端一般步驟是:

建立乙個socket,用函式socket();

設定socket屬性,用函式setsockopt(); * 可選

繫結ip位址、埠等資訊到socket上,用函式bind();

開啟監聽,用函式listen();

接收客戶端上來的連線,用函式accept();

收發資料,用函式send()和recv(),或者read()和write();

關閉網路連線;

關閉監聽;

建立乙個socket,用函式socket();

設定socket屬性,用函式setsockopt();* 可選

繫結ip位址、埠等資訊到socket上,用函式bind();* 可選

設定要連線的對方的ip位址和埠等屬性;

連線伺服器,用函式connect();

收發資料,用函式send()和recv(),或者read()和write();

關閉網路連線;

udp服務端一般步驟是:

建立乙個socket,用函式socket();

設定socket屬性,用函式setsockopt();* 可選

繫結ip位址、埠等資訊到socket上,用函式bind();

迴圈接收資料,用函式recvfrom();

關閉網路連線;

udp程式設計的客戶端一般步驟是:

建立乙個socket,用函式socket();

設定socket屬性,用函式setsockopt();* 可選

繫結ip位址、埠等資訊到socket上,用函式bind();* 可選

設定對方的ip位址和埠等屬性;

傳送資料,用函式sendto();

關閉網路連線;

tcp和udp是osi模型中的運輸層中的協議。tcp提供可靠的通訊傳輸,而udp則常被用於讓廣播和細節控制交給應用的通訊傳輸。

udp補充:

udp不提供複雜的控制機制,利用ip提供面向無連線的通訊服務。並且它是將應用程式發來的資料在收到的那一刻,立刻按照原樣傳送到網路上的一種機制。即使是出現網路擁堵的情況下,udp也無法進行流量控制等避免網路擁塞的行為。此外,傳輸途中如果出現了丟包,udp也不負責重發。甚至當出現包的到達順序亂掉時也沒有糾正的功能。如果需要這些細節控制,那麼不得不交給由採用udp應用程式去處理。換句話說,udp將部分控制轉移到應用程式去處理,自己卻只提供作為傳輸層協議的最基本功能。udp有點類似於使用者說什麼聽什麼的機制,但是需要使用者充分考慮好上層協議型別並製作相應的應用程式。

tcp補充:

tcp充分實現了資料傳輸時各種控制功能,可以進行丟包的重發控制,還可以對次序亂掉的包進行順序控制。而這些在udp中都沒有。此外,tcp作為一種面向有連線的協議,只有在確認通訊端存在時才會傳送資料,從而可以控制通訊流量的浪費。tcp通過檢驗、序列號、確認應答、重發控制、連線管理以及視窗控制等機制實現可靠性傳輸。

tcp面向連線(如打**要先撥號建立連線);udp是無連線的,即傳送資料之前不需要建立連線

tcp提供可靠的服務。也就是說,通過tcp連線傳送的資料,無差錯,不丟失,不重複,且按序到達;udp盡最大努力交付,即不保 證可靠交付

每一條tcp連線只能是點到點的;udp支援一對一,一對多,多對一和多對多的互動通訊

tcp首部開銷20位元組;udp的首部開銷小,只有8個位元組

tcp的邏輯通訊通道是全雙工的可靠通道,udp則是不可靠通道

知其然知其所以然

深深的話我們淺淺地說,長長的路我們慢慢地走。讓我們始終有勇氣特立獨行。不溫不火,不疾不徐。將記憶自拔於困頓的泥沼,將希望播撒於每一寸光陰!生活縱有千千結,還是要繼續下去,時光就是如此的公平。最近總是陷入乙個又乙個的糾結,乙個又乙個的心塞。生活彷彿陷入了恍若隔世的噩夢中,而自己就是噩夢中的小丑一樣,只...

java結果輸出,知其所以然

輸出結果是什麼?為什麼會出現這種結果?一public class parenttest static public class childrentest extends parenttest static public static void main string args 二 true or f...

知其所以然 劉未鵬

這是乙個樹狀的知識結構,越往上層走,需要記憶的節點就越少。所謂觸類旁通者,其實便是因為他擅長去理解解法背後的更具一般性的東西。所以我還有乙個習慣,就是看到美妙的證明和解法總是會去一遍又一遍的去反覆揣摩,試圖理解想出這個證明的人到底是怎麼想出來的,有沒有什麼一般性的方法可循,很多時候,在這樣揣摩的過程...