防火墙Mangle-修改MSS-从零开始学RouterOS系
本章用途:
处理端到端的网络问题,如常见的网页打不开,QQ能上。
网页显示不全,如图片不显示等。
分支互联中的访问问题。
主要理解区域间路由和服务器和客户端的传输过程。
一、应用操作
1.首先说一下如何修改MSS:
进入IP>Firewall>Mangle,点击+号新建一个规则,如下:
然后在高级选项里面:
动作选项
PPPOE的MTU是1480
2.结果对比:
未修改前,SYN请求多少MSS,相应的回包也就是多少的载荷payload
SYN请求
这就是回复的载荷数据大小。
修改1420后,如下三图:
SYN请求:
对应回传的:
二、概念理解:
MTU,Maximum Transmission Unit最大传输单元,工作数据链路层,属于OSI第二层。
IP,Internet Protocol Address互联网协议地址,工作在网络传输层,属于OSI第三层。
TCP,Transmission Control Protocol 传输控制协议,工作在传输层,属于OSI第四层。
UDP,User Datagram Protocol用户数据报协议,工作在传输层,属于OSI第四层。
MSS,Maximum Segment Size,最大报文段长度,是TCP协议一个子项,也是工作在OSI第四层。
MSS=MTU-40 --- 40包含了20字节的IP头和20字节的TCP头
三、TCP中MSS原理通俗理解:
服务器有一个货柜,空箱40T,载重1460T,连带货物刚好也是1500T。,要发给我们!
网络就好比有许多的传送转发站(路由器),连接不同的传送带,有1500T的,有1400T的。
1400T传送带上面的货柜空箱还是40T,但是载重只有1360T。
当服务器的货从1500T的传送带转发到1400T的传送带时候,货柜就要拆分重新装柜,1460T的货物就要分为两个柜,一个装1360T,一个装100T,这明显增加了转发站的工作量,进出都要拆包和重新打包,然后在到我们手上的时候,我们的本地的路由器要把这两个柜重新装成1460T的一个柜发给我们。我们就能看到页面了,原理很完美!
但是这个时候就会导致转发站十分繁忙,因为一次的事情要做两次,所以忙中出错导致没封装完整的事情。
另外经过不同的转发站时候,有些转发站会限制你的PIR速率(Peak Information Rate,峰值信息速率),达到PIR速率直接丢包,这样导致了我们本地路由器收到的货不对板,等待了许久也收到不到剩下的包,所以无法在我们的本地的转发站上面将这些货柜按照相应的顺序装好返给我们,只能丢弃。所以我们就半天都打不开网站页面,最后除了一些小货柜能收到(文字)。
问题来了,TCP不是会重传吗?
是的,TCP会重传,但是服务器端发出的数据给我们就开始等我们说收到了(ACK),但是我们收不到包,没发回复ACK,服务器等了一会,基于使命必达原因给我们重传,我没还是没有收到包,没发回复ACK,第一次等1秒,第二次等2秒,第三次等4秒,一般默认重传15次。如此类推,直到重传超时RTO,切断连接。
RTO在Linux最小为200毫秒,最大120秒,可以在内核中设置该项值。
Router OS也可以在防火墙里面设置连接追踪的时间
四、修改MSS的好处
修改了MSS的大小,就是主动向服务器协商发送给我们路由器的每个包有效载荷是多少,这样可以让数据包在传输路径中可以一次性传送回来给我们,降低我们因为被分片所导致丢包问题,如果丢包的话,也好区分丢分了哪些包。简单来说就是在外部转发路径中尽量减少拆分和封装的流程,只在我们路由器上面重组。
五、为什么只建议修改MSS,不修改MTU
很好的问题,别因为我们在OSI四层中,不是只有TCP协议,还有UDP!
MSS是依赖TCP的,修改了MTU可以降低MSS,同时也会降低我们UDP的传输效率。我们还有许多也是基于UDP协议的,如QQ,IP电话,和视频会议等。
所以我们建议修改MSS而不是MTU,除非你的路由不支持MSS修改。