为啥发送电子邮件需要多个邮件服务器跃点?
Posted
技术标签:
【中文标题】为啥发送电子邮件需要多个邮件服务器跃点?【英文标题】:Why does sending an email need multiple mail server hops?为什么发送电子邮件需要多个邮件服务器跃点? 【发布时间】:2012-06-25 02:54:37 【问题描述】:当我向某人发送电子邮件时,(我认为)我的电子邮件被发送到我的家庭服务器,然后电子邮件被发送到目标服务器,然后最终发送给我想要发送给的人。
有时,这需要多个跃点,这让我感到困惑。为什么这需要多个跃点?为什么邮件不能直接发送到目标服务器?例如,XMPP 不需要多跳。
【问题讨论】:
您是指网络跃点还是邮件服务器跃点? @DarkXphenomenon 我的意思是邮件服务器跳数 【参考方案1】:典型的电子邮件交易使用出站邮件服务器,该服务器查找收件人的收件服务器,将其发送到那里,然后该服务器将其交给收件人的邮箱服务器。那是 3 跳:
当您发送消息时,您会从您的电子邮件客户端(更准确地说:邮件用户代理,MUA)连接到您的出站SMTP 服务器。这是第一个跃点,您的 SMTP 服务器会创建一个 Received
标头来表示它以供稍后审核。这将包括它看到您连接的 IP、该特定服务器内部的消息 ID,有时还包括一些其他信息。
然后,您的出站 SMTP 服务器在 DNS 中查找每个收件人的域的 MX(邮件交换)记录,并连接到它可以为他们找到的最高优先级中继(数字上最低的 MX 优先级)。这是第二跳。与任何跃点一样,会添加一个 Received
标头。
MX 中继通常会进行反垃圾邮件过滤,可能会在 SMTP 连接期间拒绝邮件。这就是生成退回邮件的原因,您的出站 SMTP 服务器会直接向您发送该邮件(如果它是通过 Internet 发送的,则有可能成为backscatter,一种垃圾邮件形式,因为退回邮件无法被证明是合法的)。通常,反垃圾邮件过滤会在稍后完成,邮件会被静默丢弃或使用标记传递。
然后,MX 中继在内部将邮件传递到您的邮箱 (IMAP/Exchange) 服务器(跃点 #3)。有时,本地邮箱服务器过滤器用于处理模式(或来自 MX 服务器的标记)并促进各种操作,例如将可疑垃圾邮件归档到您的垃圾文件夹。
如果您使用邮件转发服务,MX 中继会将您的邮件传递给转发目标(另一个 MX 中继)。这理论上可以持续很长一段时间甚至无限循环,但它最终应该在邮箱服务器中结束。
另请参阅正式的 SMTP 规范,RFC 5321。
如果您使用网络邮件,网络邮件服务器就是您的电子邮件客户端。一些 Web 邮件服务器添加类似于 Received
标头的标头来跟踪连接,因此垃圾邮件过滤器可以将其信誉检查扩展到用户而不是 Web 邮件系统,这可能是另一个跃点。
在企业级环境中,多层服务器通常用于各种目的。这些额外的跃点发生在 MX 中继和邮箱服务器之间,可能与额外的反垃圾邮件或反病毒处理、高级邮件别名、电子邮件归档、校园之间的内部邮件路由或任何其他事情有关。例如,这些可以简化从一个邮件系统到另一个邮件系统的转换(例如在 Exchange 版本之间迁移,这可能需要大量测试和缓慢的迁移,因此问题不会影响整个公司)。
【讨论】:
【参考方案2】:从根本上说,这与 Internet 的最初目的有关,或者更确切地说,它的前身 ARPANET,旨在在网络部分丢失的情况下幸存下来(流行的普遍误解,这个设计目标的存在并不是为了生存核攻击,但因为当时网络组件相当不可靠)。
数据包交换网络旨在找到一条或多条路由,从数据包开始的地方(您的电子邮件客户端)到它需要到达的地方(您要发送到的人的电子邮件客户端)。
为了实现这种灵活性,系统不仅设计为直接从 A 点路由到 B 点,还设计了一条当前正在运行的可用路线(从可能非常大的一组可能路线中)。
如果您的电子邮件客户端必须知道如何直接发送到世界上所有其他设备,而无需干预子网管理流量,那么您的计算机将需要直接连接到世界上所有其他计算机。那将是非常昂贵的。相反,中间的路由器接受来自您和您所在地区其他人的数据包,并找出如何将每个数据包路由到更接近其目的地的位置。这类似于航空公司使用区域航班为枢纽提供服务的方法。
【讨论】:
这对我帮助很大,谢谢。但我仍然对为什么 xmpp 协议选择直接连接而无需多跳感到困惑;那也太贵了。 @user1242027 它没有。 "... end-to-end communication in XMPP is logically peer-to-peer but physically client-to-server-to-server-to-client.". @EJP SMTP(电子邮件)在服务器-服务器部分允许多个服务器,而 XMPP 最多只允许链中的 2 个服务器(它们之间不可能有不同的第三个服务器)。这就是最初的问题。 @Eric J。您的回答解释了为什么单个数据包能够通过不同的路径和不同数量的跃点进行路由。我相信问题更多是关于为什么在应用层,SMTP 允许多个服务器参与电子邮件消息的路由。【参考方案3】:当一个数据包通过互联网路由时,它会进行多次跳跃从源到目的地。
【讨论】:
以上是关于为啥发送电子邮件需要多个邮件服务器跃点?的主要内容,如果未能解决你的问题,请参考以下文章