Xsm*_*ael 9 port networking udp tcp network-protocols
我在搜索时看到,可以在同一台计算机上使用两个不同的程序,使用相同的端口和相同的网络接口通过网络进行通信,前提是使用UDP和另一个TCP.但是我没有得到一个很好的解释,它是如何实际工作的以及为什么这是可能的?
多个程序是否也可以使用相同的UDP端口,因为UDP不会在对等体之间建立真正的连接,而只是将数据包发送到一个地址?我知道TCP不可能,因为它在服务器和客户端之间创建了一个同步连接,但UDP怎么样?
如果可能,请详细说明,或链接一篇关于该主题的好文章.
Bri*_*ite 13
其他答案是正确的,但有点不完整.
IP(也称为"INET")套接字"连接"(即两个进程之间的通信,可能在不同的机器上)由5元组定义: 协议,源地址,源端口,目的地址,目的端口.您可以看到,这不仅限于TCP等有状态连接.
这意味着您可以将不同的进程绑定到该5元组的任何唯一实例.因为"协议"(例如TCP和UDP)是区分因素的一部分,所以每个都可以具有不同的过程.
从理论上讲,如果它们绑定到不同的接口(网卡,环回等),你可以将不同的服务绑定到同一个TCP端口,尽管我从未尝试过.
但是,标准做法是始终在同一端口号上使用相同的服务.如果同时支持UDP和TCP,则它们只是与同一服务通信的不同方式.例如,DNS使用端口53上的UDP进行查找,因为它们是小请求,并且比创建TCP连接更快,但DNS也在端口53上使用TCP进行"转移",这些转移很少并且可能包含大量数据.
最后,完全准确,它不一定是5元组.IP使用"协议"传递到下一层,例如TCP和UDP,尽管还有其他层.TCP和UDP分别根据剩余的4个项目单独区分连接.可以在IP之上创建使用完全不同(可能是无端口)区分机制的其他协议.
然后有不同的套接字"域",例如"unix"套接字域,它与"inet"完全不同,并使用文件系统进行寻址.
目的地不是单独由 IP Addr:Port 标识的。还有另一件事 - IP 标头有一个称为Protocol区分 TCP 和 UDP 端点的字段。因此,只要通信协议不同,两个进程就可以绑定到相同的 IP:Port。