posts - 72, comments - 66, trackbacks - 0, articles - 0
          對(duì)于以太網(wǎng)環(huán)境下UDP傳輸中的數(shù)據(jù)包長(zhǎng)度問(wèn)題

          首先要看TCP/IP協(xié)議,涉及到四層:鏈路層,網(wǎng)絡(luò)層,傳輸層,應(yīng)用層。
          其中以太網(wǎng)(Ethernet)的數(shù)據(jù)幀在鏈路層
          IP包在網(wǎng)絡(luò)層
          TCP或UDP包在傳輸層
          TCP或UDP中的數(shù)據(jù)(Data)在應(yīng)用層
          它們的關(guān)系是 數(shù)據(jù)幀{IP包{TCP或UDP包{Data}}}
          在應(yīng)用程序中我們用到的Data的長(zhǎng)度最大是多少,直接取決于底層的限制。
          我們從下到上分析一下:
          在鏈路層,由以太網(wǎng)的物理特性決定了數(shù)據(jù)幀的長(zhǎng)度為(46+18)-(1500+18),其中的18是數(shù)據(jù)幀的頭和尾,也就是說(shuō)數(shù)據(jù)幀的內(nèi)容最大為1500,即MTU(Maximum Transmission Unit)為1500;
          在網(wǎng)絡(luò)層,因?yàn)镮P包的首部要占用20字節(jié),所以這的MTU為1500-20=1480;
          在傳輸層,對(duì)于UDP包的首部要占用8字節(jié),所以這的MTU為1480-8=1472;
          所以,在應(yīng)用層,你的Data最大長(zhǎng)度為1472。
          (當(dāng)我們的UDP包中的數(shù)據(jù)多于MTU(1472)時(shí),發(fā)送方的IP層需要分片fragmentation進(jìn)行傳輸,而在接收方IP層則需要進(jìn)行數(shù)據(jù)報(bào)重組,由于UDP是不可靠的傳輸協(xié)議,如果分片丟失導(dǎo)致重組失敗,將導(dǎo)致UDP數(shù)據(jù)包被丟棄)。
          從上面的分析來(lái)看,在普通的局域網(wǎng)環(huán)境下,UDP的數(shù)據(jù)最大為1472字節(jié)最好(避免分片重組)。
          但在網(wǎng)絡(luò)編程中,Internet中的路由器可能有設(shè)置成不同的值(小于默認(rèn)值),Internet上的標(biāo)準(zhǔn)MTU值為576,所以Internet的UDP編程時(shí)數(shù)據(jù)長(zhǎng)度最好在576-20-8=548字節(jié)以內(nèi)。
          MTU對(duì)我們的UDP編程很重要,那如何查看路由的MTU值呢?
          對(duì)于windows OS: ping -f -l <data_length> <gateway_IP>
          如:ping -f -l 1472 192.168.0.1
          如果提示:Packets needs to be fragmented but DF set.
          則表明MTU小于1500,不斷改小data_length值,可以最終測(cè)算出gateway的MTU值;
          對(duì)于linux OS: ping -c <number> -M do -s <data_length> <gateway_IP>
          如: ping -c 1 -M do -s 1472 192.168.0.1
          如果提示 Frag needed and DF set……
          則表明MTU小于1500,可以再測(cè)以推算gateway的MTU。
          當(dāng)然要修改MTU的值,那就是網(wǎng)管的事了(一般人沒(méi)這權(quán)限呀),我們只能申請(qǐng)加等待了 ^-^ .

          主站蜘蛛池模板: 五莲县| 乳山市| 苍南县| 阜康市| 邵阳市| 江城| 涡阳县| 图片| 哈巴河县| 广昌县| 台南县| 和林格尔县| 嘉黎县| 那坡县| 常德市| 舟山市| 广宗县| 延庆县| 毕节市| 武平县| 苍南县| 墨竹工卡县| 犍为县| 巴林右旗| 牡丹江市| 古蔺县| 浮山县| 茂名市| 通道| 竹山县| 治多县| 肇东市| 开平市| 六盘水市| 安义县| 邵阳市| 遂平县| 忻城县| 丹江口市| 甘孜县| 肥城市|