Total Pageviews

Sunday 28 April 2013

作为互联网的发明者,美国真的有能力掐断伊朗所有的网络吗?

让我们从互联网的原理说起。

互联网是怎样运行的
互联网的前身,是美国军方在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服务(发生在伊朗大选以前,因此和作者的描述没有关系)。
IP地址终端是啥
至于作者在文中提到的这个“IP地址终端”,我不得不说,身为一个多年从事相关工作的IT人士,我从来就没有听说过这样一个东西。如果是我孤陋寡闻的话,也就烦请知道真相的读者朋友贴给连接,说说这个东西到底是啥。
据我的推测,作者或许说的是DNS根服务器。 简单的说,这个DNS就是把类似于“myth.xzis.me”这样的域名,给翻译成比如“46.252.206.1”这样的IP地址,以便前面提到的路 由协议能够找到相应的路径。而这个DNS根服务器也不是仅有四个,而是一共有十三个主服务器,其中有十台分布在美国,瑞典、荷兰和日本则各有一台。此外, 通过anycast技术,这十三台根服务器在全球有超过100个镜像,并分布在比如中国、俄罗斯、巴基斯坦、印度等国家,甚至非洲和中东的一些国家也有相 应的镜像。
显然,即使是美国人能够对所有的DNS根服务器动手脚,受到影响的不仅仅是伊朗人,也会包括全世界的所有用户。除非美国人能够说服所有拥有镜像的国家,让 他们仅仅对来自伊朗的服务请求动手脚。即便你说西欧国家能够接受这一请求,难道中国和俄罗斯们也会接受吗?巴基斯坦也会接受吗?
并且,即便是美国让所有的国家一起合作针对伊朗发动网络战,破坏DNS的结果也仅仅就是让你无法通过比如“www.sohu.com“来访问搜狐,但仍然 可以通过IP地址”61.135.181.176“来进行访问。此外,这一招对于域名以“.ir”结尾的伊朗网站而言,是完全没有任何作用的,因为这些网 站的解析是在伊朗境内完成的,伊朗网民仍然可以访问比如”www.president.ir“等政府网站。
因此,我只能认为,美国是根本没有能力掐断伊朗的网络的。
最后的最后,插播两段和本文主题无关,但与引文有关的话:
1.如果伊朗的民主化程度很高,那真正管事的就不可能是由小团体选举出来的,终身任职的宗教领袖哈梅内伊了,而应该是全民选举出来的总统了。
2.伊朗大选的重新计票,根本不是内贾德宣布的,他根本没有这个权力宣布重新计票。这个事是伊朗宪法监护委员会宣布的,并且只重新计算了10%的选票。
备注
1. 标准的TCP/IP协议栈并不包含物理层,但这里为了让不熟悉网络机制的朋友更加容易的了解其原理,就加上了这一层。
2. 这个完整的数据传输路径可以通过使用诸如traceroute等工具进行推测,但不是这里的重点,因此略过。
以下更新于2013年1月1日
有网友指出,我在原文中的这一段描述是错误的:
那美国人能不能对这个路由协议动些手脚,仅仅瘫痪伊朗的网络呢?答案是:不可能。因为这个路由协议并没有一个类似于控制中心的东西,而是对等和自主的。简 单的说,路由协议就是让每一个网络设备告诉与其相邻的其他设备,自己将数据包传送给相应目的地的成本是多高,然后收到这一信息的网络设备就知道该如何选择 邻近的设备进行最优化的数据传输了。
如果考虑到比如这位网友提及的边际网关协议(BGP),我在这一段的描述或许确实是不够准确和清楚的,故特此在此澄清一下。
我在这里说到的路由协议没有控制中心,是针对作者说的“全球有4大IP地址终端”而言的,意思是说没有一个全球范围的控制中心,而不是说所有的路由协议或者网络设备都不需要人来控制和操作、配置等等。
而我说的这个最优化数据传输,也是一个非常概括的说法。例如,对于自治域内路由协议,比如OSPF协议,是根据带宽等来选择“最优化”的传输路径;而对于BGP协议,则会考虑更多人为设置的因素,例如是否允许数据从特定国家或者运营商经过,等等.