從鏈接的角度理解UDP協(xié)議
對(duì)于TCP和UDP協(xié)議的了解,您覺(jué)得是否已經(jīng)掌握全面了呢?不少朋友都反映,他們覺(jué)得這兩方面的概念并不好區(qū)分。那么今天我們就從其他角度來(lái)為大家講解一下這兩種協(xié)議。首先我們需要來(lái)了解倆個(gè)概念,面向連接的服務(wù)和無(wú)連接的服務(wù),應(yīng)用面向連接的服務(wù)時(shí),客戶(hù)和服務(wù)器在進(jìn)行數(shù)據(jù)發(fā)送前,彼此向?qū)Ψ桨l(fā)送控制分組,這就是所謂的握手過(guò)程,使得客戶(hù)和服務(wù)器都做好分組交換準(zhǔn)備。這個(gè)準(zhǔn)備是很松散的,面向連接服務(wù)與很多其他的服務(wù)捆綁在一起,包括可靠的數(shù)據(jù)傳輸,流量控制和擁塞控制等,依賴(lài)連接以正確的順序無(wú)錯(cuò)地傳遞所有數(shù)據(jù)。還要使用確認(rèn)和重傳機(jī)制實(shí)現(xiàn)來(lái)可靠性。而無(wú)連接服務(wù)側(cè)是沒(méi)有握手過(guò)程的,當(dāng)一方想發(fā)送數(shù)據(jù)時(shí)就直接了當(dāng)?shù)匕l(fā)送,因?yàn)闆](méi)有握手過(guò)程也就沒(méi)有什么流量控制和擁塞控制,這樣數(shù)據(jù)可能傳輸?shù)酶欤牵捎谝矝](méi)有確認(rèn)過(guò)程,源端就不知道那些分組到達(dá)了目的端。因此可能在傳輸過(guò)程中丟失數(shù)據(jù),不適合用在一些文件的傳輸,可以用在因特網(wǎng)電話(huà),視頻會(huì)議什么的。
TCP(傳輸控制協(xié)議)和UDP(擁護(hù)數(shù)據(jù)報(bào)協(xié)議)是傳輸層的倆個(gè)傳輸協(xié)議,它們倆個(gè)的***區(qū)別就是是否面向連接。
TCP包括了面向連接和可靠數(shù)據(jù)傳輸服務(wù),在客戶(hù)端和服務(wù)器端進(jìn)行通信前,要先交換傳輸層控制信息,為雙方的通信做好準(zhǔn)備。在這個(gè)握手階段后,我們就可以認(rèn)為在這倆個(gè)進(jìn)程間存在一個(gè)TCP連接,且是一個(gè)全雙工的連接,在消息發(fā)送完后,應(yīng)用程序會(huì)告訴TCP拆除這個(gè)連接。可靠的傳輸服務(wù)為了保障彼此通信能無(wú)差錯(cuò)地順序傳遞所有數(shù)據(jù)。
當(dāng)其中任何一個(gè)應(yīng)用程序把一個(gè)字節(jié)流傳如套接字時(shí),它可以指望TCP把同樣的字節(jié)流傳遞到對(duì)方的套接字,中間不回丟失和重傳。TCP是因特網(wǎng)的一種公益服務(wù),其目的是能調(diào)節(jié)數(shù)據(jù)傳輸過(guò)程中的一些問(wèn)題,因此還要包含一個(gè)擁塞機(jī)制。TCP擁塞機(jī)制在網(wǎng)絡(luò)變得擁塞時(shí)阻止發(fā)送進(jìn)程。確切地說(shuō),TCP擁塞控制試圖把每個(gè)TCP連接限定在它所公平共享的網(wǎng)絡(luò)帶寬上。對(duì)于有最小帶寬需求限制的實(shí)時(shí)音頻或視頻應(yīng)用來(lái)說(shuō),阻止其帶寬那就讓它們不能正常工作,此外,我們能想象一下,在網(wǎng)絡(luò)電話(huà)通話(huà)時(shí),偶爾的不連續(xù)是可以容忍的,可見(jiàn)實(shí)時(shí)應(yīng)用可以容忍丟失少部分?jǐn)?shù)據(jù),不需要完全可靠服務(wù)。
說(shuō)了這么多,TCP能提供的好的服務(wù),再看一下其缺點(diǎn)吧,首先,TCP不保證最小傳輸率,通俗點(diǎn)說(shuō),TCP不允許發(fā)送進(jìn)程以想要的速率發(fā)送數(shù)據(jù),受到TCP擁塞控制的調(diào)節(jié),發(fā)送進(jìn)程有可能被迫以一個(gè)較低的平均速率發(fā)送。其次,TCP不提供任何延時(shí)保障,具體點(diǎn)說(shuō),發(fā)送進(jìn)程把數(shù)據(jù)傳入自己的TCP套接字后,這個(gè)數(shù)據(jù)將最終到達(dá)其接受套接字,但是中間所經(jīng)歷的時(shí)間就不能保證了 ,花幾秒或則幾分鐘都不一定。
UDP協(xié)議是一個(gè)非面向連接的輕量級(jí)傳輸協(xié)議,具有一個(gè)最簡(jiǎn)單的服務(wù)模型。UDP是無(wú)連接的,因此兩個(gè)進(jìn)程彼此通信之前沒(méi)有握手過(guò)程。UDP協(xié)議提供不可靠的數(shù)據(jù)傳輸服務(wù),也就是說(shuō)當(dāng)一個(gè)進(jìn)程往自己套接字發(fā)送一個(gè)消息時(shí),UDP不能保障這個(gè)消息回最終到達(dá)接受套接字。另外,就確實(shí)到達(dá)接收套節(jié)字的消息而言,他們的到達(dá)順序也可能不是有序的。
UDP不含擁塞控制機(jī)制,因此發(fā)送進(jìn)程能夠以任意速率往UDP套接字發(fā)送數(shù)據(jù),盡管不能保證所有數(shù)據(jù)都到達(dá)接收套接字,但是會(huì)有相當(dāng)比列的數(shù)據(jù)到達(dá)。實(shí)時(shí)應(yīng)用程序的開(kāi)發(fā)人員往往選擇在UDP協(xié)議上運(yùn)行他們的應(yīng)用。與TCP類(lèi)似,UDP也不提供任何延遲保證。
說(shuō)了這么多,我們可以通過(guò)下表來(lái)體會(huì)一下上面說(shuō)的真正含義。
應(yīng) 用 |
應(yīng)用層協(xié)議 |
用來(lái)支撐的傳輸協(xié)議 |
電子郵件 |
SMTP(RFC82) |
TCP |
遠(yuǎn)程終端訪問(wèn) |
Telenet |
TCP |
WEB |
HTTP |
TCP |
文件傳送 |
FTP |
TCP |
遠(yuǎn)程文件服務(wù)器 |
NFS |
TCP或UDP |
流多媒體 |
專(zhuān)屬 |
UDP或TCP |
因特網(wǎng)電話(huà) |
專(zhuān)屬 |
一般為UDP |
在表中我們看到,電子郵件,遠(yuǎn)程終端訪問(wèn),WEB和文件傳送都使用TCP協(xié)議,這些應(yīng)用選擇TCP的主要原因是在于TCP提供了可靠的數(shù)據(jù)傳輸服務(wù),能夠保證所有數(shù)據(jù)最終到達(dá)其目的地。我們還看到,因特網(wǎng)電話(huà)一般運(yùn)行在UDP協(xié)議上面,一個(gè)因特網(wǎng)電話(huà)應(yīng)用的倆端都得以某個(gè)最小速率跨越網(wǎng)絡(luò)發(fā)送數(shù)據(jù);另外,因特網(wǎng)電話(huà)可以容忍數(shù)據(jù)丟失,從這個(gè)倆個(gè)條件來(lái)看,都適合UDP,不需要可靠的TCP傳輸服務(wù)。
總的來(lái)說(shuō),TCP能保證傳遞全部數(shù)據(jù),而UDP不能,且他們都不提供延遲保證。他們不提供延遲保證,并不意味著時(shí)間敏感的應(yīng)用不能運(yùn)行在現(xiàn)在的因特網(wǎng)上,而是應(yīng)用是通過(guò)一些其他的方法來(lái)保證這些需要。