IP报文段的长度选择

理想情况下,整个IP数据报都封装在一个物理帧中。然而,分组交换技术对每一个物理帧可传输的数据量规定了一个固定的上界(也称为最大传输单元,MTU)。例如以太网是1500octets,FDDI大约是4470octets。当传输的IP数据报大于网络中的MTU值时,IP数据报将被划分成较小的数据报片(fragment),这个划分过程被称为分片(fragmenation)。数据报片的格式与原数据报格式相同,因为分片基本复制了原始数据报的首部。除了标志字段中的一个bit,它表示分片。并且保持数据报片的总长度小于传输它的底层网络的MTU长度。
分片通常发生在路由器上。
因为IP数据报格式中,分片的偏移量(fragment offset)是以8的倍数表示的八位组,所以数据报片的大小必须是8的倍数。
IP协议并不明确规定封装到物理帧中的数据报应该多大,源站可以选择任意合适的大小,分片和重组将自动进行!但是,IP协议规定路由器必须能接受所连网络中最大MTU大小的数据报;同时,它必须随时能够处理最大可达576octets的数据报(同样要求主机也随时能够接受或重组至少576octets的数据报)。
在TCP协议软件中,首部使用一个选项来指定本端能接收的报文段长度的最大值MSS(最大分组尺寸Maxinum Segment Size)。当然,这个值的确定是通过两端协商之后获得的。如果连接的两端处于同一个物理网络,TCP协议软件通常会计算合适的MSS,使得IP数据报的大小与网络的MTU相适应。如果连接的两端不在同一物理网络上,它们就会把连接所经过的路径上的最小MTU作为MSS。也可以把536作为最大报文段的长度(IP数据报的默认长度是576,还要减去IP和TCP首部的长度)。
在一般的互联网环境中,选择合适的最大报文段长度值是很困难的,取值过大或取值过小均会直接影响到网络的性能。
在TCP报文段中,除了实际数据外还需要至少40八位组的TCP和IP首部。如果每个报文段只包含1个八位组的用户数据,那么网络带宽的利用率(信噪比)只有1/41。由于将数据报逐个递交给下层协议处理的过程中还会加入各层协议的首部信息,因此在实际工作中这个值还会变得更小。
而过大的报文段构成了长的IP数据报,当IP数据报的长度超出当前网络线路的MTU时,TCP/IP协议软件就不得不为IP数据报进行分片(fragment)处理。分片越多,丢包的机率越大。因为在TCP报文段中,当一个数据报被切分成若干个分片传输时,目的站必须等待所有的分片在指定的时间内到达。只要在这一传输过程中有任何一个分片丢失或超时(源站没有为分片进行缓存,也没有独立于整个IP数据报的超时重传机制),都将造成整个IP数据报的重传。过多的重传加大了网络的负担,一旦网络发生拥塞,势必又反过来导致更多的数据报发生丢失和重传,形成恶性循环。
与TCP报文段不同,IP没有为UDP数据报提供分片功能。或者说UDP数据报在被分片之后不能被源站独立识别与确认。因此,对于UDP数据报,目的站要么完整地接收到了源站所发送的整个数据报,要么什么都没有接收到。
理论上,TCP报文段的最佳长度S可以这样表示:当携带尽可能长的报文段从源站到目的站的过程中IP数据报不会发生分片时,这个长度就是最佳长度。但实际上确定S的值是很困难的,因为:
1、大多数TCP的实现并不提供这个功能;
2、端到端的路由选路是动态变换的(意味着MTU也跟着变了);
3、封装到IP数据报的底层协议的首部可以动态增减,例如可选的IP选项(意味着数据长度也要随之增减了)。
如果TCP连接时没有协商MSS,而且目的主机不在本地网络(意味着需要通过路由器)的情况下,每个栈将使用默认的536八位组数据长度。也就是说,不论源主机要求发送和目标主机要求接收多大的数据量,TCP/IP协议栈只会在TCP报文中最多封装536八位组的实际用户数据。
对于UDP而言,理论上可以传输任意尺寸的数据报。最坏的情况是,本地或远程网络系统没有足够的发送或接收缓存空间而导致操作失败,但不会返回任何错误信息。
作为经验和法则,推荐TCP使用不超过1460(182 x 8 = 1456)八位组、UDP使用不超过1472(184 x 8 = 1472)八位组的数据报长度。这些尺寸与常用的DIX以太网介质的MTU一致,并且也是MSS协商的常见值。一般情况下,这些值实现了效率最大化。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值