我发现了不同链路的各种 MTU 列表,但它们从不包含 UMTS、LTE、EDGE、HSPA、GPRS。
上述技术的 MTU 是多少?
答案1
简短的回答是:视情况而定。
来自移动用户的数据封装在 GRPS 隧道协议(简称 GTP-U)中,该协议基本上是一个 UDP 流,带有 GTP 标头,其中包含隧道端点(GGSN/PGW 和广播电台,简单地说)的 IP 地址和隧道标识符 (TEID)。
报头的长度可变,最多可达 12 个八位字节。
所以,回到问题,这取决于移动回程网络 (Gn) 上使用的本机 MTU,从无线电设备到 GGSN,隧道在此解封装 (Gi)。如果回程 MTU 至少为 1512 字节,则 MTU 可以是常规的 1500 字节。
但是,我见过一些客户故意将向移动设备公布的 MTU 降低到 1488 甚至更低(考虑 VLAN 或 MPLS 标签),这样回程的 MTU 就不需要更改(如果规划时没有考虑到这一点,那么这项工作就会很繁重)。
一般来说,这不是什么大问题,因为移动设备已经使用了“正确的”MTU,但如果手机充当路由器,并且没有正确实现 PMTU 限制,则会导致问题。此外,如果 MTU 太小,实际可用带宽无法真正用于 TCP 连接;这是“长管道和带宽延迟乘积问题”的典型示例。我所说的“太小”是指“比 1488 小得多”。
如果您想要了解当前连接的本机 MTU,可以使用各种工具来发现 PMTU。最简单的方法可能是通过“ping”连续提高 MTU,直到收到错误消息“需要分段,但设置了 DF”。最后一个有效的 MTU 是移动手机的本机 MTU,回程的本机 MTU 是该 MTU 加上 GTP-U 报头开销。在 Linux 中,您甚至可以使用提示选项,这会让事情变得更容易。示例:
alex@xila:~$ ping -c 1 -M do -s 2000 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 2000(2028) bytes of data.
From 93.203.x.y icmp_seq=1 Frag needed and DF set (mtu = 1492)
(PPPoE封装的经典例子)
参考:
- 对于 GTPv0 (2G):“数字蜂窝电信系统 (第 2 阶段以上);通用分组无线业务 (GPRS);跨 Gn 和 Gp 接口的 GPRS 隧道协议 (GTP) (3GPP TS 09.60 版本 7.10.0 1998 年发布)。URL (PDF):http://www.etsi.org/deliver/etsi_TS/101300_101399/101347/07.10.00_60/ts_101347v071000p.pdf
- 对于 GTPv1 (2.5G+):“数字蜂窝电信系统 (第 2 阶段+);通用移动电信系统 (UMTS);通用分组无线业务 (GPRS);跨 Gn 和 Gp 接口的 GPRS 隧道协议 (GTP) (3GPP TS 29.060 版本 6.9.0 发行版 6)”。URL (PDF):http://www.etsi.org/deliver/etsi_TS/129000_129099/129060/06.09.00_60/ts_129060v060900p.pdf
- GTPv2 协议对用户平面部分(即隧道)没有任何改变,只对控制平面有改变。(GTP-C 不影响隧道)