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

use*_*799 89 sockets networking udp tcp

首先,在同一台服务器上同时使用UDP和TCP有什么问题吗?

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

Aln*_*tak 95

是的,您可以为TCP和UDP使用相同的端口号.许多协议已经这样做了,例如DNS适用于udp/53 tcp/53.

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

在编写服务器时,请记住TCP套接字的事件序列比UDP套接字要困难得多,因为除了普通socketbind调用之外,还需要listenaccept.

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

  • 请将其发布为问题,以便您可以给我答案 (4认同)
  • 这个答案没有解释:"端口"语义特定于传输级别(OSI模型级别4)的每个协议(但有些可能没有这种语义).所以TCP有自己的端口,由TCP堆栈解释; UDP有自己的端口,由UDP堆栈解释.也就是说,UDP和TCP之间不共享端口; 它恰好发生在两个协议都具有相同的"端口"定义,并且为了简化,我们对同一服务的不同类型的多个连接使用相同的端口值. (4认同)
  • @Eric Fortis RFC 1700充满了例子,让我们不列出它们全部吗?;-) (2认同)
  • @Eric Fortist为什么'每个人都应该知道'NetBIOS端口号? (2认同)
  • @EricFortis因为这样的问题对我或其他任何人都不感兴趣,你认为它有趣的理由也是如此,并且同意你的反对引用*one*RFC这就是我们正在讨论的目的. (2认同)

aMo*_*oly 7

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

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

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