diff --git a/faketcp方案和常见的udp-over-tcp、udp-in-tcp方案的对比.md b/faketcp方案和常见的udp-over-tcp、udp-in-tcp方案的对比.md index 5f159a4..ee54a25 100644 --- a/faketcp方案和常见的udp-over-tcp、udp-in-tcp方案的对比.md +++ b/faketcp方案和常见的udp-over-tcp、udp-in-tcp方案的对比.md @@ -1,10 +1,10 @@ #### udp over tcp、udp in tcp方案 -udp over tcp、udp in tcp说的是一回事儿,是把udp协议封装到tcp协议里发送。 常见的有$$R的tcp in udp模式,还有tcp模式的openvpn。 这种方式是把udp数据包打包封装后用tcp协议来发送。 本质上是发送时把udp转换成tcp,然后在接收方恢复出来。 +udp over tcp、udp in tcp说的是一回事儿,是把udp协议封装到tcp协议里发送。 常见的有tcp模式的openvpn,还有$$R的tcp in udp模式。 这种方式是把udp数据包打包封装后用tcp协议来发送。 本质上是发送时把udp转换成tcp,然后在接收方恢复出来。 这种方案的缺点是会影响udp传输的速率和实时性,因为tcp有可靠传输、拥塞控制、按序到达等特性,而且这些特性是没法关掉的。尤其是按序到达这个特性,本质上是牺牲延迟来换取数据包的有序。 -udp in tcp方案的特点: +udp in tcp方案的常见特点: 1. 如果网络很好不丢包,那么udp in tcp方案会工作得很好;如果网路稍微有一点丢包,数据的延迟会极大得增加。 (按序到达造成的副作用) @@ -12,7 +12,7 @@ udp in tcp方案的特点: #### faketcp方案 -用raw socket给udp协议直接加上伪造的tcp包头,把udp伪装成tcp;本质上还是udp,不需要经过系统的tcp协议栈,所以不会引入上述的问题。 +用raw socket给udp协议直接加上伪造的tcp包头,把udp伪装成tcp;本质上还是udp,不需要经过系统的tcp协议栈,所以不会引入上述的问题。但是伪装成tcp的udp流量可以骗过运营商的防火墙,获得更好的速度。 #### 如何自己验证 @@ -20,4 +20,14 @@ udp in tcp方案的特点: 1. 通过ping可以看出来,tcp的openvpn延迟明显会增大。 -2. 通过iperf3测速可以发现,tcp的openvpn速度要低很多,而且波动大。 如果用ipef3 -P10 (10个线程去压),经过几秒以后tcp模式的openvpn速度会跌到0,而且10秒内都无法恢复,而且tcp模式的openvpn可能会直接掉线。 \ No newline at end of file +2. 通过iperf3测速可以发现,tcp的openvpn速度要低很多,而且波动大。 如果用ipef3 -P10 (10个线程去压),经过几秒以后tcp模式的openvpn速度会跌到0,而且10秒内都无法恢复,而且tcp模式的openvpn可能会直接掉线。 + +#### 回答一些常见误解 + +Q : 既然OpenVPN本身就支持TCP模式,那么使用udp2raw +OpenVPN(udp模式)还有什么用,直接使用OpenVPN(tcp模式)不就可以了吗? + +A : 因为前面提到的性能问题。 + +Q: kcptun是靠把tcp转换成udp提升速度,配合udp2raw后岂不是又转回去了,那kcptun是不是就没效果了? + +A : udp2raw只会把udp伪装成tcp,本质上还是udp,所以不会影响kcptun的效果。 \ No newline at end of file