首页 文章

为什么可以同时在TCP和UDP上使用相同的端口?

提问于
浏览
8

我在搜索时看到,可以在同一台计算机上使用两个不同的程序,使用相同的端口和相同的网络接口通过网络进行通信,前提是使用UDP和另一个TCP . 但是我没有得到一个很好的解释,它是如何实际工作的以及为什么这是可能的?

多个程序是否也可以使用相同的UDP端口,因为UDP不会在对等体之间 Build 真正的连接,而只是将数据包发送到一个地址?我理解TCP不可能,因为它在服务器和客户端之间创建了一个同步连接,但UDP呢?

如果可能,请详细说明,或链接一篇关于该主题的好文章 .

3 回答

  • 3

    其他答案是正确的,但有点不完整 .

    IP(又名"INET")套接字"connection"(即两个进程之间的通信,可能在不同的机器上)由5元组定义:协议,源地址,源端口,目的地址,目的端口 . 您可以看到,这不仅限于TCP等有状态连接 .

    这意味着您可以将不同的进程绑定到该5元组的任何唯一实例 . 因为“协议”(例如TCP和UDP)是区分因素的一部分,所以每个都可以具有不同的过程 .

    从理论上讲,如果它们绑定到不同的接口(网卡,环回等),你可以将不同的服务绑定到同一个TCP端口,尽管我从未尝试过 .

    但是,标准做法是始终在同一端口号上使用相同的服务 . 如果同时支持UDP和TCP,则它们只是与同一服务通信的不同方式 . 例如,DNS使用端口53上的UDP进行查找,因为它们是小请求,并且比创建TCP连接更快,但DNS也在端口53上使用TCP进行“转移”,这些转移很少并且可能包含大量数据 .

    最后,完全准确,它不一定是5元组 . IP使用"protocol"传递到下一层,例如TCP和UDP,尽管还有其他层 . TCP和UDP分别根据剩余的4个项目单独区分连接 . 可以在IP之上创建使用完全不同(可能是无端口)区分机制的其他协议 .

    然后有不同的套接字“域”,例如“unix”套接字域,它与“inet”完全不同,并使用文件系统进行寻址 .

  • 1

    IP地址不识别目的地:仅端口 . 还有一件事--IP头有一个名为 Protocol 的字段,它区分TCP和UDP endpoints . 这样,只要通信协议不同,两个进程就可以绑定到同一个IP:端口 .

  • 12

    连接的 endpoints 是由IP,协议(TCP或UDP)和端口定义的UDP和TCP . 这意味着只要您使用不同的协议,通信的 endpoints 也是不同的 .

相关问题