1.1 概念
udp
udp是user datagram protocol的簡稱,中文名是使用者資料報協議,是osi參考模型中的傳輸層協議,它是一種無連線的傳輸層協議,不會對報文進行任何拆分和拼接操作,提供面向事務的簡單不可靠資訊傳送服務,ietf rfc 768是udp的正式規範。udp在ip報文的協議號是17。具體來說
在傳送端,應用層將資料傳遞給傳輸層的 udp 協議,udp 只會給資料增加乙個 udp 頭標識下是 udp 協議,然後就傳遞給網路層了
在接收端,網路層將資料傳遞給傳輸層,udp 只去除 ip 報文頭就傳遞給應用層,不會任何拼接操作
tcp
tcp(transmission control protocol,傳輸控制協議)是一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議,由ietf的rfc 793定義。在簡化的計算機網路osi模型中,它完成第四層傳輸層所指定的功能,udp(使用者資料報協議)是同一層內另乙個重要的傳輸協議1.2 不可靠性
udp 是無連線的,也就是說通訊不需要建立和斷開連線。
udp 也是不可靠的。協議收到什麼資料就傳遞什麼資料,並且也不會備份資料,對方能不能收到是不關心的
udp 沒有擁塞控制,一直會以恆定的速度傳送資料。即使網路條件不好,也不會對傳送速率進行調整。這樣實現的弊端就是在網路條件不好的情況下可能會導致丟包,但是優點也很明顯,在某些實時性要求高的場景(比如**會議)就需要使用 udp 而不是 tcp
1.3 高效
因為 udp 沒有 tcp 那麼複雜,需要保證資料不丟失且有序到達。所以 udp 的頭部開銷小,只有八字節,相比 tcp 的至少二十位元組要少得多,在傳輸資料報文時是很高效的
頭部包含了以下幾個資料
兩個十六位的埠號,分別為源埠(可選字段)和目標埠 整個資料報文的長度
整個資料報文的檢驗和(ipv4 可選 字段),該欄位用於發現頭部資訊和資料中的錯誤
1.4 傳輸方式
udp 不止支援一對一的傳輸方式,同樣支援一對多,多對多,多對一的方式,也就是說 udp 提供了單播,多播,廣播的功能tcp與udp基本區別
1.基於連線與無連線
2.tcp要求系統資源較多,udp較少
3.udp程式結構較簡單
4.流模式(tcp)與資料報模式(udp);
5.tcp保證資料正確性,udp可能丟包
6.tcp保證資料順序,udp不保證
udp應用場景:
1.面向資料報方式
2.網路資料大多為短訊息
3.擁有大量client
4.對資料安全性無特殊要求
5.網路負擔非常重,但對響應速度要求高
具體程式設計時的區別
1.socket()的引數不同
2.udp server不需要呼叫listen和accept
3.udp收發資料用sendto/recvfrom函式
4.tcp:位址資訊在connect/accept時確定
5.udp:在sendto/recvfrom函式中每次均 需指定位址資訊
6.udp:shutdown函式無效
程式設計區別
基於上述不同,udp和tcp程式設計步驟也有些不同,如下:
tcp:
tcp程式設計的伺服器端一般步驟是:
1、建立乙個socket,用函式socket();
2、設定socket屬性,用函式setsockopt(); * 可選
3、繫結ip位址、埠等資訊到socket上,用函式bind();
4、開啟監聽,用函式listen();
5、接收客戶端上來的連線,用函式accept();
6、收發資料,用函式send()和recv(),或者read()和write();
7、關閉網路連線;
8、關閉監聽;
tcp程式設計的客戶端一般步驟是:
1、建立乙個socket,用函式socket();
2、設定socket屬性,用函式setsockopt();* 可選
3、繫結ip位址、埠等資訊到socket上,用函式bind();* 可選
4、設定要連線的對方的ip位址和埠等屬性;
5、連線伺服器,用函式connect();
6、收發資料,用函式send()和recv(),或者read()和write();
7、關閉網路連線;
udp:
與之對應的udp程式設計步驟要簡單許多,分別如下:
udp程式設計的伺服器端一般步驟是:
1、建立乙個socket,用函式socket();
2、設定socket屬性,用函式setsockopt();* 可選
3、繫結ip位址、埠等資訊到socket上,用函式bind();
4、迴圈接收資料,用函式recvfrom();
5、關閉網路連線;
udp程式設計的客戶端一般步驟是:
1、建立乙個socket,用函式socket();
2、設定socket屬性,用函式setsockopt();* 可選
3、繫結ip位址、埠等資訊到socket上,用函式bind();* 可選
4、設定對方的ip位址和埠等屬性;
5、傳送資料,用函式sendto();
6、關閉網路連線;
tcp和udp是osi模型中的運輸層中的協議。tcp提供可靠的通訊傳輸,而udp則常被用於讓廣播和細節控制交給應用的通訊傳輸。
udp補充:
udp不提供複雜的控制機制,利用ip提供面向無連線的通訊服務。並且它是將應用程式發來的資料在收到的那一刻,立刻按照原樣傳送到網路上的一種機制。即使是出現網路擁堵的情況下,udp也無法進行流量控制等避免網路擁塞的行為。此外,傳輸途中如果出現了丟包,udo也不負責重發。甚至當出現包的到達順序亂掉時也沒有糾正的功能。如果需要這些細節控制,那麼不得不交給由採用udo的應用程式去處理。換句話說,udp將部分控制轉移到應用程式去處理,自己卻只提供作為傳輸層協議的最基本功能。udp有點類似於使用者說什麼聽什麼的機制,但是需要使用者充分考慮好上層協議型別並製作相應的應用程式。
tcp補充:
tcp充分實現了資料傳輸時各種控制功能,可以進行丟包的重發控制,還可以對次序亂掉的分包進行順序控制。而這些在udp中都沒有。此外,tcp作為一種面向有連線的協議,只有在確認通訊對端存在時才會傳送資料,從而可以控制通訊流量的浪費。tcp通過檢驗和、序列號、確認應答、重發控制、連線管理以及視窗控制等機制實現可靠性傳輸。
tcp與udp區別總結:
TCP與UDP的區別
面向連線的tcp 面向連線 就是在正式通訊前必須要與對方建立起連線。比如你給別人打 必須等線路接通了 對方拿起話筒才能相互通話。tcp協議能為應用程式提供可靠的通訊連線,使一台計算機發出的位元組流無差錯地發往網路上的其他計算機,對可靠性要求高的資料通訊系統往往使用tcp協議傳輸資料。面向非連線的ud...
tcp 與udp 的區別
tcp提供面向連線 可靠的位元組流服務。udp提供面向資料報的傳輸層協議。1.tcp 提供客戶與伺服器之間的連線。tcp客戶與某個伺服器建立乙個連線,再跨跨該連線與伺服器交換資料,最後終止連線。2.tcp提供可靠性。當tcp向對端傳送資料時,要求對端返回乙個確認。如果沒收到確認,tcp就自動重傳資料...
TCP與UDP的區別
tcp transmission control protocol,傳輸控制協議 是基於連線的協議,也就是說,在正式收發資料前,必須和對方建立可靠的連線。乙個tcp連線必須要經過三次 對話 才能建立起來,其中的過程非常複雜,我們這裡只做簡單 形象的介紹,你只要做到能夠理解這個過程即可。我們來看看這三...