第六章 网络互连 (2)
6.4 路由器和路由协议自治系统( 1)
由一个独立的管理实体控制的一组网络和路由器一般被称为一个自治系统( autonomous
system)。而一般一个互连网是由许多个自治系统组成的。
自治系统内部可以自己任意选择任何路由协议来传递路由信息,它与其他自治系统无关。
一般自治系统中选取一个或多个路由器来把系统内路由信息传递给其他自治系统,它们之间要使用相应的路由协议来完成这个功能。
自治系统( 2)
自治系统。自治系统将使用外部网关协议,
自治系统内部使用内部网关协议。
自治系统 1 自治系统 2
外部网关协议内部网关协议
R
1
R
2
自治系统。自治系统将使用外部网关协议,
自治系统内部使用内部网关协议。
自治系统 自治系统外部网关协议内部网关协议路由信息协议 RIP( 1)
路由信息协议 RIP( Routing Information
Protocol)实际上是一个简单的距离向量路由协议。 RIP可能在主机或路由器中实现,因此 RIP协议被分为两种不同的类型的操作方式:
主机中实现的 RIP工作在被动( passive)状态
路由器中实现的 RIP工作在主动( active)状态路由信息协议 RIP( 2)
每个 RIP路由器都保存了一张路由表
每个 RIP路由器每隔 30秒广播一个路由消息
根据收到的路由消息检查更新路由表
不可达和,无穷大,的距离度量值无穷计数问题( 1)
BD线路断开后的路由交换过程
dir = 直接连接
unreach = 不可达
A
B
D
C
1
1
1
1
10
一个简单的互连网配置一个简单的互连网配置
C,1 2C,1 1…C,6C,5C,4B,3B,3A
:
D,1 1A,1 1…A,6A,5A,4B,3B,3C
:
C,1 2C,1 1…C,6C,5C,4U nr e a c hD,2B
:
D i r,1D i r,1…D i r,1D i r,1D i r,1D i r,1D i r,1D
:
…
:
…
:
…
:
…
:
无穷计数问题( 2)
无穷计数问题(慢收敛问题)
RIP选择无穷大为 16
抑制( hold-down)规则水平分割
水平分割机制的基本思想:当通过一个特定的网络接口发送 RIP更新消息时,绝对不要包括通过那个网络接口学习到的路由信息
水平分割的改进:毒性反转的水平分割触发更新
触发更新有助于加快路由算法收敛过程。
一旦路由器到目的网络的距离改变,马上发送一个路由更新消息,而不管是否到了定期发送路由更新消息的时候
传输触发更新消息时,必须延迟一段随机的时间再发送
RIP消息( 1)
RIP是一个基于 UDP的协议,UDP端口号为 520
RIP消息可以分为两类:
请求路由信息消息( RIP消息的 COMMAND
字段为 1)
路由信息消息( RIP消息的 COMMAND字段为 2)
局限性
RIP消息( 2)
命令 版本 必须为 0
网络 1 的地址家族 必须为 0
网络 1 的 IP 地址必须为 0
必须为 0
到网络 1 的距离网络 2 的地址家族 必须为 0
网络 2 的 IP 地址必须为 0
必须为 0
到网络 2 的距离
…
RIP 消息格式
0 8 16 31
命令 版本 必须为网络 的地址家族 必须为网络 的 地址必须为必须为到网络 的距离网络 的地址家族 必须为网络 的 地址必须为必须为到网络 的距离
…
消息格式开放式最短路由优先协议 OSPF
OSPF是一种链路状态路由协议
OSPF是一种动态的路由算法
OSPF允许网络管理人员配置路径花费的度量
OSPF支持区域( area)的概念
OSPF支持认证服务
OSFP允许路由器交换通过别的方法了解到的路由信息链路拓扑( 1)
OSPF支持 3种类型的连接和网络:
点到点网络
广播网络
非广播方式的网络
在 OSPF协议中,每个路由器维护了一个反映了它了解到的所在的自治系统的拓扑的链路状态库。这个拓扑可以用一个有向图来表示链路拓扑( 2)
R1 R2 R1 R2
( a )点到点链路
R
L A N
R N
( b )中断网络
R3
L A N
R4
R5 R6
N
R3
R4
R5
R6
( c )广播网络或非广播多路广播 N B M A 网络
R3
点到多点网络
R4
R5 R6
R3 R4
R5 R6
( d )点到多点非广播网络
O S P F 支持的网络的有向图表示
( )点到点链路
( )中断网络
( )广播网络或非广播多路广播 网络点到多点网络
( )点到多点非广播网络支持的网络的有向图表示链路拓扑( 3)
N1
N2
N3
R1
R4
R2
R5
R3 R6
R7
R 1 0
R 1 1
R8
N4
N6
N7
N8N9
N 1 1
R9
R 1 2
N 1 0
H
1
3
1
3
1
1
8
1
8
2
3
1
10
1
2
1 2
3
5
1
1
4
1
7
6
6
6
7
8
8
8
8
N 1 2 N 1 3
N 1 4
6 N 1 2
N 1 5
2
9
自治系统示例自治系统示例链路拓扑( 4)
N 1 2 N 1 3 N 1 4
N 1 2
N 1 5
N1
3
R1
1
1
8
8
8 8
8
1
3
1
2
8
6
6
7
6
6
2
9
1
1
1
4
7
5
3
2
1
2
10
1
1
3
N3
R2
N2
R3
N4
R4
R5
R6
R7
R 1 0
N6
R8
N7
N8
R 1 1
N 1 1
R9
H1
N9
上图所示自治系统的有向图表示。图中没有标注的边的花费为 0 。上图所示自治系统的有向图表示。图中没有标注的边的花费为 。
区域( 1)
把许多网络和主机组合在一起,再加上连接在这些网络上的路由器,这些合起来被称为一个区域。
每个自治系统都有一个主干( backbone)区域,
称为区域 0。所有区域都与主干区域连接。
自治系统内的路由被分为两类:
区域内( intra-area)路由
区域间( inter-area)路由区域( 2)
按照所要完成的功能把 OSPF中的路由器分为以下几类:
内部路由器
区域边界路由器
主干路由器
自治系统边界路由器区域( 3)
主干主干路由器内部路由器自治系统边界路由器
A S 2
A S 1
区域边界路由器用 EG P 连接各 AS
区域
O S P F 中的各种路由器主干主干路由器内部路由器自治系统边界路由器区域边界路由器用 连接各区域中的各种路由器
OSPF协议过程( 1)
在正常情况下,每个路由器要定期扩散链路状态更新信息
路由器之间建立一个逻辑连接,并沿这个逻辑连接传递链路状态信息
邻接( adjacency)
选取路由器( designated router)
OSPF协议过程( 2)
OSPF的消息类型向对方请求信息L i n k s t a t e r e q u e s t
通知发送者有哪些更新D a t a b a s e d e s c r i p t i o n
确认链路状态更新L i n k s t a t e ack
为邻居提供发送者的链路状态更新L i n k s t a t e u p d a t e
用于发现谁是邻居H e l l o
描述消息类型向对方请求信息 t a t e r e q u e s t
通知发送者有哪些更新s e d e s c r i p t i o n
确认链路状态更新 t a t e
为邻居提供发送者的链路状态更新用于发现谁是邻居描述消息类型外部网关协议 EGP( 1)
EGP消息类型 描述邻居获取请求 请求让路由器成为一个邻居(对方)
邻居获取确认 对获取请求的确认邻居获取拒绝 拒绝接受获取请求停止请求 请求终止邻居关系停止确认 对停止请求消息的确认
Hello 请求邻居响应(如果邻居活跃)
I-H-U(我听到你) 对 Hello消息的响应询问请求 请求网络路由信息更新路由更新 网络可达性信息出错 对出错信息的响应外部网关协议 EGP( 2)
距离为 D 1 1 的网络
( a )
…
距离数版本 类型 代码 状态检验和 自治系统号顺序号 H e l l o 间隔
P O LL 间隔版本 类型 代码 状态检验和 自治系统号顺序号版本 类型 代码 状态检验和 自治系统号顺序号 保留
IP 源网络
( b )
( c )
版本 类型 代码 状态检验和 自治系统号顺序号 内部网关数路由器 1 的 IP 地址距离 D 1 1 网络数距离为 D 1 1 的网络距离为 D 1 2 的网络
…
距离 D 1 2 网络数距离为 D 1 2 的网络
( d )
EG P 消息格式。( a )邻居获取消息 ( b )邻居可达性消息
( c )询问消息 ( d )路由更新消息距离为 的网络
…
距离数版本 代码 状态检验和 自治系统号顺序号 间隔间隔版本 代码 状态检验和 自治系统号顺序号 间隔间隔版本 代码 状态检验和 自治系统号顺序号版本 代码 状态检验和 自治系统号顺序号版本 代码 状态检验和 自治系统号顺序号 保留源网络版本 代码 状态检验和 自治系统号顺序号 内部网关数路由器 的 地址距离 网络数距离为 的网络距离为 的网络
…
距离 网络数距离为 的网络消息格式。( )邻居获取消息 ( )邻居可达性消息
( )询问消息 ( )路由更新消息邻居获取
邻居获取( neighbor acquisition)是一个标准的两次握手过程。
EGP协议并没有规定一个路由器怎么选择别的路由器作为它的邻居,这一般是由网络管理人员而非路由器协议软件来进行配置的。
邻居可达性
路由器应该能够及时知道它的邻居是否还是可达的,如果不可达,路由器将要停止向它的邻居发送信息。
EGP允许采用两种方式来测试邻居是否是
,活,的:主动方式和被动方式 。
把邻居可达性消息和路由信息交换区分开来有助于降低网络的负载。
路由更新消息( 1)
外部网关通过路由更新消息把它所收集到的关于它所在自治系统的网络可达性信息传递给邻居。 EGP规定外部网关可以传递两种类型的消息:
所在的自治系统中可以到达的网络的信息
路由器学习到的、不属于自治系统内部的消息路由更新消息( 2)
EGP对距离的定义和一般路由协议中所定义的距离不同,不是指路由器到目的网络的距离,而是指到 IP源网络字段指出的网络的距离源网络网络 2
R
1
R
2
R
3
R
4
网络 1
网络 4
网络 3
运行 E G P
到其他自治系统中的邻居
E G P 对距离的定义,R
2
运行 E G P 。
源网络网络网络网络网络运行到其他自治系统中的邻居对距离的定义,。
边界网关协议 BGP( 1)
边界网关协议 BGP( border gateway
protocol)是目前 Internet的标准外部网关路由协议。
BGP协议是一种真正的外部网关协议,它对于互连网的拓扑结构没有任何限制,并支持策略路由机制。
BGP路由器之间通过交换 BGP消息来进行协议的运作。
边界网关协议 BGP( 2)
BGP和 EGP一样,有邻居获取、邻居可达性和网络可达性三个过程
BGP 消息类型检测到错误时发送N o t i f i c a t i o n
确认 O p e n 消息、定期维持邻居关系K e e p a l i v e
传输一个单一路由的消息和 / 或列出取消的多条路由U p d a t e
建立和另一个路由器的邻居关系O p e n
定义消息检测到错误时发送确认 消息、定期维持邻居关系传输一个单一路由的消息和 或列出取消的多条路由建立和另一个路由器的邻居关系定义消息边界网关协议 BGP( 3)
BGP路由器的路由信息库 RIB( Routing
Information Base)分为三个部分:
Adj-RIBs-In中保存了来自于邻居路由器发送的 Update消息中包含的路由信息
Loc-RIB包括了那些经过一个决定过程从 Adj-
RIBs-In所选择的路由信息
Adj-RIBs-Out中保存的是路由器选择的将要传递给它的邻居路由器的路由信息,它通过
Update消息传递给邻居。
路由信息传递( 1)
BGP 路由信息交换子网 1,3
子网 1,2
子网 1,1
子网 2,1
子网 2,2
子网 2,3
R1
R2
R3
R5
R4
R6
内部网关协议外部网关协议自治系统 1
自治系统 2
路由信息交换子网子网子网子网子网子网内部网关协议外部网关协议内部网关协议外部网关协议自治系统自治系统路由信息传递( 2)
BGP协议基本上是一个距离向量协议,但它与其他这类协议,如 RIP协议又大不相同。每个
BGP路由器记录的是使用的确切路由,而不是到每个目的地的开销。每个 BGP路由器不是定期向它的每个邻居提供到每个可能目的地的开销,而是向邻居说明正在使用的确切路由。正是由于 BGP协议传递的是确切的路由,从而可以很容易地解决困扰其他距离向量算法的无穷计数问题。
习题
6.19
6.21
6.22
6.4 路由器和路由协议自治系统( 1)
由一个独立的管理实体控制的一组网络和路由器一般被称为一个自治系统( autonomous
system)。而一般一个互连网是由许多个自治系统组成的。
自治系统内部可以自己任意选择任何路由协议来传递路由信息,它与其他自治系统无关。
一般自治系统中选取一个或多个路由器来把系统内路由信息传递给其他自治系统,它们之间要使用相应的路由协议来完成这个功能。
自治系统( 2)
自治系统。自治系统将使用外部网关协议,
自治系统内部使用内部网关协议。
自治系统 1 自治系统 2
外部网关协议内部网关协议
R
1
R
2
自治系统。自治系统将使用外部网关协议,
自治系统内部使用内部网关协议。
自治系统 自治系统外部网关协议内部网关协议路由信息协议 RIP( 1)
路由信息协议 RIP( Routing Information
Protocol)实际上是一个简单的距离向量路由协议。 RIP可能在主机或路由器中实现,因此 RIP协议被分为两种不同的类型的操作方式:
主机中实现的 RIP工作在被动( passive)状态
路由器中实现的 RIP工作在主动( active)状态路由信息协议 RIP( 2)
每个 RIP路由器都保存了一张路由表
每个 RIP路由器每隔 30秒广播一个路由消息
根据收到的路由消息检查更新路由表
不可达和,无穷大,的距离度量值无穷计数问题( 1)
BD线路断开后的路由交换过程
dir = 直接连接
unreach = 不可达
A
B
D
C
1
1
1
1
10
一个简单的互连网配置一个简单的互连网配置
C,1 2C,1 1…C,6C,5C,4B,3B,3A
:
D,1 1A,1 1…A,6A,5A,4B,3B,3C
:
C,1 2C,1 1…C,6C,5C,4U nr e a c hD,2B
:
D i r,1D i r,1…D i r,1D i r,1D i r,1D i r,1D i r,1D
:
…
:
…
:
…
:
…
:
无穷计数问题( 2)
无穷计数问题(慢收敛问题)
RIP选择无穷大为 16
抑制( hold-down)规则水平分割
水平分割机制的基本思想:当通过一个特定的网络接口发送 RIP更新消息时,绝对不要包括通过那个网络接口学习到的路由信息
水平分割的改进:毒性反转的水平分割触发更新
触发更新有助于加快路由算法收敛过程。
一旦路由器到目的网络的距离改变,马上发送一个路由更新消息,而不管是否到了定期发送路由更新消息的时候
传输触发更新消息时,必须延迟一段随机的时间再发送
RIP消息( 1)
RIP是一个基于 UDP的协议,UDP端口号为 520
RIP消息可以分为两类:
请求路由信息消息( RIP消息的 COMMAND
字段为 1)
路由信息消息( RIP消息的 COMMAND字段为 2)
局限性
RIP消息( 2)
命令 版本 必须为 0
网络 1 的地址家族 必须为 0
网络 1 的 IP 地址必须为 0
必须为 0
到网络 1 的距离网络 2 的地址家族 必须为 0
网络 2 的 IP 地址必须为 0
必须为 0
到网络 2 的距离
…
RIP 消息格式
0 8 16 31
命令 版本 必须为网络 的地址家族 必须为网络 的 地址必须为必须为到网络 的距离网络 的地址家族 必须为网络 的 地址必须为必须为到网络 的距离
…
消息格式开放式最短路由优先协议 OSPF
OSPF是一种链路状态路由协议
OSPF是一种动态的路由算法
OSPF允许网络管理人员配置路径花费的度量
OSPF支持区域( area)的概念
OSPF支持认证服务
OSFP允许路由器交换通过别的方法了解到的路由信息链路拓扑( 1)
OSPF支持 3种类型的连接和网络:
点到点网络
广播网络
非广播方式的网络
在 OSPF协议中,每个路由器维护了一个反映了它了解到的所在的自治系统的拓扑的链路状态库。这个拓扑可以用一个有向图来表示链路拓扑( 2)
R1 R2 R1 R2
( a )点到点链路
R
L A N
R N
( b )中断网络
R3
L A N
R4
R5 R6
N
R3
R4
R5
R6
( c )广播网络或非广播多路广播 N B M A 网络
R3
点到多点网络
R4
R5 R6
R3 R4
R5 R6
( d )点到多点非广播网络
O S P F 支持的网络的有向图表示
( )点到点链路
( )中断网络
( )广播网络或非广播多路广播 网络点到多点网络
( )点到多点非广播网络支持的网络的有向图表示链路拓扑( 3)
N1
N2
N3
R1
R4
R2
R5
R3 R6
R7
R 1 0
R 1 1
R8
N4
N6
N7
N8N9
N 1 1
R9
R 1 2
N 1 0
H
1
3
1
3
1
1
8
1
8
2
3
1
10
1
2
1 2
3
5
1
1
4
1
7
6
6
6
7
8
8
8
8
N 1 2 N 1 3
N 1 4
6 N 1 2
N 1 5
2
9
自治系统示例自治系统示例链路拓扑( 4)
N 1 2 N 1 3 N 1 4
N 1 2
N 1 5
N1
3
R1
1
1
8
8
8 8
8
1
3
1
2
8
6
6
7
6
6
2
9
1
1
1
4
7
5
3
2
1
2
10
1
1
3
N3
R2
N2
R3
N4
R4
R5
R6
R7
R 1 0
N6
R8
N7
N8
R 1 1
N 1 1
R9
H1
N9
上图所示自治系统的有向图表示。图中没有标注的边的花费为 0 。上图所示自治系统的有向图表示。图中没有标注的边的花费为 。
区域( 1)
把许多网络和主机组合在一起,再加上连接在这些网络上的路由器,这些合起来被称为一个区域。
每个自治系统都有一个主干( backbone)区域,
称为区域 0。所有区域都与主干区域连接。
自治系统内的路由被分为两类:
区域内( intra-area)路由
区域间( inter-area)路由区域( 2)
按照所要完成的功能把 OSPF中的路由器分为以下几类:
内部路由器
区域边界路由器
主干路由器
自治系统边界路由器区域( 3)
主干主干路由器内部路由器自治系统边界路由器
A S 2
A S 1
区域边界路由器用 EG P 连接各 AS
区域
O S P F 中的各种路由器主干主干路由器内部路由器自治系统边界路由器区域边界路由器用 连接各区域中的各种路由器
OSPF协议过程( 1)
在正常情况下,每个路由器要定期扩散链路状态更新信息
路由器之间建立一个逻辑连接,并沿这个逻辑连接传递链路状态信息
邻接( adjacency)
选取路由器( designated router)
OSPF协议过程( 2)
OSPF的消息类型向对方请求信息L i n k s t a t e r e q u e s t
通知发送者有哪些更新D a t a b a s e d e s c r i p t i o n
确认链路状态更新L i n k s t a t e ack
为邻居提供发送者的链路状态更新L i n k s t a t e u p d a t e
用于发现谁是邻居H e l l o
描述消息类型向对方请求信息 t a t e r e q u e s t
通知发送者有哪些更新s e d e s c r i p t i o n
确认链路状态更新 t a t e
为邻居提供发送者的链路状态更新用于发现谁是邻居描述消息类型外部网关协议 EGP( 1)
EGP消息类型 描述邻居获取请求 请求让路由器成为一个邻居(对方)
邻居获取确认 对获取请求的确认邻居获取拒绝 拒绝接受获取请求停止请求 请求终止邻居关系停止确认 对停止请求消息的确认
Hello 请求邻居响应(如果邻居活跃)
I-H-U(我听到你) 对 Hello消息的响应询问请求 请求网络路由信息更新路由更新 网络可达性信息出错 对出错信息的响应外部网关协议 EGP( 2)
距离为 D 1 1 的网络
( a )
…
距离数版本 类型 代码 状态检验和 自治系统号顺序号 H e l l o 间隔
P O LL 间隔版本 类型 代码 状态检验和 自治系统号顺序号版本 类型 代码 状态检验和 自治系统号顺序号 保留
IP 源网络
( b )
( c )
版本 类型 代码 状态检验和 自治系统号顺序号 内部网关数路由器 1 的 IP 地址距离 D 1 1 网络数距离为 D 1 1 的网络距离为 D 1 2 的网络
…
距离 D 1 2 网络数距离为 D 1 2 的网络
( d )
EG P 消息格式。( a )邻居获取消息 ( b )邻居可达性消息
( c )询问消息 ( d )路由更新消息距离为 的网络
…
距离数版本 代码 状态检验和 自治系统号顺序号 间隔间隔版本 代码 状态检验和 自治系统号顺序号 间隔间隔版本 代码 状态检验和 自治系统号顺序号版本 代码 状态检验和 自治系统号顺序号版本 代码 状态检验和 自治系统号顺序号 保留源网络版本 代码 状态检验和 自治系统号顺序号 内部网关数路由器 的 地址距离 网络数距离为 的网络距离为 的网络
…
距离 网络数距离为 的网络消息格式。( )邻居获取消息 ( )邻居可达性消息
( )询问消息 ( )路由更新消息邻居获取
邻居获取( neighbor acquisition)是一个标准的两次握手过程。
EGP协议并没有规定一个路由器怎么选择别的路由器作为它的邻居,这一般是由网络管理人员而非路由器协议软件来进行配置的。
邻居可达性
路由器应该能够及时知道它的邻居是否还是可达的,如果不可达,路由器将要停止向它的邻居发送信息。
EGP允许采用两种方式来测试邻居是否是
,活,的:主动方式和被动方式 。
把邻居可达性消息和路由信息交换区分开来有助于降低网络的负载。
路由更新消息( 1)
外部网关通过路由更新消息把它所收集到的关于它所在自治系统的网络可达性信息传递给邻居。 EGP规定外部网关可以传递两种类型的消息:
所在的自治系统中可以到达的网络的信息
路由器学习到的、不属于自治系统内部的消息路由更新消息( 2)
EGP对距离的定义和一般路由协议中所定义的距离不同,不是指路由器到目的网络的距离,而是指到 IP源网络字段指出的网络的距离源网络网络 2
R
1
R
2
R
3
R
4
网络 1
网络 4
网络 3
运行 E G P
到其他自治系统中的邻居
E G P 对距离的定义,R
2
运行 E G P 。
源网络网络网络网络网络运行到其他自治系统中的邻居对距离的定义,。
边界网关协议 BGP( 1)
边界网关协议 BGP( border gateway
protocol)是目前 Internet的标准外部网关路由协议。
BGP协议是一种真正的外部网关协议,它对于互连网的拓扑结构没有任何限制,并支持策略路由机制。
BGP路由器之间通过交换 BGP消息来进行协议的运作。
边界网关协议 BGP( 2)
BGP和 EGP一样,有邻居获取、邻居可达性和网络可达性三个过程
BGP 消息类型检测到错误时发送N o t i f i c a t i o n
确认 O p e n 消息、定期维持邻居关系K e e p a l i v e
传输一个单一路由的消息和 / 或列出取消的多条路由U p d a t e
建立和另一个路由器的邻居关系O p e n
定义消息检测到错误时发送确认 消息、定期维持邻居关系传输一个单一路由的消息和 或列出取消的多条路由建立和另一个路由器的邻居关系定义消息边界网关协议 BGP( 3)
BGP路由器的路由信息库 RIB( Routing
Information Base)分为三个部分:
Adj-RIBs-In中保存了来自于邻居路由器发送的 Update消息中包含的路由信息
Loc-RIB包括了那些经过一个决定过程从 Adj-
RIBs-In所选择的路由信息
Adj-RIBs-Out中保存的是路由器选择的将要传递给它的邻居路由器的路由信息,它通过
Update消息传递给邻居。
路由信息传递( 1)
BGP 路由信息交换子网 1,3
子网 1,2
子网 1,1
子网 2,1
子网 2,2
子网 2,3
R1
R2
R3
R5
R4
R6
内部网关协议外部网关协议自治系统 1
自治系统 2
路由信息交换子网子网子网子网子网子网内部网关协议外部网关协议内部网关协议外部网关协议自治系统自治系统路由信息传递( 2)
BGP协议基本上是一个距离向量协议,但它与其他这类协议,如 RIP协议又大不相同。每个
BGP路由器记录的是使用的确切路由,而不是到每个目的地的开销。每个 BGP路由器不是定期向它的每个邻居提供到每个可能目的地的开销,而是向邻居说明正在使用的确切路由。正是由于 BGP协议传递的是确切的路由,从而可以很容易地解决困扰其他距离向量算法的无穷计数问题。
习题
6.19
6.21
6.22