TCP over TCP的出现与解决办法

TCP over TCP问题 

 

        TCP是可靠的网络传输协议,这是因为底层协议的不可靠性,TCP 有一系列的可靠性机制来保障(流控、重传...)。在正常的使用中,TCP 可以很好的完成可靠性传输任务。但在 TCP Tunnel中就会出现问题,隧道中每个数据包会在外出多封装一层TCP头部(其实就是将原本用户数据包封装后使用TCP再发一次,对端接收后解封,再将原本的数据包转发)。当用户使用 TCP 时,TCP 隧道中的数据包事实上是由两套 TCP 机制来保障可靠性了(用户端与隧道)。当封装的数据包在传输过程中丢包时,如果外层 TCP 的 RTO 小于 内层 TCP 的 RTO 就会出现很严重的问题:造成大量的重传,严重影响转发性能(减低 GOODPUT 吞吐量)。

TCP over TCP的出现与解决办法_第1张图片

解决的办法

        1、开启 TCP SACK 选项,只重传确定的丢包。

        2、增大内层 TCP 的 RTO(回答二)

        3、适当增大 buffer(第三部分测试得出)

        4、关掉巨帧,避免分包

拓展

        1、在支持FACK/SACK/RACK的现代TCP中,RTO很少被触发,依靠各种xACK探测到需要重传的场景,那便尽是TCP over TCP 的优势了。即TCP Tunnel更适合长距离传输网络。(dog250),在网络中建立隧道,丢包后由隧道网关进行重发,可以减少重传时间。这个结论在论文中也有提及,在延迟较大的网络中,TCP Tunnel会提高一定性能。

在这里插入图片描述

        2、为什么在基于TCP的VPN中,TCP over TCP很有很明显的影响?这是因为高质量的网络环境中丢包并不明显。

参考文献

到底要不要走TCP隧道,要不要TCP over TCP?_Netfilter,iptables/OpenVPN/TCP guard:-(-CSDN博客

Why TCP Over TCP Is A Bad Idea

总结TCP over TCP是否是一个坏主意-进城务工人员小梅

networking - What is TCP-over-TCP and how does OpenVPN under TCP mode avoid the issue? - Server Fault

 Understanding TCP over TCP: effects of TCP tunneling on end-to-end throughput and latency - 百度学术

你可能感兴趣的:(计算机网络,计算机网络,TCP/IP,TCP,OVER,TCP,VPN,Tunnel)