Linux下TCP-MSS 修改,实验以及测试(详细)

TCP-MSS文档,问题及实验

  1. 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

 

  1. 需要先关闭网卡的tcp-segmentation-offload和generic-segmentation-offload, generic-receive-offload功能,

关闭命令为Sudo ethtool -K [dev] [tso/gso/gro] off

 

Linux下TCP-MSS 修改,实验以及测试(详细)_第1张图片

 

  1. 在linux上抓包的时候,发现了很大的包,有的包达到了2800字节,在局域网的时候甚至有10K字节以上的包。这与我们所学的IP数据包不能超过MTU(一般是1500字节)相违背。查资料得知,这是因为网卡有设置tcp-segmentation-offload。这是操作系统为了减轻负担,提高处理效率的一种方法。

 

 

 

 

MSS

Linux下TCP-MSS 修改,实验以及测试(详细)_第2张图片

 

 

使用Iptables 修改TCP-MSS

  1. 配置命令

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

 

  1. 验证命令及工具

Hping3/Iperf 打流工具

Wireshark抓取数据包

   

  1. 结果验证
  1. 双方都未设置MSS限定,MSS为1460时

Linux下TCP-MSS 修改,实验以及测试(详细)_第3张图片

 

 

 

 

2.(OUTPUT)在10.20.0.1(server)处设置了output iptables, MSS 128

Linux下TCP-MSS 修改,实验以及测试(详细)_第4张图片

 

结论:生效

 

 

3.(OUTPUT)在10.20.0.2(client)处设置了output iptables, MSS 128

Linux下TCP-MSS 修改,实验以及测试(详细)_第5张图片

 

结论:未生效

4.(INTPUT)在10.20.0.1(server)处设置了input iptables, MSS 128

Linux下TCP-MSS 修改,实验以及测试(详细)_第6张图片

结论:未生效

5.(INTPUT)在10.20.0.2(client)处设置了input iptables, MSS 128

Linux下TCP-MSS 修改,实验以及测试(详细)_第7张图片结论:生效

使用路由 修改TCP-MSS

  1. 配置命令

先使用ip route show查看已经有的路由,然后复制在前面加上sudo ip route change,尾部加上需要修改的值

Linux下TCP-MSS 修改,实验以及测试(详细)_第8张图片Linux下TCP-MSS 修改,实验以及测试(详细)_第9张图片

  1. 验证命令及工具

Hping3/Iperf 打流工具

Wireshark抓取数据包

  1. 结果验证
  1. 在10.20.0.1(sever)端,修改路由,通告去10.20.0.2(client)端的路由MSS为128:

Linux下TCP-MSS 修改,实验以及测试(详细)_第10张图片

 

Linux下TCP-MSS 修改,实验以及测试(详细)_第11张图片

2.在10.20.0.2(client)端,修改路由,通告去10.20.0.1(sever)端的路由MSS为128:

 

Linux下TCP-MSS 修改,实验以及测试(详细)_第12张图片

 

Linux下TCP-MSS 修改,实验以及测试(详细)_第13张图片

你可能感兴趣的:(网络知识,Linux&&数据库)