问题是怎么产生的:
电信手机,Android系统,手机移动网络,APP 发送彩信出现了问题:
TcpDump抓包如下:
手机端SYN提供的Mss为1460
Server端ACK给的Mss也是1460
但会发现,超过1516的的数据包都没有ACK, 究竟是什么原因?
这个问题的解决方法是将MTU设置为1380.
手机端的Mss应该是1380-20-20=1340
问题是: 为何手机端MTU = 1500会丢包呢?
我估计了两个原因:
a). 没有发送成功,MTU设置过大,链路层发现上层给的数据包大于能发送的MTU;
b). Server端收到TCP包之后,丢弃
我个人认为第一种可能性比较大,个人认为如下:
MTU是这样来的, 以太网EthernetII最大的数据帧是1518Bytes,刨去以太网帧的帧头(DMAC目的MAC地址48bit=6Bytes+SMAC源MAC地址48bit=6Bytes+Type域2bytes)14Bytes和帧尾CRC校验部分4Bytes(FCS),那么剩下承载上层协议的地方也就是Data域最大就只能有1500Bytes这个值为MTU。
这个MTU =1500是针对以太网设置的,而移动网络的链路层数据帧的长度或者头部应该是不一样的,因此层层下来,MTU应该要小于MTU。
请问是这样的吗?