我看到越来越多的程序员开发基于 Web 的应用程序,这些程序基于我所说的“ping-then-do”心态。一个例子就是在发送邮件之前 ping 邮件服务器的应用程序。在另一个论坛的一场相当激烈的辩论中,我发表了这样的声明:“如果你要编写使用互联网的程序,你至少应该对基础知识有一个基本的了解。‘ping-then-do’ 的愿望告诉我,许多这样做的人并没有这样做。”
在这个论坛和 Stack Overflow 上,我看到很多关于 ping/trace route 的问题,我很好奇为什么?如果可以在这里讨论这个问题,我想听听其他人的看法。如果不行,我想这个问题很快就会被关闭。
需要澄清的是,我想明确地说明,我谈论的是互联网流量,而不是私人网络。
答案1
根据我的经验,许多程序员不明白 ping 是什么,不是什么。我经常遇到这样的人:如果他们能 ping 通某个东西,他们就可以使用运行在该东西上的 X 服务。也有人认为,如果他们不能 ping 通它,他们就不能使用它。这两种假设都是错误的。
话虽如此,我们也不能将网络应用程序限制为仅供完全了解网络的人使用,就像我们不能将数据库应用程序限制为仅供完全了解数据库的人使用一样。如果我们这样做,我们将看到更少的应用程序,程序员遇到的可教时刻也会少得多。
答案2
我并不确信这不属于元数据,但这是一个缓慢的早晨,所以有什么害处呢?
尤其是 ping,它是那些入门门槛低、用处少且实用性强的工具之一。它也是人们在网络领域学习的第一批诊断工具之一。这意味着许多不同技能水平的人都接触过它。
底层机制几乎不会直接暴露给 ping 的最终用户。新用户可以立即判断主机是否启动。至少,这是他们认为他们看到的。作为经验丰富的用户,您知道情况并非总是如此。这就是使用 ping 作为唯一诊断工具的问题所在。
它不是指示某物是正常还是故障的指标。它是指示响应时间的指标。没有回复与主机是否接收流量无关,但这就是它的用途,因为大多数主机都会响应 ICMP 数据包。我仍然有一些相对了解情况的用户,他们发誓如果远程服务器不响应 ICMP,它们就会瘫痪。
结果是,只要用户不知道其用途,就会产生疑问。好处是,这些问题让我们有机会提高提问者的知识水平。
至于 traceroute,它是一款看似简单但实际上非常复杂的工具。“如果我 traceroute 这个 IP,我就能看见它和我之间的所有计算机”,就好像互联网是一系列管道,就像地铁一样,你可以看到自己和目的地之间的站点。
如您所知,互联网并不是这样运作的。路由一直在变化。无法保证两个数据包会经过相同的路径(甚至无法保证 ICMP 响应会经过与源相同的路径)。这并不意味着 traceroute 没有用,而是需要更高级别的知识才能解释。
再说一次,当人们询问跟踪路由问题时,我们应该将其视为教育的机会,而不是滥用他们的借口。
答案3
错误处理是编程中最被低估的功能,也是测试最少的功能。如果一段代码执行了“ping”或“traceroute”,那么它一定有很好的理由这样做。例如此外感知到“我无法访问邮件服务器”时,代码可能会详细说明并将 ping 和 traceroute 转储写入日志。如果您的网络拓扑存在错误,这可能非常有用,但仅限于凌晨 4 点。
首先详细检测服务故障,然后进行诊断。通过判断主机诊断来暗示一切正常是愚蠢的。
ping-then-do 的一个要点可能是,大多数基于 TCP 的协议都有相当长的超时时间,程序员试图让用户免于等待。不过,在这里执行实际的 ping 仍然是错误的。在单独的进程中检测邮件服务器故障,重新配置以使用备份服务器。几乎每种故障情况都有干净的解决方案,无需使用 ping。
答案4
嗯,如果你是一名黑客,那么在远程机器上启动一个进程可不是什么好事,你需要先收集其他信息。如果你正在入侵一个重要/安全的网站,而他们确实允许 icmp(不太可能)进入,那么他们就会运行 ids/ips,如果你过早启动那个东西……tr