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

转载 2013年12月02日 20:47:15

MTU最大传输单元,这个最大传输单元实际上和链路层协议有着密切的关系,EthernetII帧的结构DMAC+SMAC+Type+Data+CRC由于以太网传输电气方面的限制,每个以太网帧都有最小的大小64bytes最大不能超过1518bytes,对于小于或者大于这个限制的以太网帧我们都可以视之为错误的数据帧,一般的以太网转发设备会丢弃这些数据帧。
由于以太网EthernetII最大的数据帧是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丢包可以自动重传,分大了,系统性能提高了,分包和错误重组可能会耗费时间,使传送时间延长,分小了,系统性能又降低了。

TCP,UDP数据包的大小以及MTU

TCP、UDP数据包大小的确定     UDP和TCP协议利用端口号实现多项应用同时发送和接收数据。数据通过源端口发送出去,通过目标端口接收。有的网络应用只能使用预留或注册的静态端口;而另外一些...
  • u014805066
  • u014805066
  • 2016年01月20日 10:19
  • 1018

TCP、UDP数据包大小的限制

1、概述 首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层。    其中以太网(Ethernet)的数据帧在链路层    IP包在网络层    TCP或UDP包在传输层    T...
  • caoshangpa
  • caoshangpa
  • 2016年05月29日 10:27
  • 15990

SOCKET通信中TCP、UDP数据包大小的确定

UDP和TCP协议利用端口号实现多项应用同时发送和接收数据。数据通过源端口发送出去,通过目标端口接收。有的网络应用只能使用预留或注册的静态端口;而另外一些网络应用则可以使用未被注册的动态端口。因为UD...
  • kobejayandy
  • kobejayandy
  • 2014年06月29日 17:59
  • 3889

Socket网络通信理论基础搜集(TCP/IP协议栈与数据包封装+TCP与UDP的区别)

(一)TCP/IP协议栈与数据包封装 TCP/IP网络协议栈分为应用层(Application)、传输层(Transport)、网络层(Network)和链路层(Link)四层。如下图所示(该图...
  • u010359641
  • u010359641
  • 2015年03月26日 09:52
  • 1310

黑马程序员--Java基础学习之网络编程(TCP、UDP、Socket、模拟发送和接收数据)

网络传输过程: 1,找到对方ip 2,数据发送到指定端口(每个应用程序对应一个端口) 3,定义通信规则,即协议   TCP/IP UDP 1,面向无连接,将数据、源、目的封装(像邮递东西) 2,数据...
  • u011746071
  • u011746071
  • 2013年09月28日 10:42
  • 2134

Android实现TCP与UDP传输

关于TCP和UDP协议的描述,可参考http://zhoujianghai.iteye.com/blog/1052970   下面是android与PC端使用TCP和UDP协议通信的例子: 以P...
  • sdvch
  • sdvch
  • 2013年10月29日 23:44
  • 7596

[基础] UDP数据包大小一般为多少?什么是碎片包?

转载自冠威博客 首先,我们知道,TCP/IP通常被认为是一个四层协议系统,包括链路层,网络层,传输层,应用层.UDP属于运输层,下面我们由下至上一步一步来看: 以太网(Ethernet)数据帧...
  • wanghaobo920
  • wanghaobo920
  • 2012年09月20日 21:31
  • 3760

udp的数据包一次发送多大为好

文章出处:http://blog.163.com/yuyi_vc/blog/static/170371753201152901727665/     在进行UDP编程的时候,我们最容易想到的...
  • ixidof
  • ixidof
  • 2012年07月27日 14:36
  • 4067

解读TCP/UDP数据包(二):TCP数据包结构

1、图 TCP数据包由首部和数据组成, 每行4个字节(32位) 其中首部最少20个字节(5行),最多60个字节(15行),选项部分是可选的; TCP首部并没有字段表明整个数据包的长度,是因...
  • fzzmouse
  • fzzmouse
  • 2013年06月29日 17:23
  • 2221

用winpcap发送UDP数据包

今天尝试用winpcap提供的pcap_sendpacket函数成功发送一个udp数据包到目的地址。 下面就来回顾一下过程。 首先用pcap_findalldevs得到网络接口,比如在我的机器上得到这...
  • liqinghua1653
  • liqinghua1653
  • 2009年04月08日 20:35
  • 9883
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TCP,UDP发送数据包大小浅析
举报原因:
原因补充:

(最多只允许输入30个字)