我越来越多地看到程序员基于我所谓的“ping-then-do”心态开发基于 Web 的应用程序。一个示例是在发送邮件之前 ping 邮件服务器的应用程序。在另一个论坛的一场相当激烈的辩论中,我发表了这样的声明,“如果你要编写使用互联网的程序,你至少应该对基本原理有一个基本的了解。“ping-then-do”的愿望告诉我有那么多人,不要。”
在这个论坛和 Stack Overflow 上,我看到很多关于 ping / 跟踪路由的问题,想知道为什么?如果可以在这里讨论它是可以接受的,我想听听其他人的想法。如果不是,我认为它将迅速关闭。
一个澄清 - 我想明确我说的是互联网流量,而不是私人网络。
以我的经验,许多程序员不明白 ping 是什么,什么不是。我经常遇到一些人认为,如果他们可以 ping 一个东西,那么他们就可以使用在那个东西上运行的 X 服务。还有一些人认为,如果不能ping通,就不能使用。这两个假设都是错误的。
话虽如此,我们不能将网络应用程序仅限于那些完全了解网络的人,就像我们不能将数据库应用程序限制给那些完全了解数据库的人一样。如果我们这样做了,我们会看到更少的应用程序,程序员会遇到更少的可教时刻。
我不相信这不属于meta,但这是一个缓慢的早晨,那么有什么害处?
尤其是 ping,它是一种入门门槛低且只需少量努力即可提供高度实用性的工具之一。它也是人们在网络中学习的首批诊断工具之一。这意味着许多不同技能水平的人都接触过它。
底层机制很好地没有直接暴露给 ping 的最终用户。新用户可以立即判断主机是否启动。至少,这是他们认为他们看到的。作为经验丰富的用户,您知道情况并非总是如此。这是使用 ping 作为您唯一的诊断工具的问题。
这不是一个指标,表明某事是向上或向下的。它是响应时间的指标。没有回复与主机是否接收流量无关,但这就是它的使用方式,因为大多数主机都会响应 ICMP 数据包。我仍然有一些知识渊博的用户发誓,如果他们不响应 ICMP,远程服务器就会关闭。
结果是,只要被不了解其用途的用户使用,就会有问题。好处是这些问题让我们有机会提高提问者的知识。
至于traceroute,它是一个看起来非常简单的非常复杂的工具。“如果我跟踪这个 IP,我会看到它和我自己之间的所有计算机”,就好像互联网是一系列管道,就像地铁一样,你可以看到你和目的地之间的站点。
如你所知,互联网不是那样工作的。路线一直在变化。不能保证两个数据包将通过相同的路径(或者甚至不能保证 ICMP 响应将通过源所采用的相同路径)。这并不意味着 traceroute 没有用,而是它需要更高层次的知识来解释。
同样,当人们提出 traceroute 问题时,我们应该将其视为教育的机会,而不是滥用它们的借口。
错误处理是编程中最被低估的能力,也是测试最少的能力。如果一段代码执行“ping”或“traceroute”,它必须有很好的理由这样做。例如,除了感知“我无法访问邮件服务器”之外,代码还可以详细说明并将 ping 和 traceroute 转储写入日志。如果您的网络拓扑有问题,这将非常有用,但仅限于凌晨 4 点。
首先详细检测服务故障,然后进行诊断。通过判断主机诊断来暗示一切正常是愚蠢的。
ping-then-do 的一个要点可能是大多数基于 TCP 的协议都有相当长的超时并且程序员试图让用户免于等待。但是,在这里执行实际的 ping 操作仍然是错误的。在单独的进程中检测邮件服务器故障,重新配置以使用备份服务器。在不使用 ping 的情况下,几乎每种失败情况都有干净的解决方案。
促使我开始这样做的原因是,我仅仅因为询问为什么有人要对谷歌进行跟踪路由而被否决。
如果我告诉你,我在一个你会知道的地方认识一个人。我们经常在 30 点左右的维护窗口中在一起,他会找到具有明显 ping 模式的人然后下载。他喜欢在这些端口上阻止 ICMP 几分钟。那是 15 年前的事了,我相信这种事情不会再发生了。哦,我能讲的故事。我们都对互联网骨干网的增长速度感到惊讶。
我非常强烈的观点是,应用程序永远不应该 ping,然后做某事,除非该应用程序是网络管理员使用的某种形式的网络监控工具。
我是我的家庭网络的网络管理员,我是来自我的 ISP 的三个长途 WIFI 链接,所以有时我的服务参差不齐。当我遇到问题时,我不会 ping 雅虎,我编写的应用程序也不会。
有一些程序员,即使被解释了,仍然认为 ping-then-do 是好的。我在一个论坛上与一个人来回走动。他发布了显示原因的代码,我将他的代码发回修复,我记得他正在发送邮件。这种情况持续了两三遍,他最后的反应是ping失败的错误信息比发送邮件失败的错误信息要好。你必须喜欢它。
如果有人有 ping-then-do 是个好主意的例子,请在此处发布。
嗯,如果您的黑客在远程机器上启动进程不是一件好事,那么您首先需要收集其他信息。如果您入侵了一个重要/安全的站点并且他们确实让 icmp(不太可能)进入,那么他们将运行 ids/ips 并且如果您过早地点亮那个东西...... tr