例如,postgres 执行以下操作,如 lsof -i 所示:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
postgres 29200 postgres 8u IPv6 470362 0t0 UDP localhost.localdomain:53152->localhost.localdomain:53152
postgres 29202 postgres 8u IPv6 470362 0t0 UDP localhost.localdomain:53152->localhost.localdomain:53152
postgres 29203 postgres 8u IPv6 470362 0t0 UDP localhost.localdomain:53152->localhost.localdomain:53152
postgres 29204 postgres 8u IPv6 470362 0t0 UDP localhost.localdomain:53152->localhost.localdomain:53152
postgres 29205 postgres 8u IPv6 470362 0t0 UDP localhost.localdomain:53152->localhost.localdomain:53152
postgres 29206 postgres 8u IPv6 470362 0t0 UDP localhost.localdomain:53152->localhost.localdomain:53152
首先,这是否是多播(我怎么知道)?如果是这样,其他应用程序是否也可以连接到UDP端口并订阅通过该端口的数据?我是网络新手,并不完全确定这是否可能,但我只是好奇,考虑到安全性。
编辑 8/30/13:网络或同一台机器上任何位置的某些进程是否可以观察进出端口的数据(例如上述情况下的 53152),以及具有哪些权限?如何?
答案1
事实上,它说localhost.localdomain
连接到localhost.localdomain
意味着它不能被多播。以下是 IPv6 中多播的描述:http://en.wikipedia.org/wiki/IPv6#Multicasting
如果您描述您想要实现的目标,会更容易为您提供帮助。您想使用多播吗?如果是的话,具体用途是什么?或者您的目标是确保它不进行多播?
答案2
其他应用程序是否也可以连接到UDP端口并订阅通过该端口的数据?
端口号是唯一的——例如,您不能让多个进程打开特定端口进行侦听。但是,可以建立的连接数量没有这样的限制到港口。由控制端口的一个进程来接受此类连接。
因此,从某种意义上说,只有一个数据流,但它可以由多个连接组成,并且只有控制端口的进程才能看到所有数据。然而,端口只是用于路由(本质上:排序)信息流的地址:它们并不真正安全和私密。网络的本质实际上是这样的全部网络上的流量(包括“本地环回”)对全部该网络上的机器(尽管对于环回来说,只有一台机器,即本地机器),并且至少在 *nix 上,有一些方法可以使具有正确权限的进程可以观察到全部的。然而,这并不用作通信技术,因为观察者在这种意义上不是参与者(它不涉及与任何事物建立联系)。