【发布时间】:2012-03-27 12:08:08
【问题描述】:
TCP 有元组对(IP 地址/端口/类型)来区分一个客户端和另一个客户端。 UDP 传递客户端 IP 和端口。 unix 域如何跟踪不同的客户端?
换句话说,服务器创建一个绑定到某个路径的套接字,例如 /tmp/socket。 2 个或更多客户端连接到 /tmp/socket。下面发生了什么来跟踪来自 client1 和 client2 的数据?我想网络堆栈在域套接字中没有任何作用,那么内核是否在这里完成所有工作?
是否有像 IP 协议格式和 TCP/UDP 格式一样的 unix 域协议格式?域套接字数据报协议的格式是否在某处发布?每个 unix 都不同吗?还是 POSIX 之类的东西对其进行了标准化?
感谢您的任何启发。我找不到任何解释这一点的信息。每个来源都只是掩饰了如何使用域套接字。
【问题讨论】:
-
通过 unix 域协议交谈基本上只是文件 i/o。除非您通过套接字传递的数据包含源标识,否则无法判断哪个进程发送了特定的字符串。
-
@MarcB 这应该是一个答案
-
这是真的吗?如果服务器写入数据,则读取的第一个客户端会获取数据,无论它是否用于该客户端?这使它们几乎毫无用处。
-
@MarcB 您所描述的内容似乎令人怀疑。在
Kurt Wall, et al的Linux Programming 2nd Edition Unleashed的第449页第5段中,是这样说的:...with named pipes you cannot tell one process data from another. Using UNIX Domain sockets, you will get a separate session for each process.
标签: linux sockets ipc unix-socket