【发布时间】:2021-03-19 21:53:33
【问题描述】:
所以我们知道 UDP 是面向消息的,而 TCP 是面向流的。 为什么 SMTP 使用 TCP 而不是 UDP?
【问题讨论】:
标签: tcp udp transport-layer-protocol
所以我们知道 UDP 是面向消息的,而 TCP 是面向流的。 为什么 SMTP 使用 TCP 而不是 UDP?
【问题讨论】:
标签: tcp udp transport-layer-protocol
为什么 SMTP 使用 TCP 而不是 UDP?
主要是因为 TCP 可靠而 UDP 不可靠,即使用 UDP,应用程序需要关心丢失、重复或重新排序的数据。
此外,邮件与 UDP 中的“消息”不同。此 UDP 消息仅表示具有特定长度且没有预定义内部结构的数据报。邮件虽然有一些内部结构。邮件的长度也很容易超过 UDP 消息的最大大小 (64k)。
【讨论】:
决定使用 TCP 还是 UDP 的通常规则如下:
如果您需要 TCP 提供而 UDP 没有的所有功能,请使用 TCP。你不会做出更好的 TCP。
如果 TCP 提供的某些功能在您的应用程序中成本很高,而您可以通过使用 UDP 来避免,请使用 UDP。
因此,让我们将该逻辑应用到 SMTP 上,以获得 TCP 提供而 UDP 不具备的功能:
面向连接:嗯,SMTP 需要它。您想启动连接以传递邮件。你不能让一封电子邮件成为一个单一的数据块,因为它们可以达到几兆字节。
慢启动:嗯,SMTP 需要它。你不能只是全速发送一堆电子邮件,你会丢包。您需要开始缓慢发送数据并评估可用的网络带宽。
重新排序、重复检测和丢失的数据报重传:嗯,您需要 SMTP。您需要重新传输丢弃的数据报,并且需要修复乱序接收的电子邮件的任何部分。
发送和接收窗口:嗯,SMTP 需要它。没有它就很难有效地传输大量数据。
因此,如果 SMTP 是基于 UDP 构建的,则 SMTP 本身需要实现 TCP 的大部分功能集,因为 SMTP 需要它。 TCP 由顶级专家设计,在所有流行的平台上进行了大量优化,网络工程师针对其性能优化网络。你不会用专门为 SMTP 设计的东西来打败它,而且每个顶层协议都实现所有这些功能的自己版本是没有意义的。
【讨论】: