是否可以用同一(ip, port)去连不同的服务?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否可以用同一(ip, port)去连不同的服务?相关的知识,希望对你有一定的参考价值。

参考技术A 答案是:可以,但需要reuseaddr!

测试结果:

在linux虚拟机上,指定用同一个端口,通过TCP依次去connect两个不同的服务S1和S2,

如果希望两次connect操作都成功,那么两次connect操作都必须设置reuseaddr选项为true,

否则,只有第一次连接会成功,第二次连接则报eaddrinuse的错误。

注: 至于S1和S2是否设置了reuseaddr选项,不影响测试结果。

测试过程(两次都成功的情况):

在linux虚拟机上,打开erlang shell,然后执行:

25> gen_tcp:connect("100.84.35.75", 2815, [binary, packet, 0, port, 7902, reuseaddr, true], 60000).

ok,#Port<0.580>

26> gen_tcp:connect("100.84.35.75", 2816, [binary, packet, 0, port, 7902, reuseaddr, true], 60000).

ok,#Port<0.581>

然后在linux shell中,查看连接情况:

[nemo@localhost ~]$ netstat -antp | grep 7902

(Not all processes could be identified, non-owned process info

will not be shown, you would have to be root to see it all.)

tcp        0      0 192.168.166.12:7902        100.84.35.75:2815          ESTABLISHED 5323/beam.smp

tcp        0      0 192.168.166.12:7902        100.84.35.75:2816          ESTABLISHED 5323/beam.smp

是否允许在 Mainline DHT 中的同一 ip:port 对后面运行多个不同的 DHT 节点?

【中文标题】是否允许在 Mainline DHT 中的同一 ip:port 对后面运行多个不同的 DHT 节点?【英文标题】:Is it allowed to run several different DHT nodes behind the same ip:port pair in Mainline DHT? 【发布时间】:2011-10-17 07:39:09 【问题描述】:

哪个节点应该回复 DHT 查询消息? 全部还是其中之一?

提前谢谢你。

【问题讨论】:

【参考方案1】:

简短的回答是:其中之一。每个请求都应产生一个响应。

假设 DHT 节点具有与其(IP、端口)对相关联的持久节点 ID。如果节点 ID 发生变化(或者如您所说,另一个节点会响应),它在远程节点的路由表中的条目可能会被删除并被新的节点 ID 替换。

在不同端口上运行节点可能是一个更好的主意,这样对同一端口的请求会导致来自具有相同节点 ID 的同一节点的响应。

附带说明,Azureus 在其 DHT 中具有某些安全功能,可通过限制您可以在任何给定 IP 地址上运行的节点 ID 来缓解攻击者拥有节点 ID 空间的特定区域的攻击。有人提议对主线 DHT 做类似的事情(由我提议)DHT security extension。部署了这样的东西后,您可以在单个 IP 地址后面运行多少个节点。

【讨论】:

以上是关于是否可以用同一(ip, port)去连不同的服务?的主要内容,如果未能解决你的问题,请参考以下文章

TCP server 为什么一个端口可以建立多个连接?

Docker多个容器能使用同一个ip不同端口启动?

求教一个域名解析问题,同一个ip,不同域名访问不同文件夹

能否不同udp socket绑定到同一IP地址和port

实现一个监控 IP 的 windows 服务

阿里云ECS安装的redis服务器,用java代码去连接报错。