Laz*_*zer 6 command-line networking
例如在这张取自维基百科的图片中

列出的这 12 个服务器名称是什么?我知道它们是服务器,应该是网络数据包到达目的地所必须经过的路径。但是,为什么我需要通过提供我请求的文件来访问除实际为请求提供服务的服务器之外的任何服务器?
每个服务器名称提到的三个计时信息是什么?
过程不应该是这样的(从这里复制)?
浏览器与名称服务器通信,将服务器名称 www.howstuffworks.com" 转换为 IP 地址,用于连接到服务器计算机。然后浏览器在端口 80 上与该 IP 地址的服务器建立连接。 (我们将在本文后面讨论端口。)遵循 HTTP 协议,浏览器向服务器发送 GET 请求,请求文件“ http://www.howstuffworks.com/web-server.htm”。(请注意,cookie 可能会通过 GET 请求从浏览器发送到服务器——有关详细信息,请参阅 Internet cookie 的工作原理。)然后服务器将网页的 HTML 文本发送到浏览器。(cookie 也可能从服务器发送到浏览器在页面的标题中。)浏览器读取 HTML 标签并将页面格式化到您的屏幕上。
12 行是数据包到达维基媒体服务器所必须经过的节点。您需要通过 12 个节点,因为您的计算机没有直接连接到维基媒体的服务器。它被连接到一个节点在xs4all.net(ISP时,自然),其被连接到另一节点xs4net,其被连接到wvfiber.net,其被连接到as30217.net,其被连接到wikimedia.org,所以这是路由器可以找到的将数据包送到目的地的最佳路径。如果您的计算机直接插入目标计算机,则只有一跳;尝试跟踪到本地网络上的另一台计算机:
> [mrozekma@etudes-2 ~] % traceroute etudes-1
traceroute to etudes-1 (192.168.0.10), 30 hops max, 40 byte packets
1 etudes-1 (192.168.0.10) 0.196 ms 0.190 ms 0.152 ms
Run Code Online (Sandbox Code Playgroud)
每跳右侧的计时信息是数据包的往返时间。默认情况下,每跳发送三个数据包,因此它显示三个时间;如果您给 traceroute-q选项,您可以控制发送的数据包数量:
> [mrozekma@etudes-2 ~] % traceroute -q 1 etudes-1
traceroute to etudes-1 (192.168.0.10), 30 hops max, 40 byte packets
1 etudes-1 (192.168.0.10) 0.177 ms
Run Code Online (Sandbox Code Playgroud)
traceroute 显示的主机不是服务器,而是路由器。Traceroute 显示从拍摄此快照的人的计算机到维基百科服务器的IP路由上的跃点数。您引用的 HTTP 描述着眼于更高级别,所有这些路由都是透明的。
我认为解释这一点的最好方法是通过一个比喻。HTTP(例如)需要客户端和服务器之间的双向通信通道;该通道由TCP提供。TCP 是建立在 IP 之上的。IP 的目标是将数据包从一个 IP 地址传输到另一个 IP 地址。TCP 连接需要从客户端到服务器的 IP 数据包和从服务器到客户端的 IP 数据包。
好的,现在将每个 IP 数据包想象成一封信,您放入邮箱,邮局将其运送到目的地。Traceroute 显示了信件从您的住所到收件人住所的过程中的所有阶段:信件投递到的邮箱、镇邮局、地区分拣办公室、地区邮件中心等,直到信件到达收件人的住所邮槽。这基本上就是您在 DHL/UPS/...
在这个例子中,前两跳被称为….xs4all.net;它们显然来自快照作者的 ISP。接下来的几条线路来自经营国际运输线路的WV Fiber。我不知道as30217.net是谁;可能是数据中心的 ISP。最后两台机器来自维基百科。
IP 路由对更高级别的协议(例如 TCP)和更多基于TCP 构建的协议是完全透明的。其实,traceroute根本就得耍点花样才能获取到信息。