TCP和UDP的最完整的區(qū)別

TCP與UDP基本區(qū)別

1.基于連接與無(wú)連接

2.TCP要求系統(tǒng)資源較多,UDP較少;

3.UDP程序結(jié)構(gòu)較簡(jiǎn)單

4.流模式(TCP)與數(shù)據(jù)報(bào)模式(UDP);

5.TCP保證數(shù)據(jù)正確性,UDP可能丟包

6.TCP保證數(shù)據(jù)順序,UDP不保證

UDP應(yīng)用場(chǎng)景:

?1.面向數(shù)據(jù)報(bào)方式

2.網(wǎng)絡(luò)數(shù)據(jù)大多為短消息

3.擁有大量Client

4.對(duì)數(shù)據(jù)安全性無(wú)特殊要求

5.網(wǎng)絡(luò)負(fù)擔(dān)非常重,但對(duì)響應(yīng)速度要求高

具體編程時(shí)的區(qū)別

?1.socket()的參數(shù)不同

2.UDP Server不需要調(diào)用listen和accept

3.UDP收發(fā)數(shù)據(jù)用sendto/recvfrom函數(shù)

4.TCP:地址信息在connect/accept時(shí)確定

5.UDP:在sendto/recvfrom函數(shù)中每次均 需指定地址信息

6.UDP:shutdown函數(shù)無(wú)效

編程區(qū)別

通常我們?cè)谡f(shuō)到網(wǎng)絡(luò)編程時(shí)默認(rèn)是指TCP編程,即用前面提到的socket函數(shù)創(chuàng)建一個(gè)socket用于TCP通訊,函數(shù)參數(shù)我們通常填為SOCK_STREAM。即socket(PF_INET, SOCK_STREAM, 0),這表示建立一個(gè)socket用于流式網(wǎng)絡(luò)通訊。

SOCK_STREAM這種的特點(diǎn)是面向連接的,即每次收發(fā)數(shù)據(jù)之前必須通過(guò)connect建立連接,也是雙向的,即任何一方都可以收發(fā)數(shù)據(jù),協(xié)議本身提供了一些保障機(jī)制保證它是可靠的、有序的,即每個(gè)包按照發(fā)送的順序到達(dá)接收方。

而SOCK_DGRAM這種是User Datagram Protocol協(xié)議的網(wǎng)絡(luò)通訊,它是無(wú)連接的,不可靠的,因?yàn)橥ㄓ嶋p方發(fā)送數(shù)據(jù)后不知道對(duì)方是否已經(jīng)收到數(shù)據(jù),是否正常收到數(shù)據(jù)。任何一方建立一個(gè)socket以后就可以用sendto發(fā)送數(shù)據(jù),也可以用recvfrom接收數(shù)據(jù)。根本不關(guān)心對(duì)方是否存在,是否發(fā)送了數(shù)據(jù)。它的特點(diǎn)是通訊速度比較快。大家都知道TCP是要經(jīng)過(guò)三次握手的,而UDP沒(méi)有。

基于上述不同,UDP和TCP編程步驟也有些不同,如下:

TCP:?

TCP編程的服務(wù)器端一般步驟是:

1、創(chuàng)建一個(gè)socket,用函數(shù)socket();

2、設(shè)置socket屬性,用函數(shù)setsockopt(); * 可選

3、綁定IP地址、端口等信息到socket上,用函數(shù)bind();

4、開(kāi)啟監(jiān)聽(tīng),用函數(shù)listen();

5、接收客戶端上來(lái)的連接,用函數(shù)accept();

6、收發(fā)數(shù)據(jù),用函數(shù)send()和recv(),或者read()和write();

7、關(guān)閉網(wǎng)絡(luò)連接;

8、關(guān)閉監(jiān)聽(tīng);

TCP編程的客戶端一般步驟是:

1、創(chuàng)建一個(gè)socket,用函數(shù)socket();

2、設(shè)置socket屬性,用函數(shù)setsockopt();* 可選

3、綁定IP地址、端口等信息到socket上,用函數(shù)bind();* 可選

4、設(shè)置要連接的對(duì)方的IP地址和端口等屬性;

5、連接服務(wù)器,用函數(shù)connect();

6、收發(fā)數(shù)據(jù),用函數(shù)send()和recv(),或者read()和write();

7、關(guān)閉網(wǎng)絡(luò)連接;

UDP:

與之對(duì)應(yīng)的UDP編程步驟要簡(jiǎn)單許多,分別如下:

UDP編程的服務(wù)器端一般步驟是:

1、創(chuàng)建一個(gè)socket,用函數(shù)socket();

2、設(shè)置socket屬性,用函數(shù)setsockopt();* 可選

3、綁定IP地址、端口等信息到socket上,用函數(shù)bind();

4、循環(huán)接收數(shù)據(jù),用函數(shù)recvfrom();

5、關(guān)閉網(wǎng)絡(luò)連接;

UDP編程的客戶端一般步驟是:

1、創(chuàng)建一個(gè)socket,用函數(shù)socket();

2、設(shè)置socket屬性,用函數(shù)setsockopt();* 可選

3、綁定IP地址、端口等信息到socket上,用函數(shù)bind();* 可選

4、設(shè)置對(duì)方的IP地址和端口等屬性;

5、發(fā)送數(shù)據(jù),用函數(shù)sendto();

