UDP協(xié)議是一個簡單的面向數(shù)據(jù)報的運輸層協(xié)議。進程的每個輸出操作都正好產(chǎn)生一個UDP數(shù)據(jù)報百揭,并組裝成一份待發(fā)送的IP數(shù)據(jù)報爽哎。
這與面向字節(jié)流協(xié)議的TCP不同,應(yīng)用層產(chǎn)生的全體數(shù)據(jù)與真正發(fā)送的單個IP數(shù)據(jù)報可能沒什么關(guān)系器一。
特點
UDP是無連接的
不需要建立連接课锌,也不需要在最后釋放連接,因此減少了開銷和發(fā)送數(shù)據(jù)之前的時延祈秕。UDP使用盡最大努力交付
UDP是面向報文
進程的每一個輸出操作都正好產(chǎn)生一個UDP數(shù)據(jù)報渺贤,并組裝成一份待發(fā)送的IP數(shù)據(jù)報。這個與面向字節(jié)流的協(xié)議不同踢步,如TCP癣亚, 應(yīng)用程序產(chǎn)生的全體數(shù)據(jù)與真正發(fā)送的單個IP數(shù)據(jù)報沒有什么聯(lián)系。UDP沒有擁塞控制
因此網(wǎng)絡(luò)出現(xiàn)擁塞不會使源主機的發(fā)送速率降低获印。這對某些實時應(yīng)用很重要述雾。(例如IP電話街州,實時視頻會議)要求源主機以恒定的速率發(fā)送數(shù)據(jù),并且允許在網(wǎng)絡(luò)發(fā)生擁塞時丟失一些數(shù)據(jù)玻孟。UDP支持一對一唆缴,一對多,多對一和多對多的交互通信
而TCP因為建立連接黍翎,只能支持1對1面徽,所以TCP不提供廣播或多播服務(wù)。UDP首部開銷很小
只有8字節(jié)匣掸,比TCP的20字節(jié)的首部要短趟紊。
UDP報文格式
源端口
源端口號,標記發(fā)送進程碰酝。目的端口
目的端口號霎匈,標記接收進程。長度
UDP報文長度(首部+數(shù)據(jù))送爸,其最小值是8(僅含首部)铛嘱。UDP首部長度固定為8,所以減去8袭厂,則得到數(shù)據(jù)部分的起始地址墨吓。-
檢驗和
包括UDP首部和數(shù)據(jù)部分,IP首部的檢驗和只覆蓋IP的首部纹磺。
同時UDP和TCP的檢驗和都會覆蓋首部和數(shù)據(jù)帖烘,但UDP檢驗和是可選的,TCP檢驗和是必需的橄杨。
其次蚓让,TCP和UDP的檢驗和都包括12字節(jié)的偽首部。
IP分片
IP層要發(fā)送一份數(shù)據(jù)報時讥珍,要查詢接口的MTU,并將IP數(shù)據(jù)報長度與其比較窄瘟,如果需要則要進行分片衷佃。分片可以發(fā)生在原始發(fā)送端主機上面,也可以發(fā)生在中間路由器上蹄葱。
當IP數(shù)據(jù)報被分片后氏义,每一片都成為一個獨立的分組,具有自己的IP首部图云,任何運輸層首部只會出現(xiàn)在第1片數(shù)據(jù)報分片中惯悠。并在選擇路由時與其他分組獨立。當數(shù)據(jù)報的這些片到達目的端時竣况,可能會發(fā)生失序克婶,但是在IP首部中有足夠多的信息讓接收端能正確組裝這些數(shù)據(jù)報片。
盡管IP分片過程是透明的,但即使只丟失一片數(shù)據(jù)也要重傳整個數(shù)據(jù)報情萤,因為IP層沒有超時重傳機制鸭蛙。由更高層來負責(zé)超時和重傳(TCP 有超時和重傳機制,但UDP沒有)筋岛。當來自TCP報文段的某一片丟失了后娶视,TCP超時后會重發(fā)整個TCP報文段,該報文段對應(yīng)于一份IP數(shù)據(jù)報睁宰,沒有辦法只重傳數(shù)據(jù)報中的一個數(shù)據(jù)報片肪获。
以太網(wǎng)上,數(shù)據(jù)幀的最大長度是1500字節(jié)柒傻,其中1472字節(jié)給數(shù)據(jù)(1500 - IP首部為20字節(jié) - UDP首部為8字節(jié))孝赫。
現(xiàn)在假定我們發(fā)送一個數(shù)據(jù)內(nèi)容為1473長度的報文,則會發(fā)生IP分片诅愚。
ICMP不可達差錯
發(fā)生ICMP不可達差錯的一種情況就是:當路由器收到一份需要分片的數(shù)據(jù)報寒锚,而在IP首部又設(shè)置了不分片(DF)的標志比特。
如果某個程序需要判斷到達目的端的路途中最小MTU是多少(路徑MTU發(fā)現(xiàn)機制)违孝。那么這個差錯就可以被程序利用刹前。
這種情況下的ICMP不可達差錯報文格式如圖所示: