一.网络层概述
1.1分组转发和路由选择
网络层的主要任务就是将分组从源主机经过多个网络和多段链路传输到目的主机,可以将该任务划分为分组转发和路由选择两种重要的功能。
如图所示:这些异构型网络如果只是需要各自内部通信,那它们只需要实现各自的物理层和数据链路层即可,但是,如果需要将这些异构型网络互连起来,形成一个更大的互联网,就需要使用网络互连设备路由器。假设主机 A 是网络 N1 中的主机,主机 B是网络 N3 中的主机。
为了简单起见,有时我们可以不用画出这些网络,而将它们看作是一条链路即可。假设主机 A 给主机 B 发送分组,路由器 R1 收到后对其进行转发,从该网络拓扑可以看出,R1 可将该分组从自己的接口 2 转发,也可将该分组从自己的接口 3 转发。
R1如何知道应从自己的哪个接口转发分组?
答案是转发表,路由器在自己的转发表中查找该分组的目的地址,以便对其按照查表结果进行转发。
那么转发表又是如何得来的呢?
答案是路由表,那么路由表又是如何得来的呢?路由表是由路由器的路由选择处理机执行路由选择协议,并与其他相关路由器交换路由信息后得来的,如果网络拓扑比较简单,也可通过在路由器命令行输入命令的方式,对路由表进行静态配置。
注意,路由表需要对网络拓扑变化的计算最优化,而转发表是从路由表得出的,转发表的结构应当使查找过程最优化。为了简单起见,这里在讨论路由选择的原理时,并不严格区分路由表和转发表,而是以路由表来表述问题
1.2网络层向其上层提供的两种服务
1.2.1面向连接的虚电路服务
1.2.2无连接的数据报服务
对比
二.网际协议IP
这是四层 TCP/IP 体系结构,网络接口层支持各种网络接口,网际协议 IP 是 TCP/IP 体系结构网际层中的核心协议,网际协议 IP 可以互连各种不同的网络接口,TCP 和 UDP 是运输层中的两个重要协议,TCP 为应用层中的某些协议提供可靠传输服务,而 UDP 为应用层中的某些协议提供不可靠传输服务,TCP 和 UDP 都是用网际协议 IP 提供的不可靠传输服务。
由于网际协议 IP 是 TCP/IP 体系结构网络层中的核心协议,因此 TCP/IP 体系结构的网络层,常被称为网际层或 IP 层。
在网际层中与 IP 协议配套使用的还有四个协议,分别是
- 网际控制报文协议 ICMP
- 网际组管理协议 IGMP
- 逆地址解析协议 RARP(已淘汰)
- 地址解析协议 ARP
在网际层中,RARP 和 ARP 画在 IP 下面,这时因为 IP 协议经常要使用这两个协议。RARP 现在已被淘汰不使用了。
ICMP 和 IGMP画在 IP 的上面,因为它们要使用 IP 协议。
2.1异构网络互连
2.1.1需要解决的问题
2.1.2IP网
2.2IPv4地址及其编址方法
2.2.1IPv4地址概述
IPv4地址是给因特网上的每一个主机(或路由器)的每一个接口分配的一个在全世界范围内唯一的32比特的标识符。
IPv4地址的编址方法经历了三个历史阶段:
2.2.2IPv4地址的表示方法
由于IPv4地址由32比特构成,不方便阅读、记录以及输入等,因此IPv4地址采用点分十进制表示方法以方便用户使用。
2.2.3分类编址方法
两级结构的IPv4地址:网络标识(网络地址)+主机标识(主机地址)
分类编址方法把 IPv4地址分为A~E五类:
注意:
- A类、B类和C类地址都是单播地址,只有单播地址可以分配给网络中的主机(或路由器)的各接口。
- 主机号为“全0”的地址是网络地址,不能分配给主机(或路由器)的各接口。
- 主机号为“全1”的地址是广播地址,不能分配给主机(或路由器)的各接口。
网络地址和广播地址
- 网络地址是一个 IP 地址的一部分,它用于标识一个特定的网络。IP 地址通常分为网络地址和主机地址两部分,其中网络地址用于确定数据包应该发送到哪个网络,而主机地址用于标识网络中的具体主机或设备。网络地址的长度通常由 IP 地址的子网掩码决定。子网掩码中的“1”表示网络地址的位,而“0”表示主机地址的位。通过对 IP 地址和子网掩码进行逻辑与运算,可以提取网络地址。网络地址用于路由数据包,确保它们在网络中正确传递到目标网络。
- 广播地址是用于将数据包发送到同一网络中的所有主机或设备的特殊 IP 地址。它是一个特殊的 IP 地址,通常设置为目标网络的网络地址,但主机地址部分全部为二进制 1。因此,广播地址将数据包发送到了目标网络上的所有设备,而不需要明确知道每个设备的 IP 地址。广播通常用于一些特定的网络通信需求,如 DHCP(动态主机配置协议)请求,ARP(地址解析协议)请求等。
2.2.3.1A类地址
2.2.3.2B类地址
注意: 有些教材中指出128.0是保留网络号,B类第一个可指派的网络号为128.1。但根据2002年9月发表的RFC 3330文档,128.0网络号已经可以分配了。
2.2.3.3C类地址
注意: 有些教材中指出192.0.0是保留网络号,C类第一个可指派的网络号为192.0.1。但根据2002年9月发表的RFC 3330文档,192.0.0网络号已经可以分配了。只不过目前还没有分配出去。
2.2.3.4各类地址范围
- 根据地址左起第一个十进制数的值,可以判断出网络类别:
- 小于127的为A类
- 128~191的为B类
- 192~223的为C类
- 根据网络类别,就可找出地址中的网络号部分和主机号部分:
- A类地址网络号为左起第一个字节;
- B类地址网络号为左起前两个字节;
- C类地址网络号为左起前三个字节)
- 以下三种情况的地址不能指派给主机或路由器接口:
- A类网络号为 0 和 127
- 主机号为 “全0” ,这是网络地址
- 主机号为 “全1” ,这是广播地址
2.2.3.5一般不使用的特殊IPv4地址
2.2.3.6分类编址方法的缺点
注意:在第二步计算各网络中的主机和路由器的接口总数量时需特别留意加上路由器的接口数
- 首先应该找出图中都有哪些网络。左边两个网络,右边三台交换机在一起也组成了一个网络,不要忘记,两台路由器通过一段链路直连,它们的直连接口也属于同一个网络
- 之后,可以根据各网络中主机和路由器接口总数量来决定各网络分配哪个类别的网络号。
- 左上角的网络的主机数量为 655334,加上一个路由器接口,需要可分配的 IP 地址数量为65535,只能该网络分配一个 A 类网络号;
- 左下角的网络的主机数量为 254,加上一个路由器接口,需要可分配的 IP 地址数量为 255,可以给网络分配一个 A 类或 B 类网络号,本着节约IP 地址的原则,给该网络分配一个 B 类网络号;
- 右边网络的主机数量为 40,再加上一个路由器接口,需要可分配的 IP 地址数量为 41,给该网络分配一个 A 类,B 类或 C 类网络号都可以,本着节约 IP 地址的原则,给该网络分配一个 C 类网络号;
- 中间连接的网络没有主机,只有两个路由器接口,需要可分配的 IP 地址数量为 2,给该网络分配一个 A 类,B 类或 C 类网络号都可以,本着节约 IP 地址的原则,给该网络分配一个 C 类网络号;
- 依据网络号的类别,为每一个网络挑选一个网络号,A 类网络号的取值范围是 1-126,可在该范围内挑选一个网络号分配给相应网络;B 类网络号的取值范围是 128.0-191.255,可在该范围内挑选一个网络号分配给相应网络,C 类网络号的取值范围是 192.0.0~223.255.255,可在该范围内挑选两个网络号分配给相应网络,不同网络的网络号不能相同,网络号分配完毕后就可给各主机和路由器的各接口分配 IP 地址了。
需要注意的是,所分配的 IP 地址应该互不相同,并且其主机号部分不能出现“全 0”,因为这是网络地址,也不能出现“全 1”,因为这是广播地址,网络地址或广播地址都不能分配给主机或路由器的各接口,因为它们无法唯一标识一台主机或路由器的某个接口。
随着更多的中小网络加入因特网,IPv4分类编址方法不够灵活、容易造成大量IPv4地址资源浪费的缺点就暴露出来了。
如图所示,某单位有一个大型的局域网需要连接到因特网,如果申请一个 C 类网络地址,其可分配的 IP 地址数量只有 254 个,不够使用,因此该单位申请了一个 B 类网络地址,其可分配的 IP 地址数量达到了 65534 个,给每台计算机和路由器的接口分配一个 IP 地址后,还有大量的 IP 地址剩余,这些剩余的 IP 地址只能由该单位的同一个网络使用,而其他单位的网络不能使用。
随着该单位计算机网络的发展和建设,该单位又新增了一些计算机,并且需要将原来的网络划分成三个独立的网络,我们称其为子网 1,子网 2 和子网 3。假设子网 1 仍然使用原先申请到的 B 类网络地址,那么就需要为子网 2 和子网 3 各自申请一个网络地址,但这样会产生一些弊端:申请新的网络地址需要等待很长的时间并且要花费更多的费用;即便申请到了两个网络地址,这也会使其他路由器的路由表新增针对这两个新的网络的路由记录;另外,这样还会浪费原有网络中剩余的大量 IP 地址。
2.2.4划分子网编址方法
IPV4 地址编址方法的第二个历史阶段,也就是划分子网的 IPV4 地址。
如果可以从 IP 地址的主机号部分借用一些位为子网号来区分不同的子网,就可以利用原有网络中剩余的大量 IP 地址,而不用申请新的网络地址。
例如,对于本例,我们可以借用 16 位主机号中的 8 位作为子网号,假设我们给子网 1 分配的子网号为 0,给子网 2 分配的子网号为 1,给子网 3 分配的子网号为 2,之后,就可以给各自子网中的主机和路由器接口分配 IP 地址了。
如果未在图中标记子网号部分,那么我们或计算机又如何知道在分类地址中,主机号有多少比特被借用作为子网号了呢?这样我们就引出了一个划分子网的工具,他就是子网掩码。
2.2.4.1子网掩码
子网掩码可以表明分类IPv4地址的主机号部分被借用了几个比特作为子网号。
与IPv4地址类似,子网掩码也是由32比特构成的。
- 用左起多个连续的比特1对应IPv4地址中的网络号和子网号
- 之后的多个连续的比特0对应IPv4地址中的主机号
将划分子网的IPv4地址与相应的子网掩码进行逐比特的逻辑与运算,就可得到该IPv4地址所在子网的网络地址(主机号全为0)。这样,网络号和子网号被保留,而主机号被清零 ,结果为 IP 地址所在子网的网络地址。
2.2.4.2根据IP地址和子网掩码得出子网划分细节
只要给定了一个分类的IPv4地址及其相应的子网掩码,就可以得出子网划分的全部细节。
分析
- 题目给定网络地址为 218.75.230.0,从它的左起第一个十进制数可知,这是一个 C 类网络地址,因此网络号占三个字节,主机号占一个字节。
- 我们把主机号转为8比特表示,从左起有 1个 连续的1,表示从主机号借用1个 比特作为子网号。
划分细节
218.75.230.0 是该网络上的第一个地址,由于这是一个 C 类网地址,因此网络号占 3 个字节,主机号占 1 个字节,将网络号保持不变,而主机号取最大值 255,这就是该网络上的最后一个地址。该 C 类网共有256 个地址,其中第一个地址作为该网络的网络地址也就是主机号“全 0”的地址。最后一个地址作为该网络的广播地址,也就是主机号“全 1”的地址。
之前分析过题目所给的子网掩码表明从主机号部分借用 1 比特作为子网号,也就是将该 C 类网均分为两个子网。我们将主机号写成 8比特的形式,从主机号借用 1 个比特作为子网号,子网号只能是 0 或 1。使用子网掩码255.255.255.128 可将 C 类网 218.75.230.0 均分为两个子网。
练习
2.2.4.3默认子网掩码
默认子网掩码是指在未划分子网的情况下使用的子网掩码。
2.2.5无分类编制方法(CIDR)
2.2.5.1诞生背景
重新回到两级结构的IPv4地址:网络标识(网络地址)+主机标识(主机地址)
2.2.5.2地址掩码
与子网掩码类似,用左起多个连续的比特1对应IPv4地址中的网络前缀,之后的多个连续的比特0对应IPv4地址中的主机号。
2.2.5.3CIDR的斜线记法
为了简便起见,可以不明确给出配套的地址掩码的点分十进制形式,而是在无分类编址的IPv4地址后面加上斜线“/”,在斜线之后写上网络前缀所占的比特数量(也就是地址掩码中左起连续比特1的数量),这种记法称为斜线记法。
2.2.5.4CIDR地址块
无分类域间路由选择CIDR是将网络前缀都相同的、连续的多个无分类IPv4地址,组成一个CIDR地址块,只要知道CIDR地址块中的任何一个地址,就可以知道该地址块的以下全部细节:
- 地址块中的最小地址
- 地址块中的最大地址
- 地址块中的地址数量
- 地址块中聚合某类网络(A类、B类、C类)的数量
- 地址掩码
2.2.5.5使用CIDR地址块有效地分配IPv4地址空间
使用无分类编址方法,可以根据客户的需要分配适当大小的CIDR地址块,因此可以更加有效地分配IPv4的地址空间。
2.2.5.6路由聚合
使用无分类编址方法的另一个好处是路由聚合(也称为构造超网)。
如图所示:路由器 R1 与 5 个网络以及路由器 R2 直接相连。路由器 R1 和 R2 互为相邻路由器,它们周期性地通告自己所知道的路由信息给对方。R1 应该怎样地将路由信息通告给 R2 呢?
如果 R1 将自己直连的这五个网络的路由记录都通告给 R2,则 R2 的路由表会增加 5 条路由记录。为了减少路由记录对路由表的占用,能否将这 5 条记录聚合成 1 条呢?
答案是肯定的,其方法是“找共同前缀”,也就是找出这 5 个目的网络地址的共同前缀。这 5 个目的网络地址的左起前两个字节都是相同的,从第三个字节开始不同,因此,只需将第三个字节转换成二进制形式,这样就可以很容易找出这 5 个目的网络地址的共同前缀,共 22 个比特,我们将其记为“/22”。将共同前缀保持不变,而剩余的 10 个比特全部取 0,然后写成点分十进制形式,放在“/22”前面。这就是聚会后的地址块,也可以称为超网。
注意:这里求的是主机数,需要减去网络地址和广播地址
2.3IPv4地址的应用规划
IPv4地址的应用规划是指将给定的IPv4地址块(或分类网络)划分成若干个更小的地址块(或子网),并将这些地址块(或子网)分配给互联网中的不同网络,进而可以给各网络中的主机和路由器的接口分配IPv4地址。
2.3.1定长子网掩码(FLSM)和变长子网掩码(VLSM)
2.3.2采用定长的子网掩码(FLSM)进行子网划分
①需求分析
②根据需求分析找出一个 用于子网划分的子网掩码
用三个十进制数 255 来对应网络号部分,也就是用 24 个连续的比特 1 来对应网络号,而最后 8 个比特为 11100000,其中 3 个连续的比特 1 表示从主机号部分借用 3 个比特作为子网号,将这 8 个比特写为十进制数为 224。
③根据网络地址和子网掩码 得出子网划分细节
④子网分配
现在我们就可以从子网 1-8 中任选 5 个分配给图中的网络 1~5,通过本例可以看出,采用定长的子网掩码进行子网划分,只能划出 2^n 个子网,其中 n 是从主机号部分借用的用来作为子网号的比特数量,每个子网所分配的 IP 地址数量相同,容易造成 IP 地址的浪费,例如图中的网络 5 只需要 4 个 IP 地址,但是我们只能给它分配 32 个 IP 地址,这样就造成了 IP 地址的严重浪费。
2.3.3采用变长的子网掩码(VLSM)进行子网划分
①需求分析
②根据需求分析找出用于各子网的地址块前缀
- 既然网络 1 需要 9 个地址,那么分配给网络 1 的地址的主机号应为 4 个比特,因为 2^4 等于 16,这样网络 1 就可有 16 个地址,由于使用 4 个比特作为主机号,因此剩余 28 个比特可作为网络前缀;
- 既然网络 2 需要 28 个地址,那么分配给网络 2 的地址的主机号应为 5 个比特,因为 2^5 等于 32,这样网络 2 就可有 32 个地址,由于使用 5 个比特作为主机号,因此剩余 27 个比特可作为网络前缀。
③从给定地址块中为各子网选择子块
注意理解网络地址的含义
2.4 IPv4地址与MAC地址
2.4.1 MAC地址、IP地址概述
2.4.2 IPv4地址与MAC地址的封装位置
如图所示,这是 TCP/IP 的四层体系结构,这是某个应用层协议封装的应用层报文,也称为应用层协议数据单元。
- 应用层将其向下交付给运输层,运输层也看不懂,也无需看懂应用层报文的结构和内容,因此我们将其用黑色表示。运输层的相应协议,仅仅为其添加一个运输层首部,使之称为运输层协议数据单元,并将其向下交付给网际层。
- 网际层看不懂也无需看懂运输层协议数据单元的结构和内容,因此我们将其用黑色表示。网际层的 IP 协议仅仅为其添加一个 IP 首部,使之成为网际层协议数据单元,也就是 IP 数据报,并将其向下交付给数据链路层。
- 数据链路层看不懂也无需看懂网际层协议数据单位的结构和内容,因此我们将其用黑色表示,数据链路层的相应协议,仅仅为其添加一个首部和一个尾部,使之成为数据链路层协议数据单元,也就是封装成帧,并将其向下交付给物理层。
- 物理层看不懂也无需看懂数据链路层协议数据单元的结构和内容,仅仅将它们看作是比特流,以便将它们转换为相应的电信号,发送到传输媒体。由于 IP 地址属于 TCP/IP 体系结构中网际层的范畴,因此,在 IP 首部中应该封装有源 IP 地址和目的 IP 地址,相应的,由于 MAC 地址属于数据链路层的范畴,因此,在帧首部中应该封装有源 MAC 地址和目的 MAC 地址。
2.4.3 数据包传送过程中IPv4地址与MAC地址的变化情况
如图所示,这是三个局域网通过两个路由器互传起来的小型互联网,假设主机 H1 给 H2 发送一个分组,该分组需要依次经过路由器 R1 和 R2 的转发才能最终到达 H2,我们从网络体系结构的角度,来看看数据包在传送过程中,IP 地址与 MAC 地址的变化情况,我们所关注的重点是网际层在封装IP 数据报时,源 IP 地址和目的 IP 地址应该填写什么,数据链路层在封装帧时,源 MAC 地址和目的 MAC 地址应该填写什么。因此,我们忽略网络体系结构中除网际层和数据链路层外的其他各层,各网际层进行水平方向的逻辑通信,各数据链路层进行水平方向的逻辑通信。
不难发现:
- 在数据包的传送过程中,数据包的源IP地址和目的IP地址保持不变;
- 在数据包的传送过程中,数据包的源MAC地址和目的MAC地址逐链路(或逐网络)改变。
2.4.4 IPv4地址与MAC地址的关系
如果仅使用MAC地址进行通信,则会出现以下主要问题:
- 因特网中的每台路由器的路由表中就必须记录因特网上所有主机和路由器各接口的MAC地址。
- 手工给各路由器配置路由表几乎是不可能完成的任务,即使使用路由协议让路由器通过相互交换路由信息来自动构建路由表,也会因为路由信息需要包含海量的MAC地址信息而严重占用通信资源。
- 包含海量MAC地址的路由信息需要路由器具备极大的存储空间,并且会给分组的查表转发带来非常大的时延。
而因特网的网际层使用IP地址进行寻址,就可使因特网中各路由器的路由表中的路由记录的数量大大减少,因为只需记录部分网络的网络地址,而不是记录每个网络中各通信设备的各接口的MAC地址。
- 路由器收到IP数据报后,根据其首部中的目的IP地址的网络号部分,基于自己的路由表进行查表转发。
- 查表转发的结果可以指明IP数据报的下一跳路由器的IP地址,但无法指明该IP地址所对应的MAC地址。因此,在数据链路层封装该IP数据报成为帧时,帧首部中的目的MAC地址字段就无法填写,该问题需要使用网际层中的地址解析协议ARP来解决。
2.5地址解析协议ARP
2.5.1ARP高速缓存表
这是一个小型交换式以太网,为了简单起见,我们仅画出了该网络中的三台主机,这是它们各自所配置的 IP 地址,和其网卡上固化的 MAC 地址。假设主机 A 要给主机 B 发送一个分组,主机 A 知道主机 B 的 IP 地址,然而主机 A 不知道主机 B 的 MAC 地址,因此,主机 A 的数据链路层在封装以太网帧时,无法填写目的 MAC 地址。
实际上,每台主机都会维护一个 ARP 高速缓存表,ARP 高速缓存表中,记录了 IP 地址和 MAC 地址的对应关系。
2.5.2ARP广播请求和ARP单播响应
主机 A 的 ARP 高速缓存表中的第一条记录是主机 A 之前获取到的主机 C 的IP 地址与 MAC 地址的对应关系,当主机 A 要给主机 B 发送分组时,会首先在自己的 ARP 高速缓存表中,查找主机 B 的 IP 地址所对应的 MAC 地址,但未找到。
于是主机 A 发送 ARP 请求报文来获取主机 B 的 MAC 地址,ARP 请求报文是广播报文,需要封装在以太网帧中发送,帧的目的 MAC 地址为广播地址,也就是 48 比特为全 1,十六进制为全 F 形式的地址。
为了简单起见,我们用简单的语言来描述 ARP 请求报文的内容,实际上 ARP 请求报文有其具体的格式。交换机收到封装有该 ARP 请求报文的以太网广播帧后,将其从自己的其他所有接口转发出去,这样,主机 B 和 C 都可以收到该广播帧。
- 主机 C 的网卡收到该广播帧后,将其所封装的 ARP 请求报文送交上层处理,上层的 ARP 进程解析该ARP 请求报文,发现所询问的 IP 地址不是自己的地址,因此不予理会。
- 主机 B 的网卡收到该广播帧后,将其所封装的 ARP 请求报文送交上层处理,上层的 ARP 进程解析该 ARP 请求报文,发现所询问的 IP 地址正是自己的 IP 地址,需要进行响应,主机 B 首先将 ARP 请求报文中所携带的主机A 的 IP 地址与 MAC 地址记录到自己的 ARP 高速缓存表中,然后给主机 A 发送 ARP 响应报文,以告知自己的 MAC 地址。
主机 A 将其所包含的主机 B 的 IP 地址与 MAC 地址记录到自己的 ARP 高速缓存表中,主机 A 现在可以给主机 B 发送分组了。
2.5.3ARP高速缓存表中的记录类型和生命周期
需要说明的是,ARP 高速缓存表中的每一条记录都有其类型,分为动态和静态两种。
2.5.4ARP相关注意事项
注意,ARP协议被用来解决同一个局域网上的主机或路由器的 IP 地址和 MAC 地址的映射问题,不能跨网络使用。
如图所示,主机 H1和 H2之间有路由器 R1和 R2共2个路由器,当主机 H1要给主机 H2发送分组时,不能跨网络使用 ARP,而是要逐段链路或逐个网络使用 ARP。
- 由于ARP协议的主要用途是从网际层使用的IP地址解析出在数据链路层使用的MAC地址。因此,有的教材将ARP协议划归在网际层,而有的教材将ARP协议划归在数据链路层。这两种做法都是可以的。
- 除了ARP请求报文和响应报文,ARP协议还有其他类型的报文,例如用于检查IP地址冲突的“无故ARP”。
- 由于ARP协议很早就制定出来了(1982年11月),当时并没有考虑网络安全问题。因此,ARP协议没有安全验证机制,存在ARP欺骗和攻击等问题。
2.6IP数据报的发送和转发过程
IP数据报的发送和转发过程包含以下两个过程:
- 主机发送IP数据报
- 路由器转发IP数据报
为了将重点放在TCP/IP体系结构的网际层发送和转发IP数据报的过程上,在之后的举例中,将忽略以下过程:
- 使用ARP协议来获取目的主机或路由器接口的MAC地址的过程。
- 以太网交换机自学习和转发帧的过程。
2.6.1主机发送IP数据报
如图所示:路由器 R 的接口0连接了一个由交换机 S1和3台主机互连而成的交换式以太网,记为以太网1;路由器 R 连接了一个由交换机 S2和3台主机互连而成的另一个交换式以太网,记为以太网2。
假设以太网1分配到的 CIDR 地址块为192.168.0.0/25;以太网2的 CIDR 地址块为192.168.0.128/25,我们从这两个 CIDR 地址块中,选择可分配给主机或路由器接口的 IP 地址,分别分配给这两个网络中各主机和路由器的各接口。
2.6.1.1直接交付和间接交付
同一个网络中的主机之间可以直接通信,这属于直接交付,不同网络中的主机之间的通信,需要通过路由器来中转,这属于间接交付。那么源主机如何判断出目的主机是否与自己在同一个网络中呢?
2.6.1.2源主机判断目标主机是否与源主机在同一网络中的方法
假设主机 C 要给主机 F 发送 IP 数据报,主机 C 知道主机 F 的 IP 地址,于是将主机 F 的 IP 地址的前25个比特取出,与主机 C 自己的 IP 地址的前25个比特的网络前缀进行比较,可以发现,它们的 IP 地址的左起前25个比特并不完全相同,这就表明,主机 C 与 F 不在同一个网络。综上所述,主机 C 给主机 F 发送 IP 数据报,这属于间接交付,也就是说,主机 C 给主机 F 发送 IP 数据报,需要经过路由器的转发。
2.6.1.3默认网关
那么,主机 C 又是如何知道需要将 IP 数据报交给哪个路由器来转发呢?
实际上,用户为了让本网络中的各主机能与其他网络中的各主机进行通信,就必须给本网络中的各主机指定本网络中的一个路由器,由该路由器帮忙进行转发,所指定的路由器也就被称为默认网关。
对于本例,我们可以将路由器接口0的 IP 地址指定给该接口所直连网络中的各主机作为默认网关。同理,可将路由器接口1的 IP 地址指定给该接口所直连网络中的各主机作为默认网关,这样,当本网络中的主机要和其他网络中的主机进行通信时,会将 IP 数据报发送给默认网关,由默认网关主机将 IP 数据报转发出去。
2.6.2路由器转发IP数据报
假设本例中的主机 A 要给主机 D 发送 IP 数据报,这属于间接交付,主机 A 会将该 IP 数据报发送给自己的默认网关,也就是图中所示的路由器,那么当路由器收到 IP 数据报后,又是如何进行转发的呢?
- 路由器首先会检查收到的 IP 数据报是否正确,例如该 IP 数据报的生存时间是否结束,首部是否出现了误码等,若不正确,则丢弃该 IP 数据报,并向发送该 IP 数据报的源主机发送相应的 ICMP 差错报告。
- 假设该 IP 数据报没有出现差错,路由器基于 IP 数据报首部中的目的 IP 地址在自己的路由表中,查找匹配的路由条目,若找到匹配的路由条目,则按该路由条目的指示进行转发,否则丢弃该 IP 数据报,并向发送该 IP 数据报的源主机发送相应的 ICMP 差错报告。
2.6.2.1查表转发
- 该 IP 数据报首部中,源 IP 地址192.168.0.1是主机 A 的 IP 地址,而目的 IP 地址192.168.0.129是主机 D 的 IP 地址。在我们给路由器的接口0配置 IP 地址和地址掩码后,路由器就可自行得出自己的接口0所直连网络的网络地址,目的网络为192.168.0.0,相应的地址掩码为255.255.255.128,不需要下一跳路由器因为该目的网络与接口0是直连的;
- 同理,在我们给路由器的接口1配置 IP 地址和地址掩码后,路由器可自行得出接口1的直连网络路由条目,目的网络为192.168.0.128,相应的地址掩码为255.255.255.128,不需要下一跳路由器因为该目的的网络与接口1是直连的。
需要说明的是路由表中可能还会有其他路由条目,这可能是用户或网络管理员手工配置的静态路由条目,也可能是路由器通过路由选择协议,自动获取到的动态路由条目。
路由器根据 IP 数据报的目的 IP 地址,在自己的路由表中查找匹配的路由条目,将 IP 数据报的目的地址192.168.0.129与第1条路由条目中的地址掩码255.255.255.128,进行逻辑与运算,得到网络地址192.168.0.128,该网络地址与第1条路由条目中的目的网络地址192.168.0.0不相同,因此第1条路由条目不匹配。
将 IP 数据报的目的地址192.168.0.129与第2条路由条目中的地址掩码255.255.255.128进行逻辑与运算,得到网络地址192.168.0.128,该网络地址与第2条路由条目中的目的网络地址192.168.0.128,因此第2条路由条目匹配,路由器根据匹配的路由条目中的下一跳的指示。
从自己的接口1直接交付 IP 数据报给主机 D,路由器只需通过 ARP 协议,获取到与自己的接口处于同一网络中的目的主机 D 的 MAC 地址,就可将 IP 数据报封装成帧后,发送给目的主机 D。
2.6.2.2路由器隔离广播域
我们再来看路由器对广播 IP 数据报的处理
假设主机 A 发送了一个广播 IP 数据报,该 IP 数据报首部中目的地址字段的值,可以设置为192.168.0.127,这是主机 A 所在网络的广播地址,也可以设置为受限的广播地址255.255.255.255。主机 A 所在网络中的各主机和路由器的接口0都会收到该广播 IP 数据报,默认情况下,路由器不会对广播IP 数据报进行转发,也就是说路由器是隔离广播域的。试想一下,如果因特网中数量巨大的路由器,收到广播 IP 数据报后都进行转发,则会造成巨大的广播风暴,严重浪费因特网资源。