[2023][Protocol]TCP-MSS Option

Note: 本文中的所有数量的单位均为Byte,例如:1024B或者1024
Note:本文为阅读RFC9293时的记录

TCP 必须实现发送和接收时的MSS Option 选项。

如果接收的MSS 与默认的 MSS不同时,TCP应该在每个SYN中发送MSS选项。

IPV4 默认为 536,IPV6默认为 1220。这个信息放在TCP报文的Options中

如果在连接建立时收到的报文没有包含MSS的Option,则TCP实现必须默认设置为536(for ipv4)

/ 1220(for ipv6)。

TCP真正发送报文的最大size,称为 有效发送MSS(Effective send MSS),必须小于MSS,而且必须小于IP层的最大传输大小。

E M S S _ S < m i n ( M T U , M S S ) EMSS\_S < min(MTU,MSS) EMSS_S<min(MTUMSS)

有效发送MSS (Effective MSS_send) 小于 MSS

有效接收MSS 即对端真实发送的MSS大小(EMSS_R),反应了对端主机的重组缓冲区大小

E M S S _ S = m i n ( M S S R e c e i v e + 20 , M a x M S S _ S ) − S i z e T C P h e a d e r − I P O p t i o n S i z e EMSS\_S = min(MSS_{Receive}+20,MaxMSS\_S) - Size_{TCPheader} - IP_{OptionSize} EMSS_S=min(MSSReceive+20MaxMSS_S)SizeTCPheaderIPOptionSize

M S S R e c e i v e MSS_{Receive} MSSReceive 指从对端主机收到的MSS 值,该信息在Option字段中,如果没有,则为默认536或1220,它指的是TCP报文中除报头外的大小。这里要计算TCP报文的真实大小,所以需要加上报头的20B。

M a x M S S _ S MaxMSS\_S MaxMSS_S 指的是TCP可以发送的传输层报文的最大大小,也即IP层的最大载荷量。这个值受到 I P o p t i o n IP_{option} IPoption 的影响。如果IP协议使用了其他扩展Options,则IP层载荷量会被压缩

RFC 6691: TCP Options and Maximum Segment Size (MSS)
当计算 TCP MSS 选项(Option)的值时,就是 IP MTU 减去IP和TCP报头的固定大小,TCP 或者 IP Options 不计算在内,即Options会和用户数据放在一起。发送端必须减少TCP数据载荷量用来发送额外的Options。

MSS 不是一种协商, 而是一种自己的上限, 自己不会再接受比MSS更大的报文。

V a l u e M S S = M T U − 2 0 t c p H e a d e r − 2 0 i p v 4 H e a d e r Value_{MSS}=MTU-20_{tcpHeader}-20_{ipv4Header} ValueMSS=MTU20tcpHeader20ipv4Header

S i z e T C P h e a d e r Size_{TCPheader} SizeTCPheader 指的是TCP报头的真实大小,在没有Option字段情况下为20B,如果存在Option字段则可能更大。注意一些Option可能并不总是需要在每个报文中发送的,发送端可能需要根据收到的报文实时调整数据长度大小(EMSS_S)。

I P o p t i o n S i z e IP_{optionSize} IPoptionSize 是与 TCP 连接相关的 IPv4 选项或 IPv6 扩展报头的大小,请注意,某些选项或扩展标头可能不会包含在所有数据包中。

从上述公式可以看出, E M S S _ S EMSS\_S EMSS_S ( TCP 不包括Option的真实用户数据的大小)需要考虑对端的MSS,以及下层协议的载荷。 E M S S _ S EMSS\_S EMSS_S 可以直接暴露给用户接口。

The size of the fixed TCP header is 20 bytes [RFC793], the size of
the fixed IPv4 header is 20 bytes [RFC791], and the size of the fixed
IPv6 header is 40 bytes [RFC2460].

The MSS value to be sent in an MSS Option should be equal to the effective MTU minus the fixed IP and TCP headers. By ignoring both IP and TCP Options when calculating the value for the MSS Option, if there are any IP or TCP Options to be sent in a packet, then the sender must decrease the size of the TCP data accordingly.

(Same as RFC6691 had descripted)

MSS Option 中的具体值必须小于等于 M a x M S S R e c e i v e − 2 0 t c p H e a d e r MaxMSS_{Receive}-20_{tcpHeader} MaxMSSReceive20tcpHeader M a x M S S R e c e i v e MaxMSS_{Receive} MaxMSSReceive这个值可以从IP层中获取

RFC1122 3.3.2 节定义了
M a x M S S R e c e i v e = E M T U r e c e i v e − 2 0 i p H e a d e r MaxMSS_{Receive}=EMTU_{receive}-20_{ipHeader} MaxMSSReceive=EMTUreceive20ipHeader
其实MTU是两端共同协商的,无论是哪一端,MSS Option 的值总是符合

V a l u e M S S = M T U − 2 0 t c p H e a d e r − 2 0 i p v 4 H e a d e r Value_{MSS}=MTU-20_{tcpHeader}-20_{ipv4Header} ValueMSS=MTU20tcpHeader20ipv4Header

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

天晴丶SnowCrystal

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

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

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

打赏作者

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

抵扣说明:

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

余额充值