华南俳烁实业有限公司

考試首頁 | 考試用書 | 培訓(xùn)課程 | 模擬考場 | 考試論壇  
  當(dāng)前位置:操作系統(tǒng) > Linux > 文章內(nèi)容
  

Linux基礎(chǔ)教程:淺談UDP(數(shù)據(jù)包長度,收包能力,丟包及進(jìn)程結(jié)構(gòu)選擇)

 [ 2016年2月27日 ] 【

UDP數(shù)據(jù)包長度

UDP數(shù)據(jù)包的理論長度

udp數(shù)據(jù)包的理論長度是多少,合適的udp數(shù)據(jù)包應(yīng)該是多少呢?從TCP-IP詳解卷一第11章的udp數(shù)據(jù)包的包頭可以看出,udp的最大包長度是2^16-1的個(gè)字節(jié)。由于udp包頭占8個(gè)字節(jié),而在ip層進(jìn)行封裝后的ip包頭占去20字節(jié),所以這個(gè)是udp數(shù)據(jù)包的最大理論長度是 2^16-1-8-20=65507。

然而這個(gè)只是udp數(shù)據(jù)包的最大理論長度。首先,我們知道,TCP/IP通常被認(rèn)為是一個(gè)四層協(xié)議系統(tǒng),包括鏈路層、網(wǎng)絡(luò)層、運(yùn)輸層、應(yīng)用層。 UDP屬于運(yùn)輸層,在傳輸過程中,udp包的整體是作為下層協(xié)議的數(shù)據(jù)字段進(jìn)行傳輸?shù),它的長度大小受到下層ip層和數(shù)據(jù)鏈路層協(xié)議的制約。

MTU相關(guān)概念

以太網(wǎng)(Ethernet)數(shù)據(jù)幀的長度必須在46-1500字節(jié)之間,這是由以太網(wǎng)的物理特性決定的。這個(gè)1500字節(jié)被稱為鏈路層的MTU(最大傳輸單元)。因特網(wǎng)協(xié)議允許IP分片,這樣就可以將數(shù)據(jù)包分成足夠小的片段以通過那些最大傳輸單元小于該數(shù)據(jù)包原始大小的鏈路了。這一分片過程發(fā)生在網(wǎng)絡(luò)層,它使用的是將分組發(fā)送到鏈路上的網(wǎng)絡(luò)接口的最大傳輸單元的值。這個(gè)最大傳輸單元的值就是MTU(Maximum Transmission Unit)。它是指一種通信協(xié)議的某一層上面所能通過的最大數(shù)據(jù)包大小(以字節(jié)為單位)。最大傳輸單元這個(gè)參數(shù)通常與通信接口有關(guān)(網(wǎng)絡(luò)接口卡、串口等)。

在因特網(wǎng)協(xié)議中,一條因特網(wǎng)傳輸路徑的“路徑最大傳輸單元”被定義為從源地址到目的地址所經(jīng)過“路徑”上的所有IP跳的最大傳輸單元的最小值。

需要注意的是,loopbackMTU不受上述限制,查看loopback MTU值:

[root@bogon ~]# cat /sys/class/net/lo/mtu 

65536

IP分包udp數(shù)據(jù)包長度的影響

如上所述,由于網(wǎng)絡(luò)接口卡的制約,mtu的長度被限制在1500字節(jié),這個(gè)長度指的是鏈路層的數(shù)據(jù)區(qū)。對于大于這個(gè)數(shù)值的分組可能被分片,否則無法發(fā)送,而分組交換的網(wǎng)絡(luò)是不可靠的,存在著丟包。IP 協(xié)議的發(fā)送方不做重傳。接收方只有在收到全部的分片后才能 reassemble并送至上層協(xié)議處理代碼,否則在應(yīng)用程序看來這些分組已經(jīng)被丟棄。

假定同一時(shí)刻網(wǎng)絡(luò)丟包的概率是均等的,那么較大的IP datagram必然有更大的概率被丟棄,因?yàn)橹灰獊G失了一個(gè)fragment,就導(dǎo)致整個(gè)IP datagram接收不到。不超過MTU的分組是不存在分片問題的。

