跳到正文
Mcj's Blog
返回

MTU引起的HTTPS访问不通

编辑页面

要了解这个问题为什么会出现,得先知道几个概念

一些概念科普

IPv4 报文分段和重组

MTU

TCP MSS

PMTU

隧道

咱们可以了解到通过隧道的报文,要比正常的数据报文多封装一些信息

问题分析

当终端与服务器通信时,由于两端的接口Mtu是1500,那么他们的TCP MSS协商,正常会协商为1460,如图(BGP建立时的tcp三次握手): image.png 但是,如果中间经过IPsec隧道,加上IPsec报头的话,1460 字节的数据包经过 IPv4sec 加密,增加了 52 字节的开销(IPv4sec 报头、报尾和另外的 IPv4 报头)。现在 IPv4sec 需要发送 1512 字节的数据包。由于出站MTU为1500,因此必须对此数据包进行分段,如果报文中设定了不分片,或者中间的网络设备不支持分片,那么这样的报文将会丢弃,再看下面这张图,是HTTPS 证书认证的报文,这个报文是不分片的。 image.png 综上所述,我们应该已经理解了为什么经过ipsec访问https的业务会出现不通的现象,原因就是因为TCP-MSS协商的MTU为1460,加上ipesc的报文头部本来就超过默认mtu了,再加上https的tls报文不分片,所有导致了这个情况。

HTTPS的报文为什么不分片

  • 在HTTPS中,IP报头中的DF字段(Don’t Fragment)设置为1的主要原因是确保HTTPS数据包在传输过程中不会被分片。HTTPS使用TLS(Transport Layer Security)来加密通信内容,TLS协议的一种重要特性是完整性保护,即在传输过程中保证数据的完整性,防止被篡改。
  • 当DF字段设置为1时,它指示路由器在转发IP数据报时不分片。这就确保了HTTPS的数据包在传输过程中保持完整,不会被分割成更小的片段,从而保证了TLS加密机制的正确性和安全性。因为如果数据包被分片,那么在重新组装时可能会出现片段丢失或者篡改,从而影响了整个通信的完整性和安全性。
  • 所以,通过设置DF字段为1,可以确保HTTPS数据包的完整性和安全性,同时也提高了网络通信的效率,减少了可能的数据包重组导致的性能损失。

问题解决-中间设备介入TCP MSS的协商

sudo iptables -t mangle -I PREROUTING 1 -i cl18955 -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1320  
sudo iptables -t mangle -I POSTROUTING 1 -o cl18955 -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1320

参考


编辑页面
分享这篇文章:

上一篇
Network12-交换机端口模式
下一篇
Centos7安装cacti