4.网络层
网络层
概述
网络层的主要任务是实现网络互连,进而实现数据包在各网络之间的传输
主要功能如下
- 转发信息
- 路由选择
- 拥塞控制
网络层提供的服务
面向连接的虚电路服务
核心思想是可靠通信由网络来保证
必须建立网络层的连接—–虚电路VC
目的主机的地址仅在连接建立阶段使用,之后每个分组的首部只需携带一条虚电路的编号
这种通信方式如果再使用可靠传输的网络协议,就可使所发送的分组最终正确到达接收方
通信结束后,需要释放之前所建立的虚电路
然而因特网并没有采用这种方法
无连接的数据报服务
可靠通信应当由用户主机来保证
不需要建立网络层连接
每个分组可走不同的路径
每个分组的首部必须携带目的分组的完整地址
这种通信方式所传送的分组可能误码,丢失,重复和失序
由于网络本身不采用端到端的可靠传输服务,所以网络中的路由器就可以做的比较简单,而且价格低廉,因特网采用了这种设计思想,将复杂的网络处理功能置于因特网的边缘,而将相对简单的尽最大努力的分组交付功能置于因特网核心
IPv4地址
概述
IPv4就是给因特网上每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的32比特的标识符
IP地址由因特网名字和数据分配机构ICANN进行分配
IPv4地址的编址方法经历了3个阶段:分类编址 划分子网 无分类编址
IPv4地址由32个比特组成,采用点分十进制表示方法以方便用户使用
分类编址的IPv4地址
分为A类地址 B类地址 C类地址 D类地址 E类地址
- 只有A类,B类,C类地址可以分配给网络各接口
- 主机号为全0的地址是网络地址,不能分配给主机或路由器接口
- 主机号为全1的地址是广播地址,不能分配给主机或路由器接口
A类
最小网络号0,保留不指派
第一个可指派的网络号为1,网络地址为1.0.0.0
最大网络号127,作为本地环回测试地址,不指派
B类
最小网络号也是第一个可指派的网络号128.0 网络地址为128.0.0.0
最大网络号也是最后一个可指派的网络号191.255 网络地址为191.255.0.0
C类
最小主机号也是第一个可指派的网络号192.0.0,网络地址为192.0.0.0
最大主机号也是最后一个可指派的网络号223.255.255,网络地址为223.255.255.0
A类,B类,C类里面分别有私有IP地址,这类地址不会被路由器识别,只适合用于内部通信
网段个数是指可以分配的网络号的数量
划分子网的IPv4地址
如果需要的IP地址个数在在变化,如果每次都要申请,会很浪费IP地址
可以从主机号部分借用一部分比特作为子网号,计算机需要知道主机号中有多少位作为了子网号,所以需要子网掩码
32bit的子网掩码可以表明分类IP地址的主机号部分被借用了几个比特作为子网号
- 子网掩码使用连续的比特1来对应网络号和子网号
- 子网掩码使用连续的比特0来对应主机号
- 将划分子网的IPv4地址与其相应的子网掩码进行逻辑与运算就可以得到IPv4所在子网的网络地址
子网号占据了多少个1说明就借用了几个比特,1个子网号可以划分2个子网
默认的子网掩码是指未划分子网的情况下使用的子网掩码
无分类编址的IPv4地址(CIDR)
数量巨大的C类网因为地址空间太小并没有得到充分的运用,而因特网的IP地址在加速消耗,整个IPv4地址空间面临全面耗尽的威胁
为此,因特网工程任务组IETF又提出了采用无分类编址的方法
无分类域间路由选择CIDR(Classless Inter-Domain Routing)
- CIDR消除了传统A类,B类和C类地址,以及划分子网的概念
- CIDR可以更加有效地分配IPv4的地址空间
CIDR采用斜线记法,在IPv4地址后面加上斜线,在斜线后面写上网络前缀所占的比特数量
CIDR实际上是将网络前缀都相同的连续的IP地址组成一个CIDR地址块
只要知道CIDR地址块中的任何一个地址,就可以知道该地址块的全部细节
- 地址块的最小地址,最大地址
- 地址块的地址数量
- 地址块聚合某类网络的数量
- 地址掩码
路由聚合(构造超网)
将有很多共同前缀的路由信息通过CIDR的方式打包发送给另一个路由
聚合地址块:172.1.4.0/22
网络前缀越长,地址块越小,路由越具体
如果路由器查表转发分组的时候发现有多条路由可选,则选择网络前缀最长的那条,称为最长前缀匹配,因为这样的路由更具体
IPv4地址的应用规划
根据网络中主机和路由器的数目可以进行IPv4地址的划分,有两种方式
定长的子网掩码FLSM(Fixed Length Subnet Mask)
- 使用同一个子网掩码来划分子网,每个子网分配的IP地址相同
如果网络中子网数目是n个,那么最少需要借用$log_2n$个比特充当子网掩码
如果网络中子网的最大主机数是x个,那么根据网络类型,要确保主机地址被借用后,也可以有足够的地址满足要求
变长的子网掩码VLSM(Variable Length Subnet Mask)
- 使用不同的子网掩码来划分子网,每个子网分配的IP地址不同
在分配地址的时候,每个子块的起点位置不能随意选取,只能选取块大小整数倍的地址作为起点
比如将101.200.16.0/20划分为5个子网,求最小子网的大小,101.200.16.0 的前20位是网络号,则第21位为0,划分为最大的第一块,从第21位开始,10是第二块同理,110是第三块 ,1110是第四块,1111第五块,最小的大小为$2^8=256$
IPv4数据报的首部格式
固定部分是每个IP数据报都要包含的内容,可变字段是可以根据需求添加的内容
- 版本
占4个比特,表示IP协议的版本,通信协议的IP协议版本必须一致,目前广泛使用的是IPv4
- 首部长度
占4比特,用来表示IP数据报首部的长度,该字段的取值以4字节为单位
最小10进制取值为5,表示只有20字节固定部分,最大10进制取值为15,表示20字节固定部分和最大400字节可变部分
- 区分服务
占8个比特,利用该字段的不同数值可提供不同等级的服务质量,一般情况下不使用
- 总长度
占16比特,表示IP数据报的总长度(首部+数据载荷)
最大取值为十进制的65535,以字节为单位
标识,标志,片偏移三个字段共同用于IP数据报分片
以太网的数据链路层规定MTU的值为1500字节,如果IP数据报的大小超过了这么多,就需要进行分片
- 标识
占16比特,属于同一个数据报的各分片数据报应该具有相同的标识
- 标志
占3个比特,各比特含义如下
DF(Don’t Fragment)位:1表示不允许分片 0表示允许分片
MF(More Fragment)位:1表示后面还有分片 0表示这是最后一个分片
保留位:必须为0
- 片偏移
占13个比特,指出分片数据报的数据载荷部分偏移其原数据报的位置有多少个单位
IP头部格式中的“总长度(16bit)”和“偏移(13bit)”两个字段所决定了片偏移量为8位,$2^{16}/2^{13}=2^3=8B$,(总长度和偏移都是以字节为单位)如果偏移单位小于8B,比如是4B,则8位的片偏移量不能准确表示出偏移,如果偏移单位大于8B,比如是16B,则只需要12个bit的偏移就能表示,而不需要13bit
因为片偏移量以8个字节为单位,所以除了最后一个分片外,其余分片的数据载荷必须是8的整数倍,在分片的时候需要注意
- 生存时间
占8个比特,以条数为单位,转发IP数据报时,将IP数据报首部中的该字段的值减1,若不为0则转发
- 协议
占8个比特,指明IPv4数据报的数据部分是何种协议数据单元
- 首部检验和
占16个比特,用来检测首部在传输工程中是否出现差错,比CRC检验码简单,称为因特网检验和
IP数据报每经过一个路由器,路由器都要重新计算首部检验和,因为某些字段可能会发生变化,在IPv6中不再计算检验和
- 源IP地址和目的IP地址
各占32比特,用来填写发送该IP数据报的源主机的IP地址和接收该IP数据报的目的主机的IP地址
- 可选字段
长度从1个字节到40个字节不等,用来支持排错,测量以及安全等措施,实际上很多被使用
- 填充字段
用来确保首部长度为4字节的整数倍,使用全0进行填充
IPv6
经过使用CIDR和NAT技术可以延缓IPv4地址的减少,但治标不治本,IPv4地址已经被用完了,基于此,产生了新的IP地址标准,即IPv6
首部格式
版本:指明了协议版本,总是6
优先级:区分数据报的类别和优先级
流标签:“流”是互联网络上从特定源点到特定终点的一系列数据报。所有属于同一个流的数据报都具有同样的流标签
下一个首部:标识下一个扩展首部或上层协议首部
跳数限制:相当于IPv4的TTL
名称 | IPv4 | IPv6 |
---|---|---|
地址 | 4B | 16B |
校验字段 | √ | × |
可选字段 | √ | 移出首部 |
配置 | DHCP | 自动配置 |
首部长度 | 4B的倍数 | 8B的倍数 |
分片 | 路由器和主机 | 主机 |
协议字段 | √ | × (改为下一个首部) |
总长度 | √ | ×(改为有效载荷长度) |
服务类型 | √ | × |
地址表示形式
使用冒号十六进制记法:4BFA:AA12:0216:FEBC:BA5F:039A:BE9A:2170
如果有很多0,可以直接用0:压缩,一连串的0可以被一对冒号取代
双协议栈技术指在一台设备上同时启用IPv4协议栈和IPv6协议栈
动态主机配置协议DHCP
动态主机配置协议DHCP(Dynamic Host Configuration Protocol)提供了一种机制,称为即插即用。这种机制允许一台计算机加入新网络时可自动获取IP地址等网络配置信息
在网络中配置DHCP服务器,让接入网络中的主机开机启动DHCP,就可以通过DHCP自动获取网络配置信息
DHCP的工作过程
DHCP采用C/S方式,是应用层协议,使用UDP所提供的服务,也就是说DHCP在运输层会被封装成UDP用户数据报,服务器使用的UDP端口是67,客户使用的UDP端口是68
DHCP广播发送DHCP发现报文,源IP地址为0.0.0.0,因为主机目前还未分配到IP地址,因此使用该地址代替,目的地址为255.255.255.255,因为主机不知道有几个DHCP服务器,也不知道它们的主机地址是多少,所以采用广播地址
在DHCP发现报文中,封装有事物ID和DHCP客户端的MAC地址,DHCP服务器收到了发现报文后,根据其中封装的DHCP客户端的MAC地址来查找自己的数据库,看是否有相关的配置信息,如果有,就使用这些配置信息来构建并发送DHCP提供报文,如果没有,则采用默认配置信息构建并发送DHCP提供报文
因为DHCP客户还没有IP地址,所以采用广播地址,DHCP客户会根据报文中的事物ID来判断是否是自己所请求的报文
如果DHCP客户接受到多个DHCP服务器报文,则会从中选择一个,并会向所选择的DHCP服务器发送DHCP请求报文
源IP地址为0.0.0.0,因为DHCP客户才选择了一个服务器作为自己的DHCP服务器,首先需要征得服务器的同意才能正式使用租用的IP地址
目的IP地址仍为广播地址,这样不用向网络中的每一个DHCP服务器发送DHCP请求报文,来告知他们是否被选择成为服务器
如果服务器接收该请求,则会给DHCP客户发送DHCP确认报文,DHCP收到该确认报文后,则会正式使用该IP地址
当租用期过了一半时,DHCP客户会向DHCP服务器发送DHCP请求报文,来请求更新租用期
如果DHCP服务器同意延长,则会更新租用期,若不同意,则立即停止使用租用的IP地址,并重新发送发现报文,如果服务器不响应,则在0.875倍租用期的时候重新发送请求报文。
DHCP客户可以随时提前终止DHCP服务器所提供的租用期,只需要向DHCP服务器发送DHCP释放报文段即可
DHCP中继代理
在实际应用情况下,如果主机网络和DHCP服务器中有路由器的话,则主机无法通过DHCP服务器来配置网络信息,因为路由器不会转发客户的DHCP发现报文
解决办法是给该路由器配置DHCP服务器的IP地址,并使之成为DHCP中继代理,这样就可以通过DHCP来自动获取网络配置信息了,当路由器获取到广播DHCP发现报文后,会单播转发给DHCP服务器
IP数据报的转发
转发过程
每个网络中都有其网络地址和子网掩码
同一个网络中的主机可以直接通信,而不同网络中的主机则需要路由器进行中转
问题是源主机如何判断目的主机是否需要是同一个网络中的?
可以将目的主机与源主机的子网掩码相与来得到目的网络地址,该地址与源主机的网络地址不相等,就可以知道目的主机与源主机不在同一个网络
这样就要通过路由器来转发数据,又有一个问题,主机怎么知道路由器的存在?
实际上,每一个主机都必须指定一个路由器,称为默认网关,如果主机要通过路由器传输信息,则会把数据传输给默认网关
如果路由器收到了IP数据报,该如何转发
- 首先检查IP数据报,若出错,则直接丢弃该IP数据报,若没有出错,则直接进行转发
- 根据IP数据报的目的地址在路由表中查找匹配的条目:若找到匹配的条目,则转发给条目中指示的下一跳,若找不到,则丢弃数据报,并通告源主机
路由器在配置的时候就知道了各个接口所连接的网络和地址掩码
将目的地址与地址掩码相与,得到目的网络地址,如果相同则转发,不同则查找下一个条目
传输方式
- 单播
用于发送数据包到单个目的地,且每发送一个单播报文都使用一个单播IP地址作为目的地址,是一种点对点传输方式
- 广播
是指发送数据包到同一广播域或子网内所有设备的一种数据传输方式,是一种点对多点的传输方式
如果在网络中发送广播,即目的地址是广播地址,则广播只会在本网络中传播,而路由器会判断出是广播,不会进行转发,所以路由器可以隔离广播风暴
- 组播
当网络中的某些用户需要特定数据时,组播数据发送者仅发送一次数据,借助组播路由协议为组播数据包建立组播分发树,被传递的数据到达距离用户端尽可能近的节点后才开始复制和分发,是一种点对多点的传输方式
组播提高了数据传送效率,减少了拥塞的可能性,组播组的主机可以是在同一个物理网络,也可以来自不同的物理网络
IP组播地址让源设备能够将分组发送给一组设备。属于多播组的设备将被分配一个组播组IP地址
组播地址的范围为224.0.0.0~239.255.255.255(D类地址),一个D类地址表示一个组播组。只能用作分组的目的地址。源地址总是单播地址
组播数据报不提供可靠传输,应用于UDP
对组播数据报不产生ICMP报文,并非所有D类地址都可以作为组播地址
网际组管理协议IGMP
IGMP(Internet Group Management Protocol)协议让路由器知道是否有主机参加或退出了某个组播组
当主机要加入组播组时,该主机向组播地址发送一个IGMP报文,本地组播路由器收到IGMP报文后,利用组播路由选择协议把该成员关系发给其他组播路由器
本地组播路由器周期性的探询本地局域网上的主机,确认是否还是组播组的成员
组播路由器只知道所连接的局域网中有无组播组的成员
组播路由选择协议
组播路由选择协议可以找出源主机为根节点的组播转发树
网络地址转换NAT
NAT(Network Address Translation):能使大量使用内部专用地址的专用网络用户共享少量外部全球地址来访问因特网上的主机和资源
使用私有地址的主机想要与因特网的主机上进行通信,需要一个NAT路由器,至少有一个有效地外部全球IP地址,所有的使用私有地址的主机在和外界通信的时候都要在NAT路由器上将IP地址转换成全球IP地址
NAT路由器会建立一个转换表来记录私有地址和全球IP地址之间的转换关系
该转换方法存在一个问题:如果NAT路由器具有N个全球IP地址,那么至多有N个内网主机能够同时和因特网上的主机通信
所以推出了网络地址与端口转换技术NAPT,将运输层的端口号和IP地址一起转换,这样用一个全球IP地址就可以使多个拥有本地地址的主机同时和因特网上的主机进行通信
对于一些P2P网络应用,需要外网主机主动与内网主机进行通信,在通过NAT时会遇到问题,需要网络应用自己使用一些特殊的NAT穿越技术来解决问题
虚拟专用网VPN
虚拟专用网VPN(Virtual Private Network):利用公网的因特网作为本机构各专用网之间的通信载体
由于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的路由器
假设需要远程通信,在主机1把数据包传送给路由器1,路由器1吧IP数据报加密,然后用IP数据报的形式通过因特网传输到路由器2,路由器2解析加密的IP数据报,然后把数据发送给主机2
从逻辑上看来R1和R2好像是点对点链路,所以也把这种技术称为IP隧道技术
同一机构内不同部分的内部网络所构成的虚拟专用网VPN又称为内联网VPN
有时一个结构的VPN需要有某些外部机构参与进来,这样的VPN称为外联网VPN
在外地工作的员工需要访问公司内部的专用网络时,只要在任何地点接入到因特网,运行PC中的VPN软件,在员工的PC和公司的主机之间建立VPN隧道,即可以访问专用网络中的资源,这种VPN称为远程接入VPN
移动IP
移动IP技术是移动节点以固定的网络IP地址,实现跨越不同网段的漫游功能,并保证了基于网络IP的网络权限在漫游过程中不发生任何改变
移动节点:具有永久IP地址的移动设备
归属代理:一个移动节点的归属网络
永久地址:移动节点在归属网络中的原始地址
外部代理:在外部网络中帮助移动节点完成移动管理功能的实体
转交地址:可以是外部代理地址或动态配置的一个地址
A进入到外部网络后:
- 获得外部代理的转交地址
- 移动节点通过外部代理发送注册报文给归属代理
- 归属代理接受请求,并将移动节点的永久地址和转交地址绑定,并返回注册响应报文
- 外部代理接收注册响应,并转发给移动节点
路由器
基本结构
路由器是一种具有多个输入端口和输出端口的专用计算机,任务是转发分组
路由器可以划分为路由选择部分和分组转发部分
路由表如果收到了路由报文就会更新自己的路由表
- 路由表一般仅包含从目的网络下一跳的映射
- 路由表需要对网络拓扑变化的计算最优化
- 转发表是从路由表得出的
- 转发表的结构应当使查找过程最优化
路由器将网络隔离成多个广播域和多个冲突域
功能
路由器有转发以及路由选择两大功能,可以将路由器实现转发功能的过程称为数据平面,实现路由选择的功能称为控制平面
控制平面的传统方法:路由选择算法运行在每台路由器中,并且每台路由器中都包含转发和路由选择两种功能
控制平面的SDN(Software-Defined Networking)方法:控制平面从路由器物理上分离。路由器仅实现转发,远程控制器计算和分发转发表以供每台路由器使用
远程控制器可能在具有高可靠性的远程数据中心中,并可能由ISP或某些第三方管理,远程控制器计算出路由转发表,是由软件控制的,所以叫做SDN
路由选择协议
分类
路由协议分为静态路由选择和动态路由选择
静态路由选择方式相对简单,需要管理员手动配置路由信息,不能及时适应网络变化,所以一般在小规模网络中采用
动态路由选择方式比较复杂,路由器之间彼此交换信息,按照路由算法优化出路由表项,能较好地适应网络状态的变化,所以适用于大规模网络
静态路由配置和路由环路
静态路由配置是指用户或网络管理员使用路由器的相关命令给路由器人工配置路由表
这样配置不能及时适应网络状态,可以出现以下导致路由环路的错误
- 配置错误
- 聚合了不存在的网络
- 网络故障
如果此时R1的收到的IP数据报要转发给目的主机,但是在R1中并没有相关路由配置
此时就需要给R1的路由表配置相关信息,使R1下一跳在R2
如果R2接入了因特网,那么众多IP数据报需要通过R1转发到达R2,如果是一条一条配置的话工作量太大了,此时我们可以使用默认路由的概念
将目的网络设置成0.0.0.0/0,此时其他的IP数据报都会默认跳转到R2,然后由R2转发到互联网上,子网掩码为0.0.0.0
有时候我们可以给路由器添加针对某个主机的特定主机路由条目,确保路由器转发到指定的主机上
如果要给192.168.2.1的主机添加特定主机路由配置,就在路由器中设置成192.168.2.1/32,即子网掩码为255.255.255.255
这样网络的前缀最长,路由最具体,当路由器具有多种转发路径可以选择的时候,会采取最长前缀匹配原则,转发的时候会有最高的优先级
路由配置错误导致的路由环路问题
假如R1收到数据要转发给R2,而R2的路由错误配置。导致R2的数据要转发回R1,那么就出现了路由环路的问题
为了防止IP数据报在路由环路中永久的兜圈,在IP数据报首部设有生存时间TTL字段
当IP数据报进入路由器后,TTL字段的值就减1,若TTL的值不等于0,则被路由器转发,否则被丢弃
聚合了不存在的网络导致的路由环路问题
如果在路由器中聚合了不存在的网络地址,当R2收到后会转发给R1,而R1收到后转发给R2,那么就形成了路由环路
针对这种情况,可以在R2中添加针对不存在的聚合网络的黑洞路由,一旦IP数据报进入到黑洞路由后就会被丢弃
因为黑洞路由更具体,所以会优先转发黑洞路由
网络故障导致的路由环路
假设路由器自动检测到其中的一条直连网络出现了故障而不可达,就会在路由表中删除该条目,如果R2转发数据给地址,会通过R1转发,R1查找不到该地址,又通过默认路由到R2中,形成了路由环路
针对这种情况,可以在R1中添加针对被删除网络的黑洞路由,这样就不会形成环路了
动态路由配置协议
在自治系统内部使用的协议是内部网络协议IGP,在两个自治系统之间使用的协议是外部网关协议EGP
RIP基于距离向量,路由器只掌握相连的邻居和链路费用
OSPF基于链路状态,所有路由器掌握完整的网络拓扑和链路费用信息
路由信息协议RIP
路由信息协议RIP(Routing Information Protocol)是内部网关协议IGP中最先得到广泛使用的协议之一
RIP要求自治系统AS内的每一个路由器都要维护从它自己到AS内其它每一个网络的距离记录。这是一组距离,称为“距离向量D-V(Distance-Vector”
RIP使用跳数作为度量来衡量到达目的网络的距离
- 路由器到直连网络的距离定义为1
- 路由器到非直连网络的距离定义为经过的路由器数加1
- 允许一条路径最多只能包含15个路由器。距离等于16相当于不可达,所以RIP只适用于小型互联网
- RIP被封装在UDP协议中
RIP协议认为“距离短”的路由就是最优选择的路由,也就是所通过路由器数量最少的路由
尽管R1到R2的带宽,但是RIP会认为R1到R4的更好
到到达同一网络由多条距离相等的路由时,可以进行等价负载均衡,也就是将通信量均衡地分布到多条等价的路由上
RIP包含有以下三个要点
- 和谁交换信息 仅和相邻路由器交换信息
- 交换什么信息 自己的路由表
- 合适交换信息 周期性交换
RIP的基本工作过程
- 当路由器刚开始工作的时,只知道自己到直连网络的距离为1,并不知道和自己相邻路由器的信息
- 每个路由器仅和相邻路由器周期性地交换并更新路由信息
- 若干次交换和更新后,每个路由器都知道到达本AS内各网络的最短距离和下一跳地址,称为收敛
RIP更新报文
这是C的路由表,而C的相邻路由器接收到该路由表时,会对其进行改造,成如下形式
所有的距离加1,并且下一跳都变为C
然后对比C的路由表和自己的路由表
- 如果目的网络和下一跳一样,则要更新信息
- 发现了新的网络,进行添加
- 如果目的网络一样,距离一样,下一跳不一样,就进行等价负载均衡
- 如果目的网络一样,距离不一样,下一跳不一样,如果新路由的距离短,则更新信息,如果距离更长,则不更新
RIP存在有坏消息传播得慢这一问题
如果N1故障了,R1会将其距离设置为16,并把信息传输给R2,R2之前的路由表信息是,到达N1的距离为2,因为路由表在周期性的更新信息
那么,如果R2的路由器信息更早的到达的R1,R1则不再会认为到N1的距离为16,而是会更新为3,同时将此路由表信息传输给R2,R2接受到后,就会认为到达N1的距离为4
直到R1和R2都认为到N1的距离为16才会终止
”坏消息传的慢“,又称为路由环路或距离无穷计数问题,这是距离向量算法的一个固有问题,可以采取多种措施减少出现该问题的概率或减少该问题带来的危害
- 设置最大路径距离为15
- 当路由表发生变化的时候立即发送更新报文(触发更新),而不是周期性发送
- 让路由器记录收到某特定路由信息的接口,而不让同一路由信息再通过此接口向反方向传送(即水平分割)
开放最短路径优先OSPF
开放最短路径优先OSPF(Open Shortest Path First)是为了克服RIP的缺点而开发出来的
- “开放”表明OSPF不是受某一家厂商控制,而是公开发表的
- “最短路径优先”是因为使用了迪杰斯特拉提出的最短路径算法SPF
OSPF基于链路状态,而不像RIP那样是基于距离向量的
OSPF采用SPF算法计算路由,从算法上保证了不会产生路由环路
OSPF不限制网络规模,更新效率高,收敛速度快
链路状态是指本路由器都和哪些路由器相邻,以及相应链路的“代价”(cost)
- 代价可以是很多指标,比如距离,时延,带宽等由网络管理人员决定
OSPF报文
OSPF相邻路由器之间通过交互问候(Hello)分组,建立和维护邻居关系
Hello分组封装在IP数据报中,发往组播地址224.0.0.5(所有的OSPF路由器)
发送周期为10秒
如果40秒未收到来自邻居路由器的Hello分组,则认为该邻居路由器不可达
使用OSPF的每个路由器都会产生链路状态通告LSA(Link State Advertisement),LSA包含以下信息:
- 直连网络的链路状态信息
- 邻居路由器的链路状态信息
LSA被封装在链路状态更新分组LSU中,采用洪泛法发送
使用OSPF的每个路由器都有一个链路状态数据库LSDB,用于存储LSA
通过各路由器洪范发送封装有自己LSA的LSU分组,各路由器的LSDB最终达成一致
使用OSPF的各路由器基于LSDB进行最短路径优先SPF计算,构建出各自到达其他路由器的最短路径,即构建各自的路由表
OSPF的工作原理
OSPF有以下5种分组
- 问候分组 用来发现和维护邻居路由器的可达性
- 数据库描述 向邻居路由器给出自己的链路状态数据库中的所有链路状态项目的摘要信息
- 链路状态请求 向邻居路由器请求发送某些链路状态项目的详细信息
- 链路状态更新(LSU) 路由器使用这种分组进行洪泛转发
- 链路状态确认 对LSU的确认分组
每30分钟或者链路状态发生变化,都会通过洪泛法来发送LSU,并给该路由器发送确认分组
OSPF在多点接入网络中,很容易产生多个多播分组
为了减少多播分组的发送,OSPF采用选举指定路由器DR(Designated Router)和备用的指定路由器BDR的方法
所有的非DR/BDR只与DR/BDR建立邻居关系,通过其交换网络
为了让OSPF能够用于规模更大的网络,OSPF把一个自治系统再划分为若干个更小的区域(Area)
可以降低洪泛法交换信息的范围局限在每个区域内
区域内路由器IR(Inter Router):接口都完全在一个区域内的路由器
区域边界路由器ABR(Area Border Router):一个接口用于连接自身区域,另一个用于连接主干
主干路由器BR(Backbone Router):主干区域内的路由器
自治系统边界路由器ASBR(AS Border Router):专门用于和其他自治系统交换信息
边界网关协议(BGP)
在配置BGP时,每个自治系统的管理员要选择一个路由器作为该自治系统的“BGP发言人”
不同自治系统的BGP发言人要交换路由信息,首先必须建立TCP连接,端口号为179
- 在此TCP连接上交换BGP报文以建立BGP会话
- 利用BGP会话交换路由信息
- 使用TCP连接交换路由信息的两个BGP发言人,彼此称为对方的邻站或对等站
BGP发言人除了运行BGP外,还必须运行自己所在自治系统的内部网关协议IGP
BGP发言人交换网络可达性的信息
当BGP发现人交换了网络可达性信息之后,各BGP发言人就根据所采用的策略从收到的信息中找出到达各自治系统的较好的路由,也就是构造出树形结构,不存在环路的连通图
BGP-4有以下4种报文
OPEN 打开报文 :用来与相邻的另一个BGP发言人建立关系,让通信初始化
UPDATE 更新报文 :用来通告某一路由信息,以及列出要撤销的路由
KEEPLIVE 保活报文:用来周期性地证实邻站的连通性
NOTIFICATION 通知报文:用来发送检测到的差错
总结
RIP协议是一种分布式的基于距离向量的内部网关路由选择协议,通过广播UDP报文来交换信息
OSPF是一个内部网关协议,要交换的信息量较大,应该让报文的长度尽量短,所以直接采用IP数据报
BGP是一个外部网关协议,在不同自治系统之间交换路由信息,由于网络环境复杂,所以要保证可靠传输,采用TCP协议
网际控制报文协议ICMP
主机或路由器通过ICMP(Internet Control Message Protocol)来发送差错报告报文和询问报文
被封装在IP数据报中发送
报文一共有一下5种
- 终点不可达
当路由器或主机无法交付数据报时,就向源点发送终点不可达报文
- 源点抑制
当路由器或主机由于拥塞而丢弃数据时,就向源点发送源点抑制报文
- 时间超过
若转发的数据报的生存时间为0,除了丢弃该数据报,还要向源点发送时间超过报文
- 参数问题
如果路由器或目的主机收到IP数据报后,根据其首部的检验和字段发现了误码,就丢弃该数据报,并且向源点发送参数问题报文
- 改变路由
路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的主机
以下情况不该发送ICMP差错报告报文
- 对ICMP差错报文不应发送ICMP差错报文
- 对第一个分片的数据报文的所有后序报文都不发送ICMP差错报告报文
- 对具有多播地址的数据报不发送
- 对具有特殊地址的数据报(127.0.0.0或0.0.0.0)不发送
ICMP询问报文主要有两种
- 回送请求和回答
ICMP回送请求是由主机或路由器向一个特定的目的主机发出的询问,收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文,用来测试目的站是否可达
- 时间戳请求和回答
ICMP时间戳请求报文是请某个主机或路由器回答当前的时间和日期,用来进行时钟同步和测量时间
最大最小公平性算法
- 所有数据流的速率从零开始
- 增加速率,直到任何一个数据流的速率到瓶颈
- 调整已到瓶颈的速率(这里是不带权的调整,即均分)
- 回到第二步循环
例题:
则4条流如图所示:
因为R4-R5段是最拥挤的段,所以先分配,BCD都分别只占1/3,而因为B占了1/3,所以在R2-R3段,A可以占2/3,所以结果为A:20 B:10 C:10 D:10 所以答案选D
BGP最佳路径选择算法
选择顺序:
- 首选具有最高 WEIGHT 的路径。
- 首选具有最高 LOCAL_PREF的路径
- 首选具有最短 AS_PATH 的路径
- 首选具有最低源类型的路径
- 首选具有最低多出口标识符 (MED) 的路径。
- 首选 eBGP 路径而非 iBGP 路径