博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UDP和TCP两种协议的传输数据长度分析
阅读量:5141 次
发布时间:2019-06-13

本文共 1220 字,大约阅读时间需要 4 分钟。

一、UDP

UDP允许传输的最大长度理论上2^16 - udp head - iphead( 65507 字节 = 65535 - 20 - 8)

 

但是实际上UDP数据报的数据区最大长度为1472字节。分析如下:

首先,我们知道,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字节就是我们可以使用的字节数。

 

超过1500字节怎么办?

这也就是说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)以内.

 

二、TCP

TCP 包的大小就应该是 1500 - IP头(20) - TCP头(20) = 1460 (Bytes)

我们在用Socket编程时,UDP协议要求包小于64K。TCP没有限定,TCP包头中就没有“包长度”字段,而完全依靠IP层去处理分帧。这就是为什么TCP常常被称作一种“流协议”的原因,开发者在使用TCP服务的时候,不必去关心数据包的大小,只需讲SOCKET看作一条数据流的入口,往里面放数据就是了,TCP协议本身会进行拥塞/流量控制。 

转载于:https://www.cnblogs.com/CNHK1949/p/10677292.html

你可能感兴趣的文章
SharePoint自定义程序页面部署 不用重启IIS
查看>>
2014-11-30-2333-Java-数组
查看>>
Nginx 自动补全url地址补全最后的斜线
查看>>
【SQL Server 2008 安装全过程】
查看>>
xml的解析及案例的分析和分享
查看>>
[译] 盘点CSS3中的新特性
查看>>
Test
查看>>
猜字母
查看>>
POJ 2421 Constructing Roads(最小生成树)
查看>>
weibo_json
查看>>
30 最小n个数
查看>>
ACM题目————最长回文串
查看>>
AOSP ON MAKO(在NEXUS 4上刷ANDROID 4.4 源代码包-下载/配置/编译/刷机)
查看>>
nativeXml使用方法
查看>>
LightOJ1074Extended Traffic(bellman_ford最短路+负环标记)
查看>>
Android Studio 编译不通过,报错“找不到org.apache.http
查看>>
SQL Server Failover Cluster (FCI) installations is the failure of the Network Name
查看>>
springmvc集成Freemarke配置的几点
查看>>
自己写的仿爱奇艺综艺频道轮播图,没有淡入淡出效果
查看>>
提炼游戏引擎系列:第一次迭代
查看>>