linux - Sockets、传输类型、端口号、IP之间的关系

标签 linux sockets ports

据我所知,套接字只是数据结构,就像文件一样。这是否意味着为不同的 IP、PORTNUMBER 和 TRANSPORT TYPE (TCP/UDP) 组合创建了不同的套接字 DS?

我想知道下面的实现是否可行

--> 使套接字监听 2 个不同的 IP 但端口号相同,以便当客户端向这些 IP 中的任何一个(但端口号相同)发送数据时,服务器应该能够为其提供服务。 (或者端口号可以与 2 个不同的 IP 相关联)

-->让2个进程监听同一个端口号

最佳答案

Make a Socket listen on 2 different IPs but same port number so that when a client sends data to any of these IPs(but same port number), Server should be able to serve it. (Or can a port number be associated with 2 different IPs)

套接字不能监听 2 个以上的显式 IP 地址。您只能在一个套接字上调用一次 bind(),并且它不允许您一次指定超过 1 个 IP 地址。但是,您可以bind() 套接字到通配符 IP 地址(INADDR_ANY 用于 IPv4,IN6ADDR_ANY 用于 IPv6),这将允许套接字同时绑定(bind)到所有可用的本地 IP 地址。在这种情况下,您确实可以将数据发送到套接字绑定(bind)到的任何 IP 地址上的同一端口。

Make 2 process listen on same port number

这只有在每个进程绑定(bind)到不同的 IP 地址并且不使用通配符 IP 时才有可能。如果您有多个进程监听同一个 IP 和端口,它们如何知道哪个进程应该处理哪些数据?他们不会,所以操作系统一开始就不允许这样做。

关于linux - Sockets、传输类型、端口号、IP之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22773874/

相关文章:

python - 获取错误/usr/bin/env : node : Permission Denied

linux - 如何在linux中模拟挂起的任务?

android - 我如何知道我的 Android 设备上打开了哪些端口以及如何关闭它们?

android - 如何将 logcat 看成 android x86

linux - 如何在使用序言时清除 Unix 终端?

sockets - 是否可以在 TCP 中发送具有未确认序列号的可变大小的段?

c# - 将套接字传递给新的 AppDomain

python - Python请求-临时端口耗尽

docker - 尝试在 docker 容器中运行 tomcat8/rest api 应用程序组合 - 无法映射端口

java - 服务器/客户端通信