udp編程中,一次能發送多少個bytes為好?


在進行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)以內.

 

上面這段話,來自月論壇:http://bbs.chinaunix.net/thread-1762376-1-1.html

 

而從上面這段話,讓我想到了,之前在做流媒體傳輸的時候一直沒明白的一個問題,在流媒體傳輸的時候,需要進行數據分包發送(基於udp組播),在看到這里,我貌似有點點明白了!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM