【问题标题】:Is there a timeout for UDP in SOCKS5?SOCKS5 中的 UDP 是否有超时?
【发布时间】:2018-11-18 13:21:22
【问题描述】:

我最近用https://github.com/postageapp/ss5的代码搭建了一个SOCKS55服务器,并尝试将此服务器设置为音频聊天的代理服务器,使用UDP套接字实现。但是,每次我尝试使用此代理服务器时,UDP 连接都会中断。我的 UDP ASSOCIATE 请求很好并且运行良好。大多数经过测试的音频聊天应用程序在我的 SOCKS5 服务器代理时都可以正常工作,但它们会在大约 60 秒时中断。这个 SOCKS5 服务器的日志文件只显示了一行:"UDP ASSOCIATE" TERMINATED 0 0 60 (36.157.*.*:36314 -> 119.23.*.*:23333)。 SOCKS5协议的UDP会话似乎有超时设置。有人知道吗?

【问题讨论】:

  • 不知道你是怎么得出问题是超时造成的。根据您的描述,每次您尝试 UDP 关联时都会发生这种情况,而不是仅在一些空闲时间之后。这表明您如何访问代理(即您的 SOCKS5 客户端的实现)存在问题,而不是代理超时。
  • 对不起,我的描述可能不够详细。我的 UDP ASSOCIATE 请求很好并且运行良好。大多数经过测试的音频聊天应用程序在我的 SOCKS5 服务器代理时都可以正常工作,但它们会在大约 60 秒时中断。在检查了我的日志后,我可以确认这与 socks5 服务器有关。

标签: udp socks


【解决方案1】:

SOCKS5 本身没有为 UDP 定义超时。但是鉴于 UDP 没有像 TCP 那样的显式连接关闭,“关闭”UDP 连接的唯一方法是不再发送任何数据。这意味着为了释放 SOCKS5 代理持有的资源,它需要实现某种空闲超时,之后连接将关闭。

其实looking at the source code一看就知道:

#define UDP_TIMEOUT     60      /* Seconds */

我找不到任何配置选项来更改此超时,因此更改它的唯一方法可能是更改源代码并重新编译。

经过我的 SOCKS5 服务器代理后,大多数测试的音频聊天应用程序都可以正常工作,但它们会在大约 60 秒时中断......

"UDP ASSOCIATE" TERMINATED 0 0 60 (36.157.*.*:36314 -> 119.23.*.*:23333)

日志消息表明 UDP 关联在 60 秒后终止,没有传输任何类型的数据 - 这可以通过 60 秒的空闲超时来解释。鉴于您确实在这 60 秒内传输了音频数据,我的猜测是您使用的是 RTP+RTCP(如 SIP、H.323、XMPP、WebRTC 中所用)并且特定应用程序确实通过 RTP 传输音频数据但仅分配RTCP 的通道,而从未使用过它。

【讨论】:

  • 是的,你是对的,但是here 也有一行,也就是#define UDP_TIMEOUT 60 /* Seconds */ 应该修改。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2021-12-29
  • 1970-01-01
  • 1970-01-01
  • 2013-06-28
  • 2013-01-29
  • 2013-11-14
  • 2022-01-16
  • 1970-01-01
相关资源
最近更新 更多