![SMTP - RFC 821 和 RFC 2821 中的路由](https://linux22.com/image/605286/SMTP%20-%20RFC%20821%20%E5%92%8C%20RFC%202821%20%E4%B8%AD%E7%9A%84%E8%B7%AF%E7%94%B1.png)
RFC 821 指出,该MAIL
动词可以赋予<forward-path>
以下形式的参数"@ONE,@TWO:JOE@THREE"
,以指示中间路由主机 ( @ONE,@TWO
) 和电子邮件的最终接收者 ( JOE@THREE
)。请参阅 3.6,中继:https://www.rfc-editor.org/rfc/rfc821
RFC 2821 规定,如果向 SMTP 服务器发送了转发路径,则可以通过对 执行 DNS MX 查找,将@ONE,@TWO:JOE@THREE
电子邮件直接路由到该服务器(绕过中间主机) 。请参阅 3.7,中继:JOE@THREE
THREE
https://www.rfc-editor.org/rfc/rfc2821
我认为我正确理解了 RFC 2821:DNS MX 查找只会返回域的 SMTP 服务器的 IP(例如@THREE
此处)。是这样吗?然而,我完全不明白电子邮件是如何根据 RFC 821 路由的。此规范是在 DNS 存在之前编写的,因此我假设任何主机名都是在 hosts.txt 文件中指定的?具有转发路径的电子邮件是如何路由的?
答案1
所以这是一个历史问题?:-)
在 DNS 出现之前,主机名将通过 HOSTS.TXT 或通常通过本地可用的其他主机名解析方式(/etc/hosts
可能是 NIS,等等)进行解析。但这仅限于本地邮件传输代理的配置尚未包含显式路由指令的情况。考虑到当时大多数邮件都是通过 UUCP 传递的,大多数邮件传输代理主要基于这些类型的显式指令(通过“mailertable”和其他键值数据库查找进行查询)工作。如果您是连接良好的 UUCP 主机,您将拥有一个大型路由数据库,该数据库将每个目的地映射到通过 UUCP 网络计算出的逐跳路径(bang 路径)。如果您是一个小型终端站点,您可能只会有一个到上游 UUCP 主机的默认路由。
这些都与您询问的源路由无关。如果您有目的地,那么您将按照我描述的方式JOE@THREE
进行查找(即最有可能通过您的“mailertable”数据库)。如果您有目的地,那么您将查找。THREE
@ONE,@TWO:JOE@THREE
ONE
当然,如今互联网上没有 MTA 会尊重源路由。如果现代 MTA 完全接受该语法(它很可能不接受),它将忽略源路由并直接查找THREE
。信任源路由被认为是不安全的,而且 MTA 不再默认为开放中继。