英文原文:Journey of a Data Packet in the Internet
尽管大多数最终用户都不关心 Internet 是如何工作的,但是我相信你们当中的仍然会有一些人对 Internet 运转的基本原理非常感兴趣。
在这篇文章中,我们会通过阐释一个数据包从源到目的地的征程,来试着拨开互联网的第一层神秘面纱。由此出发,我们会尽量让本文的内容保持简单基础。
在更进一步之前,让我们先快速简要地理解一下 DHCP 和 DNS 的概念。
DHCP
你有没有想过你的计算机是如何获取 IP 地址的?嗯……首先你必须知道计算机获取 IP 地址是有两种途径的,一种是静态方式,另一种是动态方式。
静态方式就是由管理员在机器上手动设置 IP 地址。如果你的计算机连接在局域网或者类似的网络上的话,需要注意的是你所设置的 IP 地址不能和网络上任何其他机器的 IP 地址相同,因为那样会引起 IP 地址冲突,两台机器就都不能连接到 Internet 了。
动态方式就是计算机(在系统启动的时候)请求一台服务器来为它分配一个 IP 地址。这一过程使用的协议称为动态主机配置协议(DHCP)。这里提到的服务器就是 DHCP 服务器,这台服务器负责为网络上所有的计算机分配 IP 地址。此时由 DHCP 来保证没有 IP 地址冲突。如果一台机器关闭继而重启,那么一条刷新 DHCP 的请求就发送到 DHCP 服务器上,这一次可能会分配给它一台与原来相同或者不同的 IP 地址。通常 DHCP 服务器会得到一个 IP 地址池,DHCP 服务器只能分配该地址池内的地址。这么做是为了保证将其他 IP 地址作为静态地址的时候不会引起任何冲突。
DNS
我们大多数人都使用过 google.com 进行搜索,不过你有没有想过为什么在浏览器里面输入 google.com 就能连接到 Google 的服务器呢?嗯……要理解这件事情,我们需要理解域名服务器(DNS)的概念。
就如同现实生活中人们通过名字互相区分一样,在计算机网络的世界里,不同的计算机之间通过指派给它们的 IP 地址来互相区分。IP 地址有两种类型:公有和私有。通常服务器使用公有地址,这是因为他们要被全世界数以百万计的计算机访问。至于你那连接在路由器上的个人电脑,它通常获取到的是私有 IP。由于公有地址的数量是有限的,所以现在搭设局域网(在一个有着公有 IP 的路由下搭建)然后使用私有地址开始变得流行并且非常成功。
记忆 IP 地址这样的任务对于大多数人来说有些困难,于是每个服务器都还有一个名字(比如 google.com)。这样最终用户只需要记住这个名字,在浏览器中输入它,然后敲回车就可以了。现在让我来看看当用户在浏览器中输入名字并敲回车之后究竟发生了什么。首先,需要把域名转换成对应的 IP。要完成这项任务,需要给默认网关(大多数情况下就是路由器)发送一条与 DNS 请求。路由都会配置一个 DNS 服务器地址,这个地址便是 DNS 请求的目的地。
DNS 服务器用来将域名转换成 IP 地址。当 DNS 服务器收到一条请求后,它会检查它有没有该请求需要的转换信息。如果没有这条转换信息,那么 DNS 服务器会把这条请求转发给其他的 DNS 服务器。通过这种方式,就完成了从域名到 IP 地址的转换。转换结果随后会发回到发出请求的计算机。
DNS 之后又发生了些些什么?
要理解下面的解释,你应该对 TCP/IP 协议族有一定的了解。当然啦,我们会尽量保持解释的简单性。
如果数据包的目的地没有直接连接在源计算机上,那么根据源计算机上存储的路由信息,数据包就会传送到最近的网络节点上去。网络中有各种不同的节点,比如路由、网桥、网关等等。每一种都有重要的作用,例如路由用来传送 IP 包,网桥用来连接不同协议的异构网络。
如果我们考虑一个简单的网络的话,路由就是将数据包从源送到目的地的最主要的角色。数据包离开源计算机后,与其相连的路由(数据要先发送到这里)的 MAC 地址就这个包的目的 MAC 地址。
数据包到达该路由之后,路由就会做下面几件事情:
上面的所有情况中,不论数据包是在路由之间传送还是从路由传送到目的地,目的 MAC 地址都会变成最近的路由或者目的地的 MAC 地址。通过这种方式,目的 IP 地址保持不变,而目的 MAC 地址不断从一个路由变为另一个。就是这样,数据包从一台路由到下一台路由,直到它抵达终点。
啊哈,千难万险之后我们的 HTTP GET 请求终于到达目的地啦:
之后,相应的响应会以与上述相同的方式传送回来。
现在你都了解了,这就是数据包在 Internet 上从源到目的地的旅程。
翻译: 极客范 - 八卦爱好者
译文链接: http://www.geekfan.net/7773/