概述
分组转发和路由选择
网络层的主要任务就是将分组从源主机经过多个网络和多段链路传输到目的主机。可以将这一任务划分为两种功能分组转发
和路由选择
$ {转发表} \Leftarrow {路由表} \Leftarrow {路由选择处理机(通过路由选择协议)}$
网络层向其上层提供的两种服务
面向连接的虚电路服务
核心思想
:可靠通信应有网路自身来保证
虚电路
:通信前,必须先建立网络层连接(虚电路),以保证通信双方所需要的一切网络资源,通信双方沿着已建立的虚电路发送分组.逻辑
上的连接,通信结束后,需要释放之前建立的虚电路。分组沿着这条逻辑连接按照存储转发方式
传送,而不是真正建立了一条物理连接。
无连接的数据报服务
-
核心思想
:可靠通信应由用户主机来保证 -
两台主机通信时不需要建立网络层连接
-
每个分组可走不同的路径
-
通信结束后,没有需要释放的连接
网际协议IP和异构网络互联
网际协议IP
异构网络互联
将众多异构网络连接起来面临很多问题
- 不同的网络接入机制
- 不同的差错恢复方法
- 不同的路由选择技术
- 不同的寻址方案
- 不同的最大分组长度
- 不同的服务(面向连接服务和无连接服务)
如果异构网络在网络层均使用IP协议
IPv地址及其编址方法
概述
- IPv4地址的编址经历了三个阶段
-
IPv4地址的表示方法
IPv4采用点分十进制表示方法
IPv4的分类编址方法
概念简介
I P 地址 : : = { < 网络号 > , < 主机号 > } {IP地址}::=\{{<网络号>,<主机号>}\} IP地址::={<网络号>,<主机号>}
eg:
可以看到主机H1和H2的网络号相同,所以他们处在同一网络中,H3和H4的网络号相同,所以他们处在同一个网络中
注意:
A
、B
、C
类地址都是单播地址
,只有个单播地址
可以分配给网络中的主机(或路由器)的各接口主机号
为全0
的地址是网络地址,不能分配给主机(或路由器)的各接口主机号
为全1
的地址是广播地址,不能分配给主机(或路由器)的各接口
A类网络
-
A类网络的网络号共8位,其中
第一位为0
-
最小网络号为0,表示本网络,
不能指派
,最小可指派的网络号为1,网络地址为1.0.0.0
-
最大网路号为127,作为本地环回测试地址,不能指派,最小的本地主机环回测试地址为
127.0.0.1
,最大的本地主机环回测试地址为127.255.255.254
-
可指派的A类网络数量为 2 8 − 1 − 2 = 126 2^{8 - 1} - 2 = 126 28−1−2=126 减二的原因如2、3上最大网络(127)和和最小网络号(0)不能被指派
-
每个A类网络中可以分配的地址数量 2 24 − 2 2^{24} - 2 224−2减二的原因是主机号全0的地址是网络地址,主机号全1的地址是广播地址
B类网络
- B类网络的网络号前两位固定为
10
,网络号为 16 16 16位 - 最小可指派网络号为
128.0
、最大可指派网络号为191.255
- B类网络可指派网络数量为 2 16 − 2 = 16384 2^{16-2} = 16384 216−2=16384
- 每个B类网络中可分配地址数量为 2 16 − 2 2^{16} - 2 216−2,这是因为B类网络的主机号占16比特,因此主机号由 2 16 2^{16} 216个组合,减二的原因是要去掉主机号全0的网路地址和主机号全1的广播地址
C类地址
- C类网络的网络号前三位固定为
110
110
110,网络号位
24
位 - 最小可指派网络号为
192.0.0
,该网络的网络地址为192.0.0.0
- 最大可指派网络号为
223.255.255
,该网络的网络地址为223.255.255.0
- 可指派的C类网络数量为 2 21 2^{21} 221
- 每个C类网络中可分配的地址数量为 2 8 − 2 = 254 2^{8} - 2 = 254 28−2=254
IPv4地址的划分子网编址方法
IPv4分类编址方法不够灵活、容易造成大量IPv4地址资源浪费
子网掩码
-
子网掩码可以表明分类IPv4地址的主机号部分被借用了几个比特作为子网号
-
子网掩码由32比特构成
- 用左起多个连续的比特1对应IPv4地址中的网络号和子网号
- 之后的多个连续的比特0对应IPv4地址中的主机号
默认子网掩码
A 类: 255.0.0.0 A类:255.0.0.0 A类:255.0.0.0
B 类: 255.255.0.0 B类:255.255.0.0 B类:255.255.0.0
C 类: 255.255.255.0 C类:255.255.255.0 C类:255.255.255.0
无分类编址方法
无分类编址方法使用的地址掩码
与划分子网使用的子网掩码
类似,由32比特构成
- 用左起多个连续的1对应IPv4地址中的
网络前缀
- 之后的多个连续的0对应IPv4地址中的
主机号
-
斜线记法
:简化的无分类编址表示,不采用点分十进制,而是在无分类编址的IPv4地址后面加上/
,在斜线后面写上网络前缀所占的比特数 -
CIRD
:无分类域间路由选择
CIRD是将网络前缀都相同、连续的多个无分类IPv4地址,组成一个CIRD地址块
,只要知道CIRD地址块中的任何一个地址就可以知道该地址快的以下全部细节-
地址块中的最小地址
-
地址块中的最大地址
-
地址块中的地址数量
-
地址块中聚合某类网络(A类、B类、C类)的数量
-
地址掩码
-
-
路由聚合
IPv4地址的规划
概述
IPv4地址的应用规划是指将给定的IPv4地址块(或分类网络)划分成更小的地址块(或子网),并将这些地址块(或子网)分配给互联网中的不同网路,进而可以给各网络中的主机和路由器接口分配IPv4地址,一般有两种方法,一是采用定长的子网掩码
,二是采用变长子网掩码
使用定长子网掩码
容易造成地址浪费
使用变长子网掩码
IPv4地址与MAC地址
数据包在传送过程中IPv4地址与MAC地址的变化情况
-
在数据包传送过程中,数据包的源IP地址和目的IP地址保持不变
-
在数据包传送过程中,数据包的源MAC地址和目的MAC地址逐链路或逐网络改变
地址解析协议ARP
我们知道IP地址并不知道MAC地址,那么在数据链路层封装以太网帧时就无法填写目的MAC地址,如何由IP地址得到MAC地址是网际层地址解析协议ARP
要处理的问题。
ARP协议
提供和了一种从网际层的IP地址解析出数据链路层的硬件地址的方法
ARP解析过程
源主机ns56A以广播的形式发送ARP请求报文,当每个主机收到ARP请求报文后,发现报文中的请求的下一跳IP地址和自己相同时,以单播的形式发送ARP响应报文
ARP分组格式
交换机br56A上截获的ARP求情报文格式如下:
- ARP协议在设计时考虑了IP地址和各种类型的硬件地址的映射
- 实际应用中,ARP协议总是用于32位IPv4地址和以太网的48位MAC地址之间的映射
- 当用于IP地址到MAC地址解析时,ARP分组的总长度28字节
硬件类型、协议类型
- 硬件类型
- 占两字节,指出数据链路层地址的类型
- 在本例中为1,表示以太网MAC地址
- 协议地址类型
- 占两字节,指出网络层地址的类型
- 在本例中为0x0800,表示IPv4协议
操作码
操作码
:占两个字节,取值为1表示是ARP请求分组,取值为2表示是ARP响应分组
发送方/接收方硬件/协议地址
ARP缓存
-
ARP缓存用来存放IP地址和MAC地址之间的
最新映射
-
每台主机或路由器的每个网络接口都维护一张ARP缓存表
-
ARP缓存表主要包括三个字段
- IP地址
- MAC地址
- 生存时间
- 当主机需要解析IP地址对应的MAC地址时,首先查询本机的ARP缓存表,只有在查询不到时,才发起广播形式ARP请求
-
ARP缓存的更新和删除策略
- 更新:一台主机发送ARP请求并得到响应后,会将对方的IP地址和MAC地址映射记录在自己的ARP缓存表中,一台主机响应其他主机的ARP请求,将请求方的IP地址和MAC地址记录在主机的ARP缓存表中如果一台主机收到的ARP请求中的发送方IP地址已经在本机的ARP缓存表中,这台主机会将发送方IP地址和MAC地址更新在ARP缓存表中
- 删除:当生存时间超过规定的时间后,ARP缓存记录将被删除。在RFC1122中,规定了ARP缓存的验证方法。主机采用单播轮询方式,周期性地向远程主机发送单播ARP请求。如果连续两次单播ARP请求都未收到对方的ARP响应,则删除相应ARP缓存记录。
IP数据报的发送和转发流程
主要包含一下两个过程:
- 主机发送IP数据报
- 路由器转发IP数据报
IP数据报的首部格式
- IPv4数据报首部包含固定部分和可变部分
- 固定部分是每个IP数据报都要包含的部分,占20字节
- 可选部分是用来扩展IPv4功能的
版本
- 长度为4比特,用来表示IP协议的版本
- 通信双方使用的IP协议必须一致,目前广泛使用的IP协议的版本号是4即IPv4
首部长度
- 长度为4比特,该字段的取值以
4字节
为单位,用来表示IPv4数据报的首部长度,最小取值为0101B(十进制下的5),再乘以4字节即20字节,表示IPv4数据报首部只有20字节固定部分,最大取值为1111B(十进制下的15),再乘以4字节即60字节,表示IPv4数据报首部包含20字节固定部分和`最大40字节可变部分
可选字段
长度为1字节到40字节不等,用来支持排错、测量以及安全措施等功能,虽然可选字段增加了IPv4数据报的功能,但这同时也使得IPv4数据报首部的长度成为可变的,增加了因特网中每个路由器处理IPv4数据报的开销
实际上,可选字段很少被用到
填充字段
用来确保IPv4数据报的首部长度是四字节的整数倍,使用全0进行填充
区分服务字段
- 长度为8比特,用来获得更好的服务,一般情况下不使用该字段
总长度字段
长度为16比特,该字段的取值以字节为单位,用来表示IPv4数据报的长度 (首部长度 + 数据载荷长度) (首部长度+数据载荷长度) (首部长度+数据载荷长度)最大取值为 2 16 − 1 = 65535 2^{16} - 1 = 65535 216−1=65535
标识、标志、片偏移
IPv4数据报分片
数据链路层规定了帧的最大数据载荷
即最大传送单元MTU
,当IPv4数据报长度超过MTU
时无法封装成帧。需要将原IPv4数据报分片乘更小的IPv4数据报,再将各分片数据包封装成帧。
标识
、标志
、片偏移
这三个字段共同用于IPv4数据报的分片
- 标识:长度为16比特,属于同一个IPv4数据报的各分片数据报应具有
相同的标识
,IP软件会维持一个计数器,每产生一个IPv4数据报,计数器值就加1,并将此值赋给标识字段 - 标志: M F , M F = 1 表示本分片之后还有分片, M F = 0 表示本分片之后没有分片 中间位 D F , D F = 1 表示不允许分片 中间位为 0 表示允许分片 最高位为保留位必须设置为 0 MF,MF=1表示本分片之后还有分片,\\ MF=0表示本分片之后没有分片\\中间位DF,DF = 1表示不允许分片\\中间位为0表示允许分片\\最高位为保留位必须设置为0 MF,MF=1表示本分片之后还有分片,MF=0表示本分片之后没有分片中间位DF,DF=1表示不允许分片中间位为0表示允许分片最高位为保留位必须设置为0
片偏移
:长度为13个比特,该字段的取值以8字节为单位
,用来指出分片IPv4数据报的数据载荷偏移其原IPv4数据报的位置有多远,只能为整数
生存时间(TTL)
长度为8比特,最大取值为
2
8
−
1
=
255
2^8 - 1 = 255
28−1=255,该字段的取值最初以秒为单位,后改为以跳数
为单位,路由器收到待转发的IPv4数据报时,将其首部中该字段的值减1,结果不为0就转发,否则就丢弃
协议字段
长度为8个比特,用来指明IPv4数据报的数据载荷是何种数据单元PDU
首部检验和
长度为16比特,用于检验IPv4数据报在传输过程中其首部是否出现了差错
IPv4数据报每经过一个路由器,其首部中的某些字段的值(如生成时间TTL、标志、片偏移等)都可能发生变化,因此路由器都要重新计算一下首部检验和
二进制反码求和的运算,两个二进制反码求和的运算规则是从低位向高位逐列计算,0和0相加是0,0和1相加是1,1和1相加是0,但要产生一个仅为1,加到下一列,若最高位相加后产生进位,则最后得到的结果要加1
IPv6中不再计算检验和
源IP地址和目的IP地址
- 源IP地址:长度为32个比特,用来填写发送IPv4数据报的源主机
- 目的IP地址:长度为32个比特,用来填写接收IPv4数据报的目的主机
静态路由配置
默认路由
我们知道因特网中有海量的路由,我们并不能手动为每个网络都去配置静态路由
特定主机路由
路由选择协议
概述
路由选择分类
-
静态路由选择
- 采用人工配置的方式给路由器添加网络路由、默认路由、和特定主机路由等路由条目
- 静态路由选择简单、开销小,但不能及时适应网络状态(流量、拓扑等)的变化
- 一般只在小规模网络中应用
-
动态路由选择
- 路由器通过路由选择协议自动获取路由选择信息
- 动态路由选择比较复杂、开销大,但能较好地适应网络状态的变化
- 一般在大规模网络中应用
因特网采用分层次的路由选择协议
因特网采用的路由选择协议主要有一下三个特点
-
自适应:因特网采用动态路由选择,能较好地适应网络变化
-
分布式:因特网中的各路由器通过相互间的信息交互,共同完成路由信息的获取和更新
-
分层次:将整个因特网划分成许多较小的
自治系统(AS)
例如一个较大的因特网服务提供商ISP就可划分为一个自治系统,在自治系统的内部和外部采用不同的路由选择协议,分别进行路由选择
-
一个自治系统内部的网络采用
内部网关协议IGP
进行路由选择 -
自治系统之间的网络采用
外部网关协议EGP
进行路由选择 -
IGP
、EGP
只是路由选择协议的分类名称而不是具体的路由选择协议 -
外部网关协议和内部网关协议名称中使用的是
网关
,因为早期的RFC文档中,没有使用路由器
而是使用网关这一名词
路由信息协议RIP
基本概念
距离向量D-V
:RIP要求自治系统AS内的每一个路由器,都要维护从它自己到AS内其他每一个网络的距离记录,这是一组距离,称为距离向量(Distance-Vector,D-V)跳数
:RIP使用跳数作为度量来衡量到达目的网络的距离- RIP将路由器到直连网络的距离定义为1
- RIP将路由器到非直连网络的距离定义为所经过的路由器数+1
- RIP允许一条路径最多只能包含15个路由器,距离等于16时相当于不可达。因此RIP只适用于小型互联网
RIP认为好的路由 = "距离短"的路由
当到达同一目的网络有多条RIP距离相等的路由时,可以进行等价负载均衡,也就是将通信量均衡地分布到多条等价的路径上
RIP的三个重要特点
-
仅和相邻路由器交换信息
-
交换路由器自己的路由表,即本路由器到所在自治系统AS中个各网络的最短RIP距离,以及到各网络英国的下一跳路由器
-
周期性交换信息:为了加快RIP的收敛速度,当网络拓扑发生变化时,路由器要即使向相邻路由器通告拓扑变化后的路由信息,这称为
触发更新
OSPF开放最短路径优先协议
基本概念
开放最短路径优先是为了克服路由信息协议RIP
开发出来的
开放
:表示OSPF协议不是受某一厂商控制,而是公开发表最短路径优先
:是指使用Dijkstra提出的最短路径优先算法
开放最短路径优先只是一个协议的名称,并不代表别的路由选择协议使用的不是最短路径优先原则
-
OSPF
是基于链路状态的,不像RIP
是基于距离向量的 -
OSPF
不限制网络规模,更新效率高,收敛速度快 -
链路状态(LS)
:指本路由器和哪些路由器相邻,以及相应链路的代价- 代价用来表示费用、距离、时延和带宽等,这些由网络管理人员决定
OSPF相邻路由器之间通过交互问候(hello)分组
来建立和维护邻居关系
1. 问候分组
封装在IP数据报中,发往组播地址224.0.0.5
,IP数据报首部 中的协议号字段的取值为89,表明IP数据报中的数据载荷为OSPF分 组
OSPF分组直接使用网际层的IP数据报进行封装,RIP报文使用运输层用户数据报协议UDP进行封装,从数据包按网络体系结构逐层封装的角度看,OSPF属于网际层协议而RIP属于应用层协议
-
问候分组的发送周期为10秒
-
若40秒未收到来自邻居路由器的问候分组则认为邻居路由器不可达
-
每个路由器都会建立一张邻居表
链路状态通告
使用OSPF的每个路由器都会产生链路状态通告LSA
LSA
包含一下两类链路状态信息
-
直连网络的链路状态信息
-
邻居路由器的链路状态信息
链路状态更新分组
链路状态通告LSA被封装在链路状态更新分组LSU
中,采用可靠的洪泛法(Flooding)进行发送
洪泛法的要点是路由器向自己所有邻居路由器发送链路状态更新分组,收到该分组的路由器又将该分组转发给自己所有的邻居路由器(但其上游路由器除外),依次类推
可靠是指收到链路状态更新分组后要发送确认,收到重复的更新分组无需再次转发,但要发送一次确认
链路状态数据库LSDB
使用OSPF的每一个路由器都有一个链路状态数据库,用于存储链路状态通告
通过各路由器洪泛发送封装又各自链路状态通告的链路状态更新分组,各路由器的链路状态数据库最终将达到一致
基于链路状态数据库进行最短路径优先计算
使用OSPF的各路由器,基于链路状态数据库LSDB进行最短路径优先计算,构建出各自到达其他路由器的最短路径,即构建各自的路由表
OSFP的五种分组类型
- 问候:用来发现和维护邻居路由器的可达性
- 数据库描述:用来向邻居路由器给出自己的数据链路状态数据库的所有链路状态项目的摘要信息
- 链路状态请求:用来向邻居路由器请求发送某些链路状态项目大的详细信息
- 链路状态更新:路由器使用链路状态更新分组将其链路状态信息洪泛发送,即用洪泛法对整个系统进行链路状态更新
- 链路状态确认:对链路状态更新的确认分组
基本工作过程
多点接入网络中的OSPF路由器
在多点接入网络中,每台路由器和其余路由器均互为邻居关系
为了减少发送问候分组和链路状态更新分组的数量,OSPF采用选举指定路由器DR
和备用的指定路由器BDR
,所有的非DR/BDR
只与DR/BDR
建立邻居关系
OSPF划分区域
为了使OSPF协议能够用于规模很大的网络,OSPF把一个自治系统AS
划分成若干更小的范围,称为区域
划分区域的好处:把利用洪泛法交换链路状态信息的范围局限于每一个区域,而不是整个自治系统AS,这样就减少了整个网络上的通信量
边界网关协议BGP
基本概念
- 边界网关协议BGP,属于外部网关协议EGP这个类别,用于自治系统AS之间的路由选择协议
- 由于在不同AS内度量路由代价(距离、带宽、费用等)可能不同因此对于AS之间的路由选择,再使用统一的代价作为度量来 寻找最佳路由是不行的
没有同一的路由度量,因此寻找最佳路由是无意义的
- AS之间的路由选择还必须考虑相关策略(政治、经济、安全等)
自治系统之间的路由选择协议应当允许使用多种路由选择策略,包括政治、经济、安全等,它们都是由网络管理人员对每一个路由器进行设置的。但这些策略并不是自治系统之间的路由选择协议本身
综上BGP只能是
力求
寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而非要寻找一条最佳路由
-
BGP发言人:在配置BGP时,每个AS的管理员要选择至少一个路由器作为该AS的BGP发言人,BGP发言人一般往往选择BGP边界路由器
不同AS的BGP发言人要交换路由信息,需要先建立TCP连接
,然后再在此连接的基础上建立BGP会话
,利用BGP会话
交换路由信息
利用BGP会话交换路由信息的两个BGP发言人
,彼此称为对方的邻站或对等站
BGP-4的四种报文
-
打开报文:用来与相邻的另一个BGP发言人建立关系,使通信初始化
-
保活报文:用来周期性证实邻站的连通性
-
更新报文:用来通告某一条路由的信息,以及列出要撤销的多条路由
-
通知报文:用来发送检测到的差错
网际控制报文协议ICMP
网际控制报文协议概述
- 为了更有效地转发IP数据报以及提高IP数据报交付成功的机会,TCP/IP体系结构的网际层使用了网际控制报文协议
- 主机或路由器使用ICMP来发送差错报文和询问报文
- ICMP报文被封装在
IP数据报
中发送
ICMP报文类型
差错报告报文
-
终点不可达:当路由器或主机不能交付IP数据报时,就向源点发送终点不可达报文,具体可再根据ICMP的代码字段细分为目的网络不可达、目的主机不可达、目的协议不可达、目的端口不可达、目的网络未知、目的主机未知等13种
-
源点抑制:当路由器或主机由于拥塞而丢弃IP数据报时,就向发送该IP数据报的源点发送源点抑制报文,使源点知道应当把IP数据报的发送速率放慢
-
超时:当路由器收到一个目的IP地址不是自己的IP数据报时,会将其首部中的生存时间TTL字段的值减1,若结果不为0,则路由器将该数据报转发出去。若结果为0,路由器不但要丢弃该数据报,还要向发送该数据报的源点发送超时差错报告报文
-
参数问题:当路由器或主机收到IP数据报后,根据其首部中的检验和字段的值发现首部在传送过程中出现了误码,就丢弃该数据报,并向发送该数据报的源点发送参数问题报文
-
重定向:路由器把改变路由报文发送给主机,让主机知道下次应将IP数据报发送给另外的路由器,这样可以通过更好的路由到达目的主机
不产生差错报告报文的情况
- ICMP差错报告报文
- 对第一个IP分片以外的其他IP数据报片
- 对于有多播地址的IP数据报都不发送ICMP差错报告报文
- 对具有特殊地址127.0.0.0或0.0.0.0的数据报不发送ICMP差错报文
询问报文
回送请求和回答
由主机或路由器向一个特定的目的主机或路由器发出,收到此报文的主机或路由器必须给发送该报文的源主机或路由器发送ICMP回送回答
这种询问报文用来测试目的站是否可达,以了解其有关状态
时间戳请求和回答
用来请求某个主机或路由器回答当前的日期和时间
在ICMP时间戳回答报文中有一个32比特的字段,其中写入的整数代表从1900年1月1日起到当前时刻一共多少秒。
这种询问报文用来进行时钟同步和测量时间
ICMP的典型应用
分组网间探测PING
- ping时TCP/IP体系结构的应用层直接使用网际层ICMP的一个例子,他并不使用运输层TCP或UDP
- PING应用所使用的ICMP报文类型为回送请求和回答
跟踪路由
跟踪路由应用traceroute,用于探测IP数据报从源主机到达目的主机要经过那些路由器
专用网络
虚拟专用网(VPN)
虚拟专用网:利用公用的因特网作为本机构各专用网之间的通信载体,这样形成的网络又称为虚拟专用网
给专用网内各主机配置的IP地址应该是该专用网所在机构可以自行分配的地址,这类地址仅在机构内部有效,称为专用地址,不需要向因特网的管理机构申请
虚拟
的含义:虽然两个专用网内的主机间发送的数据报是通过公用的因特网传送的,但从效果上就好像是本机构的专用网上传送一样
网络地址转换NAT
网络地址转换使用了减缓IPv4地址空间耗尽的速度
-
NAT能使大量使用内部专用地址的专用网络用户共享少量外部全球地址来访问因特网上的主机和资源‘
-
这种方法需要在专用网络连接到的因特网的路由器上安装NAT软件,装有NAT软件的路由器称为NAT路由器,它至少要有一个有效的外部全球地址IP,所有使用内部专用地址的主机在和外部因特网通信时,都要在NAT路由器上将其内部专用地址转换成 I P G IP_G IPG
NAPT
NAPT实现了一个全球IP地址支持多台专用网主机同时访问互联网