TCP-MSS文档,问题及实验
MSS(Maximum Segment Size,最大报文段大小)的概念是指TCP层所能够接收的最大段大小,该值只包括TCP段的数据部分,不包括选项部分,MSS的概念只存在于TCP中
2.MSS与MTU之间的转化
MSS = MTU - 40(需要减去IP数据包包头的大小20Bytes和TCP数据段的包头20Bytes)
3.影响MSS的因素
MSS的值受两个值的约束:
1.TCP三次握手时会在数据报文的option字段携带MSS的值(默认为本地网段的MTU-40),两端会对MSS的值进行协商,取其中较小一方的值作为使用的MSS的值。
2.该值和整个传输路径的最小 MTU 减去40 的小者,而最小MTU 由 PMTU 确定。
4.PMTU
PMTU简单的讲就是一种MTU的协商机制,用于避免报文分片。PMTU设置后,数据包将不能分片,PMTU会根据发送的数据动态的进行MTU大小的调整。
具体机制如下:当一个数据包大小大于路径MTU时,PMTU机制会将它丢弃,在重传时进行MTU的调整。
5.需要对MSS进行修改的几种假设场景
1.受到TCP攻击,在不改变MTU的情况下对数据包进行拦截。
2.配合其他服务的使用,适当调整MSS。
3.其他场景
6.Linux下修改MSS的几种方法
1.使用Iptables对TCP-MSS进行修改以及针对MSS安全策略的部署
2.通过修改路由,达到修改MSS的目的
7.问题
1.实际操作中,仅修改sever,客户端的MSS变化?
2.实际操作中,仅修改client,服务端MSS的变化?
3.在实际抓取报文中存在大于MTU的数据包?
修改MSS的方法及现象
前期工作:
Server:10.20.0.1 Client:10.20.0.2
关闭命令为Sudo ethtool -K [dev] [tso/gso/gro] off
MSS |
使用Iptables 修改TCP-MSS
sudo iptables -A OUTPUT/INPUT -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
sudo iptables -A OUTPUT/INPUT -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 128
Hping3/Iperf 打流工具
Wireshark抓取数据包
2.(OUTPUT)在10.20.0.1(server)处设置了output iptables, MSS 128
结论:生效
3.(OUTPUT)在10.20.0.2(client)处设置了output iptables, MSS 128
结论:未生效
4.(INTPUT)在10.20.0.1(server)处设置了input iptables, MSS 128
结论:未生效
5.(INTPUT)在10.20.0.2(client)处设置了input iptables, MSS 128
使用路由 修改TCP-MSS
先使用ip route show查看已经有的路由,然后复制在前面加上sudo ip route change,尾部加上需要修改的值
Hping3/Iperf 打流工具
Wireshark抓取数据包
2.在10.20.0.2(client)端,修改路由,通告去10.20.0.1(sever)端的路由MSS为128: