TCP/UDP區(qū)別以及UDP如何實(shí)現(xiàn)可靠傳輸
TCP和UDP是OSI模型中的運(yùn)輸層中的協(xié)議。TCP提供可靠的通信傳輸,而UDP則常被用于讓廣播和細(xì)節(jié)控制交給應(yīng)用的通信傳輸。
UDP(User Datagram Protocol)
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í)也沒有糾正的功能。如果需要這些細(xì)節(jié)控制,那么不得不交給由采用UDO的應(yīng)用程序去處理。換句話說(shuō),UDP將部分控制轉(zhuǎn)移到應(yīng)用程序去處理,自己卻只提供作為傳輸層協(xié)議的最基本功能。UDP有點(diǎn)類似于用戶說(shuō)什么聽什么的機(jī)制,但是需要用戶充分考慮好上層協(xié)議類型并制作相應(yīng)的應(yīng)用程序。
TCP(Transmission Control Protocol)
TCP充分實(shí)現(xiàn)愛呢了數(shù)據(jù)傳輸時(shí)各種控制功能,可以進(jìn)行丟包的重發(fā)控制,還可以對(duì)次序亂掉的分包進(jìn)行順序控制。而這些在UDP中都沒有。此外,TCP作為一種面向有連接的協(xié)議,只有在確認(rèn)通信對(duì)端存在時(shí)才會(huì)發(fā)送數(shù)據(jù),從而可以控制通信流量的浪費(fèi)。
TCP通過檢驗(yàn)和、序列號(hào)、確認(rèn)應(yīng)答、重發(fā)控制、連接管理以及窗口控制等機(jī)制實(shí)現(xiàn)可靠性傳輸。此處不一一敘述。
TCP與UDP如何加以區(qū)分使用?
TCP用于在傳輸層有必要實(shí)現(xiàn)可靠性傳輸?shù)那闆r。由于它是面向有連接并具備順序控制、重發(fā)控制等機(jī)制的。所以它可以為應(yīng)用提供可靠傳輸。
另一方面,UDP主要用于那些對(duì)高速傳輸和實(shí)時(shí)性有較高要求的通信或廣播通信。舉一個(gè)IP電話進(jìn)行通話的例子。如果使用TCP,數(shù)據(jù)在傳送途中如果丟失會(huì)被重發(fā),但是這樣無(wú)法流暢地傳輸通話人的聲音,會(huì)導(dǎo)致無(wú)法進(jìn)行正常交流。而采用UDP,它不會(huì)進(jìn)行重發(fā)處理。從而也就不會(huì)有聲音大幅度延遲到達(dá)的問題。即使有部分?jǐn)?shù)據(jù)丟失,也只是影響某一小部分的通話。此外,在多播與廣播通信中也使用UDP而不是UDP。RIP、DHCP等基于廣播的協(xié)議也要依賴于UDP。
TCP與UDP區(qū)別總結(jié):
1、TCP面向連接(如打電話要先撥號(hào)建立連接);UDP是無(wú)連接的,即發(fā)送數(shù)據(jù)之前不需要建立連接
2、TCP提供可靠的服務(wù)。也就是說(shuō),通過TCP連接傳送的數(shù)據(jù),無(wú)差錯(cuò),不丟失,不重復(fù),且按序到達(dá);UDP盡最大努力交付,即不保證可靠交付3、TCP面向字節(jié)流,實(shí)際上是TCP把數(shù)據(jù)看成一連串無(wú)結(jié)構(gòu)的字節(jié)流;UDP是面向報(bào)文的
UDP沒有擁塞控制,因此網(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首部開銷20字節(jié);UDP的首部開銷小,只有8個(gè)字節(jié)
6、TCP的邏輯通信信道是全雙工的可靠信道,UDP則是不可靠信道
UDP如何實(shí)現(xiàn)可靠傳輸
由于在傳輸層UDP已經(jīng)是不可靠的連接,那就要在應(yīng)用層自己實(shí)現(xiàn)一些保障可靠傳輸?shù)臋C(jī)制
簡(jiǎn)單來(lái)講,要使用UDP來(lái)構(gòu)建可靠的面向連接的數(shù)據(jù)傳輸,就要實(shí)現(xiàn)類似于TCP協(xié)議的
超時(shí)重傳(定時(shí)器)
有序接受 (添加包序號(hào))
應(yīng)答確認(rèn) (Seq/Ack應(yīng)答機(jī)制)
滑動(dòng)窗口流量控制等機(jī)制 (滑動(dòng)窗口協(xié)議)
等于說(shuō)要在傳輸層的上一層(或者直接在應(yīng)用層)實(shí)現(xiàn)TCP協(xié)議的可靠數(shù)據(jù)傳輸機(jī)制,比如使用UDP數(shù)據(jù)包+序列號(hào),UDP數(shù)據(jù)包+時(shí)間戳等方法。
目前已經(jīng)有一些實(shí)現(xiàn)UDP可靠傳輸?shù)臋C(jī)制,比如
UDT(UDP-based Data Transfer Protocol)
posted on 2017-07-19 22:25 鴻雁 閱讀(469) 評(píng)論(0) 編輯 收藏 所屬分類: IT技術(shù)相關(guān)