是否可以用同一(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)去连不同的服务?的主要内容,如果未能解决你的问题,请参考以下文章