Api uPNP/IGD相对于SOCKS的优势?

Api uPNP/IGD相对于SOCKS的优势?,api,networking,upnp,socks,Api,Networking,Upnp,Socks,我很好奇为什么它更普遍。它有更好的API吗 我记得很久以前,当我第一次了解NAT(我用它来共享一个拨号14.4kbps调制解调器)时,我认为有一天每个家庭都会有一个包含NAT的路由器,但“显然”还需要一个SOCKS过程才能打开监听端口。当宽带开始出现时,很高兴看到NAT是一个共同的功能,我认为袜子会是额外的,慢慢地变得越来越普遍。。。但是什么都没有!我必须手动转发端口。然后出现了uPNP,但很少有“严肃”的应用程序支持它,主要是P2P共享、游戏和一些IM 我还没有看到任何家庭路由器包含SOCKS

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

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

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

编辑:


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

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

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


upnp的IGD是一种“api”,允许您告诉路由器您要打开一个端口并将其转发给计算机,这是用于传入连接。。默认情况下,我的linksys带有upnp功能,我知道其中一个应用程序是msn messenger(可能仅用于文件传输)

SOCKS与upnp相比具有局限性。通常,SOCKS需要在每个客户端上进行配置,并且对应用程序不透明(默认情况下,Windows上未安装/启用系统范围的socket SOCKSification),而NAT即使没有UPnP,也基本上是透明的,并且没有针对传出TCP套接字和传出UDP的任何其他客户端配置

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


低级别TCP设置(例如TCP Nagle、traffic class)也不能跨SOCKS代理工作,但可以通过NAT工作。

SOCKS还允许您在代理上打开侦听端口并将其转发到应用程序。