Replies: 4 comments 32 replies
-
Beta Was this translation helpful? Give feedback.
-
不用UDP叠床架屋的改法是让代理TCP协议默认自动重连。 一种(不正确的)实现方法:在TCP代理协议的header上加一个随机数作为链接识别码,并加上1个表示动作的标志位(1:打开新连接并设置识别码或继续有相同识别码的某个内层TCP链接,0:断开先前的相同识别码的某个内层TCP链接),然后把客户端代理TCP的默认行为改成“断开后自动重连”。服务器的默认行为改为“在一个合理的超时时间内,保持通往目标网站的TCP链接的开启,直到下行缓存区满”。 这样的坏处是,如果是内层TCP协议断开导致外层TCP断开的情况(真断开),客户端还需要再开一个新的TCP连接告诉代理服务器去断开通往远程的内层TCP链接。如果内层TCP是被远程服务器断开了,代理服务器在收到重连时需要返回“无法继续该识别码对应的TCP链接”。 |
Beta Was this translation helpful? Give feedback.
-
另外一种改法是做一个“永生”的、能够支持底层代理链接切换(有分片 ACK 机制)的TCP over TCP。 |
Beta Was this translation helpful? Give feedback.
-
我有一点疑虑,断开连接的指令有没有可能成为特征?如果有,如何设计以解决这个问题? I have a doubt, is it possible that the disconnect command could become a characteristic? If so, how to design to solve this problem? |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
我在一个UDP被完全block的网络中,有时候GFW会莫名其妙导致 TCP connection reset 。
当代理的TCP链接断开时,
用户浏览器 ---> 代理客户端 --x--> 代理服务器 ---> 目标网站
目前绝大部分代理协议的行为是,直接把TCP reset传到应用层app。这样在一些不支持断点续传的软件中,容易引发痛苦
用户浏览器 -x-> 代理客户端 --x--> 代理服务器 -x-> 目标网站
建议在代理协议(已加密的数据)中,插入显式的“用户浏览器TCP断开“和”目标网站TCP断开”信号,在代理客户端收到”目标网站TCP断开”信号前,即使代理TCP链接断开,都会保持用户侧链接的开启,并重新启动新的代理TCP链接来延续上一个断掉的代理TCP链接。
用户浏览器 --缓存--> 代理客户端 --x--> 代理服务器 --缓存--> 目标网站
用户浏览器 ---> 代理客户端 --新链接--> 代理服务器 ---> 目标网站
同理,服务器端收到“用户浏览器TCP断开“前,会在一个合理的超时时间内,保持通往目标网站的TCP链接的开启,直到下行缓存区满。
另外,启动新连接时应当发送与上个被延续的链接相同的识别码(如相同的随机数或UUID),代理服务器根据该识别码确定恢复哪个链接。
Beta Was this translation helpful? Give feedback.
All reactions