ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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


A
Alnitak

是的,您可以对 TCP 和 UDP 使用相同的端口号。许多协议已经这样做了,例如 DNS 在 udp/53 和 tcp/53 上工作。

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

编写服务器时,请记住 TCP 套接字的事件序列比 UDP 套接字要困难得多,因为除了正常的 socketbind 调用之外,您还必须调用 listen 和 {4 }。

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


在 137-139 上使用 UDP 和 TCP 的另一个示例 NetBIOS
@Eric Fortis RFC 1700 充满了示例,我们不要全部列出来好吗? ;-)
@Eric Fortist 为什么“每个人都应该知道”NetBIOS 端口号?
请把它作为一个问题发布,这样你就可以给我答案
这个答案没有解释的东西:“端口”语义特定于传输级别(OSI 模型级别 4)的每个协议(但有些可能没有这种语义)。所以 TCP 有自己的端口,由 TCP 栈解释; UDP 有自己的端口,由 UDP 堆栈解释。也就是说,UDP和TCP之间不共享端口;碰巧这两个协议对“端口”有相同的定义,为了简化,我们对同一个服务的多个不同类型的连接使用相同的端口值。
a
aMooly

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

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


你说的理由经常被给出,但它真的毫无意义。没有 UDP 连接之类的东西,也没有考虑连接的上下文,无论关联的协议如何。事实上,端口分别是 TCP 和 UDP 的产物,因此不可能混淆它们。
谢谢你指出我的错。使用UDP没有连接是正确的。