第四章 网络层
4.1 网络层概述
网络层的主要任务是 实现网络互连,进而 实现数据包在各网络在之间的传输。仅实现计算机网络体系结构中的物理层和数据链路层,是不能实现数据包在互联网种各网络之间传输的。要实现该功能,就必须实现网络层。
这些异构型网络N1 ~ N7 如果只是需要各自内部通信,他们只要实现各自的物理层和数据链路层即可;但是如果要将这些异构型网络互连起来,形成一个更大的互联网,就需要实现网络层设备路由器;有时为了简单起见,可以不用画出这些网络,图中N1~N7,而将他们看做是一条链路即可
要实现网络层任务,需要解决一下主要问题:
-
网络层向运输层提供怎样的服务(“可靠传输”还是“不可靠传输”)
- 数据包在传输过程中,可能出现 误码,也有可能由于路由器繁忙而 被服务器丢弃,还有可能出现按序发送的数据包 不能按序到达接收方。对于 不可靠传输服务UDP,则对错误实施丢弃。若采用 可靠传输服务,则会对错误实行处理,实现正确接收接收方发送的数据。
-
网络层寻址问题
- TCP/IP协议网际层使用IP地址,N1网络的前三个数字是相同的,可以看作是它们所在网络的网络编号,而第四个数字不用,用于区分这两个不同的路由器接口。 N3网络的前2个数字是相同的,可以看作是它们所在网络的网络编号,而第3.4个数字不用,用于区分这两个不同的路由器接口。
-
路由选择问题
- 路由器收到数据后,是依据什么来决定将数据包从自己的哪个接口转发出去?依据数据包的目的地址和路由器中的路由表
但在实际当中,路由器是怎样知道这些路由记录?
-
由用户或网络管理员进行人工配置,这种方法只适用于规模较小且网络拓扑不改变的小型互联网。
-
另一种是实现各种路由选择协议,由路由器执行路由选择协议中所规定的路由选择算法,而自动得出路由表中的路有记录,这种方法更适合规模较大且网络拓扑经常改变的大型互联网。
因特网是目前全世界用户数量最多的互联网,它 使用TCP/IP协议栈。由于TCP/IP协议栈的网络层使用国际协议IP,它是整个协议栈的核心协议,因此在TCP/IP协议栈中,网络层常称为 网际层。
网络层(网际层)除了 IP协议外,还有之前介绍过的地址解析协议ARP,还有网际控制报文协议ICMP,网际组管理协议IGMP
本章主要通过学习TCP/IP协议栈的网际层来学习网络层的理论知识和实践技术。
4.2 网络层提供的两种服务
网络层提供的两种服务,一种是面向连接的虚电路服务,另一种是无连接的数据报服务。
4.2.1 面向连接的虚电路服务
虚电路的核心思想是,可靠通信应由网络自身来保证。当两台计算机进行通信时,应当首先建立 网络层的连接- 虚电路VC(Virtual Circuit),以保证通信双方需要的一切资源。通信双方 沿着已建立的虚电路发送分组。目的主机的地址仅在连接建立阶段使用,之后每个 分组的首部只需携带一条虚电路的编号。如果再使用可靠传输的网络协议,就可使所发送的分组无差错按序到达终点,不丢失、不重复。通信结束后,需要释放之前所建立的虚电路
*
虚电路表示这只是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式传送,而并不是真正建立了一条物理连接。电路交换的电话通信是先建立了一条真正的连接,分组交换的虚连接和电路交换的连接只是类似,但并不完全一样
4.2.2 无连接的数据报服务
互联网的先驱者提出了一种崭新的网络设计思路;网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务;网络在发送分组时不需要先建立连接。每一个分组(即 IP 数据报)独立发送,与其前后的分组无关(不进行编号);网络层不提供服务质量的承诺。即所传送的分组可能出错、丢失、重复和失序(不按序到达终点),当然也不保证分组传送的时限。
发送方 发送给 接收方 的分组可能沿着不同路径传送:
尽最大努力交付
- 如果主机(即端系统)中的进程之间的通信需要是可靠的,那么就由网络的主机中的运输层负责可靠交付(包括差错处理、流量控制等) 。
- 采用这种设计思路的好处是:网络的造价大大降低,运行方式灵活,能够适应多种应用。
- 互连网能够发展到今日的规模,充分证明了当初采用这种设计思路的正确性。
4.3 IPv4地址
在TCP/IP体系中,IP地址是一个最基本的概念。
IPv4地址就是给因特网(Internet)上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的32比特的标识符。
IP地址由因特网名字和数字分配机构**ICANN(Internet Corporation for Assigned Names and Numbers)**进行分配。
- 我国用户可向亚太网络信息中心APNIC(Asia Pacific Network Information Center)申请IP地址,需要缴费。
- 2011年2月3日,互联网号码分配管理局IANA(由ICANN行使职能)宣布,IPv4地址已经分配完毕〕
- 我国在2014至2015年也逐步停止了向新用户和应用分配IPv4地址。同时全面开展商用部署IPv6。
lPv4地址的编址方法经历了如下三个历史阶段:
4.3.1 IPv4地址的表示方法
32比特的IPv4地址不方便阅读、记录以及输入等,因此IPv4地址采用点分十进制表示方法以方便用户使用.
4.3.2 分类编制的IPv4地址
4.3.2.1 A类地址
4.3.2.2 B类地址
4.3.2.3 C类地址
4.3.2.4 总结
- 网络号指派范围
网络类别 | 最大可指派的网络数 | 第一个可指派的网络号 | 最后一个可指派的网络号 | 每个网络中最大主机数 | 备注 |
---|---|---|---|---|---|
A | 126 ( 2 7 − 2 ) 126 (2^7-2 ) 126(27−2) | 1 | 126 | 16777214 ( 2 24 − 2 ) 16777214(2^{24}-2) 16777214(224−2) | 最小网络号0,保留不指派;最大网络号127,作为本地环回地址,不指派。 |
B | 16384 ( 2 14 ) 16384(2^{14}) 16384(214) | 128.0 | 191.255 | 65534 ( 2 16 − 2 ) 65534(2^{16}-2) 65534(216−2) | 所有网络号均可指派 |
C | 2097152 ( 2 21 − 1 ) 2097152(2^{21}-1) 2097152(221−1) | 192.0.0 | 223.255.255 | 246 ( 2 8 − 2 ) 246(2^8-2) 246(28−2) | 所有网络号均可指派 |
-
特殊的IP地址
- 主机号为“全0”,这是网络地址
- 主机号为“全1”,这是广播地址
-
一般不使用的特殊的IP地址
4.3.3 划分子网的IPv4地址
在 ARPANET 的早期,IP 地址的设计确实不够合理:
- IP 地址空间的利用率有时很低。
- 给每一个物理网络分配一个网络号会使路由表变得太大因而使网络性能变坏。
- 两级的 IP 地址不够灵活。
当有新的主机添加进来的时候,就需要重新申请一个网络号,这是不必要的。
所以就有了划分子网的工具:子网掩码
- 从 1985 年起在 IP 地址中又增加了一个“子网号字段”,使两级的 IP 地址变成为三级的 IP 地址。
- 这种做法叫做划分子网 (subnetting) 。
- 划分子网已成为互联网的正式标准协议。
划分为子网络后,数据的传送流程:
-
凡是从其他网络发送给本单位某个主机的 IP 数据报,仍然是根据 IP 数据报的目的网络号 net-id,先找到连接在本单位网络上的路由器。
-
然后此路由器在收到 IP 数据报后,再按目的网络号 net-id 和子网号 subnet-id 找到目的子网。
-
最后就将 IP 数据报直接交付目的主机。
4.3.3.1 子网掩码
32比特的子网掩码可以表明分类IP地址的主机号部分被借用了几个比特作为子网号
-
子网掩码使用连续的比特1来对应网络号和子网号
-
子网掩码使用连续的比特0来对应主机号
-
将划分子网的IPv4地址与其相应的子网掩码进行逻辑与运算就可得到IPv4地址所在子网的网络地址
举例说明
1.
已
知
某
个
网
络
的
地
址
为
1. 已知某个网络的地址为
1.已知某个网络的地址为218.75.230.0
,
使
用
子
网
掩
码
使用子网掩码
使用子网掩码255.255.255.128
对
其
进
行
子
网
划
分
,
请
给
出
划
分
细
节
对其进行子网划分,请给出划分细节
对其进行子网划分,请给出划分细节
解 析 解析 解析
C
类
网
络
地
址
C类网络地址
C类网络地址
主
机
号
为
主机号为
主机号为.0
,
网
络
号
为
网络号为
网络号为218.75.230
子
网
掩
码
:
子网掩码:
子网掩码: 255.255.255.10000000
故 划 分 出 的 子 网 数 量 : 2 1 = 2 故划分出的子网数量:2^1=2 故划分出的子网数量:21=2
子 网 络 可 分 配 的 网 络 地 址 : 2 7 − 2 = 126 子网络可分配的网络地址:2^7-2=126 子网络可分配的网络地址:27−2=126
例2.
默认子网掩码
总结
4.3.4 无分类编址的IPv4地址
划分子网在一定程度上缓解了因特网在发展中遇到的困难,但是数量巨大的C类网因为其地址空间太小并没有得到充分使用,而因特网的IP地址仍在加速消耗,整个IPv4地址空间面临全部耗尽的威胁。
为此,因特网工程任务组IETF又提出了采用无分类编址的方法来解决IP地址紧张的问题,同时还专门成立IPv6工作组负责研究新版本IP以彻底解决IP地址耗尽问题。
1993年,IETF发布了无分类域间路由选择CIDR(Classless Inter-Domain Routing)的RFC文档: RFC 1517~1519和1520。
- CIDR消除了传统的A类、B类和C类地址,以及划分子网的概念;
- CIDR可以更加有效地分配IPv4的地址空间,并且可以在新的IPv6使用之前允许因特网的规模继续增长。
CIDR使用**“斜线记法”**,或称CIDR记法。即在IPv4地址后面加上斜线“/”,在斜线后面写上网络前缀所占的比特数量。 如 128.14.35.7/20
表示网络前缀占用的比特数量为20,主机编号占用的比特数量为:
30
−
20
=
12
30-20=12
30−20=12
CIDR实际上是将网络前缀都相同的连续的IP地址组成一个“CIDR地址块”。
我们只要知道CIDR地址块中的任何一个地址,就可以知道该地址块的全部细节:
- 地址块的最小地址
- 地址块的最大地址
- 地址块中的地址数量
- 地址块聚合某类网络(A类、B类或C类)的数量
- 地址掩码(也可继续称为子网掩码)
举例
练习
206.0.64.8/18 → \to → 206.0.0100 0000.0000 1000
最小地址:206.0.0100 0000.0000 0000即206.0.64.0
最大地址:206.0.0111 1111.1111 1111即206.0.127.255
子网掩码:255.255.192.0
地址数量: 2 14 2^{14} 214
聚合C类网的数量: 2 14 ÷ 2 8 2^{14}\div 2^8 214÷28
4.3.4.1 路由聚合(构造超网)
路由器R1与五个网络以及路由器R2直接相连。路由器R1和R2互为相邻路由器,它们周期性地同通告给对方自己所知道的路由信息。若R1将直连的五个网络通告给R2,则R2的路由表会增加五条路由记录。可以找“共同前缀”,共22个比特,记为/22
,将共同前缀保持不变,剩余10个比特全部取0,然后写成点分十进制形式,放在/22
前面,这就是聚合后的地址块(超网),将五条路由记录聚合成一条。
练习:子网192.168.4.0/30
中,能接收到目的地址为192.168.4.3
的IP分组的最大主机数是?
解析:
192.168.4.0000 0000;
最小地址:192.168.4.0
最大地址:192.168.4.3
可分配的最小地址:192.168.4.1
可分配的最大地址:192.168.4.2
故为2.
小结
4.3.5 IPv4地址的应用规划
给定一个IPv4地址快,如何将其划分成几个更小的地址块,并将这些地址块分配给互联网中不同网络,进而可以给各网络中的主机和路由器接口分配IPv4地址,一般有两种方法:定长的子网掩码FLSM,另一种是变长的子网掩码VLSM。
4.3.5.1 定长的子网掩码FLSM(Fixed Length Subnet Mask)
使用同一个子网掩码来划分子网,每个子网所分配的IP地址数量相同,造成IP地址的浪费
举例 1
C
类
网
络
地
址
:
C类网络地址:
C类网络地址: 网络号218.75.230
主机号.0
从 主 机 号 中 借 用 三 个 比 特 位 作 为 子 网 络 号 。 子 网 络 的 数 量 : 从主机号中借用三个比特位作为子网络号。子网络的数量: 从主机号中借用三个比特位作为子网络号。子网络的数量: 2 3 = 8 2^3=8 23=8
子
网
掩
码
:
子网掩码:
子网掩码: 255.255.255.1110 0000
即255.255.255.224
通过上面步骤分析,就可以从子网1~ 8中任选5个子网,分配给左图中的N1~N5网络
采用定长的子网掩码划分,只能划分出 2 n 2^{n} 2n个子网,其中n是从主机号部分借用的用来作为子网号的比特数量,每个子网所分配的IP地址数量相同
但是也因为每个子网所分配的IP地址数量相同,不够灵活,容易造成IP地址的浪费
4.3.5.2 变长的子网掩码VLSM(Variable Length Subnet Mask)
使用不同的子网掩码来划分子网,每个子网所分配的IP地址数量可以不同,尽可能减少对IP地址的浪费
无分类编址的IPv4就是变长的子网掩码
应用需求:从地址块218.75.230.0/24
中取出5个地址块(一个“/27
”,3个“/28
”,1个“/30
”),按需分配给下图的5个网络.
在该地址块中给左图所示的网络N1~N5分配子块,分配原则是“每个子块的起点位置不能随意选取,只能选取块大小整数倍的地址作为起点”。建议先给大的子块分配。
4.4 IP 数据报的发送和转发过程
IP数据报的发送和转发过程包含以下两部分:
- 主机发送IP数据报
- 路由器转发IP数据报
为了将重点放在TCP/IP协议栈的网际层发送和转发IP数据报的过程上,在之后的举例中,我们忽略使用ARP协议来获取目的主机或路由器接口的MAC地址的过程以及以太网交换机自学习和转发帧的过程。
4.4.1举例
在如图所示的网络结构中,路由器的 接口0 直连了一个交换式以太网,接口1 也直连了一个交换式以太网。 分给S1 网络的网络地址为:192.168.0.0
,子网掩码为:255.255.255.128
。S2网络的网络地址为192.168.0.128
,子网掩码为255.255.255.128
。各主机的IP地址和子网掩码也如图所示
同一个网络之间可以直接通信,属于直接交付;不同网络中的通信,需要通过路由器来中转,这属于 间接交付 。
判断主机是否处于同一个网络的方法:可以通过目的地址IP和源地址的子网掩码进行逻辑与运算得到目的网络地址
- 如果目的网络地址和源网络地址 相同,就是在同一个网络中,属于直接交付
- 如果目的网络地址和源网络地址 不相同,就不在同一个网络中,属于间接交付,传输给主机所在网络的默认网关(路由器),由默认网关帮忙转发给目的主机。
主机应该将IP数据报交付给哪个路由器进行转发(路由选择?)
用户为了让本网络中的主机能和其他网络中的主机进行通讯,就必须给其指定本网络中的一个路由器,由该路由器帮忙进行转发,所指定的路由器也被称为默认网关。对于本例,我们可以将路由器接口0的IP 地址指定给该接口,所直连网络中的各个主机作为默认网关。同理,可将路由器接口1的IP 地址指定给该接口,所直连网络中的各个主机作为默认网关。这样当本网络中的主机要和其他网络中的主机进行通信时,会将IP 数据报传输给默认网关,由默认网关帮主机将IP数据报转发出去。
上图中,路由器的接口0的IP地址192.168.0.126
做为左边网络的默认网关。接口1的IP地址192.168.0.254
作为s2网络的默认网关。
若主机A要给主机D发送IP数据报,则主机A会将该IP数据报传送给自己的默认网关(路由器),当路由器收到IP数据报收进行转发。其转发流程为:
- 路由器会检查IP数据报的首部是否出错。
- 若出错,则丢弃该IP数据报,并通告源主机;
- 若没有出错,则进行转发
- 路由器根据IP数据报首部中的目的IP地址,在自己的路由表中查找匹配的路由条目。
- 若找到匹配的条目,则转发给条目中指示的下一跳;
- 若未找到匹配的条目,则丢弃该IP数据报并通告源主机。
路由器对该IP数据报进行查表转发
路由器是隔离广播域的
4.5 静态路由配置及其可能产生的路由环路问题
静态路由配置是指用户或网络管理员使用路由器的相关命令给路由器 人工配置路由表。其特点是简单、开销小,但 不能及时适应网络状态的变化,一般只在小规模网络中采用。
使用静态路由配置可能出现一下 导致 产生 路由环路的错误:
- 配置错误
- 聚合了不存在的网络
- 网络故障
4.5.1 静态路由配置概述
举例 在如图所示的网络拓扑和相应2的IP地址配置。
路由器R1通过自己的接口0所配置的IP地址和地址掩码,可以自动得出接口0所在的网络:由于接口0与192.168.1.0/24
网络直连,则下一跳不是路由器地址,而是通过接口0转发IP数据报给该网络中的某个主机,这条自动得出的路由条目的类型属于直连路由。同理R1 的接口1的目的网络为10.0.0.0/30
,R2的接口0的目的网络为10.0.0./30
,R2的接口1的目的网络为192.168.2.0/24
。
假设R1要转发一个IP数据报给192.168.2.0/24
网络中的某个主机,其操作流程为:通过路由器的相关命令,给R1添加一条到达192.168.2.0/24
网络的路由条目(即目的网络192.168.2.0/24
,下一跳 10.0.0.2
),然后R1就知道应该将IP数据报转发给路由R2的接口0。
4.5.2 默认路由
假设R1要转发一个IP数据报给因特网中某个主机,如果每一个网络均产生一个路由条目,那么会给人工配置带来巨大的工作量,并且使R1的路由表非常巨大。对于 具有相同下一跳的不同目的网络的路由条目,可以用一条默认路由条目来代替。默认路由条目中的目的网络地址为0.0.0.0/0
,地址掩码也为0.0.0.0
4.5.3 特定主机路由
有时候,我们可以给路由器添加针对某个主机的特定主机路由条目。一般用于网络管理人员对网络的管理和测试
4.5.4 静态路由配置错误导致路由环路
在路由器R2 中的人工配置的静态路由条目:目的网络192.168.1.0/24
,下一跳为10.0.0.1
。表面路由R2要转发IP数据报到 目的网络192.168.1.0/24
,下一跳应该转发给R1的接口1(IP地址为10.0.0.1
)。
假设错误的将下一跳指向了R3的接口0(IP地址10.0.1.2
)。则R2在转发的时候,会错误的转发给路由器R3的接口0。R3接收到数据报后,根据自己的路由表查表转发,发送给R2的接口1,…。由于静态路由配置错误导致R2和R3之间产生了路由环路。
4.5.5 聚合了不存在的网络而导致路由环路
聚合网络192.168.0.0/22
的产生:192.168.2.0/24
和192.168.1.0/24
两网络的共同前缀聚合而成
然而192.168.0.0/22
聚合了192.168.0.0/24
(不存在)、192.168.1.0/24
、192.168.2.0/24
和192.168.3.0/24
(不存在)。当R2要转发到这个不存在的网络时,会走默认路由,即0.0.0.0/0
,R2的接口0。从而导致路由环路。
解决方法:添加针对所聚合的、不存在的网络的黑洞路由 null0
。
4.5.6 网络故障而导致路由环路
假设路由器R1检擦到其接口 0 所直连的网络出现了故障而不可达,就会自动在其路由表中删除该直连网络的路由条目。
解决方法:添加故障的网络为黑洞路由
4.6 路由选择协议
4.6.1 概述
路由选择可分为静态路由选择和动态路由选择两类:
静态路由选择
-
由人工配置的网络路由、默认路由、特定主机路由、黑洞路由等都属于静态路由。
-
这种人工配置方式简单、开销小。但不能及时适应网络状态(流量、拓扑等)的变化。
-
一般只在小规模网络中采用。
动态路由选择
-
路由器通过路由选择协议自动获取路由信息。
-
比较复杂、开销比较大。能较好地适应网络状态的变化。
-
适用于大规模网络。
因特网所采用的路由选择协议的主要特点
自治系统 AS:在单一的技术管理下的一组路由器,而这些路由器使用一种 AS 内部的路由选择协议和共同的度量以确定分组在该 AS 内的路由,同时还使用一种 AS 之间的路由选择协议用以确定分组在 AS之间的路由
自治系统之间的路由选择简称为域间路由选择,自治系统内部的路由选择简称为域内路由选择
域间路由选择使用外部网关协议EGP这个类别的路由选择协议
域内路由选择使用内部网关协议IGP这个类别的路由选择协议
网关协议的名称可称为路由协议
常见的路由协议
路由器的基本结构:路由器是一种具有多个输入端口,和输出端口的专用计算机,其任务是转发分组
4.6.2 路由选择协议RIP的基本工作原理
路由信息协议RIP(Routing Information Protocol)是内部网关协议IGP中最先得到广泛使用的协议之一,其相关标准文档为RFC 1058。
RIP要求自治系统AS内的每一个路由器都要维护从它自己到AS内其他每一个网络的距离记录。这是一组距离,称为“距离向量D-V(Distance-Vecton)"。
RIP使用跳数(Hop Count)作为度量(Metric)来衡量到达目的网络的距离。
-
路由器到直连网络的距离定义为1。
-
路由器到非直连网络的距离定义为所经过的路由器数加1。
允许一条路径最多只能包含15个路由器。“距离”等于16时相当于不可达。因此,RIP只适用于小型互联网。 -
RIP认为好的路由就是“距离短”的路由,也就是所通过路由器数量最少的路由。
- 当到达同一目的网络有多条“距离相等”的路由时,可以进行等价负载均衡。即将通信量均衡地分布到多条等价的路由上。
RIP包含以下三个要点:
- 和谁交换信息 仅和相邻路由器交换信息
- 交换什么信息 自己的路由表
- 何时交换信息 周期性交换(例如每30秒)
RIP的路由条目的更新规则
路由器C的表到达各目的网络的下一条都记为问号,可以理解为路由器D并不需要关心路由器C的这些内容
假设路由器C的RIP更新报文发送周期到了,则路由器C将自己路由表中的相关路由信息封装到RIP更新报文中发送给路由器D。
路由器C能到达这些网络,说明路由器C的相邻路由器也能到达,只是比路由器C的距离大1,于是根据距离的对比,路由器D更新自己的路由表
RIP存在“坏消息传播得慢”的问题
4.6.2 开放最短路径优先 OSPF (Open Shortest Path First)
开放最短路径优先OSPF(Open Shortest Path First),是为克服RIP的缺点在1989年开发出来的。
-
“开放”表明OSPF协议不是受某一家厂商控制,而是公开发表的。
-
“最短路径优先”是因为使用了Dijkstra提出的最短路径算法SPF。
OSPF是基于链路状态的,而不像RIP那样是基于距离向量的。
OSPF采用SPF算法计算路由,从算法上保证了不会产生路由环路。
OSPF不限制网络规模,更新效率高,收敛速度快。
链路状态是指本路由器都和哪些路由器相邻,以及相应链路的**“代价”(cost)**。
- “代价”用来表示费用、距离、时延、带宽,等等。这些都由网络管理人员来决定。
举例
思科路由器中OSPF计算代价的方法:100Mbps/链路带宽,计算结果小于1的值仍记为1;大于1且有小数的,舍去小数。
4.6.2.1 问候(Hello)分组
OSPF相邻路由器之间通过交互问候(Hello)分组,建立和维护邻居关系。
-
Hello分组封装在IP数据报中,发往组播地址
224.0.0.5
; IP数据报首部中协议号字段的取值应为89,来表明IP数据报的数据载荷为OSPF分组。 -
发送周期为10秒
-
40秒未收到来自邻居路由器的Hello分组,则认为该邻居路由器不可达。
4.6.2.2 链路状态通告LSA(Link State Advertisement
使用OSPF的每个路由器都会产生链路状态通告LSA(Link State Advertisement)。LSA中包含以下内容:
- 直连网络的链路状态信息
- 邻居路由器的链路状态信息
LSA被封装在链路状态更新分组LSU中,采用洪泛法发送。洪泛法有点类似于广播,就是从一个接口进来,从其他剩余所有接口出去
4.6.2.3 链路状态数据库同步
使用OSPF的每个路由器都有一个链路状态数据库LSDB,用于存储LSA。
通过各路由器洪泛发送封装有自己LSA的LSU分组,各路由器的LSDB最终将达到一致。
4.6.2.4 使用SPF算法计算出各自路由器到达其他路由器的最短路径
使用OSPF的各路由器基于LSDB进行最短路径优先SPF计算,构建出各自到达其他各路由器的最短路径,即构建各自的路由表。
网络拓扑结构如下图,各链路条的数字代表代价,通过各路由器洪泛发送封装有自己链路状态通告的链路状态更新分组,各路由器最终会得出相同的链路状态数据库。由链路状态数据库可以得出带权有向图,对该图进行基于Dijkstra的最短路径优先算法,就可以得出各路由器为根的最短路径,如下四图。
4.6.2.5 OSPF分组类型
OSPF有以下五种分组类型
- 类型1,问候(Hello)分组 用来发现和维护邻居路由器的可达性。
- 类型2,数据库描述(Database Description)分组 向邻居路由器给出自己的链路状态数据库中的所有链路状态项目的摘要信息
- 类型3,链路状态请求(Link State Request)分组 向邻居路由器请求发送某些链路状态项目的详细信息。
- 类型4,链路状态更新(Link State Update)分组 路由器使用这种分组将其链路状态进行洪泛发送,即用洪泛法对全网更新链路状态。
- 类型5,链路状态确认(Link State Acknowledgment)分组 这是对链路状态更新分组的确认分组。
4.6.2.6 OSPF的基本工作过程
相邻路由器之间,周期性发送问候分组,以便建立和维护邻居关系。建立邻居关系后,给邻居路由器发送数据库描述分组,即将自己的链路状态数据库中的所有链路状态项目的摘要信息发送给邻居路由器,最终链路状态数据库达到同步。每30分钟或链路状态发生变化时,路由器都会发送链路状态更新分组,收到该分组的其他路由器将洪范转发该分组,并给该路由器发挥链路状态确认分组,即新情况下的链路状态数据库同步。
4.6.2.7 OSPF在多点接入网络中路由器邻居关系建立
如果不采用其他机制,将会产生大量的多播分组
为了使OSPF能够用于规模很大的网络,OSPF把一个自治系统再划分为若干个更小的范围,叫做区域(Area)
在该自治系统内,所有路由器都使用OSPF协议,OSPF将该自治系统再划分成4个更小的区域。每个区域都有一个32比特的区域标识符。主干区域的区域标识符必须为0,主干区域用于连通其他区域。其他区域的区域标识符不能为0且不相同。每个区域一般不应包含路由器超过200个。
划分区域的好处就是,利用洪泛法交换链路状态信息局限于每一个区域而不是自治系统,这样减少整个网络上的通信量。
4.6.3 边界网关协议BGP(Border Gateway Protocol)
在配置BGP时,每个自治系统的管理员要选择至少一个路由器作为该自治系统的**“BGP发言人”**
不同自治系统的BGP发言人要交换路由信息,首先必须建立TCP连接,端口号为179
- 在此TCP连接上交换BGP报文以建立BGP会话
- 利用BGP会话交换路由信息(例如,增加新的路由,或撤销过时的路由,以及报告出错的情况等)
- 使用TCP连接交换路由信息的两个BGP发言人,彼此称为对方的邻站(neighbor)或对等站(peer)
BGP发言人除了运行BGP外,还必须运行自己所在自治系统所使用的内部网关协议IGP,例如OSPF或RIP。
BGP发言人交换网络可达性的信息(要到达某个网络所要经过的一系列自治系统)
当BGP发言人互相交换了网络可达性的信息后,各BGP发言人就根据所采用的策略从收到的路由信息中找出到达各自治系统的较好的路由。也就是构造出树形结构、不存在回路的自治系统连通图.
4.6.3.1 BGP适用于多级结构的因特网
4.6.3.2 BGP-4有以下四种报文
OPEN(打开)报文:用来与相邻的另一个BGP发言人建立关系,使通信初始化。
UPDATE(更新)报文:用来通告某一路由的信息,以及列出要撤销的多条路由。
KEEPALIVE(保活)报文:用来周期性地证实邻站的连通性。
NOTIFICATION(通知)报文:用来发送检测到的差错。
4.6.3.3 直接封装RIP、OSPF和BGP报文的协议
4.7 IPv4数据报的首部格式
-
一个 IP 数据报由首部和数据两部分组成。
-
首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。
-
在首部的固定部分的后面是一些可选字段,其长度是可变的。
图中的每一行都由32个比特(也就是4个字节)构成,每个小格子称为字段或者域,每个字段或某些字段的组合用来表达IP协议的相关功能
版本
占4比特,表示IP协议的版本。通信双方使用的IP协议的版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)。
首部长度
占4比特,表示lP数据报首部的长度。该字段的取值以4字节为单位。
最小十进制取值为5,表示IP数据报首部只有20字节固定部分;一个单位为4字节比如这4*5=20字节
最大十进制取值为15,表示IP数据报首部包含20字节固定部分和最大40字节可变部分。
可选字段
长度从1个字节到40个字节不等。用来支持排错、测量及安全等措施。
可选字段增加了IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。这就增加了每一个路由器处理IP数据报的开销。实际上可选字段很少被使用。
填充字段
确保首部长度为4字节的整数倍。使用全0进行填充。 IP数据报的首部长度一定是4字节的整数倍,因为首部中的可选字段的长度从1个字节到40个字节不等,那么,当20字节的固定部分加上1到40个字节长度不等的可变部分,会造成首部长度不是4字节整数倍时,就用取值为全0的填充字段填充相应个字节,以确保IP数据报的首部长度是4字节的整数倍。
区分服务
占8比特,用来获得更好的服务。该字段在旧标准中叫作服务类型,但实际上一直没有被使用过。1998年,因特网工程任务组IETF把这个字段改名为区分服务。利用该字段的不同数值可提供不同等级的服务质量。只有在使用区分服务时,该字段才起作用。一般情况下都不使用该字段。
总长度
占16比特。表示IP数据报的总长度(首部+数据载荷)。最大取值为十进制的65535,以字节为单位。
如:
总长度为0000 0011 1111 1100
,首部长度为0101
则 首 部 长 度 为 = ( 0101 ) 2 × 4 = 20 ( 字 节 ) 首部长度为=(0101)_2\times4=20 (字节) 首部长度为=(0101)2×4=20(字节)
总 长 度 = ( 0000001111111100 ) 2 = 1020 ( 字 节 ) 总长度=(0000 0011 1111 1100)_2=1020 (字节) 总长度=(0000001111111100)2=1020(字节)
数 据 载 荷 长 度 = 总 长 度 − 首 部 长 度 = 1020 − 20 = 1000 ( 字 节 ) 数据载荷长度=总长度-首部长度=1020-20=1000 (字节) 数据载荷长度=总长度−首部长度=1020−20=1000(字节)
4.7.1 分片
标识、标志和片偏移三个字段共同用于IP数据报分片。网际层封装的数据报,将在数据链路层封装成帧,每一种数据链路层协议都规定了帧的数据载荷的最大长度,称为最大传输单元(MTU)。
标识
占16比特,属于同一个数据报的各分片数据报应该具有相同的标识。
IP软件维持一个计数器,每产生一个数据报,计数器值加1,并将此值赋给标识字段。
标志
占3比特,各比特含义如下:
- DF位:1表示不允许分片; 0表示允许分片
- MF位: 1表示“后面还有分片";0表示“这是最后一个分片”
- 保留位:必须为0
片偏移
占13比特,指出分片数据报的数据载荷部分偏移其在原数据报的位置有多少个单位。
片偏移以8个字节为单位。
现在假定分片2的IP数据报经过某个网络时还需要进行分片
4.7.2 生存时间TTL
占8比特,最初以秒为单位,最大生存周期为255秒;路由器转发IP数据报时,将IP数据报首部中的该字段的值减去IP数据报在本路由器上所耗费的时间,若不为0就转发,否则就丢弃。
现在以“跳数”为单位,路由器转发IP数据报时,将IP数据报首部中的该字段的值减1,若不为0就转发,否则就丢弃。
生存时间TTL字段的作用——防止IP数据报在网络中永久兜圈。
4.7.3 协议
占8比特,指明lPv4数据报的数据部分是何种协议数据单元。常用的一些协议和相应的协议字段值如下。
协议名称 | ICMP | IGMP | TCP | UDP | IPv6 | OSPF |
---|---|---|---|---|---|---|
协议字段值 | 1 | 2 | 6 | 17 | 41 | 89 |
举例,当协议字段取值为6时,表面数据部分是TCP报文段,也就是用TCP协议封装的协议数据单元。
4.7.6 首部检验和
占16比特,用来检测首部在传输过程中是否出现差错。比CRC检验码简单,称为因特网检验和。
IP数据报每经过一个路由器,路由器都要重新计算首部检验和,因为某些字段(生存时间、标志、片偏移等)的取值可能发生变化。
由于IP层本身并不提供可靠传输的服务,并且计算首部校验和是一项耗时的操作,因此在IPv6中,路由器不再计算首部校验和,从而更快转发IP数据报。
4.7.7 源IP地址和目的IP地址
各占32比特,用来填写发送该IP数据报的源主机的IP地址和接收该IP数据报的目的主机的IP地址。
4.8 网际控制报文协议ICMP
为了更有效地转发IP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP(Internet Control Message Protocol)。
主机或路由器使用ICMP来发送差错报告报文和询问报文。
ICMP报文被封装在IP数据报中发送。
ICMP差错报告报文共有以下五种:
- 终点不可达
- 源点抑制
- 时间超过
- 参数问题
- 改变路由(重定向)
常用的ICMP询问报文有以下两种:
- 回送请求和回答
ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。
这种询问报文用来测试目的站是否可达及了解其有关状态。 - 时间戳请求和回答
ICMP时间戳请求报文是请某个主机或路由器回答当前的日期和时间。在ICMP时间戳回答报文中有一个32位的字段,其中写入的整数代表从1900年1月1日起到当前时刻一共有多少秒。
这种询问报文用来进行时钟同步和测量时间。
4.8.1 ICMP差错报告报文
4.8.1.1 终点不可达
当路由器或主机不能交付数据报时,就向源点发送终点不可达报文。具体可再根据ICMP的代码字段细分为目的网络不可达.目的主机不可达、目的协议不可达、目的端口不可达、目的网络未知、目的主机未知等13种错误。
4.8.1.2 源点抑制
4.8.1.3 时间超过
4.8.1.4 参数问题
4.8.1.5 改变路由(重定向)
4.8.1.6 不应发送ICMP差错报告报文的情况
以下情况不应发送ICMP差错报告报文:
- 对ICMP差错报告报文不再发送ICMP差错报告报文
- 对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文口
- 对具有多播地址的数据报都不发送ICMP差错报告报文
- 对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告报文
4.8.6 ICMP应用举例
4.8.6.1 分组网间探测ping(Packet InterNet Groper)
4.8.6.2 跟踪路由traceroute
tracert命令的实现原理
4.9 虚拟专用网VPN与网络地址转换NAT
4.9.1 虚拟专用网VPN(Virtual Private Network)
利用公用的因特网作为本机构各专用网之间的通信载体,这样的专用网又称为虚拟专用网。由于IPv4地址的紧缺,一个机构能够申请到的IPv4地址数量往往远小于本机构所拥有的主机数量。因此,虚拟专用网中的各主机所分配的地址应该是本机构可自由分配的专用地址,而不是需要申请的、在因特网上使用的公有地址。
无需申请的、可自由分配的专用地址,或称私有地址
10.0.0.0 ~ 10.255.255.255
(10/8地址块)
172.16.0.0 ~ 172.31.255.255
(172.16/12 地址块)
192.168.0.0~192.168.255.255
(192.168/16地址块)
本地地址与全球地址
私有地址只能用于一个机构的内部通信,而不能用于和因特网上的主机通信。私有地址只能用作本地地址而不能用作全球地址。因特网中所有路由器对目的地址是私有地址的IP数据报一律不进行转发
- 本地地址——仅在机构内部使用的 IP 地址,可以由本机构自行分配,而不需要向互联网的管理机构申请。
- 全球地址——全球唯一的 IP 地址,必须向互联网的管理机构申请。
所以部门A和部门B至少需要一个 路由器具有合法的全球IP地址,这样各自的专用网才能利用公用的因特网进行通信
数据的传输流程
4.9.2 网络地址转换NAT
虽然因特网采用了无分类编址方式来减缓IPv4地址空间耗尽的速度,但由于因特网用户数目的激增,特别是大量小型办公室网络和家庭网络接入因特网的需求不断增加,IPv4地址空间即将面临耗尽的危险仍然没有被解除。
1994年提出了一种网络地址转换NAT的方法再次缓解了IPv4地址空间即将耗尽的问题。
NAT能使大量使用内部专用地址的专用网络用户共享少量外部全球地址来访问因特网上的主机和资源。
举例:使用私有地址的主机,如何才能与因特网上使用全球IP地址的主机进行通信?
这需要在专用网络连接到因特网的路由器上安装NAT软件
专有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址,这样,所有使用私有地址的主机在和外界通信时,都要在NAT路由器上将其私有地址转换为全球IP地址
该转换方法存在一个问题:如果NAT路由器具有N个全球IP地址,那么至多只能有N个内网主机能够同时和因特网上的主机通信。