網(wǎng)絡(luò)協(xié)議之UDP協(xié)議
協(xié)議UDP協(xié)議 UDP是一個(gè)簡單的面向數(shù)據(jù)報(bào)的運(yùn)輸層協(xié)議:進(jìn)程的每個(gè)輸出操作都會(huì)產(chǎn)生一個(gè)UDP數(shù)據(jù)報(bào),并組裝成一份待發(fā)送的IP數(shù)據(jù)報(bào),這與面向字符流的協(xié)議不同,如TCP,應(yīng)用程序產(chǎn)生的全體數(shù)據(jù)與真正發(fā)送的單個(gè)IP數(shù)據(jù)報(bào)可能沒有什么聯(lián)系(主要是在傳輸層就進(jìn)行分段了,因此不會(huì)受IP分片的影響)。
UDP的校驗(yàn)和
至于UDP的校驗(yàn)和,這里注意下區(qū)別就好了,UDP對(duì)首部和數(shù)據(jù)部分都進(jìn)行校驗(yàn),而IP首部的校驗(yàn)和僅對(duì)IP的首部進(jìn)行校驗(yàn),順帶提下TCP,TCP的校驗(yàn)和也是對(duì)首部和數(shù)據(jù)部分都進(jìn)行校驗(yàn),另外,UDP的校驗(yàn)和是可選的,而TCP的是必選的。
不可靠協(xié)議
UDP是不可靠的協(xié)議,沒有超時(shí)和重傳功能,當(dāng)UDP數(shù)據(jù)封裝到IP數(shù)據(jù)報(bào)傳輸時(shí),如果丟失,會(huì)發(fā)送一個(gè)ICMP差錯(cuò)報(bào)文給源主機(jī),另外,如果UDP數(shù)據(jù)報(bào)的發(fā)送端沒打開UDP校驗(yàn)和,而接收端計(jì)算校驗(yàn)和有差錯(cuò),那么UDP數(shù)據(jù)報(bào)將會(huì)被丟掉,也不會(huì)發(fā)送ICMP差錯(cuò)報(bào)文。
路徑MTU發(fā)現(xiàn)
可以修改Traceroute程序來確定路徑MTU。要做的是發(fā)送分組,并設(shè)置將IP首部設(shè)置為不分片,發(fā)送的***個(gè)分組的長度正好于出口MTU相等,每次收到ICMP不可分片的差錯(cuò)報(bào)文時(shí),就減小分組長度,使新的ICMP不可分片差錯(cuò)報(bào)文中返回更小的MTU,每次用更小的MTU值來傳送,這樣能找到更小的MTU值。
利用路徑MTU發(fā)現(xiàn)機(jī)制,應(yīng)用程序可以充分利用更大的MTU來發(fā)送報(bào)文。
UDP***長度
理論上IP數(shù)據(jù)報(bào)的***長度為65535字節(jié),因此理論上的UDP數(shù)據(jù)報(bào)的***長度為65507(65535-20-8)字節(jié),但是,大多數(shù)實(shí)現(xiàn)所提供的長度比這個(gè)***值小。一般有兩個(gè)因素的限制(書上給出了一些例子,見P120):
1、應(yīng)用程序可能胡受到其程序接口的限制,一些API的實(shí)現(xiàn)中可能有限定UDP數(shù)據(jù)報(bào)的***長度。另外,現(xiàn)在大部分系統(tǒng)都默認(rèn)提供了可讀寫大于8192字節(jié)的UDP數(shù)據(jù)報(bào)。
2、受限于TCP/IP內(nèi)核的實(shí)現(xiàn),可能存在一些實(shí)現(xiàn)特性,使IP數(shù)據(jù)報(bào)長度小于65535字節(jié)。
數(shù)據(jù)報(bào)截?cái)?/strong>
正是由于UDP***數(shù)據(jù)報(bào)的限制(受限于上面的兩個(gè)因素,一般都會(huì)小于65507),大于這個(gè)限制的數(shù)據(jù)報(bào)會(huì)被截?cái)?,從而發(fā)生數(shù)據(jù)丟失,且不會(huì)有任何數(shù)據(jù)丟失的通知,這也是UDP協(xié)議不可靠傳輸?shù)牧硪粋€(gè)體現(xiàn)。而TCP則沒有任何信息邊界,TCP首部中沒有對(duì)TCP最長報(bào)文段的限制,因此TCP以應(yīng)用程序讀操作時(shí)所要求的長度來傳送數(shù)據(jù)(理論上一次可以發(fā)送很大的數(shù)據(jù),但考慮到網(wǎng)絡(luò)的傳輸性能,***不要一次傳輸太大的數(shù)據(jù)),當(dāng)然在超過MSS值時(shí)會(huì)產(chǎn)生分段,因此不會(huì)發(fā)生數(shù)據(jù)截?cái)唷?/p>
ICMP源站抑制差錯(cuò)
當(dāng)一個(gè)系統(tǒng)中的某主機(jī)或路由器處理數(shù)據(jù)的速度趕不上接受數(shù)據(jù)的速度時(shí),因?yàn)榻邮罩鳈C(jī)的IP緩存會(huì)被占滿,可能會(huì)產(chǎn)生這個(gè)差錯(cuò),從而發(fā)送一個(gè)ICMP源站抑制差錯(cuò)報(bào)文,這里要注意是“可能”。