淺談乙太網路中的UDP編程

來源:互聯網
上載者:User

關於Internet上傳輸的、udp資料的大小問題,在論壇找到的文章

http://bbs.csdn.net/topics/20299532#new_post

轉Delphi大富翁上的文章的一部分,具體的文章見

http://www.delphibbs.com/delphibbs/dispq.asp?lid=726166

輪子學習筆記一:淺談乙太網路中的UDP編程 

1.在進行UDP編程的時候,我們最容易想到的問題就是,一次發送多少bytes好? 
當然,這個沒有唯一答案,相對於不同的系統,不同的要求,其得到的答案是不一樣的,我這裡僅對 
像ICQ一類的發送聊天訊息的情況作分析,對於其他情況,你或許也能得到一點協助: 
首先,我們知道,TCP/IP通常被認為是一個四層協議系統,包括鏈路層,網路層,運輸層,應用程式層. 
UDP屬於運輸層,下面我們由下至上一步一步來看: 
乙太網路(Ethernet)資料幀的長度必須在46-1500位元組之間,這是由乙太網路的物理特性決定的. 
這個1500位元組被稱為鏈路層的MTU(傳輸單元最大值). 
但這並不是指鏈路層的長度被限制在1500位元組,其實這這個MTU指的是鏈路層的資料區. 
並不包括鏈路層的首部和尾部的18個位元組. 
所以,事實上,這個1500位元組就是網路層IP資料報的長度限制. 
因為IP資料報的首部為20位元組,所以IP資料報的資料區長度最大為1480位元組. 
而這個1480位元組就是用來放TCP傳來的TCP報文段或UDP傳來的UDP資料報的. 
又因為UDP資料報的首部8位元組,所以UDP資料報的資料區最大長度為1472位元組. 
這個1472位元組就是我們可以使用的位元組數。:) 

當我們發送的UDP資料大於1472的時候會怎樣呢? 
這也就是說IP資料報大於1500位元組,大於MTU.這個時候發送方IP層就需要分區(fragmentation). 
把資料報分成若干片,使每一片都小於MTU.而接收方IP層則需要進行資料報的重組. 
這樣就會多做許多事情,而更嚴重的是,由於UDP的特性,當某一片資料傳送中丟失時,接收方便 
無法重組資料報.將導致丟棄整個UDP資料報。 

因此,在普通的區域網路環境下,我建議將UDP的資料控制在1472位元組以下為好. 

進行Internet編程時則不同,因為Internet上的路由器可能會將MTU設為不同的值. 
如果我們假定MTU為1500來發送資料的,而途經的某個網路的MTU值小於1500位元組,那麼系統將會使用一系列的機 
制來調整MTU值,使資料報能夠順利到達目的地,這樣就會做許多不必要的操作. 

鑒於Internet上的標準MTU值為576位元組,所以我建議在進行Internet的UDP編程時. 
最好將UDP的資料長度控制項在548位元組(576-8-20)以內. 

2.UDP資料報的覆蓋和重疊問題? 
有的兄弟說使用UDP編程時會出現資料的覆蓋和重疊問題, 
所謂覆蓋,即發送第一條訊息為"第一條",第二條訊息為"第二條". 
而接收到的兩條訊息皆為"第一條". 
而重疊,即指當發送"第一條","第二條"兩條訊息後. 
收到的第一條訊息可能是不固定的,比如"第一條第二","第一條第二條"等. 
這種重疊的情況在TCP編程中是常見的. 
但是在我的編程經驗中,從來沒有遇到過這兩種情況. 

我在區域網路中在機器A用使死迴圈連續不斷的向機器B發送UDP資料報. 
但一直沒有出現上面的兩個問題. 

因此我認為,根據UDP協議的特性,不會象基於位元組流串連的TCP一樣出現重疊問題. 
有兄弟說,他在區域網路試也沒有問題,但在Internet上會.是不是路由器對資料進行組合, 
或者說兩條訊息同時到達? 

我想兩條訊息到達的時延無論如何不會比在區域網路中的時延短吧?即時有,那種機率也是很少的. 
而對於路由資料進行了重組,我認為,即使假定路由器對資料進行了重組,這也對導致UDP資料報 
在接收時探索資料報中的校正和與資料不一致而丟棄該資料報。 

暫訂寫到這裡吧,歡迎兄弟們指正,討論。:P 

Email:redware@21cn.com 

輪子 

2001.9.25 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.