第4章 网络层
网络层提供的两种服务
- 网络层应该向运输层提供“面向连接”还是“无连接”的服务?
- 争论的实质:计算机通信中,可靠交付应该由网络还是端系统来负责?
一种观点:让网络负责可靠交付
- 计算机网络使用面向连接的通信方式
通信之前先建立虚电路(Virtual Circuit),来保证双方通信所需的一切网络资源
- 虚电路表示这只是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式传送
- 电路交换的电话通信则是先建立了一条真正的连接
- 如果再使用可靠传输的网络协议,就能使发送的分组无差错按序到达终点,不丢失、不重复
另一种观点:网络提供数据报服务
- 网络层向上只提供简单灵活、无连接的、尽最大努力交付的数据报服务
- 在发送分组时不需要先建立连接,每一个分组(IP数据报)独立发送,与其前后的分组无关(不进行编号)
网络层不提供服务质量的承诺
- 即所传送的分组可能出错、丢失、重复和时序,也不保证分组传送的时限
尽最大努力
- 由于网络不提供端到端的可靠传输服务,路由器可以比较简单,价格低廉
- 如果端到端(主机的进程之间)的通信需要是可靠的,就由网络的主机中的运输层负责可靠交付(差错处理、流量控制等)
好处
- 网络的造价降低
- 运行方式灵活
- 能够适应多种应用
虚电路服务和数据报服务的对比
对比 | 虚电路服务 | 数据包服务 |
---|---|---|
思路 | 可靠通信由网络保证 | 可靠通信由用户主机保证 |
建立连接 | 必须有 | 不需要 |
终点地址 | 仅在连接建立阶段使用,每个分组使用短的电路信号 | 每个分组都有终点的完整地址 |
分组转发 | 属于同一条虚电路的分组按照同一路由转发 | 每个分组独立选择路由进行转发 |
结点故障时 | 所有通过出故障结点的虚电路均不能工作 | 出故障的结点可能会丢失分组,一些路由可能发生变化 |
分组顺序 | 按发送顺序到达终点 | 不一定按顺序到达 |
端到端的差错处理和流量控制 | 可以由网络负责,也可以由用户主机负责 | 由用户主机负责 |
网际协议IP
- 网际协议IP是TCP/IP协议中最主要的协议之一
与IP协议配套使用的三个协议
- 地址解析协议 ARP (Address Resolution Protocol)
- 网际控制报文协议 ICMP (Internet Control Message Protocol)
- 网际组管理协议 IGMP (Internet Group Management Protocol)
虚拟互连网络
如何将异构的网络互相连接起来?
异构网络之间互连的问题
- 不同的寻址方案
- 不同的最大分组长度
- 不同的网络接入机制
- 不同的超时控制
- 不同的差错恢复方法
- 不同的状态报告方法
- 不同的路由选择技术
- 不同的用户接入控制
- 不同的服务(面向连接服务和无连接服务)
- 不同的管理与控制方式等
使用中间设备进行互连
- 中间设备又称为中间系统或中继(relay)系统
有五种中间设备
- 数据层中继系统:转发器(repeater)
- 数据链路层中继系统:网桥或桥接器(bridge)
- 网络层中继系统:路由器(router)
- 网桥和路由器的混合物:桥路器(brouter)
- 网络层以上的中继系统:网关(gateway)
使用路由器进行互连
- 网关比较复杂,使用较少
- 网络互连都是指用路由器进行网络互连和路由选择
- 由于历史原因,许多有关TCP/IP的文献将网络层使用的路由器称为网关
虚拟互连网络的意义
虚拟互连网络即逻辑互连网络
- 虽然互连起来的各种物理网络的异构性是客观存在的
- 但是利用IP协议可以使这些性能各异的网络从用户看来就像是一个统一的网络
- 使用IP协议的虚拟互连网络称为IP网
使用虚拟互连网络的好处
- 当互联网上的主机进行通信时,就好像在一个网络上通信一样,而看不见互连的个具体的网络异构细节
- 如果在覆盖全球的IP网的上层使用TCP协议,就是现在的互联网Internet
分类的IP地址
IP地址及其表示方法
- 把互联网看成一个单一的、抽象的网络
- IP地址就是给每个连接在互联网的主机或路由器分配一个在全世界范围唯一的32位的标识符
- 由互联网名字和数字分配机构ICANN进行分配
IP地址的编址方法
分类的IP地址
- 最基本的编址方法
子网的划分
- 是对最基本的编制方法的改进
构成超网
- 比较新的无分类编制方法
分类IP地址
将IP地址划分位若干个固定类
每一类地址都由两个固定长度的字段组成
网络号 net-id
- 标志主机所连接到的网络
主机号 host-id
- 标志该主机(或路由器)
主机号在它前面的网络号所指明的网络范围内必须是唯一的
所以,一个IP地址在整个互联网范围内是唯一的
IP地址结构
可以记为
各类 IP 地址的网络号字段和主机号字段
常用的三种类别的IP地址
网络类别 | 最大可指派的网络数 | 第一个可指派的网络号 | 最后一个可指派的网络号 | 每个网络中最大主机数 |
---|---|---|---|---|
A | 126 (27–2) | 1 | 126 | 16777214 |
B | 16383 (214–1) | 128.1 | 191.255 | 65534 |
C | 2097151 (221–1) | 192.0.1 | 223.255.255 | 254 |
一般不使用的特殊IP地址
网络号 | 主机号 | 源地址 使用 | 目的地址 使用 | 代表的意思 |
---|---|---|---|---|
0 | 0 | 可以 | 不可 | 在本网络上的本主机(见 6.6 节 DHCP 协议) |
0 | host-id | 可以 | 不可 | 在本网络上的某台主机 host-id |
全 1 | 全 1 | 不可 | 可以 | 只在本网络上进行广播(各路由器均不转发) |
net-id | 全 1 | 不可 | 可以 | 对 net-id上的所有主机进行广播 |
127 | 非全 0 或全 1 的任何数 | 可以 | 可以 | 用于本地软件环回测试 |
IP地址的重要特点
IP地址是一种分等级的地址结构
分等级的好处- IP地址管理机构在分配IP地址时只分配网络号,剩下的主机号由得到该网络号的单位自行分配,这样就方便了地址的管理
- 路由器仅根据目的主机所连接的网络号来转发分组(不考虑目的的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间
实际上IP地址是标志一个主机(或路由器)和一条链路的接口
当一个主机同时连接到两个网络上时,该主机必须同时具有两个相应的IP地址,其网络号net-id必须是不同的
- 这种主机称为多归属主机(multihomed host)
- 由于从一个路由器至少应当连接到两个网络(这样它才能将IP数据报从一个网络转发到另一个网络),因此一个路由器至少应当有两个不同的IP地址
两个路由器直接相连的接口处,可指明也可不指明IP地址。如指明IP地址,则这一段连线就构成了一种只包含一段线路的特殊“网络” 。现在常不指明IP地址。
用转发器或网桥连接起来的若干个局域网仍为一个网络,因此这些局域网都具有同样的网络号 net-id
所有分配到网络号net-id的网络,无论时范围很小的局域网还是广域网,都是平等的
IP地址与硬件地址✨
- IP地址与硬件地址是不同的地址
从层次角度看
- 硬件地址(物理地址/MAC)是数据链路层和物理层使用的地址
- IP地址是网络层和以上各层使用的地址,是一种逻辑地址(因为IP地址是用软件实现的)
在IP层抽象的互联网上只能看到IP数据报,IP1->IP2表示从源地址IP1到目的地址IP2
两个路由器的IP地址并不出现在IP数据报的首部中
路由器只根据目的站的IP地址的网络号进行路由选择
在具体的物理网络的链路层只能看见MAC帧而看不见IP数据报
IP 层抽象的互联网屏蔽了下层很复杂的细节
在抽象的网络层上讨论问题,就能够使用统一的、抽象的 IP 地址研究主机和主机或主机和路由器之间的通信
- 主机 H1 与 H2 通信中使用的IP地址 与 硬件地址 HA
地址解析协议ARP
通信使用的两个地址
- IP地址
- MAC地址
ARP的作用
- 从网络层使用的IP地址,解析出在数据链路层使用的硬件地址
ARP要点
- 不管网络层使用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址
每一个主机都设有一个ARP高速缓存(ARP cache),里面有所在的局域网上的各主机和路由器的IP地址到硬件地址的映射表
- < IP address;MAC address;TTL >
- TTP(time to live):地址映射的有效时间
当主机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找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络,剩下的工作交给下一个网络来做
使用ARP的四种典型情况
发送方是主机
- 要把IP数据报发送到本网络上的另一个主机,这时用ARP找到目的主机的硬件地址
- 要把IP数据包发送到另一个网络上的阿一个主机,这时用ARP找到本网络上的一个路由器的硬件地址,剩下工作交给这个路由器完成
- 发送方是路由器
- 要把IP数据报转发到本网络上的一个主机,这时用ARP找到目的主机的硬件地址
- 要把IP数据报转发到另一个网络上的一个主机,这时用ARP找到本网络上另一个路由器的硬件地址,剩下工作由这个路由器完成
为什么不直接使用硬件地址通信
- 全世界存在着各式各样的网络,它们使用不同的硬件地址。要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,几乎是不可能的。
IP编址的好处
- 解决了这个复杂的问题。连接到互联网的主机只需各自拥有唯一的IP地址,它们之间的通信就像是连接在同一个网络上那样简单方便,因为调用ARP的复杂过程都是由计算机软件自动进行的,对用户来说看不见调用过程
- 因此,在虚拟的IP网络上用IP地址进行通信给广大的计算机用户带来了很大的方便
IP数据报的格式
- 一个IP数据报由首部和数据两部分组成
- 首部的前一部分是固定长度,20字节,是所有IP数据报必须有的
- 在首部的固定部分后面是一些可选字段,其长度是可变的
IP数据报中国固定的各字段
版本
- 4位,指IP协议的版本,目前的IP协议版本号为4,即IPv4
首部长度
- 4位,可表示的最大数值是15各单位,所以IP的首部长度最大值是60字节
区分服务
- 8位,用来获得更好的服务
- 只有在使用区分服务 DiffServ 时,这个字段才起作用,一般都不使用
总长度
- 16位,指首部和数据之和的长度,单位为字节,因此数据包的最大长度为65535字节
- 总长度必须不超过最大传送单元MTU
标识
- 16位,是一个计数器,用来产生IP数据报的标识
标志
- 3位,目前只有前两位有意义
- 标志字段的最低为是MF(more fragment),MF=1表示后面还有分片,MF=0表示这是最后一个分片
- 标志字段的中间一位是DF(don’t fragment),只有当DF=0时才允许分片
片偏移
- 13位,指出较长的分组在分片后某片在原分组中的相对位置
- 以8个字节为偏移单位
生存时间
- 8位,记为TTL(time to live),表示数据报在网络中可通过路由器数的最大值
协议
- 8位,指出此数据报所携带的数据使用何种协议,以便目的主机的IP层将数据部分上交给那个处理过程
- IP协议支持多种协议,IP数据报可以封装多种协议PDU,例如ICMP, IGMP, TCP, UDP, OPPF
首部校验和
- 16位,只检验数据报的首部,不检验数据部分,这里不采用CRC校验码,而采用简单的计算方法
源地址和目的地址
- 都占4字节
- 例题 IP数据报分片
- 都占4字节
一个数据报总长度为3820字节,其数据部分的长度为3800字节(使用固定首部),需要分片为长度不超过1420字节的数据报片
- 固定首部长度为20字节,所以每个数据报片的数据部分长度不能超过1400字节
- 分为3个数据报,数据部分长度分别为1400,1400,1000字节
- 原始数据报首部被复制为各数据报片的首部,但必须修改有关字段的值
总长度 | 标识 | MF | DF | 片偏移 | |
---|---|---|---|---|---|
原始数据报 | 3820 | 12345 | 0 | 0 | 0 |
数据报片1 | 1420 | 12345 | 1 | 0 | 0 |
数据报片2 | 1420 | 12345 | 1 | 0 | 175 |
数据报片3 | 1020 | 12345 | 0 | 0 | 350 |
IP数据报首部的可变部分
- 可变部分就是一个选项字段,用来支持排错、测量和安全等错误
- 长度可变,从1个字节到40个字节不等,取决于所选择的项目
- 增加首部的可变部分是为了增加IP数据报的功能,但同时也使得IP数据报的首部长度成为可变的,增加了每一个路由器处理数据报的开销
- 实际上很少被使用
IP层转发分组的流程
假设由4个A类网络通过3个路由器相连,每一个网络可能有上万个主机
- 若按目的主机号来制作路由表,每一个路由表就有4万个项目,即4万行,每一行对应一台主机,路由表就多于庞大
- 若按主机所在的网络地址来制作路由表,每个路由器的路由表就只包含4个项目,就可使路由表大大简化
查找路由表
根据目的网络地址就能确定下一跳路由器,这样做的结果
- IP数据报最终一定可以找到目的主机所在的目的网络上的路由器,可能要通过多次间接交付
- 只有到达最后一个路由器时,才试图向目的主机进行直接交付
特定主机路由
- 虽然互联网的所有分组转发都是基于目的主机所在的网络,但在大多数情况下都允许有特例,为特定的目的主机指明一个路由
- 采用特定主机路由可使网络管理人员更方便地控制网络和测试网络,同时也可在需要考虑某种安全问题时采用这种特定主机路由
默认路由 default route
- 路由器还可采用默认路由来减少路由表所占空间和搜索路由表所用的时间
- 这种转发方式在一个网络只有很少的对外连接时很有用
- 默认路由在主机发送IP数据报时往往更能显示出好处
- 如果主机连接在一个小网络上,而这个网络只用一个路由器和互联网连接,那么在这种情况下使用默认路由是非常合适的
IP数据报的转发过程中
- IP数据报的首部中没有地方可以用来指明“下一跳路由器的IP地址”
- 当路由器收到待转发的数据报,不是将下一跳路由器的IP地址填入IP数据报,而是送交下层的网络接口软件
- 网络接口软件使用ARP负责将下一跳的IP地址转换为硬件地址,并将硬件地址放在链路层的MAC帧的首部,然后根据这个硬件地址找到下一跳路由器
路由分组转发算法
- 从数据报的首部提取目的主机的IP地址D,特出目的网络地址N
- 若网络N与路由器直接相连,就把数据报直接交付给目的主机D;否则为间接交付,执行3
- 若路由表中有目的地址为D的特定主机路由,就把数据报传送给路由表中所指明的下一跳路由器;否则执行4
- 若路由表中有到达N的路由,就把数据报传送给路由表指明的下一跳路由器;否则执行5
- 若路由表中有一个默认路由,就把数据报传送给路由表中所指明的默认路由器;否则执行6
- 报告转发分组出错
路由表相关
- 路由表没有给分组指明到某个网络的完整路径
- 路由表指出,到某个网络应先到达某个路由器,即下一跳路由器
- 在到达下一跳路由器后,再继续查找其路由表,知道在下一步应当到哪一个路由器
- 一步一步查找下去直到最后到达目的网络
划分子网和构造超网
划分子网
在APRANET的早期,IP地址设计的不够合理的点
- IP地址空间的利用率有时候很低
- 给每一个物理网络分配一个网络号会使路由表变得太大因而使网络性能变差
- 两级的IP地址不够灵活
三级IP地址
- 1985年起,IP地址中增加了 子网号字段 ,两级的IP地址变成三级的IP地址
- 这种做法叫做划分子网(subnetting)
- 划分子网已成为互联网的正式标准协议
划分子网的基本思路
划分子网纯属一个单位内部的事情
- 单位对外仍表现为没有划分子网的网络
- 从主机号借用若干个位作为子网号 subnet-id,而主机号 host-id也就相应减少了若干位
`IP地址 = {<网络号>, <子网号>, <主机号>}`
凡是从其他网络发送给版单位某个主机的IP数据报
- 仍然是根据IP数据报的目的网络号 net-id,先找到连接在本单位网络上的路由器
此路由器接收了IP数据报,按目的网络号 net-id和子网号 subnet-id找到目的子网
最后把IP数据报直接交付给目的主机
未划分子网的网络
划分了3个子网的网络
没有划分子网时,IP地址是两级结构
划分子网后,IP地址就变成了三级结构
划分子网只是把IP地址的主机号host-id这部分进行再划分,而不改变IP地址原来的网络号net-id
划分子网的优点
- 减少了IP地址的浪费
- 使网络的组织更加灵活
- 更便于维护和管理
划分子网纯属一个单位内部的事情,对外部网络透明
- 对外仍表现为没有划分子网的一个网络
子网掩码
- 从IP数据报的首部无法判断源主机或目的主机所连接的网络是否进行了子网划分
- 使用子网掩码 subnet mast可以找出IP地址中的子网部分
- 子网掩码长度 = 32位
- 子网掩码左边部分的一串1,对应网络号和子网号
- 子网掩码右边部分的一串0,对应主机号
IP地址 & 子网掩码 = 网络地址
默认子网掩码
子网掩码的重要性
- 子网掩码是一个网络或一个子网的重要属性
- 路由器在和相邻路由器交换路由信息时,必须把自己所在网络的子网掩码告诉相邻路由器
- 路由器的路由表中的每一个项目,除了要给出目的网络地址外,还必须给出该网络的子网掩码
- 若一个路由器连接在两个子网上,就拥有两个网络地址和两个子网掩码
子网划分方法
- 固定长度子网和变长子网两种子网划分方法
- 如果采用固定长度子网,所划分的所有子网的子网掩码都是相同的
- 划分子网增加了灵活性,但是减少了能够连接在网络上的主机总数 | 子网号的位数 | 子网掩码 | 子网数 | 每个子网的主机数 | | —- | —- | —- | —- | | 2 | 255.255.192.0 | 2 | 16382 | | 3 | 255.255.224.0 | 6 | 8190 | | 4 | 255.255.240.0 | 14 | 4094 | | 5 | 255.255.248.0 | 30 | 2046 | | 6 | 255.255.252.0 | 62 | 1022 | | 7 | 255.255.254.0 | 126 | 510 | | 8 | 255.255.255.0 | 254 | 254 | | 9 | 255.255.255.128 | 510 | 126 | | 10 | 255.255.255.192 | 1022 | 62 | | 11 | 255.255.255.224 | 2046 | 30 | | 12 | 255.255.255.240 | 4094 | 14 | | 13 | 255.255.255.248 | 8190 | 6 | | 14 | 255.255.255.252 | 16382 | 2 |
子网号的位数没有0,1,15,16,因为这没有意义
例题
已知 IP 地址是 141.14.72.24,子网掩码是 255.255.224.0。试求网络地址。
IP地址和子网掩码相与得到网络地址
- 72H = 01001000B
- 224H = 11100000B
- 相与得到01000000B = 64H
- 所以网络地址 = 141.14.64.0
如果子网掩码改成255.255.192.0
- 192H = 11000000B
- 72H = 01001000B
- 相与得到64H
- 网络地址 = 141.14.64.0
- 可以看出,不同的子网掩码得出了相同的网络地址,但不同的掩码的效果是不同的
使用子网时分组的转发
- 在不划分子网的两级IP地址下,从IP地址得出网络地址很简单
在划分子网的情况下,从IP地址不能唯一地得出网络地址,因为网络地址取决于那个网络所采用的子网掩码
- 但数据报的首部没有提供子网掩码
- 因此分组转发的算法必须改动
算法
- 从收到的分组的首部提取目的IP地址D
- 先用各网络的子网掩码和D逐位相与,看是否和相应的网络地址匹配,如果匹配,就将分组直接交付;否则就是就是间接交付,执行3
- 若路由表中有目的地址位D的特定主机路由,则将分组传送给指明的下一跳路由器;否则,执行4
- 对路由表中的每一行的子网掩码和D逐位相与,若结果与该行的网络地址相匹配,就将分组传送给该行指明的下一跳路由器;否则,执行5
- 若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器;否则,执行6
- 报告转发分组出错
例题
- 已知互联网和路由器R1中的路由表,主机H1向H2发送分组,试讨论R1收到H1向H2发送的分组后查找路由表的过程。
- 目的IP地址D为128.30.33.138
分组到达R1之后
- 首先检查128.30.33.138是否直接相连,发现没有
- 将D和每个子网掩码相与
- 发现D和子网2的子网掩码255.255.255.128相与时,网络地址得到128.30.33.128,与目的网络地址相对应
- 将分组向子网2转发
- 发现和接口1对应的目的网络地址相同,所以转发给接口1
无分类编址CIDR 🤍
网络前缀
互联网面临的三个问题
B类地址在1992年分配了一半
互联网主干网上的路由表中的项目数急剧增长
几千增长到几万
- 整个IPv4的地址空间最终将全部耗尽
编址问题的演进
- 在一个划分子网的网络中可同时几个不同改的子网掩码
- 使用变长子网掩码VLSM(Variable Length Subnet Mask)可进一步提高IP地址资源的利用率
在VLSM的基础上又进一步研究出无分类编址方法
- 正式的名字为无分类域间路由选择CIDR
- Classless Inter-Domain Routing
CIDR的特点
- 消除了传统的A类,B类和C类地址以及划分子网的概念,可以更有效地分配IPv4的地址空间
- CIDR使用各种长度的网络前缀 network-prefix代替分类地址中的网络号和子网号
- IP地址从三级编址(使用子网掩码)又回到了两级编制
CIDR使用斜线记法,在IP地址后面机上一个斜线,然后写上网络前缀所占的位数
- 这个数值对应于三级编制中子网掩码中的1的个数
- 例如 220.78.168.0/24
CIDR地址块
网络前缀都相同的连续的IP地址组成CIDR地址块
128.14.32.0/20,表示的地址块共有2个,因为网络前缀有20位,所以主机号是12位的
- 这个地址块的起始地址是128.14.32.0
后面12个位全置为0就是起始地址
- 这个地址块的起始地址是128.14.32.0
在不需要指出地址块的起始地址时,也可以将这样的地址块简称为 /20地址块
最小地址,即起始地址:128.14.32.0
最大地址,后12位全置1:128.14.47.255
全0和全1的主机号地址一般不适用
路由聚合
route aggregation
一个CIDR地址块可以表示很多地址,这种地址的聚合常称为路由聚合
- 它使得路由表中的一个项目可以表示很多个原来传统分类地址的路由
路由聚合有利于减少路由器之间的路由选择信息的交换,从而提高了互联网的性能
路由聚合也成为构成超网 supernetting
CIDR虽然不适用子网,但仍使用掩码这个名词
对于 /20 地址块,它的掩码是20个连续的1
CIDR记法的其他形式
10.0.0.0/10 可以简写为 10/10
- 省略了点分十进制中低位连续的0
- 10.0.0.0/10页隐含了IP地址10.0.0.0的掩码是255.192.0.0
网络前缀的后面加一个星号,星号表示IP地址中的主机号,可以是任意值
- 例如00001010 00 * | CIDR 前缀长度 | 点分十进制 | 包含的地址数 | 相当于包含分类的网络数 | | —- | —- | —- | —- | | /13 | 255.248.0.0 | 512 K | 8 个 B类或 2048 个 C 类 | | /14 | 255.252.0.0 | 256 K | 4 个 B 类或1024 个 C 类 | | /15 | 255.254.0.0 | 128 K | 2 个 B 类或512 个 C 类 | | /16 | 255.255.0.0 | 64 K | 1 个 B 类或256 个 C 类 | | /17 | 255.255.128.0 | 32 K | 128 个 C 类 | | /18 | 255.255.192.0 | 16 K | 64 个 C 类 | | /19 | 255.255.224.0 | 8 K | 32 个 C 类 | | /20 | 255.255.240.0 | 4 K | 16 个 C 类 | | /21 | 255.255.248.0 | 2 K | 8 个 C 类 | | /22 | 255.255.252.0 | 1 K | 4 个 C 类 | | /23 | 255.255.254.0 | 512 | 2 个 C 类 | | /24 | 255.255.255.0 | 256 | 1 个 C 类 | | /25 | 255.255.255.128 | 128 | 1/4 个 C 类 | | /26 | 255.255.255.192 | 64 | 1/4 个 C 类 | | /27 | 255.255.255.224 | 32 | 1/8 个 C 类 |
构成超网
前缀长度不超过23为的CIDR地址块都包含了多个C类地址
- 这些C类地址合起来就构成了超网
- CIDR地址块中的地址数一定是2的整数次幂(包含了全0和全1)
网络前缀越短,其地址所包含的地址数就越多
- 在三级结构的IP地址中,划分子网会使网络前缀变长
CIDR的一个好处
- 可以更加有效地分配IPv4的地址空间,可以根据客户的需要分配适当大小的CIDR地址块
CIDR地址块划分举例
- 该ISP拥有64个C类网络
因为206.0.64.0/18,说明前面那么可以分配的地址就有2个,每1个C类网络可以分配2个地址,所以就有2个C类网络
- 在不使用CIDR技术的情况下,与该ISP的路由器交换路由信息的每一个路由器的路由表中,就需要有64个项。
- 采用地址聚合后,只需要使用路由聚合后的1个项目,即206.0.64.0/18,即可找到该ISP
最长前缀匹配
- 在使用CIDR的时候,路由表中的每个项目由网络前缀和下一跳地址组成
- 在查找路由表时可能会得到不止一个匹配结果
应该从匹配结果中选择具有最长网络前缀的路由
- 最长前缀匹配 longest-prefix matching
- 又称最长匹配或最佳匹配
- 网络的前缀越长,地址块越小,路由就越具体
举例
收到分组的目的地址D
- 206.0.71.130
路由表中
- 206.0.68.0/22 => 1
- 206.0.71.128/25 => 2
针对第一个项目
- 206.0.68.0/22的掩码M,有22个连续的1
- 因此M AND D=206.0.68.0
- 所以与路由表中的第一个项目匹配
针对第二个项目
- 206.0.71.128/25的掩码M,有25个连续的1
- 因此M AND D=206.0.71.128
- 所以与路由表中的第二个项目匹配
选择两个匹配的地址中更具体的一个,即选择最长前缀的地址
- 这里的第二个项目前缀有25个1,更具体,所以选择这个
使用二叉线索查找路由表
- 为了进行更有效的查找,通常是将无分类编址的路由表存放在一种层次的数据结构中,然后自上而下地按层次进行查找,最常用的就是二叉线索 binary trie
网际控制报文协议ICMP
为了更有效地转发IP数据报,在网际层使用网际控制报文协议
- ICMP Internet Control Message Protocol
- 是互联网的标准协议
ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告,但ICMP不是高层协议,而是IP层的协议
ICMP报文格式
ICMP报文种类
- ICMP差错报告报文
- ICMP询问报文
ICMP差错报告报文
- 终点不可达
- 时间超过
- 参数问题
- 改变路由(重定向) Redirect
不发送的情况
- 对ICMP差错报告报文不再次发送
- 对第一个分片的数据报片的所有后续数据报片都不发送
- 对具有多播地址的数据报都不发送
- 对具有特殊地址(127.0.0.0或0.0.0.0)的数据报不发送
ICMP询问报文
- 回送请求和回答报文
- 时间戳请求和回答报文
不再使用的ICMP报文
- 信息请求和回答报文
- 掩码地址请求和回答报文
- 路由器询问和通告报文
- 源点抑制报文
ICMP应用举例
PING
- Packet Internet Groper
- 用来测试两个主机之间的连通性
- 使用了ICMP回送请求和回送回答报文
- 是应用层直接使用网络层ICMP的例子,没有通过运输层的TCP或UDP
Traceroute
- win命令:tracert
- 用来跟踪一个分组从源点到终点的路径
- 利用IP数据报中的TTL字段和ICMP时间超过差错报告报文实现对从源点到终点的路径的跟踪
互联网的路由选择协议
基本概念
理想路由算法
- 正确且完整
- 计算简单
自适应性
- 能适应通信量和网络拓扑的变化
- 稳定性
- 公平
- 最佳
“最佳路由”
- 不存在绝对的最佳路由算法
- 最佳只能是相对于某一种特定要求下得出的较为合理的选择
- 实际的算法应尽可能接近
路由选择的复杂性
- 是网络中的所有的结点共同协调工作的结果
- 路由选择的环境往往不断变化,这种变化有时无法事先知道
自适应性
静态路由选择策略
- 非自适应路由选择
- 简单,开销小
- 不能及时适应网络状态的变化
动态路由选择策略
- 自适应路由选择
- 能较好适应网络状态的变化
- 实现复杂,开销大
分层次的路由选择协议
分层次的原因
- 互联网规模大
- 许多单位不愿意外界了解自己单位网络的布局细节和路由选择协议,同时也希望连接互联网
自治系统AS
- Autonomous System
定义
- 在单一的技术管理下的一组路由器,而这些路由器使用一种 AS 内部的路由选择协议和共同的度量以确定分组在该 AS 内的路由,同时还使用一种 AS 之间的路由选择协议用以确定分组在 AS之间的路由。
现在强调的定义
- 尽管一个 AS 使用了多种内部路由选择协议和度量,但重要的是一个 AS 对其他 AS 表现出的是一个单一的和一致的路由选择策略。
互联网的两大类路由选择协议
内部网关协议IGP Interior Gateway Protocol
在一个自治系统内部使用的路由选择协议
目前这类使用的最多,如RIP和OSPF协议
也叫域内路由选择 intradomain routing
外部网关协议EGP External Gateway Protocol
源站和目的站处在不同的自治系统中,数据报传到一个AS的边界时,就需要一种协议将路由选择信息传递到另一个自治系统中
在外部网关协议中目前使用最多的时BGP-4
也叫域间路由选择 interdomain routing
内部网关协议RIP
Routing Information Protocol
工作原理
- 是内部网关协议IGP中最先得到广泛使用的协议
- 是一种分布式的,基于距离向量的路由选择协议
- 要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录
距离定义
- 从一个路由器到直接连接的网络距离定义为1
- 从一个路由器到非直接连接的网络的距离定义为所经过的路由器数+1
- RIP协议中的距离也称为跳数 hop count,每经过一个路由器,跳数+1
- 距离实际上指最短距离
- RIP认为一个好的路由就是通过的路由器的数目少(距离短)
- RIP认为一条路径最多只能包含15个路由器
距离的最大值为15,16即相当于不可达
- 可见RIP只适用于小型互联网
RIP不能在两个网络之间同时使用多条路由
- RIP会选择一个最短路由,哪怕还存在另一条高速但路由器较多的路由
RIP三个特点
- 仅和相邻路由器交换信息
- 交换的信息是当前本路由器所知道的全部信息(自己的路由表)
- 按固定的时间间隔交换路由信息,例如30秒。当网络拓扑发生变化时,路由器也及时向响铃路由器通告拓扑变化后的路由信息。
路由表的建立
- 路由器开始工作时,只知道直接连接的网络的距离,路由表为空
- 之后,每一个路由器只和数目有限的相邻路由器交换并更新路由信息
- 若干次更新后,所有的路由器最终都会知道当前AS中任何一个网络的最短距离和下一跳路由器的地址
RIP协议的收敛过程较快
- 收敛就是在AS中所有的结点都得得到正确得到路由选择信息的过程
距离向量算法
路由器收到相邻路由器(其地址为 X)的一个 RIP 报文:
(1) 先修改此 RIP 报文中的所有项目:把“下一跳”字段中的地址都改为 X,并把所有的“距离”字段的值加 1。
(2) 对修改后的 RIP 报文中的每一个项目,重复以下步骤:
若项目中的目的网络不在路由表中,则把该项目加到路由表中。
否则
若下一跳字段给出的路由器地址是同样的,则把收到的项目替换原路由表中的项目。
否则
若收到项目中的距离小于路由表中的距离,则进行更新,
否则,什么也不做。
(3) 若 3 分钟还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达路由器,即将距离置为 16(表示不可达)。
(4) 返回。
距离向量算法的基础时Bellman-Ford算法
算法要点
- 设X是结点A到B的最短路径上的一个结点
- 若把路径A->B拆成两段路径A->X和X->B,则每一段路径A->和X->B也都分别是结点A到X和结点X到B的最短路径
- RIP 协议让互联网中的所有路由器都和自己的相邻路由器不断交换路由信息,并不断更新其路由表,使得从每一个路由器到每一个目的网络的路由都是最短的(即跳数最少)。
- 虽然所有的路由器最终都拥有了整个自治系统的全局路由信息,但由于每一个路由器的位置不同,它们的路由表当然也应当是不同的。
例题
已知路由器R6的路由表,现在收到R4发来的路由更新信息,尝试更新R6路由表
- R6原路由表 | 目的网络 | 距离 | 下一跳路由器 | | —- | —- | —- | | Net2 | 3 | R4 | | Net3 | 4 | R5 | | … | … | … |
- R4发来的路由更新信息 | 目的网络 | 距离 | 下一跳路由器 | | —- | —- | —- | | Net1 | 3 | R1 | | Net2 | 4 | R2 | | Net3 | 1 | 直接交付 |
- 通过更新信息获得 | 目的网络 | 距离 | 下一跳路由器 | | —- | —- | —- | | Net1 | 4 | R4 | | Net2 | 5 | R4 | | Net3 | 2 | R4 |
- 更新后R6路由表 | 目的网络 | 距离 | 下一跳路由器 | | —- | —- | —- | | Net1 | 4 | R4 | | Net2 | 5 | R4 | | Net3 | 2 | R4 | | … | … | … |
另一个例子
从C获取的RIP报文
增加跳数后
- 旧表
Net1,没有新信息,不变
Net2,下一跳相同(都是到C的),替换
Net3,新路由,增加
Net6,路径更短的路由,替换
Net8,路径长度相等,不变
Net9,路径长度增加,不变
新表
RIP2协议的报文格式
RIP是应用层协议,使用UDP传送数据
由首部和路由部分组成
路由部分由若干路由信息做成,每个路由信息有20个字节。
- 其中地址标识符(地址类别)用来标志所使用的地址协议
- 路由标记填AS的号码,考虑到使用RIP可能收到本AS以外的路由选择信息
- 后面再指出某个网络地址,该网络的子网掩码,下一跳路由器地址以及到此网络的距离
- 一个RIP报文最多包括25个路由,因此RIP报文的最大长度为4+20*25=504字节
RIP2具有简单的鉴别功能
- 如果要使用鉴别功能,就将原来写入第一个路由信息的位置用作鉴别
- 在鉴别数据之后才写入路由信息,最多只能再放24个路由信息
RIP协议特点
- 好消息传得快,坏消息传得慢
存在的问题
- 当网络出现故障时,需要经过比较长的时间才能将此信息传送到所有的路由器
例
- R1告诉R2,它到网1是无法到达的,但是在告诉到R2之前,R2就向R1发送了更新报文
- R2告诉R1,它能到达网1,且距离是2(因为之前R2能通过R1到达网1)
- R1听说了,以为R2可以到R1,就自动更新成它也能到网1,距离是3(通过R2)
- 于是R2又听说现在R1需要距离3才能到达网1了,他就以为他该更新距离了,于是他更新成他能到网1,距离是4
- 类似一个死循环
- 直到有人发现另一个人需要16距离才能到达网1时,两个路由器才知道网1不可达
RIP协议的优缺点
优点
- 实现简单,开销小
缺点
- 限制了网络的规模,最大距离为15
- 路由器之间交换的路由信息是路由器中的完整路由表,当网络规模扩大,开销增加
- 坏消息传播慢,使更新过程的收敛时间长
内部网关协议OSPF
开放最短路径优先 OSPF
- Open Shortest Path First
- 为克服RIP的缺点被提出来
- OSPF原理简单,实现复杂
OSPF协议特点
- 开放表明OSPF是公开发表的
- 最短路径优先是因为使用了Dijkstra提出的最短路径算法SPF
采用分布式的链路状态协议
- link state protocol
三个要点
洪泛法 flooding
向本自治系统中所有路由发送信息发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息
链路状态就是说明本路由器都和哪些路由器相邻,以及该链路的度量 metric只有当链路状态发生变化时,路由器才采用洪泛法向所有路由器发送此信息
链路状态数据库 link-state database
- 由于各路由器之间频繁交换链路状态信息,所以最终所有的路由器都能建立一个链路状态数据库
这个数据库实际上就是全网的拓扑结构图,它在全网范围内是一致的
- 这称为链路状态数据库的同步
- OSPF的链路状态数据库能较快更新,使各个路由器能即使更新路由表
- OSPF的更新过程收敛快是其重要优点
OSPF的区域 area
为了使OSPF能够用于更大规模网络,OSPF将一个AS划分为更小范围,叫区域
每一个区域有一个32位的区域标识符
区域不能太大,一个区域内的路由器最好不超过200个
两种区域
- OSPF使用层次结构的区域划分,在上层的区域叫做主干区域 backbone area
- 主干区域的标识符位0.0.0.0,作用使联通其他在下层的区域
划分区域的好处
- 将利用洪泛法交换链路状态信息的范围局限于每一个区域,而不是整个AS,减少了网络上的通信量
- 在一个区域内部的路由器只知道本区域的完整网络拓扑,不知道其他区域的网络拓扑结构
OSPF直接用IP数据报传送
- OSPF不用UPD,而是直接用IP数据报栓送
- OSPF构成的数据报很短,可以减少路由信息的通信量
也不必将很长的数据报分片传送
- 但分片传送的数据报只要丢失一个,就必须重传整个数据报
OSPF其他特点
OSPF对于不同类型的业务可以计算出不同的路由
- 因为OSPF对不同的链路可根据IP分组的不同服务类型TOS设置成不同代价
多路径间的负载平衡
- 如果到同一个目的网络有多条相同代价的路径,可以将通信量分配给这几条路径
- 所有在OSPF路由器之间交换的分组都具有鉴别的功能
- 支持可变长度的子网划分和无分类编制CIDR
- 每一个链路状态都带上一个32位的序号,序号越大状态越新
OSPF分组
OSPF五种分组类型
- 问候分组 Hello
- 数据库描述分组 Database Description
- 链路状态请求分组 Link State Request
- 链路状态更新分组 Link State Update
- 链路状态确认分组 Link State Acknowledgment
OSPF的基本操作
- OSPF使用可靠的洪泛法发送更新分组
OSPF其他特点
- 每隔一段时间,例如30分钟,要刷新一次数据库中的链路状态
由于一个路由器的链路状态只涉及到与相邻路由器的连通状态,因而与整个互联网规模无直接关系
- 因此当互联网规模很大的时候,OSPF协议要比距离向量协议RIP好得多
- OSPF没有坏消息传得慢的问题
多点接入的局域网采用了指定的路由器(designated router)的方法,使广播的信息量大大减少
- 指定的路由器代表该局域网上所有的链路向连接到该网络上的各路由器发送状态信息
外部网关协议BGP
- BGP是不同AS的路由器之间交换路由信息的协议
对于AS之间的路由选择,要寻找最佳路由不现实
- 当一条路径经过几个不同的AS时,要相对这样的路径计算出有意义的代价不太可能
- 比较合理的做法是在AS之间交换可达性信息
AS之间的路由选择必须考虑有关策略
- 边界网关协议BGP追求的是找到一条更够到达目的网络的较好路由(不兜圈子),而并非是最佳路由
BGP发言人
- 每一个AS的管理员至少要选择一个路由器作为该AS的BGP发言人 BGP speaker
- 两个BGP发言人都是通过一个共享网络连接在一起,BGP发言人往往是BGP边界路由器(但也可以不是)
BGP交换路由信息
一个BGP发言人要和其他AS的发言人交换路由信息时,需要先建立TCP连接,然后在此连接的基础上交换BGP报文以建立BGP会话(session),利用BGP会话交换路由信息
- 使用TCP连接能提供可靠服务,也简化了路由选择协议
- 使用TCP连接交换路由信息的两个BGP发言人,成为对方的邻站 neighbor 或对等站 peer
- BGP交换的网络可达性信息就是要到达某个网络所要经过的一系列AS
- 当BGP发言人相互交换了网络可达性信息之后,各BGP发言人就根据策略从收到的路由信息中找出到达各AS的较好路由
BGP协议的特点
- BGP协议交换路由信息的结点数量级就是自治系统数的量级,比自治系统中的网络数少很多
- 每一个AS中的BGP发言人的数目很少,使得AS之间的路由选择不过分复杂
- BGP支持CIDR,因此BGP的路由表就包含目的网络前缀,下一跳路由器,以及到达该目的网络所要经过的各个AS序列
在BGP刚运行时,BGP的邻站是交换整个的BGP路由表,但以后只需要在发生变化时更新变化的部分
- 这样做对节省网络带宽和减少路由器的处理开销都有好处
BGP的四种报文
打开报文 OPEN
用来与相邻的另一个BGP发言人建立关系更新报文 UPDATE
用来发送某一个路由的信息,以及列出要撤销的路由保活报文 KEEPALIVE
用来确认打开报文和周期性地证实邻站关系通知报文 NOTIFICATION
用来发送检测到的差错
BGP报文格式
- BGP是应用层协议,借助TCP传送
路由器构成
- 路由器是网络层设备
主要作用
- 连通不同的网络
选择信息传送的线路。
- 选择通畅快捷得近路,能大大提高通信速度,减轻网络系统通信负荷,节约网络系统资源,提高网络系统畅通率,从而让网络系统发挥出更大得效益
路由器结构
路由器是有多个输入、输出端口的专用计算机,任务是转发分组
- 路由器的转发分组是网络层的主要工作
路由器结构部分
- 路由选择部分
- 分组转发部分
路由选择部分
- 也叫控制部分,核心构件是路由选择处理机
- 路由选择处理机的任务是根据选择的路由选择协议构造路由表,同时定期和相邻路由器交换信息,不断更新和维护路由表
分组转发部分
交换结构
- 又称交换组织(switching fabric),作用是根据转发表(forwarding table)对分组进行处理
- 一组输入端口
- 一组输出端口
转发和路由选择的区别
- 转发 forwarding 是路由器根据转发表将用户的IP数据报从合适的端口转发出去
- 路由选择 routing 是按照分布式算法,根据从相邻路由器得到的关于网络拓扑的变化情况,动态地改变所选择的路由
- 路由表是根据路由选择算法得出的,转发表是从路由表得出的
输入端口对分组的处理
- 输入端口里有物理层、数据链路层和网络层的处理模块
- 数据链路层剥去首部和尾部后,将分组送到网络层的队列中排队等待处理,会有一定时延
- 路由器的交换功能中最重要的是输入端口中的查找和转发功能
输出端口对分组的处理
- 输出端口里也有物理层、数据链路层和网络层的处理模块
- 输出端口从交换结构接收分组,然后把他们发送到路由器外面的线路上
在网络层的模块中,有一个缓冲区,来不及发送的分组暂存在这个队列中
- 当交换结构传送过来分组的速率超过输出链路的发送速率时
- 数据链路层模块将分组加上链路层的首部和尾部,交给物理层发送给外部线路
路由器的输入或输出队列产生
溢出是造成分组丢失的重要原因
- 当路由器处理分组的速率赶不上分组进入队列的速率,队列的存储空间最终必定会为零
- 这时后面进入队列的分组由于没有存储空间只能被丢弃
交换结构
- 路由器的关键构件
- 负责把本组从以一个输入端口转移到合适的输出端口
实现交换的三种常用方法
- 存储器
- 总线
- 纵横交换结构
通过存储器交换
- 当路由器的某个输入端口收到分组时,就用中断方式通知路由选择处理机,然后分组就从输入端口复制到存储器中
- 路由处理机从分组首部提取目的地址,查找路由表,再将分组复制到合适的输出端口的缓存中
- 若存储器的带宽为每秒M个分组,那么路由器的交换速率一定小于M/2
通过总线
- 数据报从输入端口通过共享的总线直接传送到合适的输出端口,而不需要路由选择处理机的干预
- 因为每一个要转发的分组都要通过这一条总线,因此路由器的转发带宽就受总线速率的限制
- 现代的技术已经可以将总线的带宽提高到每秒吉比特的速率,因此许多的路由器产品都采用这种通过总线的交换方式
通过纵横交换结构 crossbar switch fabric
- 这种结构常称为互连网络 interconnection network
- 有2N条总线,可以使N个输入端口和N个输出端口连接
- 当输入端口收到分组时,就将它发送到与该输入端口相连的水平总线上
若通向要转发的输出端口的垂直总线使空闲的,就在这个结点将垂直总线和水平总线接通,该分组就被转发到输出端口
- 如果该垂直总线被占用,分组就被阻塞,在输入端口排队
IPv6
- 解决IP地址耗尽的根本措施就是采用具有更大地址空间的新版IP
基本首部
IPv6仍支持无连接的传送,但将协议数据单元PDU称为分组
主要变化
更大的地址空间
- 从32位到128位
扩展的地址层次结构
灵活的首部选项
- 定义了许多可选的扩展首部
改进的选项
- 允许数据报包含有选项的控制信息,其选项放在有效载荷中
允许协议继续扩充
支持即插即用(自动配置)
- 因此不需要使用DHCP
支持资源的预分配
- 支持实时影像等要求,保证一定的带宽和时延的应用
IPv6首部改为8字节对齐
- 首部长度必须是8字节的整数倍,原来IPv4首部是4字节对齐
IPv6数据报格式
两大部分
- 基本首部 base header
有效载荷 payload
- 也称为净负荷,允许有零个或多个扩展首部 extension header,后面是数据部分
基本首部
- 首部长度固定40字节
字段更改
- 取消了首部长度字段,因为首部长度是固定的 40 字节;
- 取消了服务类型字段;
- 取消了总长度字段,改用有效载荷长度字段;
- 把 TTL 字段改称为跳数限制字段;
- 取消了协议字段,改用下一个首部字段;
- 取消了检验和字段;
- 取消了选项字段,而用扩展首部来实现选项功能。
- 版本 version — 4位,指明了协议的版本,对IPv6而言该字段总是6(0110B)
- 通信量类 traffic class — 8位,为了区分不同的IPv6数据报的类别或优先级
- 流标号 flow label — 20位,流是互联网络上从特定源点到特定终点的一系列数据报,“流”所经过的路径上的路由器都保证指明的服务质量。所有属于同一个流的数据报都具有同样的流标号。
- 有效载荷长度 payload length — 16位,指明IPv6数据报除基本首部以外的字节数(扩展首部也在有效载荷内),最大值是64KB
- 下一个首位 next header — 8位,相当于IPv4的协议字段或可选字段
- 跳数限制 hop limit — 8位,源站在数据报发出时即设定跳数限制,路由器在转发数据报时将跳数限制字段中的值减1,当跳数限制的值为零时,就要将这个数据包丢弃
- 源地址 — 128位,是数据包发送站的IP地址
- 目的地址 — 128位,是数据包接收站的IP地址
- 扩展首部
- 存放原来IPv4首部中选项的功能,并将扩展首部留给路径两端的源站和目的站的主机来处理
- 数据报途中经过的路由器不处理扩展首部(除逐跳选项扩展首部)
- 大大提高了路由器的处理效率
- 六种扩展首部
- 逐跳选项
- 路由选择
- 分片
- 渐变
- 封装安全有效载荷
- 目的站选项
IPv6的地址
目的地址是三种基本类型之一
- 单薄 unicast — 传统的点对点通信
- 多播 multicast — 一点对多点的通信
- 任播 anycast — IPv6增加的一种类型,目的站是一组计算机,但是数据报只交付其中一个,通常是距离最近的一个
结点和接口
- 实现IPv6的主机和路由器均称为结点
- 一个结点可能有多个与链路相连的接口
IPv6地址是分配给结点上面的接口的
- 一个接口可以有多个单播地址
其中任何一个地址都可以当作到达该结点的目的地址
- 即一个结点接口的单播地址可用来唯一标志该结点
冒号十六进制记法
- IPv6中,每个地址占128位,地址空间大于3.4x10
IPv6使用冒号十六进制记法
- colon hexadecimal notation
- colon hex
每个16位的值用十六进制表示,例如
68E6:8C64:FFFF:FFFF:0:1180:960A:FFFF
- 允许省略数字前面的0,例如
0000
可以省略成0
零压缩 zero compression
- 一连串连续的零可以未一对冒号所取代
FF05:0:0:0:0:0:0:B3
可压缩为FF05::B3
- 一个地址中只能使用一次零压缩
可以结合点分十进制记法的后缀
- 例如
0:0:0:0:0:0:128.10.2.1
,可以压缩成::128.10.2.1
- 例如
也可以使用CIDR的斜线表示法
- 60位的前缀
12AB00000000CD3
可以记成
12AB:0000:0000:CD30:0000:0000:0000:0000/60
- 或者通过零压缩
12AB::CD30:0:0:0:0/60
12AB:0:0:CD30::/60
- 60位的前缀
IPv6地址分类
地址类型 | 二进制前缀 |
---|---|
未指明地址 | 00…0(128位),可记为 ::/128。 |
环回地址 | 00…1(128位),可记为 ::1/128。 |
多播地址 | 11111111(8位),可记为 FF00::/8。 |
本地链路单播地址 | 1111111010(10位), 可记为 FE80::/10。 |
全球单播地址 | (除上述四种外,所有其他的二进制前缀) |
未指明地址
- 16字节的全0地址,可缩写为两个冒号
::
- 只能为还没有配置到标准IP地址的主机当源地址使用
- 仅1个
- 16字节的全0地址,可缩写为两个冒号
环回地址
0:0:0:0:0:0:0
- 作用和IPv4的环回地址一样
- 仅此一个
多播地址
- 功能和IPv4一样
- 占IPv6地址总数的1/256
本地链路单播地址
- Link-Local Unicast Address
- 有些单位的网络使用TCP/IP协议,但是没有连接到互联网,这样的主机可以使用这种本地地址进行通信,不能和互联网上的其他主机通信
- 这类地址占总数的1/1024
全球单播地址
- 使用最多的一类
- 划分灵活
从IPv4想IPv6过渡
- 采用逐步演进的办法
必须能够使新安装的IPv6系统能够向后兼容
- IPv6系统必须能够接收和转发IPv4分组,并且能够为IPv4分组选择路由
两种策略
- 使用双协议栈
- 使用隧道技术
双协议栈
- dual stack
指在完全过渡之前,使一部分主机装有两个协议栈
- IPv4和IPv6
- 双协议栈的主机记为IPv4/IPv6,表明同时具有两种IP地址
- 和IPv4主机通信时采用IPv4地址,和IPv6主机通信时就采用IPv6地址
- 根据DNS返回的地址类型可以确定使用的地址类型
隧道技术
在IPv6数据报要进入IPv4网络时,把IPv6数据报封装成IPv4数据报
- 整个IPv6数据报就变成了IPv4数据报的数据部分
- 当IPv4数据报离开IPv4网络中的隧道时,再把数据部分交给主机的IPv6协议栈
ICMPv6
- IPv6不保证数据报的可靠交付,因为互联网中的路由器可能会丢弃数据报
- 因此需要使用ICMP来反馈一些差错信息,新版称为ICMPv6
- 地址协议ARP和网际组管理协议IGMP协议的功能被合并到ICMPv6中
报文分类
- ICMPv6是面向报文的协议,它利用报文来报告差错,获取信息,探测邻站或管理多播通信
IP多播
- multicast (组播)
目的:更好支持一对多通信
- 一个源点发送到许多个终点,例如实时信息的交付(新闻、股市),软件更新,交互式会议
- 单播方式,向90台主机传送相同的视频节目需要90个单播
多播方式,只需发送一次到多播组,路由器复制分组,局域网具有硬件多播功能,不需要复制分组
- 当多播组的主机数很大时,采用多播方式可明显地减轻网络中各种资源的消耗
在互联网上进行多播就叫做IP多播
- 靠路由器实现
- 能进行多播协议的路由器称为多播路由器 multicast router
- 多播主干网 MBONE Multicast Backbone on the Internet
多播IP地址
- IP多播传送的分组需要多播IP地址
多播数据报的目的地址写入多播组的标识符
- 多播组的标识符就是IP地址中的D类地址(多播地址)
每一个D类地址标志一个多播组
- 只能用于目的地址,不能用于源地址
多播数据报
- 和一般IP数据报的区别是它使用D类IP地址作为目的地址,并且首部中的协议字段值是2,表明使用网际组管理协议IGMP
- 多播数据报也是尽最大努力交付
对多播数据报不产生ICMP差错报文
- 因此如果在PING后面输入多播地址,将永远不会收到响应
局域网上进行硬件多播
互联网号码指派管理局IANA拥有的以太网块地址的高24位为
00-00-5E
所以TCP/IP协议使用的以太网地址块范围是
00-00-5E-00-00-00
到00-00-5E-FF-FF-FF
- 在每一个地址中,只有23位可用作多播
- D类IP地址可供分配的有28位,在这28位中的前5位不能用来构成以太网硬件地址
D类IP地址和以太网多播地址的映射关系
- 由于多播IP地址和以太网硬件地址的映射关系不是唯一的,因此收到多播数据报的主机,还要再IP层利用软件进行过滤,把不是本主机要接受的数据包废弃
网际组管理协议IGMP和多播路由选择协议
IP多播需要两种协议
网际组管理协议IGMP Internet Group Management Protocol
- 为了使路由器知道多播组成员的信息
多播路由选择协议
连接在局域网上的多播路由器还必须和互联网上的其他多播路由器共同工作,以便把多播数据报用最小代价传送给所有的组成员
IGMP
适用范围
IGMP不是在互联网范围内对所有多播组成员进行管理的协议
- IGMP不知道IP多播组包含的成员数,也不知道这些成员的分布
- IGMP协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机(严格来说是主机上的进程)参加或退出了某个多播组
多播路由虚选择协议的复杂性
多播转发必须动态适应多播组成员的变化
- 单播路由选择通常是在网络拓扑发生变化时才需要更新路由
- 多播路由器在转发多播数据时,不能仅根据目的地址,还要考虑多播数据报从什么地方来和到什么地方去
- 多播数据报可以由没有加入多播组的主机发出,也可以通过没有组成员接入的网络
网际组管理协议IGMP
- IGMP是整个网际协议IP的一部分
- 和ICMP相似,IGMP使用IP数据报传递其报文(即IGMP报文加上IP首部构成IP数据报),但它也向IP提供服务
- 因此,IGMP不是一个单独的协议,而是属于整个网际协议IP的一个组成部分
IGMP的工作阶段
加入多播组
- 当某个主机加入新的多播组时,该主机应该向多播组的多播地址发送IGMP报文,声明子集要成为改组的成员
- 本地的多播路由器收到IGMP报文后,将组成员关系转发给互联网上的其他多播路由器
探询组成员变化情况
- 组成员关系是动态的,因此本地多播路由器要周期性地探寻本地局域网上的主机,以便知道这些主机是否还是组成员
- 只要对某个组有一个主机响应,那么多播路由器就认为这个组是活跃的
- 一个组在经过几次的探询后没有一个主机响应,就不再将该组的成员关系转发给其他的多播路由器
IGMP的一些具体措施
- 在主机和多播路由器之间的所有通信都是IP多播
- 探寻组成员时,只需要对所有的组发送一个请求信息的询问报文,默认的询问速率是125s一次
- 同一个网络上连接有几个多播路由器时,能够迅速和有效地选择其中的一个来探询主机的成员关系
- 在IGMP的询问报文中有一个数值N,指明一个最长响应时间;收到询问时,主机在0到N之间随机选择发送响应所需经过的时延,对应于最小时延的响应最先发送
- 同一个组内的每一个主机都要监听响应,只要有本组的其他主机发送了响应,自己就可以不再发送响应
多播路由选择
多播路由选择协议尚未标准化
一个多播组中的成员是动态变化的,随时会有主机加入或离开多播组
多播路由选择实际上就是要找出以源主机为根节点的多播转发树
- 多播转发树上的路由器不会受到重复的多播数据报
- 对不同的多播组对应于不同的多播转发树
- 同一个多播组,对不同的源点也有不同的多播转发树
三种方法
- 洪泛与剪除
- 隧道技术 tunneling
- 基于核心的发现技术
洪泛与剪除
- 适合于较小的多播组,所有的组成员接入的局域网也是相邻接的
一开始,采用洪泛(广播)
- 为了避免兜圈子,采用了反向路径广播RPB Reverse Path Broadcasting 的策略
RPB
路由器收到多播数据报时,首先检查它是否从源点经最短路径传送来
- 如果是,就向所有其他方向转发刚才收到的多播数据报(除进入方向以外)
- 否则就丢弃,不转发
如果有几条长度相同的最短路径,只能选择一条最短路径
- 选择原则是相邻路由器的IP地址最小
- 最终得到用来转发多播数据报的多播转发树
- 如果多播转发树上某个路由器发现它的下游树枝已没有该多播组的成员,就会把它和下游的树枝剪除
- 当某个树枝有新增的组成员时,可以再接入到多播转发树上
隧道技术
- tunneling
基于核心的发现技术
- 对于多播组的大小在较大范围内变化时都适合
- 对每一个多播组G指定一个核心 core 路由器,给出它的IP单播地址
- 核心路由器会按照上面的方法创建对应于多播组G的转发树
多播路由选择协议
- 距离向量多播路由选择协议 DVMRP (Distance Vector Multicast Routing Protocol)
- 基于核心的转发树 CBT (Core Based Tree)
- 开放最短通路优先的多播扩展 MOSPF (Multicast Extensions to OSPF)
- 协议无关多播-稀疏方式 PIM-SM (Protocol Independent Multicast-Sparse Mode)
- 协议无关多播-密集方式 PIM-DM (Protocol Independent Multicast-Dense Mode)
虚拟专用网VPN和网络地址转换NAT
虚拟专用网VPN
- IP地址紧缺,因此一个机构能够申请到的IP地址数往往小于本机构所拥有的主机数
- 互联网不安全,所以机构也不需要把所有主机接入互联网
- 假定机构内采用TCP/IP,那么这些在机构内使用的计算机就可以由本机构自行分配IP地址
本地地址和全球地址
本地地址
- 仅在机构内部使用的IP地址,由本机构自行分配
全球地址
- 全球唯一的IP地址,必须向互联网的管理机构申请
二义性问题
- 内部使用的本地地址和互联网中某个IP地址重合
解决措施
- RFC 1918指明了一些专用地址 private address
- 专用地址只能用作本地地址,而不能用作全球地址
- 互联网中的所有路路由器,对目的地址时专用地址的数据报一律不进行转发
三个专用IP地址块
10.0.0.0到10.255.255.255
- A类,可以记成10.0.0.0/8,又称为24位块
172.16.0.0到172.31.255.255
- B类,可以记成172.16.0.0./12,又称为20位块
192.168.0.0到192.168.255.255
- C类,可以集成192.168.0.0/16,又称为16位块
专用网
- 采用专用IP地址的互连网称为专用互联网或本地互联网
- 这些专用地址仅在本机构内部使用,专用IP地址也叫做可重用地址 reusable address
虚拟专用网
利用公网的互联网作为本机构各专用网之间的通信载体,这样的专用网称为虚拟专用网VPN
- Virtual Private Network
“专用网”
- 这种网络是为本机构的主机用于机构内部的通信,而不用于和分本机构的主机
“虚拟”
现在并没有使用真正的通信专线,只是效果上和真正的专用网一样
构建
- 所有通过互联网的数据必须加密
- 机构需要为每一个场所购买专门的硬件和软件,并进行配置
隧道技术实现
内联网intranet和外联网extranet
- 都是基于TCP/IP协议
- 由部门A和B的内部网络所构成的VPN又称为内联网,表明A和B是在同一个机构内部
- 一个机构和某些外部机构共同建立的VPN又称为外联网
远程接入VPN
- remote access VPN
- 可以满足外部流动员工访问公司网络的需求
实现
- 外地员工拨号接入互联网
- 驻留在员工PC机中的VPN软件在PC机和公司主机间建立VPN隧道
- 因此员工和公司通信的内容是保密的,好像使用公司内部网络
网络地址转换NAT
专用网中专用地址的主机如何与互联网通信
- 申请全球IP地址(一般做不到)
- 采用网络地址转换NAT
Network Address Translation
需要专用网的路由器安装NAT软件,叫做NAT路由器,至少有一个有效的外部全球IP地址
专用地址的主机在NAT路由器上将地址转换为全球IP地址,才能和互联网连接
工作原理
地址转换过程
- 内部主机A和互联网主机B通信
- A的本地地址为IPA
- NAT路由器把数据报的源地址IPA转换成全球地址IPG,把转换结果记录到NAT地址转换表中
- 目的地址IPB不变,把数据报发送到互联网
- NAT路由器收到主机B发回的数据报时,数据包中源地址是IPB,目的地址是IPG
- 根据NAT转换表,路由器将目的地址IPG转换为IPA,转发给内部主机A
发生了两次地址转换
离开专用网时
替换源地址,将内部地址替换为全球地址进入专用网时
替换目的地址,将全球地址替换为内部地址
方向 | 字段 | 旧的IP地址 | 新的IP地址 |
---|---|---|---|
出 | 源IP地址 | 192.168.0.3 | 172.38.1.5 |
入 | 目的IP地址 | 172.38.1.5 | 192.168.0.3 |
出 | 源IP地址 | 192.168.0.7 | 172.38.1.6 |
入 | 目的IP地址 | 172.38.1.6 | 192.168.0.7 |
当NAT路由器有n个全球IP地址时
- 专用网内最多可以同时有n台主机接入互联网
- 可以使专用网内较多数量的主机,轮流使用有限的全球IP
通过NAT路由器的通信必须由专用网内的主机发起
- 专用网内部的主机不同当服务器用,因为互联网上的客户无法请求专用网内的服务器提供服务
网络地址和端口号转换NAPT
为了更有效利用NAT路由器的全球IP,NAT转换表把运输层和端口号也利用上
- 多个拥有本地地址的主机,共用一个全球IP地址
- 使用端口号的NAT叫做网络地址和端口号转换NAPT(Network Address and Port Translation)
- 不适用端口号的NAT叫做传统NAT(traditional NAT)
- NAPT地址转换表 | 方向 | 字段 | 旧的IP地址和端口号 | 新的IP地址和端口号 | | —- | —- | —- | —- | | 出 | 源IP地址:TCP源端口 | 192.168.0.3:30000 | 172.38.1.5:40001 | | 出 | 源IP地址:TCP源端口 | 192.168.0.4:30000 | 172.38.1.5:40002 | | 入 | 目的IP地址:TCP目的端口 | 172.38.1.5:40001 | 192.168.0.3:30000 | | 入 | 目的IP地址:TCP目的端口 | 172.38.1.5:40002 | 192.168.0.4:30000 |
- 把专用网内不同的源IP转换成为相同的全球IP,但对源主机采用的TCP端口号,转换为不同的新的端口号
- 在NAPT路由器收到互联网的应答时,可以从IP数据报的数据部分找出运输层的端口号,根据不同的目的端口号,从NAPT转换表中找到正确目的主机
多协议标记交换MPLS
MultiProtocol Label Switching
- 没有取代IP,而是作为一种IP增强技术
“多协议”
- 表示在MPLS的上层可以采用多种协议,例如IP,IPX
- 可以使用多种数据链路层协议,例如PPP,以太网,ATM等
”标记“
- 指每个分组被打上一个标记,根据该标记对分组进行转发
MPLS特点
- 支持面向连接的服务质量
- 支持流量工程,平衡网络负载
- 有效地支持虚拟专用网VPN
MPLS工作原理
传统IP分组转发
- 分组到达路由器,提取出目的地址,按目的地址查找路由表
- 按照最长前缀匹配的原则找到下一跳的IP地址
- 当网络很大时,查找含有大量项目的路由表要花费很多的时间
- 突发性的通信量会使缓存溢出,会引起分组丢失,传输时延增大,服务质量下降
MPLS协议的基本原理
- 在MPLS域的入口处,给每一个IP数据报打上固定长度的标记,对打上标记的IP数据报用硬件进行转发
- 采用硬件技术对打上标记的IP数据报进行转发就成为标记交换
- 交换也表示在转发时不在上升到第三层查找转发表,根据标记在第二层(链路层)用硬件进行转发
MPLS域(MPLS domain)是指该域中有许多彼此相邻的路由器,并且所有的路由器都是支持MPLS技术的标记交换路由器LSR(Label Switching Router)
- LSR同时具有标记交换和路由选择这两个功能
- 标记交换功能是为了快速转发
- 但是在这之前LSR需要使用路由选择功能构造转发表
MPLS基本工作过程
MPLS域中的各LSR使用专门的标记分配协议LDP来交换报文,并找出标记交换路径LSP,各LSR根据这些路径构造分组转发表
分组进入MPLS域时,MPLS的入口结点把分组打上标记,并按照转发表将分组转发给下一个LSR
- 给IP数据报打标记的过程叫做分类classification
标记仅仅在两个LSR之间才有意义,分组每经过一个LSR,路由器就做两件事
- 转发
- 更换新的标记,即把入标记更换成出标记(标记对换 label swapping)
从入口0处收到一个入标记为3的IP数据报
转发时,应该把IP数据报从出接口1转发出去,同时把标记更换为1
- 当分组离开MPLS域时,出口节点把分组的标记去除,在按照一般分组的转发方法进行转发
上述的“由入口LSR确定进入MPLS域以后的转发路径”称为显示路由选择(explicit routing)
转发等价类FEC
- Forwarding Equivalence Class
路由器按照同样方式对待的分组的集合
- 同样方式指,从同样接口到同样的下一跳地址,并且具有同样服务类别和同样丢弃优先级
- 划分FEC的方法不受限制,非常灵活,只由网络管理员来控制
- 入口节点不是给每一个分组指派一个不同的标记,而是将属于同样FEC的分组都指派同样的标记
- FEC和标记是一一对应关系
流量工程
- 网络管理员采用自定义的FEC来更好地管理网络的资源
- 这种均衡网络负载的做法称为流量工程TE(Traffic Engineering)或通信量工程
MPLS首部的位置和格式
MPLS不要求下层网络面向连接,下层网络也不会打标记,IPv4数据报首部没有多余的位置存放MPLS标记
所以需要一种封装技术
- 在IP数据报封装成以太网帧之前,先插入一个MPLS首部
从层次角度看,MPLS首部就处在第二层(数据链路层)和第三层(网络层)之间
- 给IP数据报打上标记,其实就是在以太网的帧首部和IP数据报的首部之间插入一个4字节的MPLS首部
首部格式
- 标记值,20位,可以容纳2个流,实际上不会使用很大的流,因为需要管理员人工管理和设置每条交换路径
- 时延,3位,保留用作试验
- 栈S,1位,在有标记栈时使用
- 生存时间TTL,8位,用来防止MPLS分组在MPLS域中兜圈子