【问题标题】:If UDP is message-oriented, why does SMTP use TCP如果UDP是面向消息的,为什么SMTP使用TCP
【发布时间】:2021-03-19 21:53:33
【问题描述】:

所以我们知道 UDP 是面向消息的,而 TCP 是面向流的。 为什么 SMTP 使用 TCP 而不是 UDP?

【问题讨论】:

    标签: tcp udp transport-layer-protocol


    【解决方案1】:

    为什么 SMTP 使用 TCP 而不是 UDP?

    主要是因为 TCP 可靠而 UDP 不可靠,即使用 UDP,应用程序需要关心丢失、重复或重新排序的数据。

    此外,邮件与 UDP 中的“消息”不同。此 UDP 消息仅表示具有特定长度且没有预定义内部结构的数据报。邮件虽然有一些内部结构。邮件的长度也很容易超过 UDP 消息的最大大小 (64k)。

    【讨论】:

      【解决方案2】:

      决定使用 TCP 还是 UDP 的通常规则如下:

      1. 如果您需要 TCP 提供而 UDP 没有的所有功能,请使用 TCP。你不会做出更好的 TCP。

      2. 如果 TCP 提供的某些功能在您的应用程序中成本很高,而您可以通过使用 UDP 来避免,请使用 UDP。

      因此,让我们将该逻辑应用到 SMTP 上,以获得 TCP 提供而 UDP 不具备的功能:

      面向连接:嗯,SMTP 需要它。您想启动连接以传递邮件。你不能让一封电子邮件成为一个单一的数据块,因为它们可以达到几兆字节。

      慢启动:嗯,SMTP 需要它。你不能只是全速发送一堆电子邮件,你会丢包。您需要开始缓慢发送数据并评估可用的网络带宽。

      重新排序、重复检测和丢失的数据报重传:嗯,您需要 SMTP。您需要重新传输丢弃的数据报,并且需要修复乱序接收的电子邮件的任何部分。

      发送和接收窗口:嗯,SMTP 需要它。没有它就很难有效地传输大量数据。

      因此,如果 SMTP 是基于 UDP 构建的,则 SMTP 本身需要实现 TCP 的大部分功能集,因为 SMTP 需要它。 TCP 由顶级专家设计,在所有流行的平台上进行了大量优化,网络工程师针对其性能优化网络。你不会用专门为 SMTP 设计的东西来打败它,而且每个顶层协议都实现所有这些功能的自己版本是没有意义的。

      【讨论】:

        猜你喜欢
        • 2010-09-26
        • 1970-01-01
        • 2013-07-01
        • 2011-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-27
        • 2012-08-27
        相关资源
        最近更新 更多