TCP和UDP是OSI模型中的運(yùn)輸層中的協(xié)議。TCP提供可靠的通信傳輸,而UDP則常被用于讓廣播和細(xì)節(jié)控制交給應(yīng)用的通信傳輸。
UDP(User Datagram Protocol)
UDP不提供復(fù)雜的控制機(jī)制,利用IP提供面向無連接的通信服務(wù)。并且它是將應(yīng)用程序發(fā)來的數(shù)據(jù)在收到的那一刻,立刻按照原樣發(fā)送到網(wǎng)絡(luò)上的一種機(jī)制。
即使是出現(xiàn)網(wǎng)絡(luò)擁堵的情況下,UDP也無法進(jìn)行流量控制等避免網(wǎng)絡(luò)擁塞的行為。此外,傳輸途中如果出現(xiàn)了丟包,UDO也不負(fù)責(zé)重發(fā)。甚至當(dāng)出現(xiàn)包的到達(dá)順序亂掉時(shí)也沒有糾正的功能。如果需要這些細(xì)節(jié)控制,那么不得不交給由采用UDO的應(yīng)用程序去處理。換句話說,UDP將部分控制轉(zhuǎn)移到應(yīng)用程序去處理,自己卻只提供作為傳輸層協(xié)議的最基本功能。UDP有點(diǎn)類似于用戶說什么聽什么的機(jī)制,但是需要用戶充分考慮好上層協(xié)議類型并制作相應(yīng)的應(yīng)用程序。
TCP(Transmission Control Protocol)
TCP充分實(shí)現(xiàn)愛呢了數(shù)據(jù)傳輸時(shí)各種控制功能,可以進(jìn)行丟包的重發(fā)控制,還可以對次序亂掉的分包進(jìn)行順序控制。而這些在UDP中都沒有。此外,TCP作為一種面向有連接的協(xié)議,只有在確認(rèn)通信對端存在時(shí)才會(huì)發(fā)送數(shù)據(jù),從而可以控制通信流量的浪費(fèi)。
TCP通過檢驗(yàn)和、序列號、確認(rèn)應(yīng)答、重發(fā)控制、連接管理以及窗口控制等機(jī)制實(shí)現(xiàn)可靠性傳輸。此處不一一敘述。
TCP與UDP如何加以區(qū)分使用?
TCP用于在傳輸層有必要實(shí)現(xiàn)可靠性傳輸?shù)那闆r。由于它是面向有連接并具備順序控制、重發(fā)控制等機(jī)制的。所以它可以為應(yīng)用提供可靠傳輸。
另一方面,UDP主要用于那些對高速傳輸和實(shí)時(shí)性有較高要求的通信或廣播通信。舉一個(gè)IP電話進(jìn)行通話的例子。如果使用TCP,數(shù)據(jù)在傳送途中如果丟失會(huì)被重發(fā),但是這樣無法流暢地傳輸通話人的聲音,會(huì)導(dǎo)致無法進(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面向連接(如打電話要先撥號建立連接);UDP是無連接的,即發(fā)送數(shù)據(jù)之前不需要建立連接
2、TCP提供可靠的服務(wù)。也就是說,通過TCP連接傳送的數(shù)據(jù),無差錯(cuò),不丟失,不重復(fù),且按序到達(dá);UDP盡最大努力交付,即不保證可靠交付
3、TCP面向字節(jié)流,實(shí)際上是TCP把數(shù)據(jù)看成一連串無結(jié)構(gòu)的字節(jié)流;UDP是面向報(bào)文的
UDP沒有擁塞控制,因此網(wǎng)絡(luò)出現(xiàn)擁塞不會(huì)使源主機(jī)的發(fā)送速率降低(對實(shí)時(shí)應(yīng)用很有用,如IP電話,實(shí)時(shí)視頻會(huì)議等)
4、每一條TCP連接只能是點(diǎn)到點(diǎn)的;UDP支持一對一,一對多,多對一和多對多的交互通信
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ī)制
簡單來講,要使用UDP來構(gòu)建可靠的面向連接的數(shù)據(jù)傳輸,就要實(shí)現(xiàn)類似于TCP協(xié)議的
超時(shí)重傳(定時(shí)器)
有序接受 (添加包序號)
應(yīng)答確認(rèn) (Seq/Ack應(yīng)答機(jī)制)
滑動(dòng)窗口流量控制等機(jī)制 (滑動(dòng)窗口協(xié)議)
等于說要在傳輸層的上一層(或者直接在應(yīng)用層)實(shí)現(xiàn)TCP協(xié)議的可靠數(shù)據(jù)傳輸機(jī)制,比如使用UDP數(shù)據(jù)包+序列號,UDP數(shù)據(jù)包+時(shí)間戳等方法。
目前已經(jīng)有一些實(shí)現(xiàn)UDP可靠傳輸?shù)臋C(jī)制,比如
UDT(UDP-based Data Transfer Protocol)
基于UDP的數(shù)據(jù)傳輸協(xié)議(UDP-based Data Transfer Protocol,簡稱UDT)是一種互聯(lián)網(wǎng)數(shù)據(jù)傳輸協(xié)議。UDT的主要目的是支持高速廣域網(wǎng)上的海量數(shù)據(jù)傳輸,而互聯(lián)網(wǎng)上的標(biāo)準(zhǔn)數(shù)據(jù)傳輸協(xié)議TCP在高帶寬長距離網(wǎng)絡(luò)上性能很差。 顧名思義,UDT建于UDP之上,并引入新的擁塞控制和數(shù)據(jù)可靠性控制機(jī)制。UDT是面向連接的雙向的應(yīng)用層協(xié)議。它同時(shí)支持可靠的數(shù)據(jù)流傳輸和部分可靠的數(shù)據(jù)報(bào)傳輸。 由于UDT完全在UDP上實(shí)現(xiàn),它也可以應(yīng)用在除了高速數(shù)據(jù)傳輸之外的其它應(yīng)用領(lǐng)域,例如點(diǎn)到點(diǎn)技術(shù)(P2P),防火墻穿透,多媒體數(shù)據(jù)傳輸?shù)鹊取?/span>