TCP和UDP套接字可以使用同一端口吗?


104

首先,在同一服务器上同时使用UDP和TCP是否有问题?

其次,我可以使用相同的端口号吗?

Answers:


110

是的,您可以为TCP和UDP使用相同的端口号。许多协议已经做到了这一点,例如DNS可在udp / 53 tcp / 53上运行。

从技术上讲,每个协议的端口池是完全独立的,但是对于可以使用TCP或UDP的更高级别的协议,约定默认使用相同的端口

在编写服务器时,请记住,TCP套接字的事件序列比UDP套接字的事件序列困难得多,因为除了常规socketbind调用之外,您还必须listenaccept

此外,该accept调用将返回一个新的套接字,然后您还必须轮询套接字以获取接收事件。您的服务器应准备好继续accept在原始套接字上建立连接,同时为多个客户端提供服务,每个客户端将触发各自套接字上的接收事件。


2
@Eric Fortis RFC 1700充满了示例,我们不就列出所有示例了吗?;-)
罗恩侯爵,

2
@Eric Fortist为什么“每个人都应该知道” NetBIOS端口号?
洛恩侯爵

4
请把它作为问题发布,以便您可以给我答案
Eric Fortis

6
这个答案不能解释什么:“端口”语义特定于传输级别(OSI模型级别4)的每个协议(但有些协议可能不具有此语义)。因此,TCP有其自己的端口,这些端口由TCP堆栈解释。UDP具有自己的端口,这些端口由UDP堆栈解释。可以这么说,UDP和TCP之间不共享端口。碰巧这两个协议具有相同的“端口”定义,并且为了简化起见,对于不同类型的多个连接到同一服务,我们使用相同的端口值。
2014年

2
@EricFortis因为这样的问题对我或其他任何人都不会有什么好处,您认为该问题很有趣的理由也一样,并且也反对您引用此处仅出于我们讨论目的的一个 RFC。
2014年

8

首先,在服务器上同时使用tcp和udp都没有问题。

其次,我们可以在同一端口上同时具有UDP和TCP请求,因为每个请求都由源IP,目标IP,源端口,目标端口,PROTOCOL(因为协议可以是TCP或UDP)包含的五元组标识。


3
您陈述的原因经常被给出,但实际上是毫无意义的。没有诸如UDP连接之类的东西,也没有考虑与关联协议无关的连接的上下文。事实是端口分别是TCP和UDP的伪像,因此不可能将它们混淆。
2014年

感谢您指出我的错,没错,使用UDP没有连接。
2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.