最大传输单元(Maximum Transmission Unit, MTU)
数据链路层传输的帧大小是有限制的,不能把一个太大的包直接塞给链路层,这个限制被称为—MTU
以太网的帧格式,以太网的帧最小的帧是 64 字节,除去 14 字节头部和 4 字节 CRC 字段,有效荷载最小为 46 字节
最大的帧是 1518 字节,除去 14 字节头部和 4 字节 CRC,有效荷载最大为 1500,这个值就是以太网的 MTU
因此如果传输 100KB 的数据,至少需要 (100 * 1024 / 1500) = 69 个以太网帧。
IP 分段
Pv4 数据报的最大大小为 65535 字节,这已经远远超过了以太网的 MTU。
当一个 IP 数据包大于 MTU 时,IP 会把数据报文进行切割为多个小的片段(小于 MTU),使得这些小的报文可以通过链路层进行传输
TCP 最大段大小(Max Segment Size,MSS)-----传输层
因为有 MTU 的存在,TCP 每次发包的大小也会被限制
TCP 为了避免被发送方分片,会主动把数据分割成小段再交给网络层,最大的分段大小称之为 MSS
MSS = MTU - IP header头大小 - TCP 头大小
在以太网中 TCP 的 MSS = 1500(MTU) - 20(IP 头大小) - 20(TCP 头大小)= 1460
TCP 套接字选项 TCP_MAXSEG
TCP 有一个 socket 选项 TCP_MAXSEG,可以用来设置此次连接的 MSS,如果设置了这个选项,则 MSS 不能超过这个值