1

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

4

2 回答 2

2

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

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

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

于 2020-12-08T15:07:20.587 回答
1

决定使用 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 设计的东西来击败它,而且每个顶层协议都实现自己的所有这些功能版本是没有意义的。

于 2020-12-10T18:27:48.553 回答