1.以太网帧
在以太网链路上的数据包称作以太帧,在802.3标准里,规定了一个以太帧的数据部分(Payload)的最大长度是1500个字节(MTU),再加上14字节链路头和4字节的FCS,所以以太网帧的最大长度为1518。另外,以太网帧的最小长度为64字节。
[1]4字节的FCS是网卡处理的,所以抓到的包看不到这个字段(网卡驱动去掉了),组建包时也不用设置这个字段(由网卡驱动计算填充)。
[2]每个帧的前面有7字节的前导码和1字节的帧起始定界符,这8个字节是帧之外的数据,由接收器电路使用。
[3]链路头+4字节的FCS是帧头,MTU是帧的负载,所以MTU是不包括链路头的。
2.MSS
MSS是TCP报文负载的最大长度。MSS常常使用1460,是因为MTU最大为1500,减去IP头(20字节)和TCP头(20字节)后为1460。
MSS的作用:
[1]如果一端的接收缓冲区比较小(例如10字节),则必须两端协商一个合适的MSS大小。
[2]提高网络带宽的利用率,减少IP分片和重组,因为发送到IP的数据包过大时会进行IP分片和重组,而通过MSS限制数据大小,上送到IP层时数据长度有限制,因此可以减少分片。
而UDP协议没有MSS,所以发送给IP层时,由IP协议完成分片。例如发送数据长度为2000字节,使用TCP协议时(例如MSS是1460),TCP分成两个包上送到IP层,此时IP层不用分片;而使用UDP时,一次上送到IP层,此时IP层需要分片。
3.IP分片
IP层收到数据时,如果数据加上IP头的长度超过MTU,则需要分片。