6、關(guān)閉網(wǎng)絡(luò)連接;

TCP和UDP是OSI模型中的運(yùn)輸層中的協(xié)議。TCP提供可靠的通信傳輸,而UDP則常被用于讓廣播和細(xì)節(jié)控制交給應(yīng)用的通信傳輸。

UDP補(bǔ)充:

UDP不提供復(fù)雜的控制機(jī)制,利用IP提供面向無(wú)連接的通信服務(wù)。并且它是將應(yīng)用程序發(fā)來(lái)的數(shù)據(jù)在收到的那一刻,立刻按照原樣發(fā)送到網(wǎng)絡(luò)上的一種機(jī)制。即使是出現(xiàn)網(wǎng)絡(luò)擁堵的情況下,UDP也無(wú)法進(jìn)行流量控制等避免網(wǎng)絡(luò)擁塞的行為。此外,傳輸途中如果出現(xiàn)了丟包,UDO也不負(fù)責(zé)重發(fā)。甚至當(dāng)出現(xiàn)包的到達(dá)順序亂掉時(shí)也沒(méi)有糾正的功能。如果需要這些細(xì)節(jié)控制,那么不得不交給由采用UDO的應(yīng)用程序去處理。換句話說(shuō),UDP將部分控制轉(zhuǎn)移到應(yīng)用程序去處理,自己卻只提供作為傳輸層協(xié)議的最基本功能。UDP有點(diǎn)類似于用戶說(shuō)什么聽(tīng)什么的機(jī)制,但是需要用戶充分考慮好上層協(xié)議類型并制作相應(yīng)的應(yīng)用程序。

TCP補(bǔ)充:

TCP充分實(shí)現(xiàn)了數(shù)據(jù)傳輸時(shí)各種控制功能,可以進(jìn)行丟包的重發(fā)控制,還可以對(duì)次序亂掉的分包進(jìn)行順序控制。而這些在UDP中都沒(méi)有。此外,TCP作為一種面向有連接的協(xié)議,只有在確認(rèn)通信對(duì)端存在時(shí)才會(huì)發(fā)送數(shù)據(jù),從而可以控制通信流量的浪費(fèi)。TCP通過(guò)檢驗(yàn)和、序列號(hào)、確認(rèn)應(yīng)答、重發(fā)控制、連接管理以及窗口控制等機(jī)制實(shí)現(xiàn)可靠性傳輸。

TCP與UDP區(qū)別總結(jié):

1、TCP面向連接(如打電話要先撥號(hào)建立連接);UDP是無(wú)連接的,即發(fā)送數(shù)據(jù)之前不需要建立連接

2、TCP提供可靠的服務(wù)。也就是說(shuō),通過(guò)TCP連接傳送的數(shù)據(jù),無(wú)差錯(cuò),不丟失,不重復(fù),且按序到達(dá);UDP盡最大努力交付,即不保 ? 證可靠交付

3、TCP面向字節(jié)流,實(shí)際上是TCP把數(shù)據(jù)看成一連串無(wú)結(jié)構(gòu)的字節(jié)流;UDP是面向報(bào)文的

UDP沒(méi)有擁塞控制,因此網(wǎng)絡(luò)出現(xiàn)擁塞不會(huì)使源主機(jī)的發(fā)送速率降低(對(duì)實(shí)時(shí)應(yīng)用很有用,如IP電話,實(shí)時(shí)視頻會(huì)議等)

4、每一條TCP連接只能是點(diǎn)到點(diǎn)的;UDP支持一對(duì)一,一對(duì)多,多對(duì)一和多對(duì)多的交互通信

5、TCP首部開(kāi)銷20字節(jié);UDP的首部開(kāi)銷小,只有8個(gè)字節(jié)

6、TCP的邏輯通信信道是全雙工的可靠信道,UDP則是不可靠信道

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • TCP UDP TCP與UDP基本區(qū)別 1.基于連接與無(wú)連接 2.TCP要求系統(tǒng)資源較多,UDP較少; 3....
    52031d47791e閱讀 449評(píng)論 0 0
  • TCP UDP TCP與UDP基本區(qū)別 1.基于連接與無(wú)連接 2.TCP要求系統(tǒng)資源較多,UDP較少; 3....
    予爺閱讀 355評(píng)論 0 0
  • TCP UDP TCP和UDP的區(qū)別tcp連接就像打電話,兩者之間必須有一條不間斷的通路,數(shù)據(jù)不到達(dá)對(duì)方,對(duì)方就一...
    Aniugel閱讀 20,421評(píng)論 0 24
  • TCP和UDP區(qū)別 TCP和UDP編程區(qū)別 TCP編程的服務(wù)器端一般步驟是:1、創(chuàng)建一個(gè)socket,用函數(shù)soc...
    Flutter求學(xué)者閱讀 1,638評(píng)論 0 16
  • 想念一個(gè)人的時(shí)候,時(shí)間會(huì)變得漫長(zhǎng)起來(lái),仿佛整個(gè)世界只剩下了自己,習(xí)慣性的打開(kāi)手機(jī),卻發(fā)現(xiàn)那個(gè)熟悉的頭像早已被自己刪...
    一米陽(yáng)光mg閱讀 1,393評(píng)論 7 73

友情鏈接更多精彩內(nèi)容