1.2 关于地址

寄信的时候,要在表格中填上邮政服务能够理解的收信人的地址。在给别人打电话时,必须拨电话号码。同样,一个程序要与另一个程序通信,就要给网络提供足够的信息,使其能够找到另一个程序。在TCP/IP协议中,有两部分信息用来定位一个指定的程序:互联网地址(Internet address)和端口号(port number)。其中互联网地址由IP协议使用,而附加的端口地址信息由传输协议(TCP或IP协议)对其进行解析。

互联网地址由二进制数字组成,有两种型式,分别对应了两个版本的标准互联网协议。现在最常用的版本是版本4,即IPv4,另一个版本是刚开始开发的版本6,即IPv6。IPv4[1]的地址长32位,只能区分大约40亿个独立地址,对于如今的互联网来说,这是不够大的。(也许看起来很多,但由于地址的分配方式的原因,有很多都被浪费了)出于这个原因引入了IPv6[2],它的地址有128位长。

为了便于人们使用互联网地址(相对于程序内部的表示),两个版本的IP协议有不同的表示方法。IPv4地址被表示为一组4个十进制数,每两个数字之间由圆点隔开(如:10.1.2.3),这种表示方法叫做点分形式(dotted-quad)。点分形式字符串中的4个数字代表了互联网地址的4个字节,也就是说,每个数字的范围是0~255。

另一方面,IPv6地址的16个字节由几组16进制的数字表示,这些16进制数之间由分号隔开(如:2000:fdb8:0000:0000:0001:00ab:853c:39a1)。每组数字分别代表了地址中的两个字节,并且每组开头的0可以省略,因此前面的例子中,第5组和第6组数字可以缩写为:1:ab:。甚至,只包含0的连续组可以全部省略(但在一个地址中只能这样做一次)。因此,该例子的完整地址可以表示为2000:fdb8:1:00ab:853c:39a1。

从技术角度来讲,每个互联网地址代表了一台主机与底层的通信信道的连接,换句话说,也就是一个网络接口(network interface)。主机可以有多个接口,这并不少见,例如一台主机同时连接了有线以太网(Ethernet)和无线网(WiFi)。由于每个这样的连接都属于唯一的一台主机,所以只要它连接到网络,一个互联网地址就能定位这条主机。但是反过来,一台主机并不对应一个互联网地址。因为每台主机可以有多个接口,每个接口又可以有多个地址。(实际上一个接口可以同时拥有IPv4地址和IPv6地址)。

TCP或UDP协议中的端口号总与一个互联网地址相关联。回到前面我们作类比的例子,一个端口号就相当于指定街道上一栋大楼的某个房间号。邮政服务通过街道地址把信分发到一个邮箱,再由清空邮箱的人把这封信递送到这栋楼的正确房间中。或者考虑一个公司的内部电话系统:要与这个公司中的某个人通话,首先要拨打该公司的总机电话号码连接到其内部电话系统,然后再拨打你要找的那个人的分机号码。在上面的例子中,互联网地址就相对于街道地址或公司的总机电话号码,端口号就相当于房间号或分机号码。端口号是一组16位的无符号二进制数,每个端口号的范围是1~65535(0被保留)。

每个版本的IP协议都定义了一些特殊用途的地址。其中值得注意的一个是回环地址(loopback address),该地址总是被分配个一个特殊的回环接口(loopback interface)。回环接口是一种虚拟设备,它的功能只是简单地将发送给它的报文直接回发给发送者。回环接口在测试中非常有用,因为发送给这个地址的报文能够立即返回到目标地址。而且每台主机上都有回环接口,即使当这台计算机没有其他接口(也就是说没有连接到网络),回环接口也能使用。IPv4的回环地址是127.0.0.1 [3],IPv6的回环地址是0:0:0:0:0:0:0:1。

IPv4地址中的另一种特殊用途的保留地址包括那些“私有用途”的地址。它们包括IPv4中所有以10或192.168开头的地址,以及第一个数是172,第二个数在16~31的地址。(在IPv6中没有相应的这类地址)这类地址最初是为了在私有网络中使用而设计的,不属于公共互联网的一部分。现在这类地址通常被用在家庭或小型办公室中,这些地方通过NAT(Network Address Translation,网络地址转换)设备连接到互联网。NAT设备的功能就像一个路由器,转发分组报文时将转换(重写)报文中的地址和端口。更准确地说,它将一个接口中报文的私有地址端口对(private address,port pairs)映射成另一个接口中的公有地址端口对(public address,port pairs)。这就使一小组主机(如家庭网络)能够有效地共享同一个IP地址。重要的是这些内部地址不能从公共互联网访问。如果你在拥有私有类型地址的计算机上试验本书的例子,并试图与另一台没有这类地址的主机进行通信,通常只有这台拥有私有类型地址的主机发起的通信才能成功。

相关的类型的地址包括本地链接(link-local),或称为“自动配置”地址。IPv4中,这类地址由169.254开头,在IPv6中,前16位由FE8开头的地址是本地链接地址。这类地址只能用来在连接到同一网络的主机之间进行通信,路由器不会转发这类地址的信息。

最后,另一类地址由多播(multicast)地址组成。普通的IP地址(有时也称为“单播”地址)只与唯一一个目的地址相关联,而多播地址可能与任意数量的目的地址关联。我们将在第4章中简要地对多播技术作进一步介绍。IPv4中的多播地址在点分格式中,第一个数字在224~239之间。IPv6中,多播地址由FF开始。

[1]Postel,John,“Internet Protocol,”Internet Request for Comments 791,September 1981.

[2]Deering,S.,and Hinden,R,“Internet Protocol,Version 6(IPv6)Specification,”Internet Request for Comments 2460,December 1998.

[3]从技术上讲,任何由127开头的IPv4地址都应该回环。