【问题标题】:Can TCP and UDP sockets use the same port?TCP 和 UDP 套接字可以使用相同的端口吗?
【发布时间】:2011-09-20 05:04:21
【问题描述】:

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

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

【问题讨论】:

    标签: sockets networking tcp udp


    【解决方案1】:

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

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

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

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

    【讨论】:

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

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

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

    【讨论】:

    • 你说的理由经常给出,但实际上毫无意义。没有 UDP 连接之类的东西,也没有考虑连接的上下文,无论关联的协议如何。事实上,端口分别是 TCP 和 UDP 的产物,因此不可能混淆它们。
    • 谢谢指出我的错。使用UDP没有连接是对的。
    猜你喜欢
    • 2011-09-03
    • 2015-06-17
    • 1970-01-01
    • 2017-04-04
    • 2017-05-07
    • 2021-01-23
    • 2012-11-12
    • 2012-06-23
    相关资源
    最近更新 更多