目录
一、网络层的几个重要概念
1. 网络层提供的两种服务
传统电信网主要业务是提供电话服务。用面向连接的通信方式,使电信网络能够向用户提供可靠的传输服务。因此当时也认为,计算机网络也模仿电话使用的面向连接的通信方式。两台计算机进行通信时,应当先建立连接(但在分组交换中是建立一条虚电路VC),以预留双方通信所需的一切网络资源。然后双方就沿着已建立的虚电路发送分组。这样的分组不需要填写完整的目的主机地址,只需要填写这条虚电路的编号,因而减少了分组的开销。这种通信方式如果再使用可靠传输的网络协议,就可使所发送的分组无差错按序列到达终点,且不丢失/重复。再通信结束后要释放建立的虚电路。如下图a,主机H1和H2之间交换的分组都必须在事先建立的虚电路上传送。
但互联网的先驱者提供了一种崭新的网络设计思路。电信网提供的端到端可靠传输的服务对传统的电话业务是合适的,因为那时电信网的终端非常简单,没有只能,差错处理的能力。但计算机网络的端系统是有智能的计算机。计算机有很强的差错处理能力。
互联网采用的设计思路:网络层要设计得尽量简单,向其上层只提供简单灵活、无连接的、尽最大努力交付的数据包服务。这里的“数据报”是互联网的设计者最初使用的名词,其实数据报(或IP数据报)就是常使用的“分组”。在本书中,IP数据报和IP分组是同义词。
网络在发送分组时不需要先建立连接。每一个分组(IP数据报)独立发送,与其前后的分组无关(不进行编号)。网络层不提供服务质量和承诺。也就是说,所传送的分组可能出错、丢弃、重复和失序,当然也不保证分组交付的时限。由于传输网络不提供端到端的可靠传输服务,这就使网络中的路由器比较简单,且价格低。如果主机进程之间需要进行可靠的通信,那么就由主机中的运输层负责(包括差错处理、流量控制等)。采用这种设计思路的好处:网络造价大大降低,运行方式灵活,能够适应多种应用。
图b,给出了网络提供的数据服务。主机H1向H2发送的分组各自独立地查找路由器中的转发表,逐渐传送到目的主机。在分组发送过程中有丢失的可能。
OSI体系的支持者曾极力主张在网络层使用可靠传输的虚电路。
下表归纳了虚电路服务与数据报服务的主要区别:
2. 网络层的两个层面
转发表如何指明接口转发到的下一个路由器?是从路由表中导出的,而路由表有是由互联网中许多的路由器,按照共同选定的路由选择协议,通过许多次的相互交互路由信息而产生的。由此可见,在路由器之间传送的信息有以下两大类:
第一类:转发源主机和目的主机之间所传送的数据,把源主机所发送的分组,像接力赛跑那样从一个路由器转发到下一个路由器,最后把分组传送到目的主机。
第二类:传送路由信息,是根据由选择协议所使用的路由算法,彼此不断交换路由信息分组,目的是为了在路由器中创建路由表,并由此导出为转发分组而用的转发表。这一类信息的传送是为第一类数据的传送服务的。
用下图的方法来描述,把网络层抽象地划分为数据层面(转发层面)和控制层面。这里的“层面”和体系结构的“层次”相似,都是抽象概念。在一个路由器实体中,显然无法看到这种抽象层面。
数据层面,每一个路由器根据本路由器生成的转发表,把收到的分组,从查找到的对应的接口转发出去。为了加快转发的速率,现在的路由器通常都采用硬件进行转发。
控制层面则不同。一个路由器不可能独自创建出路由表。路由器必须和相邻的路由器经常交换路由信息,然后才能创建出本路由器的路由表。根据由选择协议所用的路由算法计算路由要使用软件,这就慢多了。
数据层面的问题比较单纯,以为路由器在转发分组时,是独立地根据本路由器的转发表转发分组的,但控制层面就比较复杂,因为路由器要创建路由表,必须许多路由器协同动作。不同的路由选择协议定义了不同的协同动作方式。路由器的生产厂家在制造路由器时,已经在路由器内部嵌入了路由选择的通信模块,使得路由器之间能够按照路由算法进行通信。
从互联网诞生开始,路由器就按照下图所示的模式工作。教材之前版本讲解路由器的结构时,把路由器划分为路由选择和分组转发两大部分。现在介绍网络层中控制层面和数据层面的概念,是因为最近网络提出的软件定义网络SDN,正在对这两个层面的结构进行重大的改变。下图就是SDN提出的两个层面的构成:
在传统互联网中,每一个路由器中,既有转发表也有路由选择软件。也就是说,每个路由器中,既有数据层面也有控制层面。但上图中,所有的路由器都变简单了。路由器中的路由选择软件都不存在了,因此路由器之间相互交互路由信息。在网络的控制层面有一个在逻辑上集中的远程控制器。远程控制器掌握各主机和整个网络的状态,能够为每一个分组计算出最佳的路由,然后在每一个路由器中生成其正确的转发表。路由器工作很单纯,即收到分组,查找转发表,转发分组。
网络又变为了集中控制的。其实,软件定义网络SDN的提出,并非现在要把整个互联网改造为上图所示的集中控制模式,这是不现实的。然而某些条件下,特别是一些大型的专用数据中心之间的广域网,若使用SDN模式建造,就可以使网络运行效率提高。
下面仍按照传统互联网的机制,介绍属于数据层面的协议IP。再讨论控制层面的各种路由选择协议
二、网际协议IP
网际协议IP(Internet Protocol)是TCP/IP体系中两个最主要的协议之一,也是最重要的互联网标准协议之一。网际协议IP又称为Kahn-Cerf协议。这里的IP其实是IP的第4个版本,记为IPv4。但在讲述原理时,常省略版本号。后秒有较新的IPv6版本。
与协议IP配套使用的还有三个协议:
- 地址解析协议ARP
- 网际控制报文协议ICMP
- 网际组管理协议
本来还有一个协议叫逆地址解析协议RARP,但已被淘汰。
下图画了这三个协议和网际协议IP的关系。ARP在最下面,因为IP经常要使用这个协议。ICMP和IGMP画在这一层的上部,因为它们要使用协议IP。由于网际协议IP是用来使互连起来的许多计算机网络能够进行通信的,因此TCP/IP体系中的网络层常常被称为网际层,或IP层。
1. 虚拟互连网络
没有一种单一的网络能够适应所有用户的需求。
从一般概念来讲,讲网络互相连接起来要使用一些中间设备。根据中间设备所在的层递,可以有以下四种不同的中间设备:
(1)物理层使用的中间设备叫作转发器。
(2)数据链路层使用的中间设备叫作网桥或桥接器,以及交换机。
(3)网络层使用的中间设备叫作路由器。
(4)在网络层以上使用的中间设备叫作网关。用网关连接两个不兼容的系统需要在高层进行协商的转换。
当中间设备时转发器或网桥时,仅仅是把一个网络扩大了,而从网络层的角度看,这仍然是一个网络,一般并不称之为网络互联。网关由于比较复杂,目前使用得较少。因此讨论网络互连时,都是指路由器进行网络互连和路由选择。路由器其实就是一台专用计算机,用来在互联网中进行路由选择。由于历史的原因,许多有关TCP/IP的文献曾把网络层使用的路由器称为网关。
下图a表示有许多计算机网络通过一些路由器进行互连。由于参加互连的计算机网络都是用相同的网际协议IP,因此可以把互连以后的计算机网络看成为下图b所示的一个虚拟互联网络。所谓虚拟互连网络也就是逻辑互连网络,它的意思是互连起来的各种物理网络的异构型本来是客观存在的,但是利用协议IP就可以使这些性能各异的网络在网络层上看起来好像是一个统一的网络。这种使用协议IP的虚拟互连网络可简称为IP网(IP网是虚拟的)。使用IP网的好处:当IP网上的主机进行通信时,就好像在一个单个网络上通信一样,它们看不见互连的各网络的具体异构细节(如具体的编制方案、路由选择协议等等)。如果在这种覆盖全球的IP网的上层使用TCP协议,那么就是现在的互联网。
当很多异构网络通过路由器互连起来时,如果所有的网络都使用相同的协议IP,那么在网络层讨论问题显得很方便。例如:
在下图的互联网中的源主机H1要把一个IP数据报发送给目的主机H2。根据分组转发的存储转发概念,主机H1先要查找自己的转发表,看目的主机H2是否就在本网络上。如是,则不需要经过任何路由器而是直接交付,任务就完成了。如不是,则必须把IP数据报发送给某个路由器(R1)。R1在查找了自己的转发表后,知道应当把数据报转发给R2进行间接交付。这样一直转发下去,最后由路由器R5知道自己是和H2连接在同一个网络上,不需要再使用别的路由器转发了,于是就把数据报直接交付目的主机H2。
主机的协议栈共有五层,但路由器的协议栈只有下三层。图中画了数据在各协议栈的流动方向。其中R4和R5使用了卫星链路,而R5所连接的是个无线局域网。在R1和R4之间的三个网络则可以是任意类型的网络。总之,互联网可以由多种异构网络互连组成。
可以想象IP数据报就在网络层中传送,传输路径可省略路由器之间的网络以及连接在这些网络上的许多无关主机。下图表示了这样的传输路径:
在互联网词汇中,分组在传送途中的每一次转发都称为一“跳(hop)”。也有把hop译为跃点。路由器在转发分组时也常常使用“下一跳”的说法。例如,R1的下一跳是R2。本例中,H1向H2发送分组需要经过6跳。每一跳两端的两个节点都必须直接连接在同一个网络上。上例中,前5跳都是间接交付(经过路由器),只有第5跳是直接交付(不经过路由器)。
2. IP地址
1. IP地址及其表示方法
整个互联网就是一个单一的、抽象的网络。IP地址就是给连接到互联网上的每一台主机(或路由器)的每一个接口,分配一个在全世界范围内是唯一的32位的标识符。IP地址结构使我们可以在互联网上很方便地进行寻址。IP地址现在由互联网名字和数字分配机构ICANN进行分配。
对主机或路由器来说,IP地址都是32位地二进制代码。为了提高可读性,常常把32位地IP地址中间的每隔8位插入一个空格(但在机器中没有这样的空格)。为了便于书写和记忆,常用其等效的十进制数字表示,并且在每段数字之间加上一个小数点。这就叫作点分十进制记法。下图是一个IP地址表示方法的例子。
给每个主机的接口分配一个IP地址,含义就是这个IP地址不但标志了这个主机(或路由器),而且还标志了此接口所连接的网络。
因此,32位的IP地址采用两级结构,由两个字段组成。第一个字段是网络号,它标志主机(或路由器)所连接到的网络。一个网络号在整个互联网范围必须是唯一的。第二个字段是主机号,它标志该主机(路由器)。一个主机号在所连接的网络(即前面的网络号所指明的网络)中必须是唯一的。由此可见,一个IP地址在整个互联网范围内是唯一的。
IP地址可记为:
上式中的符号“::=”表示“定义为”。IP地址中包含网络号就表明,不连网的主机就没有IP地址。IP地址指明了连接到某个网络上的一个主机(或路由器)。
下图表示IP地址中的网络号和主机号的位置。具体的规定是:IP地址中的前n位是主机所连接的网络号,而IP地址中后面的(32-n)位是主机号。现在问题是,看到一个IP地址时,怎样知道它的网络号的位数n是多少?下面讨论。
2. 分类的IP地址
互联网早期采用的是分类的IP地址,如上图,n是固定的几个数之一。分类的方法如下图a所示。分类的方法很简单。这里A类(n=8)、B类(n=16)和C类(n=24)地址都是单播地址(一对一通信),是最常用的。D类是多播地址(一对多通信),而E类是保留地址。
32位的IP地址空间共有(近43亿)个地址。A类地址空间共有
个地址,占整个IP地址空间的50%。B类地址空间共有
个地址,占整个IP地址空间的25%。整个C类地址空间共有
个地址,占整个IP地址的12.5%。D类和E类地址各占整个IP地址的6.25%。
下图a可看出,如果给出一个二进制数表示的IP单播地址,就可以很容易知道是哪类地址,且能看出这个二进制数表示的网络号和主机号。
A类地址的网络号字段占1个字节,只有7位供使用(第一位固定为0)。注意,第一,网络号为全0的IP地址有特殊用途,它表示“本网络”;第二,网络号为127(即01111111)保留作为本地软件回环测试本主机的进程之间的通信之用。若主机发送一个目的地址为环回地址(例如127.0.0.1)的IP数据报,则本主机中的协议软件就处理数据包中的数据,而不会吧数据报发送到任何网络。因此A类地址可指派的网络号是126个(即-2).
A类地址的主机号占3个字节。但全0和全1的主机号一般不指派。全0的主机号表示该IP地址是“本主机”所连接到的单个网络地址(例如,如果IP地址是5.6.7.8,则网络地址是5.0.0.0)。全1表示“所有的”,因此全1的主机号字段表示该网络上的所有主机。因此每一个A类网络中的最大主机数是-2,即16777214.
B类地址的网络号字段有2个字节。因此B类地址可指派的网络数为,即16384。B类地址的每一个网络上的最大主机数是
-2,即65534。这里需要减2是因为要扣除全0和全1主机号。
C类地址有3个字节的网络号字段。因此C类地址可指派的网络总数是,即2097152。每一个C类地址的最大主机数是
-2,即254.
之前的B类地址中的网络地址128.0.0.0和C类地址中的网络地址192.0.0.0都是规定不指派的。但现在这两个网络地址都已经可以指派了[RFC 6890].
下标给出了一般不指派的特殊IP地址,这些地址只有在特定情况下采用:
近年来已经广泛使用无分类IP地址进行路由选择,A类、B类和C类这种分类地址已成为历史[RFC 1812]。
把IP地址分为A、B、C类,当时是这样考虑的:各种网络的差异很大,有的网络拥有很多主机,而有的网络上的主机很少。把IP地址划分为A、B、C类是为了满足不同用户的需求。
这种分类的IP地址由于网络号的位数是固定的,因此管理简单方便,可满足当时互联网在美国的科研需求。但后来,为了更加灵活使用IP地址,出现了划分子网的方法,在IP地址的主机号中,插入一个子网号,把两级的IP地址变为三级的IP地址。但是,没想到互联网迅速发展,互联网用户数猛增,使IP地址数量面临枯竭的危险。
后来,一种新的无分类编址方法问世了。这种方法虽然无法解决了IP地址枯竭的问题,但可以推迟IP地址用尽的日子。
3. 无分类编制CIDR
这种编制方法的全名是无分类域间路由选择CIDR(Classless Inter-Domain Routing),其要点有三个:
(1)网络前缀
CIDR把4-9图的网络号改称为“网络前缀(或简称前缀)”,用来指明网络,剩下的后面部分仍然是主机号,用来指明主机。在一些文献中也把主机号字段称为后缀。CIDR的记法是:
下图说明了CIDR的网络前缀和主机号的位置。看起来,和图4-9没有什么不同。但其实,最大的区别就是网络前缀的位数n不是固定的数,而是可以在0~32之间选取任意的值。
CIDR使用“斜线记法”,或称为CIDR记法,即在IP地址后面加上斜线“/”,斜线后面是网络前缀所占的位数。例如,CIDR表示的一个IP地址128.14.35.7/20,二进制IP地址的前20位是网络前缀,剩下后面12位是主机号。
(2)地址块
CIDR把网络前缀都相同的所有连续的IP地址组成一个"CIDR地址块“。一个CIDR地址块包含的IP地址数目,取决于网络前缀的位数。只要知道CIDER地址块中的任何一个地址,就可以知道这个地址块的起始地址(最小地址)和最大地址,以及地址块中的地址数。例,已知IP地址128.14.35.7/20是某CIDR地址块中的一个地址,把它写成二进制表示形式,其中的前20位是网络前缀(粗体),前缀后面的12位是主机号:
可很方便知道这个地址所在地址块中的最小地址和最大地址:
常使用地址块中的最小地址和网络前缀的位数指明一个地址块(不必每次减2算出可指派的地址数)。显然,上面导出的最小地址并不是该地址块128.14.32.0/20的网络地址。
也可以用二进制代码简要地表示此地址块:10000000 00001110 0010*。这里的星号*代表了主机号字段的所有的0。星号前的二进制代码的个数,就是网络前缀的位数。
在不需要指明网络地址时,也可把这样的地址简称为”/20地址块“。
注意:
128.14.32.7是IP地址,但未指明网络前缀长度,因此不知道网络地址是什么。
128.14.32.7/20也是IP地址,但指明了网络前缀为20位,可导出网络地址。
128.14.32.0/20是包含多个IP地址的地址块或网络前缀(前缀),同时也是这个地址块中的主机号为全0的地址。注意,上面地址块中4段十进制数字最后的0有时可以省略,可简写为128.14.32/20
早期分类的IP地址,前缀是固定值,所以指明网络前缀。
(3)地址掩码
CIDR使用斜线可知道网络前缀的数值,但计算机看不见斜线记法,而是使用二进制来进行各种计算就必须使用32位的地址掩码,能够从IP地址迅速算出网络地址。
地址掩码(简称掩码)由一串1和接着的一连串0组成,而1的个数就是网络前缀的长度。地址掩码又称为子网掩码。在CIDR记法中,斜线后面的数字就是地址掩码中1的个数。例如,/20地址块的地址掩码是:11111111 11111111 11110000 00000000(20个连续的1,接着12个连续的0)。这个掩码的CIDR记法表示就是255.255.240.0/20
早期使用分类的IP地址,其地址掩码是固定的,常常不用专门指出。例如:
A类网络,地址掩码为255.0.0.0或2555.0.0.0/8
B类网络,地址掩码为255.255.0.0或255.255.0.0/16
C类网络,地址掩码为255.255.255.0或255.255.255.0/24
把二进制的IP地址和地址掩码进行按位AND运算,即可得出网络地址。下图说明了AND运算的过程。AND运算就是逻辑乘法运算,规则是:1 AND 1 = 1,1 AND 0 = 0,0 AND 0 = 0。点分十进制的IP地址是128.14.35.7/20,前缀长度是20(图中灰色背景)。注意,从点分十进制的IP地址并不容易看出网络地址。要使用二进制地址来运算。本例中把二进制IP地址的前20位保留不变,剩下12位全写为0,即可得出网络地址。
上例可知:IP地址128.14.35.7/20所在的网络地址是128.14.32.0/20
下表给出了最常用的CIDR地址块。K表示即1024。网络前缀长度在13到27之间是最常用的。在”包含的地址数“中把全1和全0的主机号都计算在内了。
CIDR地址块中还有三个特殊地址块:
(1)前缀n=32,即32位IP地址都是前缀,没有主机号。这其实就是一个IP地址。这个特殊地址用于主机路由。
(2)前缀n=31,这个地址块中只有两个IP地址,其主机号分别为0和1。这个地址块用于点对点链路。
(3)前缀n=0同时IP地址也全是0,即0.0.0.0/0。这用于默认路由。
上表可看出,每一个CIDR地址块中的地址数一定是2的整数次幂。除最后几行外,CIDR地址块都包含了多个C类地址,在文献中有时称CIDR编址为”构造超网“。
使用CIDR的一个好处是,可以更加有效地分配IP地址空间,可根据需求分配适当大小的CIDR地址块。然而在使用分类地址时,向一个部门分配IP地址,就只能以/8,/16或/24为单位来分配。这显然是不灵活的。
一个大的CIDR地址块中往往包含很多小地址块,所以在路由器的转发表中就利用较大的一个CIDR地址块来代替许多较小的地址块。这种方法称为路由聚合,它使得转发表中只用一个项目就可以表示原来传统分类地址的很多个路由项目,因而大大压缩了转发表所占的空间,减少了查找转发表所需的时间。
下图表示这个ISP共拥有64个C类网络。如果不采用CIDR技术,则在与该ISP的路由器交换路由信息的每一个路由器的转发表中,就需要有64行,每一行指出了到哪一个网络的下一跳。采用地址聚合后,在转发表中只需要用一行来指出到206.0.64.0/18地址块的下一跳。这个大学共有四个系。在ISP内的路由器的转发表中,也仅需用206.0.68.0/22这一个项目,就能把外部发送到这个大学各系的所有分组,都转发到大学的路由器。这个路由器好比大学的收发室。凡寄给大学的任何一个系的邮件,邮递员都不必送到大学的各个系,而是把这些邮件集中投递到大学的收发室,然后由大学的收发室在进行下一步的分发。这样,就加快了邮递员的工作时间(缩短了转发表的查找时间)。
下图表格可看出,网络前缀越短的地址所包含的地址数就越多。
4. IP地址的特点
(1)每一个IP地址都由网络前缀和主机号两部分组成。从这个意义上说,IP地址是一种分等级的地址结构。分两个等级的好处是:(1)IP地址管理机构在分配IP地址时只分配网络前缀(第一级),剩下的主机号(第二级)则由得到该网络前缀的单位自行分配。(2)路由器根据目的主机所连接的网络前缀(即地址块)来转发分组(不考虑目的主机),就可以使转发表中的项目数大幅度减少,从而减少转发表所占的存储空间,缩短查找转发表的时间。
(2)实际上IP地址是标志一台主机(或路由器)和一条链路的接口。当一台主机同时连接到两个网络上时,该主机就必须同时具有两个相应的IP地址,其网络前缀必须是不同的。这种主机称为多归属主机。由于一个路由器至少应当连接到两个网络,因此一个路由器至少应当有两个不同的IP地址。
(3)按照互联网的观点,一个网络(或子网)是指具有相同网络前缀的主机的集合,因此,用转发器或交换机连接起来的若干个局域网仍为一个网络,因为这些局域网都具有相同的网络前缀。具有不同网络前缀的局域网必须使用路由器进行互连。
(4)在IP地址中,所有分配到网络前缀的网络都是平等的(平等对待每一个IP地址)。
下图是三个局域网(LAN1,LAN2,LAN3)通过三个路由器(R1,R2,R3)互连构成的一个互连网络。其中局域网LAN2是由两个网段通过以太网交换机互连的。图中的小圆圈表示需要有一个IP地址。IP地址是标志一个主机连接在网络上的接口。如果把某条连接线断开,那么相应的IP地址也就不存在了。
- 在同一个局域网上的主机或路由器的IP地址中的网络前缀必须是相同的(相同网络号)。
- 图中的网络地址(粗体下划线)里面的主机号必定全是0.
- 图中所有设备都有自己的MAC地址。图中以太网交换机连线上画出的小圆圈,是主机或路由器的IP地址,并不是以太网交换机的IP地址。以太网交换机是链路层设备,只有MAC地址。
- 用以太网交换机(只在链路层工作)连接的几个网段合起来仍然是一个局域网,只使用同样的网络前缀,例如LAN2。
- 路由器总是具有两个或两个以上的IP地址。即路由器每个接口的IP地址的网络前缀都不同。
- 当两个路由器直接相连时,在连接两端的接口处,可以分配也可以不分配IP地址。如分配了IP地址,则这一段连线就构成了一种只包含一段线路的特殊“网络”(如图中的N1,N2,N3)。之所以叫作“网络”,是因为它有IP地址。这种网络仅需要两个IP地址,因此这里使用了/31地址块。这种地址块专门为点对点链路的两端使用[RFC 3021],主机号只有一位(0或1)。为了节省IP地址资源,对于点对点链路构成的特殊“网络”,常常不分配IP地址。通常把这样的网络叫作无编号网络或匿名网络。
3. IP地址与MAC地址
局域网中,由于MAC地址已固化在网卡上的ROM中,因此常常将MAC地址称为硬件地址或物理地址。
下图说明了两个地址的区别。从层次角度看,MAC地址是数据链路层使用的地址,而IP地址是网络层和以上各层使用的地址,是一种逻辑地址(IP地址使用软件实现的)。
从发送数据时,数据从高层下到低层,然后才到通信链路上传输。使用IP地址的IP数据报一旦交给数据链路层,就被封装成MAC帧。MAC帧在传送时使用的源地址和目的地址都是MAC地址,这两个MAC地址都写在MAC帧的首部中。
连接在通信链路上的设备(主机/路由器)在收到MAC帧时,根据MAC帧首部中的MAC地址决定收下或丢弃。只有在剥去MAC帧的首部和尾部后把MAC层的数据上交给网络层后,网络层才能在IP数据报的首部中找到源IP地址和目的IP地址。
总之,IP地址放在IP数据报的首部,而MAC地址放在MAC帧的首部。在网络层和网络层以上使用的是IP地址,而数据链路层及以下使用的是MAC地址。上图中,当IP数据报插入到数据链路层的MAC帧以后,整个的IP数据报就成为MAC帧的数据,因而数据链路层看不见数据报的IP地址。
下图a画的是三个局域网用两个路由器R1和R2互连起来。现在主机H1要和主机H2通信。这两台主机的IP地址分别是IP1和IP2,而它们的MAC地址分别是MAC1和MAC2。通信路径是:H1->经过R1转发->在经过R2转发->H2。路由器R1因同时连接到两个局域网上,因此它有两个MAC地址,即MAC3和MAC4。同理,路由器R2也有两个MAC地址MAC5和MAC6。
图b特别强调了IP地址与MAC地址所使用的位置的不同。下标归纳了这种区别。
(1)在IP层抽象的互联网上只能看到IP数据报。虽然IP数据报要经过路由器R1和R2的两次转发,但在它的首部中的源地址和目的地址始终分别是IP1和IP2。数据报中间经过的两个路由器的IP地址并不出现在IP数据报的首部中。
(2)虽然在IP数据包首部有源站IP地址,但路由器只根据目的站的IP地址进行转发。
(3)在局域网的链路层,只能看见MAC帧。IP数据报被封装在MAC帧中。MAC帧在不同网络上传送时,其MAC帧首部中的源地址和目的地址要发生变化,如上图b。上面的IP层看不见这种MAC地址变化。
(4)尽管互连在一起的网络的MAC地址体系各不相同,但IP层抽象的互联网却屏蔽了下层这些很复杂的细节。只要在网络层上讨论问题,就能够使用统一的、抽象的IP地址研究主机和主机或路由器之间的通信。
问题:
(1)主机或路由器怎样知道应当在MAC帧的首部填入什么样的MAC地址?
(2)路由器中的转发表是怎样得出的?
4. 地址解析协议ARP
问题:已经知道了一个机器(主机/路由器)的IP地址,需要找出其相应的MAC地址。地址解析协议ARP就是用来解决这样的问题。下图说明了协议ARP的作用。
有一个旧的逆地址解析协议RARP,作用是使只知道自己MAC地址的主机能够通过该协议找出其IP地址。现在DHCP协议已经包含了该协议的功能。
网络层使用的是IP地址,但在链路上传送数据帧时,必须使用链路层的MAC地址。IP地址和下面的链路层的MAC地址之间由于格式不同而不存在简单的映射关系(IP地址32位,MAC地址48位)。在一个网络上可能经常加入新主机,或撤走一些主机。地址解析协议ARP的方法是,在主机的ARP高速缓存中存放一个从IP地址到MAC地址的映射表,并且这个映射表还经常动态更新。
每一台主机都设有一个ARP高速缓存(