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
以上是关于TCP over TCP的出现与解决办法的主要内容,如果未能解决你的问题,请参考以下文章
libnids TCP数据流重组,显示TCP连接过程的程序总无法捕获数据包解决办法: