邮件不会再走500英里-常见问题解答

电子邮件的故事距离发件人不超过500英里 ,长期以来已成为一个有胡子的经典。 我以为正常的反应只是开怀大笑,但很少有人想向作者证明这不可能,因为……最终,作者无法忍受,并发表了完整的常见问题解答。 因此见面:

距离不超过500英里的电子邮件


我收到了许多有关该出版物的回复,“邮件不能超过500英里。” 我的故事被重印了许多次,销量超出了我的期望。 大多数答案都感谢有趣的故事和工作机会(顺便说一句,感谢他们,我希望他们继续前来!)但是,有许多人在我的故事中寻找不准确和矛盾的地方,发现小问题。 我没有回答所有此类攻击,而只是收集了最常见的问题并立即回答了所有问题。

1.是真的,还是历史只是一个故事?

这是现实。 当时,我负责北卡罗来纳大学教堂山分校的集中式电子邮件系统。 此外,我还参与了为出于某种原因使用自己的服务器的那些部门设置电子邮件的工作。 这个故事的主要内容是我为邮件服务器sendmail.cf编写了一个配置文件,大多数校园服务器都使用了该文件。

2.这个故事什么时候发生的?

我真的很想肯定地说。 但是,尽管我实际上是仔细存储其所有邮件(传入和传出的邮件)的其中一个(原来是-我是肛门保留类型之一) ,但我在这个问题上找不到一个字母。 如我所写,我是通过电话得知问题的,并且我也通过电话回答了。 过了一段时间,我有意识地决定不写任何信,主要是因为这个故事很好,而且我喜欢重述它,并看着第一次听到它的人的脸。 根据我当时工作的办公室,我正在跟他讲这个故事的同事以及其他与时间无关的细节的回忆,这个故事发生在1994-1997年左右。

但是,您当然可以更准确地计算时间。 例如,当sendmail 8已经“相当稳定”,但是Sun是否仍在发送sendmail 5时? 埃里克·奥尔曼(Eric Allman)曾就此事写信给我,说某些功能可以反向移植到sendmail 5,如果您知道何时发送,则可以大大缩短时间间隔。 通常,如果您对如何更准确地计算故事时间有任何想法,我将感激不尽。

3.这个故事真的发生在您身上吗?还是主要角色的性格从“无关紧要的细节”中被改变了?

这真的是我的故事。 在与部门负责人交谈之前,也许我的一位同事警告过我“统计室发生了什么事”。 甚至可能是我打电话给部门主管,而不是他。 在我整理问题时,很可能是我的一位同事坐在我旁边,因为我习惯于在解决过程中大声讨论工作问题。 但是,我几乎不会讲别人的故事,也不会收获别人的桂冠。 虽然,如果您当时与我一起工作,并且您认为解决问题是您的优点,请与我联系,我们会提出一些建议。

4.如果您不确定100%的细节,那么故事中为什么有那么多细节?

因为有了细节,故事看起来好多了。 您是否真的认为如果我在每个句子的开头都写上“我记不清了,但似乎是……”,那么情况会有所改变吗? 最后,我在一开始就警告说,一些次要的细节已更改,有些则被故意省略了-只是为了使故事更好。
第二个重点是故事首次发布的站点。 我已将这个故事发送到“难以置信的挑战”部分的SAGE(系统管理员协会)邮件列表。 这些只是有关管理有时交给系统管理员的最令人难以置信的任务的故事。

当然,如果我知道这个故事会在整个互联网上传播开来,那么我在写作方面会更加谨慎。 但是这段文字是为同事写的,我大多数人都是我认识的人,并且一般来说他们都相信我。

5.故事很有趣,但最后的技术细节是错误的。

是的,我知道。 重读上一个问题的答案。 首先,我根据发生在我身上的事件写了一个幽默的故事。 这不是教学材料,因此为了理解正在发生的一般含义,没有多余的技术细节。 总的来说,写完这个故事后,我对那些根据真实事件写故事的作者感到非常敬佩,现在我知道在信誉和虚构之间保持平衡是多么困难。 现在我很清楚,一连串的批评注定要注定作者是什么,选择一种艺术音节:-)

6.好吧,但是,为什么现在不写培训材料呢?

不幸的是,即使我愿意,这也不起作用,因为我没有源数据。 我没有保存日志,也没有做任何记录。 我真的非常希望保留它们,因为我知道我可以从中做出出色的文章。 然后,所有这些似乎都是微不足道的,仅值得在狭窄的朋友圈里开个玩笑。 而且我完成了这项任务-即使没有日志和注释。

虽然...事实上,有些细节我记得或可以恢复。 我用它们来回答以下问题。

7.将connect()超时设置为3 ms没有意义。

是的,我知道。 但是没有这样的安装。 故事描述了由于光速,我如何从发送邮件范围的500英里限制到3毫秒超时花了10分钟。 实际上,这个过程花了几个小时,我的工作可以和侦探的工作进行比较。 最后,我找到了解决方案,进行了测试并倒了咖啡(此外,我确信这与第一杯咖啡相去甚远)。 因此,在“ 3毫秒”数字中到底让您感到困惑的是什么?

8.好吧,首先,3 ms显然是不够的,因为这仅足以使传出数据包到达接收者。 但是您仍然需要获得答案,因此最小延迟应为6毫秒?

当然可以 这只是我省略的那些细节之一。 对于一个幽默的故事来说,它太复杂和无聊了。

9.或者由于三相TCP连接协议,超时通常应该为12/18/24 ms?

也许吧 同样,这些都是我不记得的细节,因为我丢失了所有笔记。 但是,我认为当接收到SYN / ACK数据包时,将重置connect()函数超时,也就是说,没有必要在超时期间完全建立TCP连接。 是的,即使无论如何应该讲这个故事,我也会将所有这些复杂的计算减少到数字“ 3”。

10.网络设备在信号流中引入的延迟比您想象的要大得多。

是的,您可能是对的。 但是我可以考虑这些延迟。 我不确定我是否会那样做,但是例如,可以对最近的路由器(例如,服务于我们大学另一所大学的网络的路由器)执行ping操作,以计算该路由器产生的延迟量。 然后,我可以将产生的延迟乘以信号通过其到达目的地的节点数。 对于东海岸的所有大学来说,这笔钱大约是相同的。 但是,即使不是这种情况,一个冗余路由器增加的延迟也只有数百微秒,这不会对整体时间造成太大影响。

11.一个有趣的故事,但其中有一个致命的缺陷 :铜线中的信号不会以光速传播。

是的,是的,信号的速度约为3 / 4c。 但是园区网络和骨干网完全是光纤。

12.啊哈! 但是,即使在光纤中,光的传播速度也不像在真空中那样!

是的,这里有我。 在光纤中,信号的传播速度从⅔c(是,比铜线慢)到几乎c,这取决于许多因素。 但我再重复一遍-我可以考虑的所有因素,当然也要考虑在内。 我对不同的节点执行ping操作,并记录到该节点的ping时间和距离。 比较获得的数据,我推断出一定的“经验时间”,这与实时时间略有不同。 但是,所有这些也都是微不足道的细节,为了使故事更短,更有趣,我省略了这些细节。

13. Stop-stop-stop ...您想说的是,您首先猜到问题出在某种程度上与光速有关,然后才进行计算(原文为“将其键入单位”,即,使用单位实用程序)

是的,完全正确。 我很固执。 在解开谜团的过程中,您是否没有注意到正确的答案? 这正是我发生的事情。 相反,最有可能的是,我首先将500英里转换为光毫秒,然后才调整了这一知识的答案。

14.也就是说,您知道如何解决用户的问题,但是直到发现超时后才解决。

不行 当我意识到用sendmail 8替换SunOS中的标准sendmail可以解决问题后,我就做到了。 (即使我不知道这会解决问题,我也会这样做,因为带有sendmail 8中参数的sendmail 5不是最佳配置)。 但是我保留了旧的二进制文件-仍然可以在闲暇时处理该问题。

