2013年2月24日星期日

互联网是怎样运行的



互联网的前身,是美国军方在1960年代的一个研究项目,叫做ARPANET。经过几十年的发展,到现在,互联网的所有协议(简单的说,一个“协议”定义了两个网络设备之间通信的数据格式等各种规则)都是以RFC的形式对所有人免费开放。为了便于进一步的研发,可以将这些协议分为五个层次1:
物理层:负责将两个相邻的网络设备连接起来,定义了比如网线接口的规格,电压高低,或者无线通信的频率,等等。这一层最大的作用,就是将1和0转化成电信号,传递给相邻的网络设备,而接收方也能够将收到的电信号重新转化成1和0。
数据链路层:在大多数的时候,是有多个网络设备连接在一起的。比如在家里,可能有两台甚至更多的电脑通过无线的方式连接到同一个无线路由器上。当无线路由器发出一些数据的时候,所有与其连接的电脑都能收到相应的信息,这个时候,就需要通过数据链路层的协议,来区分每一个数据帧到底是发送给哪一台电脑的。我们平时说的MAC地址,就是在这一层用来唯一标示网络设备的。
互联网层:我们每天都会访问大量的网站,但显然我们的计算机和这些网站之间不是直接连在一起的,这个时候,就需要用到互联网层的协议,来传输相应的数据包。IP地址就是在这一层用来唯一标示网络设备的。显然,要掐断别人的网络,我们只能在这一层动手脚,因此我会在后面更加详细的讲述这一层的相关信息。
传输层:当两个网络设备之间通过互联网层建立起联系之后,怎么知道是哪个相关的应用程序在进行对话呢?比如说,我同时打开了两个浏览器窗口访问同一个网站,怎样才能确保每个窗口都能够接收到正确的数据,而不会混淆收发的信息呢?传输层的协议就是来完成这个工作,通过一个叫做端口号的东西,来区分某一个数据报到底应该传递给哪一个应用程序。
应用层:到这里,应用程序已经建立好连接,可以完成用户希望的工作了。应用层的协议就用来完成用户所希望的工作,比如在浏览器中提交一个表单,或者下载一个文件,等等。
好了,现在让我们看一看互联网层是如何工作的,看看美国到底有没有机会在这里动动手脚,掐断伊朗的网络。
不妨假设我们有一个数据包,希望从设备A发送到设备B。由于网络上有太多太多的设备,并且各样的连接随时可能发生变化,A显然不可能知道应该建立一条怎样的路径,将数据发送给B。但是,A能够通过一个叫做“路由协议”的东西,知道在与其直接连接的所有设备中,C能够最优化的将数据传递给B。于是,A将数据发送给C,而C知道它邻近的设备D能够最优化的将数据传递给B。于是C就将数据发送给了D,以此类推,最后B就能够接收到来自A的这个数据了。而另一方面,A和B并不能直接得知这个数据传输的路径,只能得知这个路径上的前一个以及后一个设备2。
那美国人能不能对这个路由协议动些手脚,仅仅瘫痪伊朗的网络呢?答案是:不可能。因为这个路由协议并没有一个类似于控制中心的东西,而是对等和自主的。简单的说,路由协议就是让每一个网络设备告诉与其相邻的其他设备,自己将数据包传送给相应目的地的成本是多高,然后收到这一信息的网络设备就知道该如何选择邻近的设备进行最优化的数据传输了。(见更新一)
而另一方面,如果做些小动作,那受害的通常不仅仅是一个特定的国家或者地区了,比如在2008年的时候,巴基斯坦原本试图封锁国内对YouTube的访问,结果导致全球大量地区无法访问YouTube。除非你认为美国能够布下一个精妙的局,让伊朗包括巴基斯坦在内的所有邻国一起协作,但你认为这样的可能性有多大呢?
事实上,即使伊朗(或者其他任何一个国家)切断了和其他所有国家互联网的连接,其内部的互联网仍然能够正常的运行,而不会受到任何的影响。这个本身,就和学校或者是公司的局域网的原理一致,即使没有连接到国际互联网,局域网仍然可以正常的运行,区别也就是不能访问国际互联网上的各种网站而已。
而美国能够做的,顶多也就是要求美国公司拒绝为伊朗的用户提供服务而已,例如在09年的时候微软切断了对伊朗等国的MSN服务(发生在伊朗大选以前,因此和作者的描述没有关系)。

没有评论:

发表评论