TCP/IP包长度是怎么确定的

本文详细介绍了TCP/IP包的MTU(最大传输单元),包括其定义、网络中的由来、对UDP和TCP的影响,以及如何确定当前网络的最佳MTU值。MTU决定了数据包的最大尺寸,过大或过小都会影响网络性能。通过调整和测试,可以找到最适合当前网络环境的MTU值,以实现高效的数据传输。
摘要由CSDN通过智能技术生成

一、MTU 简述 - 分包后数据包最大长度

1、定义

Maximum Transmission Unit(最大可传输单元) 的缩写,它的单位是字节。在 *数据链路层* 定义

一个数据包穿过一个大的网络,它其间会穿过多个网络,每个网络的 MTU 值是不同的。这个网络中最小的 MTU 值,被称为路径 MTU。

假设:我们的接受/发送端都是以太网,它们的 MTU 都是 1500,我们发送的时候,数据包会以 1500 来封装,然而,不幸的是,传输中有一段X.25网,它的 MTU 是 576,这会发生什么呢?

结论是显而易见的,这个数据包会被再次分片,更重要的是,这种情况下,如果 IP 包被设置了“不允许分片标志”,那会发生些什么呢?

对,数据包将被丢弃,然事收到一份ICMP不可达差错,告诉你,需要分片!

很显然,MTU 值设置得过大或过小,都会在一定程度上影响我们上网的速度。

在应用程序中我们用到的 Data 的长度最大是多少,直接取决于底层的限制,即:MTU

以太网(Ethernet)的 数据帧 在链路层   IP包 在网络层   TCP或UDP包 在传输层   TCP或UDP中的数据(Data)在应用层

它们的 关系是 数据帧{IP包{TCP或UDP包{Data}}}

2、网络中 MTU 值的由来:

1>、最大值:

对于 IP 数据包来讲,在 IP 包头中,以 两个字节(16 位)来描述 IP 包的长度,也就是说,一个 IP 包,最长可能是  65535字节(64K)。

那么加上以太网帧头和尾,一个以太网帧的大小就是:65535 + 14 + 4 = 65553,看起来似乎很完美,发送方也不需要拆包,接收方也不需要重组

但,使用最大值真的可以吗?我们往下看

2>、最佳值的推导:

a>、按最大值来推算:

IP 数据包按最大值 65535字节 来算,假设我们现在的带宽是:100Mbps,因为以太网帧是传输中的最小可识别单元,再往下就是0101所对应的光信号了,所以我们的一条带宽同时只能发送一个以太网帧。

如果同时发送多个,那么对端就无法重组成一个以太网帧了,在100Mbps的带宽中(假设中间没有损耗),我们计算一下发送这一帧需要的时间:

( 65553 * 8 ) / ( 100 * 1024 * 1024 ) ≈ 0.005(s)

在100M网络下传输一帧就需要5ms,也就是说这5ms其他进程发送不了任何数据。如果是早先的电话拨号,网速只有2M的情况下:

( 65553 * 8 ) / ( 2 * 1024 * 1024 ) ≈ 0.100(s)

100ms,这简直是噩梦。其实这就像红绿灯,时间要设置合理,交替通行,不然同一个方向如果一直是绿灯,那么另一个方向就要堵成翔了。

小知识

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hello Jason

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值