计算机网络第四章-网络层
本文最后更新于:2 个月前
网络层提供的两种服务
让网络负责可靠交付
使用面向连接的通信方式,通信之前先建立虚电路 (Virtual Circuit),以保证双方通信所需的一切网络资源。 如果再使用可靠传输的网络协议,就可使所发送的分组无差错按序到达终点,不丢失、不重复。
虚电路表示这只是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式传送,而并不是真正建立了一条物理连接。
请注意,电路交换的电话通信是先建立了一条真正的连接。
因此分组交换的虚连接和电路交换的连接只是类似,但并不完全一样。
网络提供数据报服务
- 互联网的先驱者提出了一种崭新的网络设计思路。
- 网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。
- 网络在发送分组时不需要先建立连接。每一个分组(即 IP 数据报)独立发送,与其前后的分组无关(不进行编号)。
- 网络层不提供服务质量的承诺。即所传送的分组可能出错、丢失、重复和失序(不按序到达终点),当然也不保证分组传送的时限。
虚电路服务与数据报服务的对比
网际协议 IP
网际协议 IP
网际协议 IP 是 TCP/IP 体系中两个最主要的协议之一。
与 IP 协议配套使用的还有三个协议:
- 地址解析协议 ARP (Address Resolution Protocol)
- 网际控制报文协议 ICMP (Internet Control Message Protocol)
- 网际组管理协议 IGMP (Internet Group Management Protocol)
网际层的 IP 协议及配套协议
虚拟互连网络
使用一些中间设备进行互连
将网络互相连接起来要使用一些中间设备。
中间设备又称为中间系统或中继 (relay)系统。
有以下五种不同的中间设备:
- 物理层中继系统:转发器 (repeater)。
- 数据链路层中继系统:网桥 或 桥接器 (bridge)。
- 网络层中继系统:路由器 (router)。
- 网桥和路由器的混合物:桥路器 (brouter)。
- 网络层以上的中继系统:网关 (gateway)。
网络互连使用路由器
- 当中继系统是转发器或网桥时,一般并不称之为网络互连,因为这仅仅是把一个网络扩大了,而这仍然是一个网络。
- 网关由于比较复杂,目前使用得较少。
- 网络互连都是指用路由器进行网络互连和路由选择。
- 由于历史的原因,许多有关 TCP/IP 的文献将网络层使用的路由器称为网关。
虚拟互连网络的意义
- 所谓虚拟互连网络也就是逻辑互连网络,它的意思就是互连起来的各种物理网络的异构性本来是客观存在的,但是我们利用 IP 协议就可以使这些性能各异的网络从用户看起来好像是一个统一的网络。
- 使用 IP 协议的虚拟互连网络可简称为 IP 网。
- 使用虚拟互连网络的好处是:当互联网上的主机进行通信时,就好像在一个网络上通信一样,而看不见互连的各具体的网络异构细节。
- 如果在这种覆盖全球的 IP 网的上层使用 TCP 协议,那么就是现在的互联网 (Internet)
从网络层看 IP 数据报的传送
如果我们只从网络层考虑问题,那么 IP 数据报就可以想象是在网络层中传送。
分类的 IP 地址
在 TCP/IP 体系中,IP 地址是一个最基本的概念。
本部分重点学习:
- IP 地址及其表示方法
- 常用的三种类别的 IP 地址
IP 地址及其表示方法
- 我们把整个互联网看成为一个单一的、抽象的网络。
- IP 地址就是给每个连接在互联网上的主机(或路由器)分配一个在全世界范围是唯一的 32 位的标识符。
- IP 地址现在由互联网名字和数字分配机构ICANN (Internet Corporation for Assigned Names and Numbers)进行分配。
IP 地址的编址方法
- 分类的 IP 地址。这是最基本的编址方法,在1981年就通过了相应的标准协议。
- 子网的划分。这是对最基本的编址方法的改进,其标准[RFC 950]在1985年通过。
- 构成超网。这是比较新的无分类编址方法。1993年提出后很快就得到推广应用。
分类 IP 地址
- 将IP地址划分为若干个固定类。
- 每一类地址都由两个固定长度的字段组成,其中一个字段是网络号 net-id,它标志主机(或路由器)所连接到的网络,而另一个字段则是主机号 host-id,它标志该主机(或路由器)。
- 主机号在它前面的网络号所指明的网络范围内必须是唯一的。
- 由此可见,一个 IP 地址在整个互联网范围内是唯一的。
这种两级的 IP 地址结构如下:
这种两级的 IP 地址可以记为:
各类 IP 地址的网络号字段和主机号字段
点分十进制记法
常用的三种类别的 IP 地址
一般不使用的特殊的 IP 地址
IP 地址的一些重要特点
IP 地址是一种分等级的地址结构。分两个等级的好处是:
- IP 地址管理机构在分配 IP 地址时只分配网络号,而剩下的主机号则由得到该网络号的单位自行分配。这样就方便了 IP 地址的管理。
- 路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间。
实际上 IP 地址是标志一个主机(或路由器)和一条链路的接口。
- 当一个主机同时连接到两个网络上时,该主机就必须同时具有两个相应的 IP 地址,其网络号 net-id 必须是不同的。这种主机称为多归属主机 (multihomed host)。
- 由于一个路由器至少应当连接到两个网络(这样它才能将 IP 数据报从一个网络转发到另一个网络),因此一个路由器至少应当有两个不同的 IP 地址。
用转发器或网桥连接起来的若干个局域网仍为一个网络,因此这些局域网都具有同样的网络号 net-id。
所有分配到网络号 net-id 的网络,无论是范围很小的局域网,还是可能覆盖很大地理范围的广域网,都是平等的。
在同一个局域网上的主机或路由器的IP 地址中的网络号必须是一样的。图中的网络号就是 IP 地址中的 net-id。
两个路由器直接相连的接口处,可指明也可不指明IP地址。如指明IP地址,则这一段连线就构成了一种只包含一段线路的特殊“网络” 。现在常不指明IP地址。
IP 地址与硬件地址
IP 地址与硬件地址是不同的地址。
从层次的角度看
- 硬件地址(或物理地址)是数据链路层和物理层使用的地址。
- IP 地址是网络层和以上各层使用的地址,是一种逻辑地址(称 IP 地址是逻辑地址是因为 IP 地址是用软件实现的)。
主机 H1 与 H2 通信中使用的IP地址 与 硬件地址 HA
地址解析协议 ARP
通信时使用了两个地址:
- IP 地址(网络层地址)
- MAC 地址(数据链路层地址)
地址解析协议 ARP 的作用
地址解析协议 ARP :根据一个机器(主机或路由器)的IP地址,找出其相应的硬件地址
地址解析协议 ARP 要点
不管网络层使用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址。
每一个主机都设有一个 ARP 高速缓存 (ARP cache),里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。
当主机 A 欲向本局域网上的某个主机 B 发送 IP 数据报时,
- 先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址。
- 如有,就可查出其对应的硬件地址,再将此硬件地址写入 MAC 帧,然后通过局域网将该 MAC 帧发往此硬件地址。
- 如没有, ARP 进程在本局域网上广播发送一个 ARP 请求分组。收到 ARP 响应分组后,将得到的 IP 地址到硬件地址的映射写入 ARP 高速缓存。
ARP请求分组:包含发送方硬件地址 / 发送方 IP 地址 / 目标方硬件地址(未知时填 0) / 目标方 IP 地址。
本地广播 ARP 请求(路由器不转发ARP请求)。
ARP 响应分组:包含发送方硬件地址 / 发送方 IP地址 / 目标方硬件地址 / 目标方 IP 地址。
ARP 分组封装在物理网络的帧中传输。
ARP 高速缓存的作用
- 存放最近获得的 IP 地址到 MAC 地址的绑定,以减少 ARP 广播的数量。
- 为了减少网络上的通信量,主机 A 在发送其 ARP 请求分组时,就将自己的 IP 地址到硬件地址的映射写入 ARP 请求分组。
- 当主机 B 收到 A 的 ARP 请求分组时,就将主机 A 的这一地址映射写入主机 B 自己的 ARP 高速缓存中。这对主机 B 以后向 A 发送数据报时就更方便了。
注意
- ARP 用于解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题。
- 如果所要找的主机和源主机不在同一个局域网上,那么就要通过 ARP 找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做。
- 从 IP 地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。
- 只要主机或路由器要和本网络上的另一个已知 IP 地址的主机或路由器进行通信,ARP 协议就会自动地将该 IP 地址解析为链路层所需要的硬件地址。
由于全世界存在着各式各样的网络,它们使用不同的硬件地址。要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,因此几乎是不可能的事。
IP 编址把这个复杂问题解决了。连接到互联网的主机只需各自拥有一个唯一的 IP 地址,它们之间的通信就像连接在同一个网络上那样简单方便,因为上述的调用 ARP 的复杂过程都是由计算机软件自动进行的,对用户来说是看不见这种调用过程的。
因此,在虚拟的 IP 网络上用 IP 地址进行通信给广大的计算机用户带来了很大的方便。
IP 数据报的格式
一个 IP 数据报由首部和数据两部分组成。
- 首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。
- 在首部的固定部分的后面是一些可选字段,其长度是可变的。
IP 数据报首部的固定部分中的各字段
版本——占 4 位,指 IP 协议的版本。目前的 IP 协议版本号为 4 (即 IPv4)。
首部长度——占 4 位,可表示的最大数值是 15 个单位(一个单位为 4 字节),因此 IP 的首部长度的最大值是 60 字节。
区分服务——占 8 位,用来获得更好的服务。在旧标准中叫做服务类型,但实际上一直未被使用过。
- 1998 年这个字段改名为区分服务。
- 只有在使用区分服务(DiffServ)时,这个字段才起作用。
- 在一般的情况下都不使用这个字段
总长度——占 16 位,指首部和数据之和的长度,
- 单位为字节,因此数据报的最大长度为 65535 字节。
- 总长度必须不超过最大传送单元MTU。
标识(identification) ——占 16 位,它是一个计数器,用来产生 IP 数据报的标识。
标志(flag) ——占 3 位,目前只有前两位有意义。
- 标志字段的最低位是 MF (More Fragment)。
- MF=1 表示后面“还有分片”。MF=0 表示最后一个分片。
- 标志字段中间的一位是 DF (Don’t Fragment) 。
- 只有当 DF=0 时才允许分片。
片偏移——占13 位,指出:较长的分组在分片后某片在原分组中的相对位置。片偏移以 8 个字节为偏移单位。
生存时间——占8 位,记为 TTL (Time To Live),指示数据报在网络中可通过的路由器数的最大值。
协议——占8 位,指出此数据报携带的数据使用何种协议,以便目的主机的 IP 层将数据部分上交给那个处理过程
- 首部检验和——占16 位,只检验数据报的首部,不检验数据部分。这里不采用 CRC 检验码而采用简单的计算方法。
- 源地址和目的地址都各占 4 字节
实例
【例4-1】 IP 数据报分片
一数据报的总长度为 3820 字节,其数据部分的长度为 3800 字节(使用固定首部),需要分片为长度不超过 1420 字节的数据报片。
因固定首部长度为 20 字节,因此每个数据报片的数据部分长度不能超过 1400 字节。
于是分为 3 个数据报片,其数据部分的长度分别为 1400、1400 和 1000 字节。
原始数据报首部被复制为各数据报片的首部,但必须修改有关字段的值。
IP 数据报首部的可变部分
- IP 首部的可变部分就是一个选项字段,用来支持排错、测量以及安全等措施,内容很丰富。
- 选项字段的长度可变,从 1 个字节到 40 个字节不等,取决于所选择的项目。
- 增加首部的可变部分是为了增加 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。实际上这些选项很少被使用。
IP 层转发分组的流程
假设:
- 有四个 A 类网络通过三个路由器连接在一起。每一个网络上都可能有成千上万个主机。
- 可以想象,若按目的主机号来制作路由表,每一个路由表就有 4 万个项目,即 4 万行(每一行对应于一台主机),则所得出的路由表就会过于庞大。
- 但若按主机所在的网络地址来制作路由表,那么每一个路由器中的路由表就只包含 4 个项目(每一行对应于一个网络),这样就可使路由表大大简化。
根据目的网络地址就能确定下一跳路由器,这样做的结果是:
- IP 数据报最终一定可以找到目的主机所在目的网络上的路由器(可能要通过多次的间接交付)。
- 只有到达最后一个路由器时,才试图向目的主机进行直接交付。
注意
- IP 数据报的首部中没有地方可以用来指明“下一跳路由器的 IP 地址”。
- 当路由器收到待转发的数据报,不是将下一跳路由器的 IP 地址填入 IP 数据报,而是送交下层的网络接口软件。
- 网络接口软件使用 ARP 负责将下一跳路由器的 IP 地址转换成硬件地址,并将此硬件地址放在链路层的 MAC 帧的首部,然后根据这个硬件地址找到下一跳路由器。
划分子网和构造超网
划分子网
从两级 IP 地址到三级 IP 地址
在 ARPANET 的早期,IP 地址的设计确实不够合理:
- IP 地址空间的利用率有时很低。
- 给每一个物理网络分配一个网络号会使路由表变得太大因而使网络性能变坏。
- 两级的 IP 地址不够灵活。
三级 IP 地址
从 1985 年起在 IP 地址中又增加了一个“子网号字段”,使两级的 IP 地址变成为三级的 IP 地址。
- 这种做法叫做划分子网 (subnetting) 。
- 划分子网已成为互联网的正式标准协议。
划分子网的基本思路
- 划分子网纯属一个单位内部的事情。单位对外仍然表现为没有划分子网的网络。
- 从主机号借用若干个位作为子网号 subnet-id,而主机号 host-id 也就相应减少了若干个位。
IP地址 ::= {<网络号>, <子网号>, <主机号>} (4-2)
凡是从其他网络发送给本单位某个主机的 IP 数据报,仍然是根据 IP 数据报的目的网络号 net-id,先找到连接在本单位网络上的路由器。
然后此路由器在收到 IP 数据报后,再按目的网络号 net-id 和子网号 subnet-id 找到目的子网。
最后就将 IP 数据报直接交付目的主机。
一个未划分子网的 B 类网络145.13.0.0
划分为三个子网后对外仍是一个网络
子网掩码
- 从一个 IP 数据报的首部并无法判断源主机或目的主机所连接的网络是否进行了子网划分。
- 使用子网掩码 (subnet mask) 可以找出 IP 地址中的子网部分。
- 规则:
- 子网掩码长度 = 32 位
- 子网掩码左边部分的一连串 1,对应于网络号和子网号
- 子网掩码右边部分的一连串 0,对应于主机号
(IP 地址) AND (子网掩码) =网络地址
- 子网掩码是一个网络或一个子网的重要属性。
- 路由器在和相邻路由器交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉相邻路由器。
- 路由器的路由表中的每一个项目,除了要给出目的网络地址外,还必须同时给出该网络的子网掩码。
- 若一个路由器连接在两个子网上,就拥有两个网络地址和两个子网掩码。
子网划分方法
有固定长度子网和变长子网两种子网划分方法。
- 在采用固定长度子网时,所划分的所有子网的子网掩码都是相同的。
虽然根据已成为互联网标准协议的 RFC 950 文档,子网号不能为全 1 或全 0,但随着无分类域间路由选择 CIDR 的广泛使用,现在全 1 和全 0 的子网号也可以使用了,但一定要谨慎使用,确认你的路由器所用的路由选择软件是否支持全 0 或全 1 的子网号这种较新的用法。 - 划分子网增加了灵活性,但却减少了能够连接在网络上的主机总数。
使用子网时分组的转发
在不划分子网的两级 IP 地址下,从 IP 地址得出网络地址是个很简单的事。
但在划分子网的情况下,从 IP 地址却不能唯一地得出网络地址来,这是因为网络地址取决于那个网络所采用的子网掩码,但数据报的首部并没有提供子网掩码的信息。
因此分组转发的算法也必须做相应的改动。
在划分子网情况下路由器转发分组的算法
- 从收到的分组的首部提取目的 IP 地址 D。
- 先用各网络的子网掩码和 D 逐位相“与”,看是否和相应的网络地址匹配。若匹配,则将分组直接交付。否则就是间接交付,执行(3)。
- 若路由表中有目的地址为 D 的特定主机路由,则将分组传送给指明的下一跳路由器;否则,执行 (4)。
- 对路由表中的每一行,将子网掩码和 D 逐位相“与”。若结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器;否则,执行 (5)。
- 若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器;否则,执行 (6)。
- 报告转发分组出错。
无分类编址 CIDR
网络前缀
划分子网在一定程度上缓解了互联网在发展中遇到的困难。然而在 1992 年互联网仍然面临三个必须尽早解决的问题:
- B 类地址在 1992 年已分配了近一半,眼看就要在 1994 年 3 月全部分配完毕!
- 互联网主干网上的路由表中的项目数急剧增长(从几千个增长到几万个)。
- 整个 IPv4 的地址空间最终将全部耗尽。
CIDR 最主要的特点
- CIDR 消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念,因而可以更加有效地分配 IPv4 的地址空间。
- CIDR使用各种长度的“网络前缀”(network-prefix)来代替分类地址中的网络号和子网号。
- IP 地址从三级编址(使用子网掩码)又回到了两级编址。
无分类的两级编址
CIDR 使用“斜线记法”(slash notation),它又称为 CIDR 记法,即在 IP 地址面加上一个斜线“/”,然后写上网络前缀所占的位数(这个数值对应于三级编址中子网掩码中 1 的个数)。例如: 220.78.168.0/24
CIDR 地址块
- CIDR 把网络前缀都相同的连续的 IP 地址组成“CIDR 地址块”。
- 128.14.32.0/20 表示的地址块共有 212 个地址(因为斜线后面的 20 是网络前缀的位数,所以这个地址的主机号是 12 位)。
- 这个地址块的起始地址是 128.14.32.0。
- 在不需要指出地址块的起始地址时,也可将这样的地址块简称为“/20 地址块”。
- 128.14.32.0/20 地址块的最小地址:128.14.32.0
- 128.14.32.0/20 地址块的最大地址:128.14.47.255
- 全 0 和全 1 的主机号地址一般不使用。
路由聚合
一个 CIDR 地址块可以表示很多地址,这种地址的聚合常称为路由聚合,它使得路由表中的一个项目可以表示很多个(例如上千个)原来传统分类地址的路由。
- 路由聚合有利于减少路由器之间的路由选择信息的交换,从而提高了整个互联网的性能。
- 路由聚合也称为构成超网 (supernetting)。
- CIDR 虽然不使用子网了,但仍然使用“掩码”这一名词(但不叫子网掩码)。
- 对于 /20 地址块,它的掩码是 20 个连续的 1。 斜线记法中的数字就是掩码中1的个数。
最长前缀匹配
- 使用 CIDR 时,路由表中的每个项目由“网络前缀”和“下一跳地址”组成。在查找路由表时可能会得到不止一个匹配结果。
- 应当从匹配结果中选择具有最长网络前缀的路由:最长前缀匹配 (longest-prefix matching)。
- 网络前缀越长,其地址块就越小,因而路由就越具体 (more specific) 。
- 最长前缀匹配又称为最长匹配或最佳匹配。
网际控制报文协议 ICMP
为了更有效地转发 IP 数据报和提高交付成功的机会,在网际层使用了网际控制报文协议 ICMP (Internet Control Message Protocol)。
- ICMP 是互联网的标准协议。
- ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告。
- 但 ICMP 不是高层协议(看起来好像是高层协议,因为 ICMP 报文是装在 IP 数据报中,作为其中的数据部分),而是 IP 层的协议。
ICMP 报文的格式
ICMP 报文的种类
ICMP 报文的种类有两种,即 ICMP 差错报告报文和 ICMP 询问报文。
ICMP 报文的前 4 个字节是统一的格式,共有三个字段:即类型、代码和检验和。
接着的 4 个字节的内容与 ICMP 的类型有关。
ICMP 差错报告报文
- 终点不可达
- 时间超过
- 参数问题
- 改变路由(重定向)(Redirect)
不应发送 ICMP 差错报告报文的几种情况
- 对 ICMP 差错报告报文不再发送 ICMP 差错报告报文。
- 对第一个分片的数据报片的所有后续数据报片都不发送 ICMP 差错报告报文。
- 对具有多播地址的数据报都不发送 ICMP 差错报告报文。
- 对具有特殊地址(如127.0.0.0 或 0.0.0.0)的数据报不发送 ICMP 差错报告报文。
ICMP 询问报文
- 回送请求和回答报文
- 时间戳请求和回答报文
下面的几种 ICMP 报文不再使用
- 信息请求与回答报文
- 掩码地址请求和回答报文
- 路由器询问和通告报文
- 源点抑制报文
ICMP 的应用举例
PING (Packet InterNet Groper)
- PING 用来测试两个主机之间的连通性。
- PING 使用了 ICMP 回送请求与回送回答报文。
- PING 是应用层直接使用网络层 ICMP 的例子,它没有通过运输层的 TCP 或UDP。