系统管理员总是这样做。 从来没有发生过“系统运行和疲劳时间过长”,但是重新启动通常会有所帮助。 首先,管理员会尽最大可能解决问题,以便用户可以继续工作,然后他返回并寻找发生问题的真正原因。

15.通常,数据通过非常奇怪的路线通过Internet传输,但是在这个故事中,发送方始终直接连接到接收方。 怎么会这样

没办法 500英里正负-有一个区域可以发送一封信,超出该范围是不可能的。 在该区域内,还存在未发送信件或发送不同成功信件的节点。

至少有两个原因。 首先是一些额外的延迟(例如,在防火墙上),这导致超时过期。 第二个-通往这些节点的路径确实很困难,其总长度超过500英里。

北卡罗莱纳大学的网络建设得非常好,并且通向东海岸其他大学的信号路径(实际上是邮件已成功发送到该大学的信号路径)几乎是直接的(原著是正统的) ,尤其是在发生这种情况时。 在那些日子里,从亚特兰大到华盛顿的数据包很少穿过圣何塞。

16.为什么在历史上您仍然发现有必要提到您的网络几乎完全建立在交换机上?

我不知道 那时,似乎没有这句话,这个故事将是完全不可信的。 虽然现在我不明白为什么。 因此,当您重新阅读故事时,可以在脑海中抛弃相应的段落。

昵称为Hacksaw的用户写道:“切换排除延迟,例如,解决冲突。 由于用于分析的数据更干净,因此不存在此类延迟简化了对所描述问题的搜索。 我敢打赌,你是那个意思。”

17. Sendmail 5无法理解sendmail 8中的配置文件。

但是他明白了。 我已经被告知无法在网络上找到的sendmail 5。 因此,我不得不假定只有Sun作为Solaris的一部分提供的sendmail可以做到这一点。 如果您可以访问其源代码,请检查是否可行。 但仍然-它发生了,这意味着它可能发生:-)

18. sendmail具有用于编译的默认参数值; 它不能仅将所有未初始化的参数设置为0。

几个人写信给我。 今天可能是这样,但是在那些日子里绝对不是这样。 我确信这一点,因为这个故事发生一两年后,我和Eric Allman一起在LISA的sendmail研讨会上。 他注意到,sendmail所涉及的某些选项没有默认值(在标准sendmail.cf中这些值是默认值,但是,正如您所记得的,这不适用于我们的历史记录)。 我借此机会告诉了他一个约500英里的故事。 从字面上看,他正躺在桌子下面笑着:-)

19. SunOS中的单位实用程序不理解“光毫秒”这样的单位(在俄语翻译中,它表示“花费3毫秒乘以光速”,单位实用程序的输出显示在原文中)

是的 那又怎样 在我使用的所有机器上,我都编写了自己的unit.dat,其中包含许多额外的单位和前缀。 总体而言,据我所记得,我是在AIX下创建的单元。 我不知道关于AIX毫秒的信息。 查看今天所有Linux发行版随附的units.dat。 他大概知道光毫秒(millilightseconds)。

20.当然,提到“遗失的笔记”非常方便...

当然可以 五年前,您保留了几张纸?

21.无论如何,这个故事是虚构的!

回答这个问题:如果我们忽略技术细节,邮件服务器的错误配置是否可以导致信件传递给附近的收件人,而不是远程收件人? 我认为答案是肯定的。 实际上,我知道答案是肯定的,因为它确实发生了。 但是,即使您不考虑我的经验并从外部看这个问题,我仍然认为这是可能的,尽管乍一看似乎是不可行的。

如果您仍然有我未回答的问题,请给我发送电子邮件至trey+500mi@lopsa.org。 我会将您的问题添加到FAQ中,并提及您为作者。 但是最有可能的是,我只会说:“我不知道,我不记得了,我没有数据要回答。”

22.签名表明您正在寻找工作。 这仍然有意义吗? (签名已删除,俄语翻译)

不再了,但是感谢这个问题!

Source: https://habr.com/ru/post/zh-CN468503/


All Articles