扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
路由选择协议中规定了路由器应如何交换信息并生成路由表
路由选择协议属于网络层控制层面的内容
理想的路由算法要求
正确完整的:沿路由表指示路径可以最终到达目的网络与主机
计算简单:不能给网络通信增加额外开销
自适应性:适应通信量和网络拓扑
稳定性:在通信量与网络拓扑相对稳定时,路由不应不停变化
公平性、最佳性:所有用户应该是平等的,得到的路由选择在特定要求下是较为合理的
路由选择策略可以分为两类
静态路由选择策略
即非自适应路由选择,要手工配置路由表,适用于用户少、网络简单的情况,算法简单且开销小
动态路由选择策略
即自适应路由选择,可以适应网络状态的变化,实现起来较复杂且开销较大
路由选择协议的分层
若要让所有路由器都知道所有网络应如何到达,显然路由表会非常大,路由选择算法也会十分复杂。因此,我们往往将这个互联网分为一个个的的自治系统AS(Autonomous System)
自治系统内部可以自由选择使用怎么样的路由选择协议,而在这个AS中与本AS外进行联系的的路由器需要使用和外部相同的路由选择协议
内部网关协议IGP(Interior Gateway Protocol)
用于一个自治系统内部的路由选择协议,需要进行域内路由选择
使用什么样的IGP与这个自治系统外部使用的路由选择协议无关。常用的IGP有RIP(距离向量)、OSPF(链路状态)
外部网关协议EGP(External Gateway Protocol)
用于不同自治系统之间的路由选择,需要进行域间路由选择,常用的有BGP-4(路径向量)
这是一种基于距离向量的分布式路由选择协议,这里的“距离”按如下规则约定
路由器到直连网络的距离为1
某主机到非直连网络的距离为经过的路由器数量加1
显然,这里的“距离”其实就是跳数,RIP会认为经过的路由越少,即距离越短,这条路由路径越好
另外,RIP中规定一条路径上最多只能包含15个网络,也就是说,若某网络距离等于16,则认为不可达。显然,由于路径上网络数量的限制,RIP只适用于小型网络
RIP会作为运输层用户数据报UDP的数据部分进行传送,端口号为520
一个RIP报文最多包含25个路由,若超过25个,需要用多个RIP报文完成传送
网络中的每个路由器都维护从它自己到其他每个目的网络的距离记录
各路由器只和相邻的路由器交换信息
路由器交换的是当前路由器知道的全部信息,即交换自己的路由表,显然其中包括了目的网络、距离、下一跳等信息
按固定时间间隔交换路由信息,一般为1分钟以内,这个时间间隔是针对每个路由器来说的,并不是整个网络统一同步的
路由器一开始路由表为空时,会将直连网络(距离为1)放入路由表中,然后再和相邻路由器交换信息
以下的距离向量算法是基于贝尔曼·福德(Bellman-Ford)算法的,核心思想为
⭐️X节点是A到B最短路径上的一个节点,那么把这段路径拆分为A到X、X到B两段,这两段也分别是A到X、X到B的最短路径
当一个路由器A收到相邻路由器B发来的RIP报文时,假设该相邻路由器的IP地址为X,路由器A按如下步骤执行
对B发来的RIP报文中的每一项都做出修改
“下一跳”字段改为X
“距离”字段加1
A逐项检查RIP报文中的表项
若目的网络不在自己路由表中,则将其添加到路由表
若目的网络在自己的路由表中
若路由表中对应表项的下一跳和RIP报文中的一样,都是X,则用收到的表项替换路由表中的表项
若对应表项的下一跳不一样,且收到表项中的距离字段小于路由表中对应表项的字段,则更新路由表中的原表项;否则,什么都不做
若3分钟内没有收到某相邻路由器的更新路由表,认为该路由器当前不可达,将相关表项的距离都置为16
在RIP协议坏消息传播得慢,也就是说,当网络出现故障时,需要经过较长时间才能将此消息传送到所有路由器
例如一个路由器A与一个直连网络N失去连接后,将对应表项的距离字段设为16,若在该路由器发送出该表项之前,收到了相邻路由器中发来的关于网络N的表项,此时路由器A会误认为可以通过该相邻路由器前往网络N,导致该不可达信息丢失
但是通过来回反复传送RIP报文后,最终网络中仍然可以知道网络N不可达,
但反过来看,若某个路由器发现了更短的路径,这种好消息就会传播得快
RIPv1中,路由更新以广播进行,且不支持可变长子网掩码VLSM;RIPv2中,路由更新以组播进行,并支持VLSM
管理员可以给每条路由指派不同代价,也就是说可以根据业务类型计算出不同路由
当到达某网络有多条代价相同的路径时,可以将通信量分别分配给不同的路径,即进行负载均衡
OSPF路由器之间进行交换的分组都具有鉴别功能,以保证只在可信路由器之间交换链路状态信息
OSPF支持VLSM和CIDR
OSPF中会让每个链路状态都带上个32bit的序号,序号越大越新,规定序号的增长速率不能超过1次/秒
每个区域都用一个32bit的区域标识符表示,一般一个区域中的路由器个数不超过200个
洪泛法发送的信息只会在本区域内广播,从而减少整个网络上的通信量
OSPF中按层次结构进行区域划分,上层的区域是标识符为0.0.0.0的主干区域,也称为骨干区域,只能有一个,负责通过其他下层区域的区域边界路由器ABR连通各下层区域
主干区域内的路由器称为主干路由器,且主干区域内有自治区与边界路由器ASBR
上图中R3、R7、R4是区域边界路由器;R6是自治系统边界路由器;R3、R4、R5、R6、R7是主干路由器。可以看到路由器可以既是主干路由器,又是区域边界路由器
OSPF的分组类型 Hello问候分组周期性(10秒)发送,用来发现和维持OSPF的邻居关系,若40秒未收到某相邻路由器发来的Hello分组,就认为其是不可达的,类别号为1
DD数据库描述分组描述本地链路状态数据库LSDB(Link State DataBase)的摘要信息,类别号为2
LSR链路状态请求分组用于向对方请求某些链路状态的详细信息,只有在OSPF邻居双方成功交换DD分组后才会向对方发出LSR分组,类别号为3
LSU链路状态更新分组其中包含了链路状态的详细信息,向对方发送其所需要的LSA用于洪泛法对全网更新链路状态,类别号为4
LSAck链路状态确认分组用来对收到的LSA进行确认,即对LSU分组的确认,类别号为5
OSPF报文结构OSPF的五种不同类型的分组的首部是相同的
版本:占8bit,有1、2两种,目前多使用OSPFv2
类型:占8bit,从1~5分别表示OSPF不同的分组类型
分组长度:占16bit,OSPF报文的总长度,包括OSPF首部,单位为字节
路由器标识符:占32bit,指明了发送本报文的路由器标识
区域标识符:占32bit,指明了发送本报文的所属区域
检验和:占16bit,包含除了认证字段的整个报文的校验和
鉴别类型:占16bit,分为不验证(0)、简单认证(1)、MD5认证(2)
鉴别字段:占64bit
不验证(0)中未定义此字段
简单认证(1)中定义该字段为密码信息
MD5认证(2)中的此字段包括Key ID、MD5验证数据长度和序列号的信息,但MD5验证数据本身在OSPF报文的内容部分,不在此鉴别字段中
执行过程的整体流程大致如下所示
相邻路由器之间在互相确认存在后
互相发送数据库描述,然后据此简要描述确定自己需要请求哪些链路LSA
互相发起LSR请求某些链路的LSA
对方发起LSU以发送LSA
接收方发送LSAck分组确认收到,若收到重复的更新,只需发送一次LSAck
上图展示了路由R使用LSU分组,用可靠洪泛法向全网更新链路状态,可靠指的是其他路由在收到更新分组后要发送确认分组
外部网关协议BGP 基本概念用于不同自治系统之间交换路由信息,是一种基于路径向量的路由选择协议,交换的信息是一种可达性,而不是链路的代价/花费
BGP力求选择出一条能到达目的网络的、不能兜圈子的比较好的路由路径,并非要计算最佳路由
在BGP协议中,在通信前会先建立端口号为179的TCP连接,这是一种半永久连接,即在双方交换完信息后连接状态不关闭
BGP承载于TCP协议中
BGP事实上不仅运行在不同AS间,还运行在各AS内部
eBGP和iBGP都按照BGP协议进行连接与通信,遵循同样的报文格式,区别在于路由通告的规则不同
不同AS的ASBR之间通过eBGP连接,通过eBGP连接进行对等端之间的通信
上图中的两个AS通过R1、R2进行通信,R1、R2之间会建立eBGP的连接,发送的路由信息“X,AS1,R1”表示从R1经过AS1可以到达网络X
iBGP显然,在一个AS中,只有ASBR知道路由信息是不够的,内部的路由器也需要知道这些路由信息。因此在AS内部,路由器之间要两两建立iBGP连接,iBGP也用TCP连接传送BGP报文
BGP规定,一个AS内部所有的iBGP连接必须构成全连通,即使某两个路由器之间没有物理连接,他们之间也要有iBGP连接
从上图中可以看到,ASBR在收到其他AS的ASBR发来的路由信息时,会把这个路由再转发给AS内部的其他路由器
值得注意的是,一个AS内部的路由器能够收到的外部路由信息(即其他AS发来的路由)其实是受本AS的ASBR控制的,R2在收到R1发来的路由“X,AS1,R1”后,完全可以根据AS管理员制定的策略选择不转发给AS内部的各个路由器
BGP的分组类型 OPEN打开分组用于与BGP连接对等端建立连接关系,初始化通信,这时候会商定这个连接的保持时间,类型号为1
UPDATE更新分组用于通告路由信息,也用于通告要撤销的路由,类型号为2
需要注意的是,撤销时能够一次撤销多条,但增加新路由时,一次只能增加一条
KEEPALIVE保活分组用于保持BGP连接,此类型分组只有BGP报文首部,没有具体的数据部分,类型号为4
发送KEEPALIVE保活分组的周期取商定的保持时间的三分之一
NOTIFICATION通知分组⭐️每个路由器都有一个保持时间计时器,BGP协议中还会商定一个保持时间。当路由器收到一个BGP报文,就会将这个计时器归零,若在商定时间内没收到对等端发来的任何一种BGP报文,就认为这个对等端不工作了
用于报告处理BGP进程中的各种错误,类型号为3
BGP报文格式所有类型的BGP报文拥有相同的首部,但数据部分各有不同,而且是变长的
标记:占16字节,用于检查BGP对等体的同步信息是否完整,以及用于BGP验证的计算。不使用验证时所有比特均为1
长度:占2字节,表示BGP消息的总长度(包括首部),单位为字节,实际范围为10~4096
类型:占1字节,指明本BGP报文的类型,除了上述的4种类型外,在较新的标准中还有类型号为5的REFRESH刷新分组,用于动态请求BGP路由发布者重新发布UPDATE报文
总的来说包括网络前缀和BGP属性两部分,BGP属性中最重要的两个属性为自治系统路径AS-PATH和下一跳NEXT-HOP(也就是还有其他BGP属性)
网络前缀记录着某一子网的网络号,使用CIDR记法表示,即用斜线法表示子网掩码
自治系统路径AS-PATH记录着BGP路由经过了的自治系统的自治系统号ASN,每经过一个AS,就会把自己的自治系统号放入AS-PATH中的开始位置
BGP会利用AS-PATH来避免在各AS之间兜圈子的情况:当一个ASBR收到一个BGP路由后,在往AS-PATH中添加ASN前,会检查在当前的AS-PATH是否已经含有自己的ASN,若含有,则直接将这条BGP路由删除
下一跳NEXT-HOP记录了BGP路由信息发送的发送起点
内外部路由选择协议的联系每个AS内部运行的是iBGP和IGP,IGP可以由AS自己选择(OSPF、RIP等)
在AS之间运行eBGP,使得不同的AS之间能够交换BGP路由信息
路由表的确定单纯通过BGP路由信息无法得出路由表项,需要进行一定的转换与计算
以上图为例,R1通过eBGP将BGP路由“X, AS1, R1”发到R2,R2通过iBGP再将该路由发到内部的路由器
当R4收到R2发来的BGP路由后,查看下一跳,发现是R1,并不在本AS中,因此会将下一跳改为R1的对等端R2,R2在本AS中,可以向其转发分组
使用AS2内部的路由选择协议(例如OSPF)得到从R4到R2最佳路由路径的下一跳,此处假设为R3
R4在路由转发表中添加一个表项
前缀匹配(网络号) | 下一跳 |
---|---|
X | R3 |
自治系统AS的分类 末梢AS事实上下一跳字段中应该是R3上与R4相连接口的IP地址,此处为了表示方便写作R3
另外,路由表中应该有“端口”字段,此处应为R4上与R3相连接口的接口名称,此处为了表示方便省略了
只会把分组发送给直连的AS,或是从直连的AS接收分组,而不会把来自其他AS的分组转发给另一个AS,也就是说,不允许其他AS通过本末梢AS去访问其他AS
末梢AS需要向直连的AS付费才能发送或接收分组
多归属AS当末梢AS连接了两个及以上的AS,将其称为多归属AS,多归属AS可以增加连接的可靠性
穿越AS往往是拥有告诉通信干线的主干AS,为其他AS有偿提供转发分组的服务
对等AS双方提前协商好,都不向对方收费
BGP的路由选择以下介绍BGP在选择AS路径时使用的原则和方法,以下四种方法,能选择前面的就使用前面的,也就是优先级从高到低
事实上,要控制经过哪些AS到达目的网络,通过在每个AS中选择与其他AS通信的ASBR即可,即选择各AS的BGP发言人
本地偏好值大管理员手动在本AS中的各路由器上设置的值,称为本地偏好LOCAL-PREF,这个值包含在BGP路由中
通过iBGP的通信,本地偏好信息在本AS内传送,如此,在每个AS中就会选择一个ASBR,从而控制分组往哪个AS转发
若无法选出一个本地偏好值大的,再使用下一种策略
例如在上图中,要从AS1到AS4,管理员给R1设置了本地偏好值为300、R2为200,在转发时会优先选择本地偏好值大的路径,即通过R1转发分组(也就是选择转发到AS2)。由于本地偏好值是优先级最高的策略,即使上面的高速链路非常拥堵,也不会使用下面的低速链路
AS跳数最少可以根据AS-PATH中的信息,选择一条经过AS最少的路径
若无法选出一个AS跳数最少的,再使用下一种策略
例如在上图中,从AS1到AS5有上下两条路由路径,上面一条经过2个AS,下面一条经过1个AS,按照AS跳数最少原则,应该选择下面一条路径(虽然实际上由于不知道AS内部的情况,可能经过的路由更多)
热土豆算法基本思想就是“尽快转发出本AS”,即以最小的代价让分组尽快转发出本AS。通过内部路由选择协议(OSPF、RIP等)找到一个离当前路由器代价最小的ASBR,并向这个ASBR转发分组
若无法通过热土豆算法选出,再使用下一种策略
需要注意的是,同一个AS中,从不同的路由开始发送分组,通过热土豆算法得到的路径可能不同
显然,热土豆算法只考虑本AS中的情况,完全看不到外部AS的情况
显然,当本地偏好值相同且AS跳数相同时,才会使用热土豆算法选择路径。
以上图为例,假设AS1中采用RIP,从R1出发会选择跳数较少的R4发到其他AS,路由路径为“R1、R4、BGP路由2”;从R2出发会选择跳数较少的R3发到其他AS,路由路径为“R2、R3、BGP路由1”
路由器BGP标识符最小使用BGP报文首部的BGP标识符字段的值进行选择
路由器的物理构成路由器的主要工作是转发分组,整个路由器的物理结构可以划分为两大部分——路由选择部分和分组转发部分
路由选择部分也称为控制部分/控制层面,核心构件是路由选择处理机,其工作是根据选定的路由选择协议构造出路由表
路由表一般包含“目的网络——下一跳”的IP地址映射关系
分组转发部分也称为数据层面,分组转发部分又由交换结构、一组输入端口、一组输出端口三部分组成
转发表每一行必须包括“目的网络——输出端口及某些MAC地址信息(即下一跳MAC地址)”的映射关系
上图中输入/输出端口的1、2、3分别为物理层、数据链路层与网络层的处理模块,转发表会被复制到每一个输入端口中以便快速查找转发表,转发表的更新则由路由选择处理机完成的
当前一个分组在查找转发表时,后面进入输入端口的下一分组需要在队列中排队等待;输出端口从交换结构接收分组,若交换结构发过来的速率超过输出端口的发送速率时,来不及发送的分组会暂存在输出缓冲队列中
若上述的队列满了,新来的数据将会被丢弃
交换结构的交换方法交换结构的工作就是把分组从一个输入端口转移到某个对应的输出端口。要实现这样子的转移,可以通过存储器、通过总线、通过互联网络
通过存储器时,路由器的交换速率很大地受限于存储器的读写带宽;通过总线时,总线同时只能被一组输入输出端口使用,交换速率很大地受限于总线速率;通过互连网络,当输入端口收到分组时,会发送到整条水平总线上,通过激活对应交点,就可以将此分组传到对应的输出端口
通过互连网络,是一种无阻塞的交换结构,多对不同的输入输出端口可以同时传送分组
IPv6 基本概念IPv6数据报的目的地址可以分为
单播:即点对点的通信
多播:一对多的通信,IPv6中没有广播的概念,将广播看成多播的特例
任播:IPv6增加的类型,目的站是一组主机,但数据报只交付给其中一个
IPv6中将主机和路由器都称为节点,节点上的每个接口都有一个IPv6的地址
IPv6的地址是128位的,使用冒号十六进制记法表示,每16位二进制表示为4位十六进制,每4位十六进制之间用冒号分隔
IPv6的地址允许进行零压缩,一连串的0可以用什么都不写替代,例如FF05:0:0:0:0:0:0:B3
可以表示为FF05::B3
。需要注意的是,零压缩在一个地址中只能使用一次
同样的,在IPv6中也可以使用CIDR的斜线表示法表示掩码,例如12AB:0:0:CD30::/60
由于没有A、B、C类地址这样的划分,IPv6中不再有子网掩码的概念
向后兼容互联网中由于种种原因,很难一下子都转到IPv6上来,因此,IPv6系统必须同时也能接收和转发IPv4分组、为IPv4分组选择路由
为了向IPv6流畅过渡,有一些策略用于兼容,例如双协议栈、隧道技术
双协议栈使一部分主机和路由器同时有v4和v6两套协议栈。使用双协议栈的主机或路由器同时具有一个IPv6地址和一个IPv4地址
通过DNS返回的地址类型确定使用v4地址还是v6地址
隧道技术使用IPv6 in IPv4 (6to4)报文格式完成兼容,即将IPv6的数据报封装为IPv4的数据报,整个IPv6数据报放在IPv4数据报的数据部分,同时将IPv4首部的协议字段值设为41
这个封装了IPv6数据报的IPv4数据报在出了IPv4网络中的隧道后,会将其数据部分(即原IPv6数据报)传给主机的IPv6协议栈,这样就可以屏蔽中间过程实现在IPv4网络中传输IPv6的数据报
虚拟专用网VPN本地地址:仅在某机构内部使用的IP地址
全球地址:全球唯一的IP地址,需要向互联网管理机构申请
对于一个机构,并不需要其中所有的主机都有一个全球地址,IP地址不够,而且也不安全
为了避免本地地址和全球地址重合,规定了一些专用地址用于本地地址,任何路由器对目的地址是专用地址的数据报一律不转发,下面是专用地址段
专用地址有:10.0.0.0/8、172.16.0.0/12、192.168.0.0/16,共1个A类网络、16个连续的B类网络、256个连续的C类网络,这些地址也称为可重用地址
专用网指的是可以租用ISP的通信线路专供本机构使用
但可以不租用线路,同一个机构的不同场所之间可以利用公用互联网传输专用网的数据,这些数据会被加密,就好像这些场所之间有专用网一样,就称为虚拟专用网
上图中,场所A和场所B同属一个机构,使用隧道构成了一个虚拟专用网,这样的VPN 称为内联网;若有其他机构参与进这个VPN,则又称为外联网
不在固定场所是也可以通过远程接入VPN技术进入专用网进行使用
已经给专用网内部的主机分配好了本地地址,要使这些主机和互联网通信,就可以使用NAT,将专用网的本地地址转换成全球地址。负责完成这个转换,并与外部的互联网进行通信的路由器称为NAT路由器,上面需要装有相应的NAT软件
上图是一个NAT的实例,主机A向互联网上的213.18.2.4主机发出一个数据报,NAT路由器将数据报中的源地址改为这个专用网拥有的全球地址172.38.1.5,并在NAT转换表中注册。213.18.2.4发回的数据报到达NAT路由器后,NAT路由器会将目的地址改为本地地址192.168.0.3
在这个过程中,可以发现
互联网上的主机无法向专用网中的某台特定主机发送数据报
这个专用网拥有的全球地址个数决定了这个专用网内最多同时有几台主机可以访问互联网
对这个转换操作进一步扩展,就有了网络地址与端口号转换NAPT,同一个全球地址可以同时用于多个分组,具体如下表所示
此处即使没有需要同时出专用网的端口,例如出方向需要30000端口号的只有一条,NAT路由器也会对端口号进行转换
软件定义网络SDNSDN是个体系结构,是一种设计、构建和管理网络的新方法/新概念,要点在于将控制层面和数据层面分离,让控制层面利用软甲能控制数据层面中的众多设备,OpenFlow就是一种广为认可的控制协议
上述的控制时集中式的、基于流的
SDN中的广义转发扩充了传统的“匹配+动作”的操作,完成这个操作的设备不称为路由器,而是称为分组交换机或OpenFlow交换机,并不局限在网络层工作,此处的匹配工作非常灵活,可以指定非常多的条件和字段,因此称之为“广义”
使用流表取代传统的转发表,一个OpenFlow交换机中可以有多个流表
流表项有三个字段
首部字段值:也称为匹配字段,包含了一组字段,用于匹配分组各层的首部
计数器:指明当前表项成功匹配的分组数量、从当前表项上次更新到现在经历的时间
动作:指明要对匹配上当前表项分组进行的操作,例如指明要发送到哪个端口、是否要丢弃、是否复制多份从不同端口发出、是否重写分组首部的某些字段等
SDN的整体体系结构如下图所示
总结SDN的四个关键特征
基于流的转发,流表规定了转发规则
数据层面与控制层面分离,二者不在同一设备中
网络控制功能位于数据层面交换机之外,可以用软件实现
可编程的网络
SDN控制器是最核心的,大致可以分为三个层次
通信层:完成 SDN 控制器与受控网络设备之间的通信,多采用OpenFlow
网络范围状态管理层:管理和维护链路、主机、交换机等网络状态,确定和维护流表
到网络控制应用程序层的接口:允许网络控制应用程序对状态管理层里的网络状态和流表进行读写操作,也就可以实现对网络本身进行编程
当前表项成功匹配的分组数量、从当前表项上次更新到现在经历的时间
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流