目录
网络层的几个重要概念
网络层提供的两种服务
互联网的设计思路:"网络层要设计得尽量简单,向其上层只提供简单灵活的、无连接的、尽最大努力交付的数据报服务 "(IP数据报 和IP分组 是同义词)
网络在发送分组时不需要先建立连接,每一个分组(IP数据报)独立发送,因此网络层 不提供服务质量的承诺
"虚电路服务"提供可靠的服务,但是不适合互联网,适合电信网
网络层的两个层面
在路由器之间传送的信息有两大类:
- 转发源主机和目的主机之间锁传送的数据
- 传送路由信息:路由器之间根据路由选择协议使用的路由算法,彼此不断交换路由信息分组 ,目的是为了在路由器中创建路由表
我们把网络层划分为两个层面:"数据层面 (转发层面 )"和"控制层面"
网际协议IP
网际协议IP是TCP/IP体系中两个最主要的协议之一,也是最重要的互联网标准协议之一
严格来说,这里的IP 是IP 的第四个版本,即IPv4
与协议IP配套使用的还有三个协议
- 地址解析协议ARP
- 网际控制报文协议ICMP
- 网际组管理协议IGMP
- ARP 在最下面,因为IP经常使用这个协议
- ICMP 和IGMP 在IP 上面,因为它们两个需要使用IP协议
- 由于网际协议IP 是用来使互联起来的计算机网络进行通信,因此TCP/IP 体系中的网络层常常被称为网际层(IP层)
虚拟互联网络
由于大家使用的网络并不相同 ,因此"没有一种单一的网络能够适应所有用户的需求"
因此将网络互相连接起来需要使用一些中间设备:
- 物理层 :转发器
- 数据链路层 :网桥或桥接器以及交换机
- 网络层 :路由器
- 网络层以上 :使用网关
当我们讨论网络互联 时,都是指用路由器进行网络互联 和路由选择
路由器其实就是一台专用计算机 ,用来在互联网中进行路由选择
由于参加互联的计算机网络都是用相同的网际协议IP ,因此可以把互联以后的计算机网络看成一个"虚拟互联网络"
- 所谓虚拟互联网络也就是"逻辑互联网络",即"利用相同协议IP就可以使这些性能各异的各种网络在网络层看起来好像是一个统一的网络"
- 这种使用协议IP 的虚拟互联网络可简称为"IP网"
"直接交付 "和"间接交付"
- 直接交付 :IP数据报 的传输没有经过任何路由器
- 间接交付 :IP数据报 的传输至少经过一个路由器
- 分组在传送途中的每一次转发都成为一"跳"
- 在计算机网络中,常使用"下一跳"用来表示下一个路由器,例如R1 的下一跳是R2
IP地址
一个连接在互联网上的设备,如果没有IP地址,就无法和网上的其它设备进行通信
IP地址及其表示方法
整个的互联网就是一个"单一的、抽象的网络 ",IP地址 就是给连接到互联网上的每一台主机的接口分配一个"在全世界范围内是唯一的32位的标识符"
对于主机\路由器来说,IP地址都是32位 的二进制代码 ,为了提高可读性,在32位 的IP地址中"每隔8位插入一个空格 (在机器中并没有这样的空格,插入仅仅是方便阅读),同时我们将四组8位二进制代码 用其等效的十进制数字 表示,并在每个数字之间加上一个小数点,这叫做点分十进制记法"
32位的IP地址采用两级结构 ,由两个字段组成:"网络号"和"主机号"
- 网络号 :标志主机(路由器)所连接到的网络,一个网络号在整个互联网范围内必须是唯一的
- 主机号 :标志主机(路由器),一个主机号所连接的网络中必须是唯一的
- 一个IP地址在整个互联网范围内是唯一的,IP地址记为:
网络号 和主机号具体的位数:
IP地址前n为是网络号,后面(32 - n)位是主机号
分类的IP地址
互联网早期发展采用的是"分类的IP地址 ",即分为:"A、B、C、D、E"五大类
- A类、B类、C类 都是"单播地址"(一对一通信)
- D类 是"多播地址"(一对多通信)
一些特殊的IP地址(网络号):
- 网络号全为0的IP地址表示"本网络"
- 网络号为127(即01111111)保留作为本地软件"环回测试本主机的进程之间的通信用"
一些特殊的IP地址(主机号):
- 全0的主机号表示该IP地址是"本主机"所连接到的单个网络地址
- 全1的主机号表示该IP地址上的所有主机
下表是一般不指派的特殊IP地址,这些IP地址只在特定的情况下使用:
各类地址 可指派的网络号个数:
- A类地址 :126个(),除最前面的0以外,网络号还有七位可选,故有2^7种可能性再减去全0和全1的情况,共126个
- B类地址 :16384个(),B类地址不需要减去全1和全0
- C类地址 :2097152个(),C类地址不需要减去全1和全0
各类地址 可指派的主机号个数:
- 所有类型地址的主机号都必须减去全0和全1的情况
- 主机号全0表示该主机
- 主机号全1表示该网络上的所有主机
无分类编址CIDR
这种编址方法全名是"无分类域间路由选择CIDR"
CIDR 将IP地址划分为三部分:"网络前缀"、"地址块"、"地址掩码"
网络前缀
CIDR 把IP地址中的网络号改称为"网络前缀 "(简称"前缀"),用来指明网络,剩下的后面部分仍然是主机号,用来指明主机
CIDR记法:
注意:"网络前缀可以是任意位数(0~32)"
CIDR 使用"斜线记法 ",或称为CIDR 记法,即在IP地址 后面加上斜线 "/",斜线后面是网络前缀所占的位数
例如:128.14.35.7/20 ,表示"网络前缀20位,主机号12位"
地址块
CIDR 把"网络前缀都相同"的所有连续的IP地址 组成一个"CIDR地址块",一个CIDR地址块包含的IP地址数目,取决于网络前缀的位数
我们只要知道CIDR地址块 中的任何第一个地址,就可以知道这个地址块的起始地址 (最小地址 )和最大地址,以及地址块中的地址数
具体方法如下:
假设一个IP地址为128.14.35.7/20 是某CIDR地址块中的一个地址,把它写成二进制形式:
因为网络前缀 是相同的 ,所以我们可以很方便的计算出地址块中的最小/最大地址
除此之外,还可以用二进制代码简要地表示此地址块:
10000000 00001110 0010*
这里的**星号***代表了主机号字段的所有的0
在不需要指明网络地址时,也可把这样的地址块简称为"/20地址块"
注意:
- 128.14.32.7是IP地址,但未指明网络前缀长度,因此不知道网络地址是什么
- 128.14.32.7/20是IP地址,但同时指明了网络前缀为20位,由此可导出网络地址
- 128.14.32.0/20 是包含多个IP地址的"地址块 "或"网络前缀",同时也是这个地址块中主机号为全0的地址
- 上面地址块4段十进制数字最后的0 有时可以省略,即简写为128.14.32/20
地址掩码
CIDR 使用斜线记法可以让我们知道网络前缀的数值,但是计算机看不见斜线记法 ,而是使用二进制 来进行各种计算时必须使用32位 的地址掩码(掩码)从IP地址迅速算出网络地址
地址掩码 由一连串1 和接着的一连串0 组成,1的个数就是网络前缀的长度
地址掩码 又称为"子网掩码"
在CIDR 记法中,斜线后面的数字就是地址掩码中1的个数
把二进制的IP地址 和地址掩码 进行"按位与"运算,即可得出网络地址
CIDR中有三个特殊地址块:
- 前缀n=32 ,即32位IP地址都是前缀,没有主机号,这个特殊地址用于主机路由
- 前缀n=31 ,其主机号可以为0或1,这个地址块用于点对点链路
- 前缀n=0 ,同时IP地址也是全0,即0.0.0.0/0,这适用于默认路由
IP地址的特点
- 每一个IP地址都由网络前缀和主机号两部分组成
- IP地址是标志一台主机和一条链路的接口
- 用转发器或交换机连接起来的若干个局域网仍为一个网络
- 在IP地址中,所有分配到网络前缀的网络都是平等的(互联网同等对待每一个IP地址)
IP地址与MAC地址
由于MAC地址 已固化在网卡上的ROM 中,因此常常将MAC地址 称为"硬件地址 "和"物理地址"
物理地址的反义词就是虚拟地址、软件地址或逻辑地址,IP地址就属于这类地址
MAC地址 是数据链路层 使用的地址,而IP地址 是网络层和以上各层 使用的地址,是一种逻辑地址
地址解析协议ARP
ARP 用来解决:"已知一个机器的IP地址,如何找出其相应的MAC地址"
ARP 在主机的ARP高速缓存 中存放一个从IP地址 到MAC地址 的映射表,并且映射表是动态更新的
每一台主机都设有一个ARP 高速缓存,里面存有本局域网上的各主机和路由器的IP地址到MAC地址的映射表
IP数据报的格式
IP数据报 的格式说明协议IP都具有什么功能,在协议IP的标准中,描述首部格式的宽度是32位
- 一个IP数据报 由首部 和数据 两部分组成,首部的前一部分长度是固定的,共20字节 ,是所有IP数据报必须具有的。在首部的固定部分后面是一些可选字段,其长度是可变的
下面介绍各首部字段意义:
- 版本:占4位,指协议IP的版本,通信双方使用的协议IP的版本(IPv4和IPv6)必须一致
- 首部长度 :占4位,可表示的最大十进制数值是15,首部长度的单位是32位字长(即4字节)
- 区分服务:占8位,用来获得更好的服务,这个字段在旧标准中叫作服务类型,一般情况下不用
- 总长度:总长度指首部和数据之和的长度,单位为字节
- 标识:占16位,用来表示IP数据报切片后每一天的标识
- 标志 :占3位,目前只有两位有意义
- 最低位记为"MF",MF=1,表示后面还有分片,MF=0,表示这是最后一个分片
- 中间一位记为"DF",只有当DF=0时才允许分片
- 片偏移:占13位,表示某片在原分组中的相对位置,片偏移以8个字节为偏移单位,也就是除了最后一个数据报片外,其他每个分片的长度一定是8字节(64位)的整数倍
- 生存时间:占8位,英文缩写是TTL,报文每经过一个路由器就把TTL-1,当TTL值为0时,就丢弃这个数据报
- 协议:占8位,协议字段指出此数据报携带的数据使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个协议处理
- 首部检验和:占16位,这个字段只检验数据报的首部,但不包括数据部分
- 源地址:占32位,发送IP数据报的主机的IP地址
- 目的地址:占32位,接收IP数据报的主机的IP地址
IP数据报首部的可变部分
IP数据报首部的可变部分就是一个选项字段,选项字段用来支持排错、测量以及安全等措施
此字段的长度可变,从1字节到40字节,取决于所选择的项目
增加首部的可变部分是为了增加IP数据报的功能,实际上这些选项很少被使用
IP层转发分组的过程
基于终点的转发
分组在互联网上传送和转发是基于分组首部中的目的地址的,因此这种转发方式称为"基于终点的转发"
当路由器接收到一个IP后,它会按照转发表将这个IP转发出去,但路由器并不是按照IP在转发表中搜索,因为转发表是非常庞大的
因此路由器会查找"目的网络(网络前缀)",在找到目的网络之后,就把分组在这个网络上直接交付给目的主机
由于互联网上的网络数远远小于主机数 ,这样就可以大大压缩转发表的大小 ,加速分组在路由器中的转发,这就是基于终点的转发过程
最长前缀匹配
在采用CIDR编址时,如果一个分组在转发表中可以找到多个匹配的前缀,那么就应当选择前缀最长的一个作为匹配的前缀
这个原则称为"最长前缀匹配",网络前缀越长 ,其地址块就越小 ,因而路由就越具体
实际的转发表中可能增加两种特殊的路由 :"主机路由"和"默认路由"
主机路由:
又叫作特定主机路由,这是对特定目的主机的IP地址专门指明的一个路由
主机路由在转发表中的网络前缀是"/32",即32位1
因此主机路由和任何一个IP地址进行AND运算,必然会匹配成功,从而转发出去
默认路由:
不管分组的最终目的网络在哪里,都由指定的路由器R来处理
它在转发表中用"/0"来表示默认路由,即32个0
因此默认路由和任何一个IP地址进行AND运算,结果都会是0,0,0,0
分组转发算法如下:
- 从收到的分组首部提取出目的主机的IP地址D(目的地址)
- 若查找到有特定主机路由,就按照该条路由转发分组,否则就从转发表中下一行开始检查,执行(3)
- 把这一行的子网掩码与目的地址D进行AND运算,若远算结果匹配,则查找结束。否则继续查找下一行,若已是最后一行,则执行(4)
- 若转发表中有一个默认路由,就按照该路由转发出去
使用二叉线索查找转发表
为了使目的地址 在路由表 中查找更加迅速,我们将无分类编址的转发表存放在一种层次的数据结构中,然后自上而下地按层次进行查找
在这里我们使用"二叉线索",它是一种特殊结构的树,IP地址中从左到右的比特值 决定了从根节点逐层向下层延伸 的路径,而二叉线索中的各个路径就代表转发表中存放的各个地址
上图给出了5个I P地址,为了简化二叉0线索的结构,可以先找出对应于每一个IP地址的"唯一前缀"(在表中所有的IP地址中,该前缀是唯一的 ),这样就可以用这些唯一前缀来构造二叉线索,在进行查找时,只要能够和唯一前缀相匹配就行了
网际控制报文协议ICMP
ICMP允许主机或路由器报报告差错情况 和提供有关异常情况的报告
ICMP是互联网的标准协议(是IP层的协议 ),ICMP报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报
ICMP报文的种类
ICMP报文有两种:"ICMP差错报告报文"和"ICMP询问报文"
- 终点不可达 :当路由器或主机不能交付数据报时就向源点发送"终点不可达"报文
- 时间超过 :当路由器收到生存时间为0的数据报时,除丢弃该数据报以外,还要向源点发送"时间超过报文"
- 参数问题 :当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送"参数问题"报文
- 改变路由(重定向) :路由器把"改变路由"报文发送给主机,让主机知道下次应将数据报发送给另外的路由器 (找到了更好的路由)
下面是不应发送ICMP差错报告报文的几种情况:
- 对ICMP差错报告报文 ,不再发送ICMP差错报告报文
- 对第一个分片的数据报片的所有后续数据报片,都不发送ICMP差错报告报文
- 对具有多播地址的数据报,都不发送ICMP差错报告报文
- 对具有特殊地址 (127.0.0.0 和0.0.0.0 )的数据报,不发送ICMP差错报告报文
常用的ICMP询问报文有两种:
- 回送请求或回送回答 :ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文(这种询问报文用来测试目的站是否可达 以及了解其有关状态)
- 时间戳请求或时间戳回答:在ICMP时间戳请求报文发送后,就能够收到对方响应的ICMP时间戳回答报文。利用在报文中记录的时间戳,发送方很容易计算出当前网络的往返时延
IPv6
IPv6的基本首部
IPv6 仍支持无连接的传送,但将写一单元PDU称为"分组"
IPv6的主要变化如下:
- 更大的地址空间:IPv6拥有128位
- 扩展的地址层次结构
- 灵活的首部格式:IPv6定义了许多可选的扩展首部
- 改进的选项:IPv6允许数据包包含有选项的控制信息,它的首部长度是固定的
- 允许协议继续扩充
- 支持即插即用
- IPv6首部改为8字节 对齐,IPv6首部是4字节对齐
IPv6 数据报由两大部分组成,即基本首部 和后面的有效载荷 ,有效载荷也称为净负荷
有效载荷 允许有零个或多个扩展首部
下图是一个IPv6各字段说明图:
- 版本 :占4位,它指明了协议的版本,对IPv6该字段是6
- 通信量类 :占8位,区分不同的IPv6数据报类别或优先级
- 流标号 :占20位,IPv6的一个新的机制是支持资源预分配,IPv6提出"流"的概念:"互联网络上从特定源点到特定终点的一系列数据报,而在这个流所经过的路径上的路由器都保证指明的服务质量"
- 有效载荷长度 :占16位,它指明IPv6数据报除基本首部以外的字节数
- 下一个首部 :占8位,相当于IPv4的协议字段或可选字段
- 当IPv6数据报没有扩展首部时,下一个首部字段的作用和IPv4的协议字段一样,它的值指出了基本首部后面的数据应交付IP层上面的哪一个高层协议
- 当出现扩展首部时,下一个首部字段的值就标识后面第一个扩展首部的类型
- 跳数限制 :占8位,用来防止数据报在网络中无限期地存在
- 源地址 :占128位,是数据报发送端的IP地址
- 目的地址 :占128位,是数据报的接收端的IP地址
IPv6的扩展首部如下:
- 逐跳选项
- 路由选择
- 分片
- 鉴别
- 封装安全有效载荷
- 目的站选项
IPv6的地址
一个IPv6数据报 的目的地址 可以是以下三种基本类型地址之一:
- 单播 :传统的点对点通信
- 多播 :一点对多点的通信,数据包发送到一组计算机中的每一个
- 任播 :任播的终点是一组计算机,但数据报只交付其中的一个,通常是按照路由算法得出的距离最近的一个
IPv6 使用"冒号十六进制记法",简写为"colon hex ",它把每个16位 的值用十六进制值 表示,各值之间用冒号分隔,一个例子:
- 在十六进制记法 中,允许把数字前面的0省略,上面就把0000 中的前三个0省略了
冒号十六进制记法 还包括两个技术使它尤其有用:
首先,它允许"零压缩",即一连串连续的零可以为一对冒号所取代:
FF05:0:0:0:0:0:0:B3 可压缩为FF05::B3
- 在任意地址中只能使用一次零压缩
几个使用零压缩的例子:
- 1080:0:0:0:8:800:200C:417A 记为1080::8:800:200C:417A
- FF01:0:0:0:0:0:0:101 (多播地址)记为FF01::101
- 0:0:0:0:0:0:0:1 (环回地址)记为**::1**
- 0:0:0:0:0:0:0:0 (未指明地址)记为**::**
CIDR 的斜线表示法仍然可用。例如,60位 的前缀12AB00000000CD3 (十六进制表示的15个字符)可记为:
12AB:0000:0000:CD30:0000:0000:0000:0000/60或
12AB::CD:0:0:0:0/60或
12AB:0:0:CD30::/60
IPv6的地址分类如下所示:
- 未指明地址 :16字节的全0地址 ,可缩写为两个冒号":: ",这个地址不能用作目的地址 ,而只能将某台主机当做源地址使用,条件是这台主机还没有配置到一个标准的IP地址
- 环回地址 :IPv6 的环回地址 是0:0:0:0:0:0:0:1 ,可缩写为**::1** ,它的作用和IPv4的环回地址一样
- 多播地址 :功能和IPv4 一样,这类地址占IPv6 总数的1/256
- 本地站点单播地址 :有些单位的内部网络使用TCP/IP协议 ,但并没有连接到互联网上,连接在这样的内部网络上的主机都可以使用这种本地站点地址进行通信,这类地址占IPv6 总数的1/1024
- 本地链路单播地址 :这种地址是在单一链路上使用的,这类地址占IPv6 总数的1/1024
- 全球单播地址 :IPv6的这一类单播地址是使用得最多的一类,它有三种方法划分,可以是下图中的任意一种:
从IPv4向IPv6过渡
从IPv4 向IPv6 过渡只能采用逐步演进 的办法,同时还必须使新安装的IPv6系统能够向后兼容
过渡策略 有两种:"双协议栈 "和:"隧道技术"
双协议栈
双协议栈 是指在完全过渡到IPv6 之前,使一部分主机同时装有IPv4 和IPv6两种协议栈
因此这种主机既能够和IPv6 的系统通信,又能够和IPv4的系统通信
双协议栈 的主机记为IPv6/IPv4
隧道技术
在IPv6 数据报要进入IPv4 网络时,把IPv6 数据报封装成为IPv4数据报
整个的IPv6 数据报变成了IPv4数据报的数据部分
要使双协议栈的主机知道IPv4数据报里封装的是一个IPv6数据报,就必须把IPv4首部的协议字段的值 设置为41 (41表示数据报的数据集部分是IPv6数据包)
ICMPv6
IPv6不保证数据报的可靠交付,因为互联网中的路由器可能会丢失数据
因此IPv6 也需要使用ICMP来反馈一些差错信息,新的版本称为ICMPv6,它比ICMPv4要复杂得多
地址解析协议ARP和网际组管理协议IGMP的功能已全部被合并到ICMPv6中
在对ICMPv6 报文进行归类时,不同的文献和RFC文档使用了不同的策略
互联网的路由选择协议
路由协议规定了互联网中有关的路由器应如何相互交换信息并生成出路由表
有关路由选择协议的几个基本概念
理想的路由算法
路由选择协议的核心就是路由算法,一个理想的****路由算法应具有如下的一些特点:
- 算法必须是正确的和完整的:这里"正确"的含义是:沿着各路由表所指引的路由,分组一定能够最终到达目的网络和目的主机
- 算法在计算上应简单
- 算法应能适应通信量和网络拓扑的变化:即要有自适应性,当网络中的通信量发生变化时,算法能够自适应地改变路由以均衡各链路的负载
- 算法应具有稳定性
- 算法应是公平的:路由选择算法对所有用户都是平等的
- 算法应是最佳的:路由选择算法应能够找出最好的路由,使得分组平均时延最小而网络的吞吐量最大
从路由算法能否随网络的通信量 或拓扑自适应 地进行调整变化来划分,有两大类:"静态路由选择策略 "和"动态路由选择策略"
分层次的路由选择协议
互联网采用的路由选择协议 主要是动态的 、分层次的路由选择协议
互联网选择分层次的路由选择协议,原因有如下几点:
- 互联网的的规模非常大
- 单位不愿意外界了解自己单位网络的布局细节和本部门所采用的路由选择协议
可以把整个互联网划分为许多较小的"自治系统 "(记为AS),每一个AS对其他AS表现出的是一个单一的 和一致的路由选择策略,这样互联网就把路由选择协议划分为两大类:
- 内部网关协议IGP:在一个自治系统AS内部使用的路由选择协议
- 外部网关协议EFP:在不同自治系统AS之间使用的路由选择协议
自治系统之间的路由选择也叫作"域间路由选择 ",而在自制系统内部的路由选择叫作"域内路由选择"
内部网关协议RIP
协议RIP的工作原理
RIP是一种分布式的基于距离向量的路由选择协议,是互联网的标准协议,其最大优点就是简单
协议RIP的特点:
- 仅和相邻路由器交换信息:如果两个路由器之间的通信不需要经过另一个路由器,那么这两个路由器就是相邻的
- 路由器交换的信息时当前本路由器所知道的全部信息,即自己现在的路由表
- 按固定的时间间隔交换路由信息
路由表更新 的原则是找出每个目的网络的"最短距离 ",这种更新算法又称为距离向量算法
距离向量算法【非常重要!!!】
对每一个相邻路由器 发来的RIP报文,执行以下步骤:
- 对地址为X 的相邻路由器发来的RIP报文,先修改此报文中的所有项目,把"下一跳"字段中的地址都改为X ,并把所有的"距离 "字段的值加1。(每一个项目都有三个关键数据 :到目的网络Net**、距离是d、**下一跳路由器是X)
- 对修改后的RIP报文中的每一个项目,进行以下步骤:
- 若原来的路由表中没有目的网络Net,把该项目添加到路由表中。否则(即在路由表中有目的网络Net),在查看下一跳路由器地址
- 若下一跳路由器地址是X,则把收到的项目替换原路由表中的项目
- 否则(即这个项目是:到目的网络Next,但下一跳路由器不是X)。若收到的项目中的距离d小于路由表中的距离,则进行更新
- 否则什么也不做
- 若3分钟还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达的路由器,把距离设为16 (16表示不可达)
一道距离向量算法的例子:
已知路由器R6 有下图所示的路由表,现在收到相邻路由器R4 发来的路由更新信息,尝试更新路由器R6的路由表
解:
先修改R4 ,将距离全部加1,下一跳路由器全部变成R4
开始比较接收到的路由表和R6中原有的路由表:
- R6中没有Net1,因此该条项目直接添加
- R6中存在Net2,且下一跳路由器是R4,因此直接替换
- R6中存在Net3,其中下一跳路由器是R5不是R4,但它的距离是5大于接收到的Net3项目的距离2,因此替换
结果如下:
坏消息传播得慢
RIP存在的一个问题是:
当网络出现故障时,要经过比较长的时间才能将此信息传送到所有的路由器
内部网关协议OSPF
OSPF :"开放最短路径优先"
OSPF 最主要的特征就是使用"链路状态协议",而不是像RIP那样的距离向量协议,特点如下:
- 向本自治系统中所有路由器发送信息(洪泛法)
- 发送的信息就是与本路由器相邻的所有路由器的链路状态
- 当链路状态发生变化或每隔一段时间,路由器向所有路由器用洪泛法发送链路状态信息
OSPF的五种分组类型
- 类型1,问候分组:用来发现和维持邻站可达性
- 类型2,数据库描述分组:向邻站给出自己的链路状态数据库
- 类型3,链路状态请求分组:向对方请求发送某些链路状态项目的详细信息
- **类型4,链路状态更新分组:**用洪泛法对全网更新链路状态
- 类型5,链路状态确认分组:对链路更新分组的确认
外部网关协议BGP
协议BGP的主要特点
BGP用于不同自治系统AS之间的路由选择
BGP只能力求选择出 一条能够到达目的网络前缀且比较好 的路由,并非要计算出 一条最佳路由
BGP路由
在一个自治系统AS 中有两种不同功能的路由器:"边界路由器"和"内部路由器"
因为边界路由器的存在,AS 之间可以使用协议BGP 交换可达性路由信息
不同AS路由器的连接称为"eBGP",同一AS路由器内的连接称为"iBGP"
在一个AS内部所有的iBGP必须是全连通的:"即使两个路由器之间没有物理连接,但它们之间仍然有iBGP连接"
BGP路由一般格式
- 前缀:通告的BGP路由终点(子网前缀)
- BGP属性:AS-PATH 或NEXT-HOP
- AS-PATH (自治系统路径):通告的BGP路由所经过的自治系统
- NEXT-HOP (下一跳):通告的BGP路由器的起点
三种不同的自治系统AS
AS 可以划分为三类:"末梢AS "、"穿越AS "、"对等AS"
BGP路由选择
当存在多条BGP 路由时,BGP 根据下面原则的顺序,选择一条较好的BGP路由:
- 本地偏好LOCAL-PREF值最高的路由首先选择
- 选择具有AS跳数最少的路由
- 使用热土豆路由算法
- 选择路由器BGP标识符数值最小的路由
热土豆路由算法描述如下:
"使分组尽快离开当前AS,而不考虑从哪个路由器离开"
假设R1 和R2 使用热土豆路由算法:
- R1的路由应该从R4转发出去,因此选择BGP路由2
- R2的路由应该从R3转发出去,因此选择BGO路由1
BGP的四种报文
- OPEN(打开)报文:用来与BGP对等端建立关系
- UPDATE(更新)报文:用来通告某一路由信息
- KEEPALIVE(保活)报文:周期性地证实与对等端的连通性
- NOTIFCATION(通知)报文:发送检测到的报错
路由器的构成
路由器的结构
路由器 是一种具有多个输入端口 和多个输出端口 的专用计算机 ,其任务是转发分组
整个的路由器结构可划分为两大部分:"路由选择 "和"分组转发"
- 路由选择部分是控制部分或控制层面:根据所选定的路由选择协议构造出路由表
- 分组转发部分是数据层面:用来交换分组
- 交换结构又称为交换组织:根据转发表对分组进行处理
交换结构
交换结构是路由器的关键构件,下面是三中交换结构:
IP多播
IP多播的基本概念
一个信息由一个源点发送到许个终点,即一对多的通信
与单薄相比,在一对多的通信中,多播可大大节约网络资源
- (a)是视频服务器用单播方式向90台主机发送90个副本
- (b)视频服务器用多播方式发送信息,只需要发送一个原本即可
能够运行多播协议的路由器称为"多播路由器 ",多播路由器也可以转发普通的单薄IP数据报
IP多播 所传送的分组需要使用多播IP地址
多播数据报 在首部写入D类地址作为多播组的标识符,需要交付给的主机在多播组内
多播地址 只能用于目的地址 ,不能用于源地址
IP多播 可以分为两种:"本局域网进行硬件多播"、"互联网范围进行多播"
局域网进行硬件多播
在48位的多播地址中,前25位都固定不变,只有后23位可用作多播(即D类地中的28位的后23位)
网际组管理协议IGMP和多播路由选择协议
IP多播需要两种协议
IP多播 需要两种协议:"网际组管理协议IGMP "和"多播路由选择协议"
IGMP不知道IP多播组包含的成员数,也不知道这些成员都分布在哪些网络上
IGMP 协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机参加或退出了某个多播组
网际组管理协议IGMP
IGMP 使用IP数据报 传递其报文(IGMP报文加上IP首部构成IP数据报),一次你我们把IGMP看成属于整个网际协议IP的一个组成部分
IGMP 的工作可分为两个阶段:
- 某主机加入新的多播组时,该主机应向多播组的多播地址发送一个IGMP报文,生命自己要成为该组的成员
- 组成员关系是动态的。本地多播路由器要周期性地探探询本地局域网上的主机
多播路由选择协议
多播路由选择协议 实际上就是要找出以源主机为根结点的多播转发树
在多播转发树上,每一个多播路由器向树的叶节点方向转发收到的多播数据报
三种转发多播数据报的方法:
- 洪泛与剪除 :适合于较小的多播组,其中所有的组成员接入的局域网也是相邻的。采用"反向路径广播RPB"策略:每个路由器在收到一个多播数据报时,先检查数据报是否是从最短路径传送来的,若是则保留,否则丢弃
- 隧道技术 :适用于多播组的位置在地理上很分散的情况,使用隧道多播 时,路由器对多播数据报进行再次封装(即再加上普通数据报首部 ),成为向单一目的站发送的单播数据报,然后通过隧道发送
- 基于核心的发现技术 :适用于多播组的大小在较大范围内变化时,对每一个多播组制定一个核心路由器,给出它的IP单播地址,再创建以它为原点的多播转发树
一些常见的多播路由选择协议 :"距离向量多播路由选择协议DVMRP "、"基于核心的转发树CBT "、"开放最短通路优先的多播扩展MOSPF "、"协议无关多播-稀疏方式PIM-SM "、"协议无关多播-密集方式PIM-DM"
虚拟专用网VPN和网络地址转换NAT
虚拟专用网VPN
只在一个机构内通信的计算机并不需要和互联网相连,这些计算机可以由机构自行分配其IP地址(使用仅在本机构有效的IP地址:本地地址 ),而不需要申请全球唯一的IP地址(全球地址)
在一个机构内通信使用"专用地址",在互联网中的所有路由器,对目的地址是专用地址的数据报一律不进行转发
三个IPv4专用地址块:
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/16
采用专用IP地址的互联网络称为"专用互联网 "或"本地互联网 "(专用网)
网络地址转换NAT
如果专用网内部的主机 想和互联网上的主机 通信可以使用"网络地址转换"
网络地址转换NAT需要在专用网连接到互联网的路由器上安装NAT软件
安装NAT软件的路由器叫作NAT路由器,它至少有一个有效的外部全球IP地址
所有使用本地地址的主机和外界通信时,都要在NAT路由器上将本地地址转换成全球地址,才能和外部通信
从专用网发出去的数据报可以经过NAT路由器 转发到目的主机,但如果互联网主机的数据报发送到专用网内部主机时,NAT路由器接收到数据报却不能知道该发送给哪一台主机
为此,我们引入"端口号 ",使用端口号 的NAT 也叫作"网络地址与端口号转换NAPT ",不使用端口号的NAT 叫作传统的NAT
这里的端口号指的是运输层TCP/UDP 协议的端口号,根据端口号的不同来转发到指定的目的主机
多协议标签交换MPLS
MPLS的工作原理
基本工作过程
MPLS 在MPLS域的入口处,给每一个IP数据报打上固定长度"标签",然后对打上标签的IP数据报用硬件进行转发
MPLS域是指该域中有许多彼此相邻的路由器,并且所有的路由都是支持MPLS技术的"标签交换路由器LSP ",LSR 同时具有"标签交换 "和"路由选择"两种功能
转发等价类FEC
转发等价类就是路由器按照同样方式对待IP数据报的集合(从同样借口转发到同样的下一跳地址)
MPLS首部的位置与格式
MPLS首部处于第二层(链路层)和第三层(网络层)之间
在把加上MPLS首部的IP数据报封装成以太网帧时,以太网的类型字段在单播的情况下设置为8847,在多播情况下设置为8848
MPLS首部格式如下图所示:
- 标签值:20位,标志一个标签
- 试验:3位,保留用于试验
- S:1位,表示"栈"
- 生存时间TTL:8位,防止MPLS分组在MPLS域中兜圈子