TCP over TCP的出现与解决办法

Posted 我要出家当道士

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP over TCP的出现与解决办法相关的知识,希望对你有一定的参考价值。

TCP over TCP问题 

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

解决的办法

        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很有很明显的影响?这是因为高质量的网络环境中丢包并不明显。

参考文献

https://blog.csdn.net/dog250/article/details/106955747

http://sites.inka.de/sites/bigred/devel/tcp-tcp.html

http://www.meilongkui.com/archives/747

https://serverfault.com/questions/1045786/what-is-tcp-over-tcp-and-how-does-openvpn-under-tcp-mode-avoid-the-issue

 https://xueshu.baidu.com/usercenter/paper/show?paperid=5b510d65c4c2b6f8519df4f4b9520c03&site=xueshu_se&hitarticle=1

以上是关于TCP over TCP的出现与解决办法的主要内容,如果未能解决你的问题,请参考以下文章

Netty4.xNetty TCP粘包/拆包问题的解决办法

关于近期国内大部分矿池出现无法链接的问题,解决办法。

libnids TCP数据流重组,显示TCP连接过程的程序总无法捕获数据包解决办法:

TCP粘包问题解析与解决

[rtsp @ 0x55ba1dae9200] UDP timeout, retrying with TCP的解决办法

python3 tcp的粘包现象和解决办法