TCP,UDP发送数据包大小浅析.docx

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
TCPZUDP发送数据包大小浅析 MTU最大传输单元,这个最大传输单元实际上和链路层协议有着密切的关系,Ethernetll 帧的结构DMAC+SMAC+Type+Data+CRC由于以太网传输电气方而的限制,每个以太网 帧都有最小的大小64bytes最大不能超过1518bytes,对于小于或者大于这个限制的以太 网帧我们都可以视之为错误的数据帧,一般的以太网转发设备会丢弃这些数拯帧。 由于以太网Ethernetll最大的数据帧是1518Bytes这样,创去以太网帧的帧头(DMAC目 的 MAC 地址 48bit=6Bytes+SMAC 源 MAC 地址 48bit=6Bytes+Type 域 2bytes) 14Bytes和帧尾CRC校验部分4Bytes那么剩下承载上层协议的地方也就是Data域最大就 只能有1500Bytes这个值我们就把它称之为MTU。 PPPoE所谓PPPoE就是在以太网上面跑PPP协议,有人奇怪了,PPP协议和Ethernet不 都是链路层协议吗?怎么一个链路层跑到另外一个链路层上面去了,难道升级成网络层协议 了不成。其实这是个误区:就是某层协议只能承载更上一层协议。 为什么会产生这种奇怪的需求呢?这是因为随着宽带接入(这种宽带接入一般为Cable Modem或者xDSL或者以太网的接入),因为以太网缺乏认证计费机制而传统运营商是通 过PPP协议来对拨号等接入服务进行认证计费的. PPPoE带来了好处,也带来了一些坏处,比如:二次封装耗费资源,降低了传输效能等等, 这些坏处俺也不多说了,最大的坏处就是PPPoE导致MTU变小了以太网的MTU是1500, 再减去PPP的包头包尾的开销(8Bytes),就变成1492。 UDP 包的大小就应该是 1492 - IP 头(20) - UDP 头(8) = 1464(BYTES) TCP 包的大小就应该是 1492 - IP 头(20) - TCP 头(20) = 1452(BYTES) 目前大多数的路由设备的MTU都为1500 我对上而的理解是:如果我们泄义的TCP和UDP包小于1452, 1464,那么我们的包在IP 层就不用分包了,这样传输过程中就避免了在IP层组包发生的错误。如果使用UDP协议, 如果IP层组包发生错误,那么包就会被丢弃,UDP不保证可靠传输。但是TCP发生组包 错误时,该包会被重传,保证可靠传输。所以,我们在用Socket编程时,包的大小设泄不 一泄非要小于1400, UDP协议要求包小于64K, TCP没有限泄。 总结: 我们设左包的大小对于UDP和TCP协议是不同的,关键是看系统性能和网络性能,网络是 状态很好的局域网,那么UDP包分大点,提髙系统的性能。不好,就分小于1464,这样 可以减低丢包率。对于TCP来说,这个就要靠经验了,因为,TCP丢包可以自动重传,分 大了,系统性能提高了,分包和错误重组可能会耗费时间,使传送时间延长,分小了,系统 性能又降低了。 UDP数据包大小的问题 在进行UDP编程的时候,我们最容易想到的问题就是,一次发送多少bytes好? 当然,这个没有唯一答案,相对于不同的系统,不同的要求,其得到的答案是不一样的,这里仅对 像ICQ-类的发送聊天消息的情况作分析,对于英他情况,或许也能得到一点帮助: 首先,我们知iti,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的数据控制在14

您可能关注的文档

文档评论(0)

wangcunhuan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档