0

我很好奇为什么它更普遍。它有更好的 API 吗?

我记得很久以前当我第一次了解 NAT(我用它来共享拨号 14.4kbps 调制解调器)时,我认为有一天每个家庭都会有一个包含 NAT 的路由器,但它“显然”还需要一个 SOCKS 进程能够打开监听端口。当宽带开始出现时,很高兴看到 NAT 成为一个共同的功能,我认为 SOCKS 会是一个额外的,并且慢慢变得越来越普遍......但什么都没有!我不得不手动转发端口。然后出现了 uPNP,但很少有“严肃”的应用程序支持它,主要是 P2P 共享、游戏和一些 IM。

我还没有看到任何家庭路由器包含 SOCKS(当然,除了基于 Linux 的固件升级)。有人知道为什么吗??

编辑:

正如 Vartec 所指出的,UPnP 是一种零配置和服务发现,而不是代理服务。现在我知道我指的是 IGD 协议,即家庭路由器中存在的 NAT 穿越服务,并通过 UPnP 发现。所以,我的问题应该是“为什么是 IGD/UPnP 而不是 SOCKS?”

4

3 回答 3

1

与 UPnP 相比,SOCKS 具有局限性。通常 SOCKS 需要在每个客户端上进行配置,并且对应用程序不透明(Windows 上默认未安装/启用系统范围的套接字 SOCKSification),而即使没有 UPnP 的 NAT 也大多透明地工作,并且无需任何额外的客户端配置即可传出 TCP 套接字和传出的UDP。

带有 UPnP 的 NAT 也比 SOCKS 更好地支持服务器 TCP 套接字:SOCKS 只能接受带有其 BIND 请求的单个连接,这对于在 FTP 之类的协议中接收单个 TCP 连接是可以的,但对于运行需要接受许多的服务器无用来自许多客户端的连接。SOCKS 4 在 BIND 请求上也有 2 分钟的超时,但服务器通常不知道下一个客户端何时尝试连接。

低级 TCP 设置(例如 TCP Nagle、流量类)也不能通过 SOCKS 代理工作,但它们通过 NAT 工作。

于 2010-03-07T10:25:55.723 回答
0

据我所知,UPnP 是本地网络中设备的 zeroconf 发现类型协议,而 SOCKS 是隧道代理服务器。它们完全不同,实际上我看不出它们有什么共同点。

于 2009-04-04T21:25:48.260 回答
0

这是两个不同的东西,socks 是一种协议,它允许您通过代理服务器路由 tcp 和 udp(socks v5),它用于传出连接,路由器与此无关(除了它们也充当代理)

upnp 的 IGD 是一个“api”,它允许您告诉路由器您要打开一个端口并将其转发到计算机,这是用于传入连接..我的 linksys 默认启用了 upnp,并且我知道一个应用程序使用这个是 msn messenger (也许只用于文件传输)

于 2009-04-04T22:52:44.683 回答