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

时间:2015-04-11 09:53:43

标签: networking tcp udp port network-protocols

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

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

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

4 个答案:

答案 0 :(得分:12)

其他答案是正确的,但有些不完整。

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”完全不同,并使用文件系统进行寻址。

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

因为它们不是称呼手段的唯一组成部分。这与为什么您可以在不同的街道上拥有两座相同编号的房屋,或者为什么您知道John Whorfin与JohnBigbooté不是同一个Red Lectroid一样。

每个IP数据包都包含一个字段,该字段说明要使用哪种传输层协议,并且在该协议的域内是一组端口,这些端口可以与任何其他协议相同,因为它们实际上是完全独立的设置。

关于第二个问题,there are answers elsewhere.