MTU的值并不包括鏈路層的首部和尾部的18個(gè)字節(jié)。所以,這個(gè)1500字節(jié)就是網(wǎng)絡(luò)層IP數(shù)據(jù)報(bào)的長度限制。因?yàn)镮P數(shù)據(jù)報(bào)的首部為20字節(jié),所以IP數(shù)據(jù)報(bào)的數(shù)據(jù)區(qū)長度最大為1480字節(jié)。而這個(gè)1480字節(jié)就是用來放TCP傳來的TCP報(bào)文段或UDP傳來的UDP數(shù)據(jù)報(bào)的。又因?yàn)閁DP數(shù)據(jù)報(bào)的首部8字節(jié),所以UDP數(shù)據(jù)報(bào)的數(shù)據(jù)區(qū)最大長度為1472字節(jié)。這個(gè)1472字節(jié)就是我們可以使用的字節(jié)數(shù)。

當(dāng)我們發(fā)送的UDP數(shù)據(jù)大于1472的時(shí)候會(huì)怎樣呢?這也就是說IP數(shù)據(jù)報(bào)大于1500字節(jié),大于MTU。這個(gè)時(shí)候發(fā)送方IP層就需要分片 (fragmentation)。把數(shù)據(jù)報(bào)分成若干片,使每一片都小于MTU。而接收方IP層則需要進(jìn)行數(shù)據(jù)報(bào)的重組。而更嚴(yán)重的是,由于UDP的特性,當(dāng)某一片數(shù)據(jù)傳送中丟失時(shí),接收方便無法重組數(shù)據(jù)報(bào)。將導(dǎo)致丟棄整個(gè)UDP數(shù)據(jù)報(bào)。因此,在普通的局域網(wǎng)環(huán)境下,將UDP的數(shù)據(jù)控制在1472字節(jié)以下為好。

進(jìn)行Internet編程時(shí)則不同,因?yàn)镮nternet上的路由器可能會(huì)將MTU設(shè)為不同的值。如果我們假定MTU為1500來發(fā)送數(shù)據(jù)的,而途經(jīng)的某個(gè)網(wǎng)絡(luò)的MTU值小于1500字節(jié),那么系統(tǒng)將會(huì)使用一系列的機(jī)制來調(diào)整MTU值,使數(shù)據(jù)報(bào)能夠順利到達(dá)目的地。鑒于Internet上的標(biāo)準(zhǔn) MTU值為576字節(jié),所以在進(jìn)行Internet的UDP編程時(shí),最好將UDP的數(shù)據(jù)長度控件在548字節(jié)(576-8-20)以內(nèi)。

UDP丟包

udp丟包是指網(wǎng)卡接收到數(shù)據(jù)包后,linux內(nèi)核的tcp/ip協(xié)議棧在udp數(shù)據(jù)包處理過程中的丟包,主要原因有兩個(gè):

1、udp數(shù)據(jù)包格式錯(cuò)誤或校驗(yàn)和檢查失敗。

2、應(yīng)用程序來不及處理udp數(shù)據(jù)包。

對于原因1,udp數(shù)據(jù)包本身的錯(cuò)誤很少見,應(yīng)用程序也不可控,本文不討論。

首先介紹通用的udp丟包檢測方法,使用netstat命令,加-su參數(shù)。

# netstat -su

Udp:

    2495354 packets received

    2100876 packets to unknown port received.

    3596307 packet receive errors

    14412863 packets sent

    RcvbufErrors: 3596307

    SndbufErrors: 0

從上面的輸出中,可以看到有一行輸出包含了"packet receive errors",如果每隔一段時(shí)間執(zhí)行netstat -su,發(fā)現(xiàn)行首的數(shù)字不斷變大,表明發(fā)生了udp丟包。

本文糾錯(cuò)】【告訴好友】【打印此文】【返回頂部
將考試網(wǎng)添加到收藏夾 | 每次上網(wǎng)自動(dòng)訪問考試網(wǎng) | 復(fù)制本頁地址,傳給QQ/MSN上的好友 | 申請鏈接 | 意見留言 TOP
關(guān)于本站  網(wǎng)站聲明  廣告服務(wù)  聯(lián)系方式  站內(nèi)導(dǎo)航  考試論壇
Copyright © 2007-2013 中華考試網(wǎng)(Examw.com) All Rights Reserved
尉氏县| 隆林| 四会市| 称多县| 柞水县| 葫芦岛市| 邯郸市| 建水县| 茶陵县| 安丘市| 武义县| 凤山市| 大足县| 丽水市| 大名县| 江川县| 新河县| 光山县| 潞西市| 诏安县| 汝城县| 临洮县| 历史| 海安县| 华安县| 乐业县| 嵊州市| 涞源县| 芮城县| 彰化县| 赫章县| 许昌市| 化德县| 阿克苏市| 汉源县| 永州市| 西盟| 阳谷县| 安宁市| 新平| 秦皇岛市|