目录

view source print ?
1. 1. 动态路由选路协议简介
2. 2. RIP(Routing Information Protocol)路由信息协议
3. 3. OSPF(Open Shortest Path First)开放式最短路径优先
4. 4. BGP/BGP4(Border Gateway Protocol)边界网关协议
5. 5. 自治域AS简介

1. 动态路由选路协议简介

动态路由选路协议属于一个网络协议,要学习它,我们首先需要思考这个协议被使用在什么地方、以及这个协议可以被安全研究员或者网络管理员用在什么地方。

view source print ?
01. 1. 在网络很小,且与其他网络只有单个连接点且没有多余路由时,可以采用了静态选路。即在配置接口时,以默认方式生成路由表项,并通过route命令增加表项,或是通过ICMP重定向生成表项
02. (通常是在默认方式出错的情况下)
03. 2. TCP/IP协议负责的是网络上不同主机之间的数据包通信,然而当网络上有成千上万的主机需要互相通信并合理管理的情况下,就需要RIP、BGP、OSPF这种网络协议来动态的划分虚拟自治域
04. (AS)。
05. 关于这点,我们需要这么理解:
06. 动态选路并不改变系统内核在IP层的选路方式,即选路机制(routing mechanism)。内核搜索路由表,查找主机路由、网络路由以及默认路由的方式并没有改变。那动态路由协议做的是什么呢?
07. 注意,它决定的是把谁放进这个路由表中,对于遵循和使用动态路由协议的路由器(或linux系统),路由表中的信息随时间变化,由路由守护程序动态地'自动'增加或删除,而不是来用户通过
08. route命令的静态配置。
09. 也就是说,它是一种维护路由表的网络协议,而具体要怎么通信,还是需要依靠TCP/IP中其他的协议来实现
10. 3. 在网络管理、以及渗透测试的前期信息搜集阶段,我们可以借助包括BGP在内的路由协议来获得目标AS域内的网络拓朴情况

路由守护程序根据选路策略(routing policy)选择路由并加入到内核的路由表中。如果守护程序发现前往同一信宿存在多条路由,那么它(以某种算法)将选择最佳路由并加入内核路由表中。如果路由守护程序发现一条链路已经断开(可能是路由器崩溃或网络线路不好),它可以删除受影响的路由或增加另一条路由以绕过该问题。

在像Internet这样的系统中,目前采用了许多不同的选路协议。Internet是以一组自治系统(AS,Autonomous System)的方式组织的,每个自治系统通常由单个实体管理。常常将一个公司或大学校园定义为一个自治系统。自治系统中的所有路由器都在单个的管理控制之下。

对于自治域AS来说,动态选路路由协议可以按如下标准分类

view source print ?
1. 1. 内部网关协议IGP(Interior Gateway Protocol)或域内选路协议(intradomain routing protocol)
2. 每个自治系统可以选择该自治系统中各个路由器之间的选路协议,AS之间互不干扰
3. 1.1 选路信息协议RIP
4. 1.2 开放最短路径优先OSPF(Open Shortest Path First)协议
5. 2. 外部网关协议EGP(Exterier Gateway Protocol)
6. 用于不同自治系统之间的路由器通信使用
7. 2.1 边界网关协议BGP(Border Gateway Protocol)

接下来,我们来一起逐一学习RIP、OSPF、BGP协议

2. RIP(Routing Information Protocol)路由信息协议

0x1: 报文格式

RIP报文包含中在UDP数据报中,从这个意义上说,RIP这类动态路由选路协议可以理解为一种应用层网络协议

view source print ?
1. RFC 1388 [Malkin 1993a]中对RIP定义进行了扩充,通常称其结果为RIP-2。这些扩充并不改变协议本身,而是利用RIPv1中的一些标注为'必须为0'的字段来传递一些额外的信息。如果
2. RIP忽略这些必须为0的字段,那么,RIP和RIP-2可以兼容互操作.
3. (在文章开头给出了RFC链接,我们今天学习的也是RIP2协议标准)

在开始学习RIP数据报格式之前,我们需要重点注意的是RIP协议和许多其他网络协议一样,都存在'单字段多用途'的现象,根据一个字段的枚举变化,整个数据报的作用和内容都会发生巨大改变,这就是为什么我们用wireshark抓包的时候会发现有很多我们'不认识'、'非规则'的数据包的原因。

在RIP协议中,第5、6字段的2种不同状态决定了当前RIP数据报的类型和作用。

view source print ?
1. 56字段为Address Family Identifier (2): 当前数据报携带路由信息
2. 56字段为0xFFFF (2):当前数据报携带RIP认证信息

5、6字段为Address Family Identifier (2): 当前数据报携带路由信息

 

view source print ?
01. 1. Command命令字段:
02. 1) 1: 表示请求,表示要求其他系统发送其全部或部分路由
03. 2) 2: 表示应答
04. 3) 3: 舍弃不用
05. 4) 4: 舍弃不用
06. 5) 5: 轮询
07. 6) 6: 轮询表项
08. 2. Version版本字段:
09. 1) RIPv1为1
10. 2) RIPv2为2
11. 3. routing domain选路域
12. 是一个选路守护程序的标识符,它指出了这个数据报的所有者。在一个Unix实现中,它可以是选路守护程序的进程号。该域允许管理者在单个路由器上运行多个RIP实例,每个实例在一个选路域内
13. 运行
14. 4. Address Family Identifier:
15. 指示路由项中的地址种类,对于IP地址来说这里应为2
16. 5. routing tag选路标记
17. 是为了支持外部网关协议而存在的。它携带着一个EGP和BGP的自治系统号
18. 5. Ip Address地址域:
19. 包括网络类和IP地址在内,RIP报文中对每一网络共有14个字节的地址空间
20. 6. Subnet mask子网掩码
21. 应用于IP地址产生非主机部分地址,为0时表示不包括子网掩码部分,使得RIP能够适应更多的环境
22. 7. Next Hop下一跳
23. 可以对使用多路由协议的网络环境下的路由进行优化。这个字段就是我们所谓的路由表下一跳地址
24. 8. Metric:
25. 到下一路由器的权值,RIP的度量是以跳计数的,这个值可以取1~16

采用这种20字节格式的RIP报文可以通告多达25条路由。上限25是用来保证RIP报文的总长度为20×25 + 4 = 504,小于512字节。由于每个报文最多携带25个路由,因此为了发送整个路由表,经常需要多个报文

5、6字段为0xFFFF (2):当前数据报携带RIP认证信息

view source print ?
01. 1. Command命令字段:
02. 1) 1: 表示请求,表示要求其他系统发送其全部或部分路由
03. 2) 2: 表示应答
04. 3) 3: 舍弃不用
05. 4) 4: 舍弃不用
06. 5) 5: 轮询
07. 6) 6: 轮询表项
08. 2. Version版本字段:
09. 1) RIPv1为1
10. 2) RIPv2为2
11. 3. routing domain选路域
12. 是一个选路守护程序的标识符,它指出了这个数据报的所有者。在一个Unix实现中,它可以是选路守护程序的进程号。该域允许管理者在单个路由器上运行多个RIP实例,每个实例在一个选路域内
13. 运行
14. 4. 0xFFFF
15. 表示这个RIP数据报是一个认证数据包
16. 5. Authentication Type
17. 认证类型,目前仅支持明文密码形式,所以这个字段为2
18. 6. Authentication
19. 认证信息

0x2: RIP运行机制

让我们来看一下采用RIP协议的routed程序正常运行的结果。RIP常用的UDP端口号是520

view source print ?
01. 1. 初始化
02. 在启动一个路由守护程序时,它先判断启动了哪些接口,并在每个接口上发送一个请求报文,要求其他路由器发送完整路由表。
03. 1) 在点对点链路中,该请求是发送给其他终点的
04. 2) 如果网络支持广播的话,这种请求是以广播形式发送的
05. 目的UDP端口号是520(这是其他路由器的路由守护程序端口号),这种请求报文的命令字段为1,但地址系列字段设置为0,而度量字段设置为16。这是一种要求另一端完整路由表的特殊请求报文。
06. 2. 接收到请求
07. 1) 如果这个请求是刚才提到的特殊请求,那么路由器就将完整的路由表发送给请求者
08. 2) 否则,就处理请求中的每一个表项
09. 2.1) 如果有连接到指明地址的路由,则将度量设置成我们的值
10. 2.2) 否则将度量置为16(度量为16是一种称为'无穷大'的特殊值,它意味着没有到达目的的路由)
11. 然后发回响应。
12. 3. 接收到响应
13. 使响应生效,可能会更新路由表。可能会增加新表项,对已有的表项进行修改,或是将已有表项删除。
14. 4. 定期选路更新。每过30秒,所有或部分路由器会将其完整路由表发送给相邻路由器。发送路由表可以是:
15. 1) 广播形式的(如在以太网上)
16. 2) 或是发送给点对点链路的其他终点的
17. 5. 触发更新
18. 每当一条路由的度量发生变化时,就对它进行更新。不需要发送完整路由表,而只需要发送那些发生变化的表项。每条路由都有与之相关的定时器。如果运行RIP的系统发现一条路由在3分钟内未
19. 更新,就将该路由的度量设置成无穷大(16),并标注为删除。这意味着已经在630秒更新时间里没收到通告该路由的路由器的更新了。再过60秒,将从本地路由表中删除该路由,以保证该路由
20. 的失效已被传播开。

0x3: RIP的缺陷

view source print ?
1. 1. RIP没有子网地址的概念。例如,如果标准的B类地址中16bit的主机号不为0,那么RIP无法区分非零部分是一个子网号,或者是一个主机地址。有一些实现中通过接收到的RIP信息,来使用
2. 接口的网络掩码,而这有可能出错。
3. 2. 在路由器或链路发生故障后,需要很长的一段时间才能稳定下来。这段时间通常需要几分钟。在这段建立时间里,可能会发生路由环路。在实现RIP时,必须采用很多微妙的措施来防止路由
4. 环路的出现,并使其尽快建立。RFC 1058 [Hedrick 1988a]中指出了很多实现
5. 3. 采用跳数作为路由度量忽略了其他一些应该考虑的因素。同时,度量最大值为15则限制了可以使用RIP的网络的大小

3. OSPF(Open Shortest Path First)开放式最短路径优先

0x1: OSPF简介

OSPF是除RIP外的另一个内部网关协议。它克服了RIP的所有限制。他们的区别点如下:

view source print ?
01. 1. RIP发送的报文包含一个距离向量(跳数)。每个路由器都根据它所接收到邻站的这些距离向量来更新自己的路由表。
02. 2. OSPF是一个链路状态协议。在一个链路状态协议中,路由器并不与其邻站交换距离信息。它采用的是每个路由器主动地测试与其邻站相连链路的状态,将这些信息发送给它的其他邻站,而邻站
03. 将这些信息在自治系统中传播出去。每个路由器接收这些链路状态信息,并建立起完整的路由表。
04. 3. 从实际角度来看,二者的不同点是链路状态协议(OSPF)总是比距离向量协议(RIP)收敛更快。收敛的意思是在路由发生变化后,例如在路由器关闭或链路出故障后,可以稳定下来。
05. 4. 和RIP不同的是,OSPF直接使用IP(网络层)。也就是说,它并不使用UDP或TCP(传输层)。对于IP首部的protocol字段(代表当前IP数据报中所携带的上层协议),OSPF有其自己的值
06. 5. OSPF可以对每个IP服务类型计算各自的路由集。这意味着对于任何目的,可以有多个路由表表项,每个表项对应着一个IP服务类型。
07. 6. 给每个接口指派一个无维数的费用。可以通过吞吐率、往返时间、可靠性或其他性能来进行指派。可以给每个IP服务类型指派一个单独的费用。
08. 7. 当对同一个目的地址存在着多个相同费用的路由时,OSPF在这些路由上平均分配流量。我们称之为流量平衡。
09. 8. OSPF支持子网:子网掩码与每个通告路由相连。这样就允许将一个任何类型的IP地址分割成多个不同大小的子网(即变长子网CIDR),到一个主机的路由是通过全1子网掩码进行通告的。默认
10. 路由是以IP地址为0.0.0.0、网络掩码为全0进行通告的。
11. 8. 路由器之间的点对点链路不需要每端都有一个IP地址,我们称之为无编号网络。这样可以节省IP地址—现在非常紧缺的一种资源。
12. 9. 采用了一种简单鉴别机制。可以采用类似于RIPv2机制的方法指定一个明文口令。
13. 10. OSPF采用多播,而不是广播形式,以减少不参与OSPF的系统负载。随着大部分厂商支持OSPF,在很多网络中OSPF将逐步取代RIP

0x2: OSPF协议格式

和RIP协议一样,OSPF的协议中包含有多种数据报,它们分别如下:

view source print ?
01. 1.Hello
02. 1) 发现邻居
03. 2) 建立邻居关系
04. 3) 维持邻居关系
05. 4) 选举DR,BDR
06. 5) 确保双向通信。
07. 2.DBD(Database Description):数据库描述数据包,主要描述始发路由器数据库中的一些或者全部LSA信息,主要包括:
08. 1) 接口的MTU
09. 2) 主从位MS
10. 3) 数据库描述序列号等
11. 3.LSR:链路状态请求数据包,查看收到的LSA是否在自己的数据库,或是更新的LSA,如果是将向邻居发送请求
12. 4.LSU:链路状态更新数据包,用于LSA的泛洪扩散和发送LSA去响应链路状态请求数据包
13. 5.LSACK:链路状态确认数据包,用来进行LSA可靠的泛洪扩散,即对可靠包的确认

The Hello packet

view source print ?
01. 1. Version Number:
02. 当前为OSPF版本2    
03. 2. Type:
04. 定义OSPF包的类型,对于hello包来说,这是1
05. 3. Packet Length:
06. 包的长度,单位字节    
07. 4. Router ID(RID):
08. 产生OSPF包的源路由器    
09. 5. Area ID:
10. 定义OSPF包是从哪个area产生出来的    
11. 6. Checksum(校验和):
12. 错误校验  
13. 7. Authentication Type:
14. 验证方法,可以是:
15. 1) 明文(cleartext)密码,用1表示
16. 2) Message Digest 5(MD5)加密格式,用2表示
17. 8. Authentication  
18. 验证数据
19. 9. Network mask
20. 子网掩码
21. 10. HelloInt
22. 两次hello数据包之间的时间间隔,单位为秒s
23. 11. Options
24. 可选项
25. 12. Rtr Pri
26. 路由器的应用优先级
27. 13. Deadint
28. 路由器在声明关闭当前路由器之前会填充这个字段,表示多少秒之后会关闭路由器
29. 14. Designated Router
30. 指示当前网络中的'默认指定路由器'
31. 15. Backup Designated Router
32. 指示当前网络中的'备份路由器'
33. 16. Neighbor
34. 指示当前最接近的邻居路由

DBD(The Database Description packet)

view source print ?
01. 1. Version Number:
02. 当前为OSPF版本2    
03. 2. Type:
04. 定义OSPF包的类型,对于DBD包来说,这是2
05. 3. Packet Length:
06. 包的长度,单位字节    
07. 4. Router ID(RID):
08. 产生OSPF包的源路由器    
09. 5. Area ID:
10. 定义OSPF包是从哪个area产生出来的    
11. 6. Checksum(校验和):
12. 错误校验  
13. 7. Authentication Type:
14. 验证方法,可以是:
15. 1) 明文(cleartext)密码,用1表示
16. 2) Message Digest 5(MD5)加密格式,用2表示
17. 8. Authentication  
18. 验证数据
19. 9. Options
20. 可选项
21. 10. BIT位图信息
22. 1) I-bit
23. 如果这个bit被设置为1,则表明当前数据报是DBD数据报序列中的第一个
24. 2) M-bit
25. 如果这个bit被设置为1,则表明当前DBD序列中还有其他的数据报未传达,就像TCP中的分段字段
26. 3) MS-bit
27. 3.1) 如果这个bit被设置为1,则表明当前路由器在DBD交互中是'主路由器'的角色
28. 3.2) 如果这个bit被设置为0,则表明当前路由器在DBD交互中是'从路由器'的角色
29. 11. DD sequence number
30. DBD分段数据报的序号,用于重组分段传送的零散的数据报
31. 12. Link State Advertisement Header  
32. 所有的LSA开始于20个字节的头部。头部包含的信息可以唯一的识别出LSA(LS类型、LS标识和宣告路由器)。在同一时间里,可能存在LSA的多个实例。必须判定哪个实例较新。这通过检查LSA
33. 头部中的LS时限、LS序号和LS校验和来判定。
34. 1) LS 时限/LS age
35. 从LSA生成开始的时间秒数
36. 2) 选项/Options:
37. 所描述的路由域中支持的可选项
38. 3) LS类型/LS type:
39. LSA 的类型。各种类型的LSA使用不同的格式
40. 3.1) Router-LSA
41. 描述了路由器接口的状态
42. 3.2) Network-LSA
43. 描述了网络上所接入的路由器
44. 3.3) Summary-LSA
45. 描述了区域间路径,并允许在区域边界上汇总路由信息。由ABR生成,类型3的Summary-LSA描述了到达网络的路径
46. 3.4) Summary-LSA
47. 描述了区域间路径,并允许在区域边界上汇总路由信息。由ABR生成,描述了到达ASBR的路径。
48. 3.5) AS-external-LSA
49. 由ASBR生成,描述AS外部路径。AS的默认路径也被描述为AS-external-LSA。
50. 4) LS标识/Link State ID:
51. 该域描述由LSA所描述的网络部件。具体的内容取决于LSA中的LS类型
52. 4.1) LS类型为1:
53. LS标识字段表示生成路由器的路由器标识
54. 4.2) LS类型为2:
55. LS标识字段表示该网络上DR的IP接口地址。
56. 4.3) LS类型为3:
57. LS标识字段表示目标网络的IP地址。
58. 4.4) LS类型为4:
59. LS标识字段表示所描述的ASBR的路由器标识。
60. 4.5) LS类型为5:
61. LS标识字段表示目标网络的IP地址。
62. 13. 宣告路由器/Advertising Router:
63. 生成该LSA的路由器标识
64. 14. LS序号/LS sequence number:
65. 用于判定旧的或重复的LSA。连续的LSA实例使用连续的LS序号
66. 15. LS校验和/LS checksum:
67. 整个LSA的Fletcher校验和,包括除LSA时限域外的LSA头部
68. 16. 长度/length:
69. LSA的字节长度。包含20字节的LSA头部。

Link State Request packet

view source print ?
01. 1. Version Number:
02. 当前为OSPF版本2    
03. 2. Type:
04. 定义OSPF包的类型,对于DBD包来说,这是2
05. 3. Packet Length:
06. 包的长度,单位字节    
07. 4. Router ID(RID):
08. 产生OSPF包的源路由器    
09. 5. Area ID:
10. 定义OSPF包是从哪个area产生出来的    
11. 6. Checksum(校验和):
12. 错误校验  
13. 7. Authentication Type:
14. 验证方法,可以是:
15. 1) 明文(cleartext)密码,用1表示
16. 2) Message Digest 5(MD5)加密格式,用2表示
17. 8. Authentication  
18. 验证数据
19. 9. LS type  
20. LS类型
21. 10. Link State ID  
22. LS标识
23. 11. Advertising Router 
24. 宣告路由器
25. /*
26. 需要重点注意的是LSR数据报的最后3个字段
27. 所请求的每个LSA由LS类型、LS标识和宣告路由器来说明。这唯一的识别出一个LSA
28. */

Link State Update packet

view source print ?
01. 1. Version Number:
02. 当前为OSPF版本2    
03. 2. Type:
04. 定义OSPF包的类型,对于DBD包来说,这是2
05. 3. Packet Length:
06. 包的长度,单位字节    
07. 4. Router ID(RID):
08. 产生OSPF包的源路由器    
09. 5. Area ID:
10. 定义OSPF包是从哪个area产生出来的    
11. 6. Checksum(校验和):
12. 错误校验  
13. 7. Authentication Type:
14. 验证方法,可以是:
15. 1) 明文(cleartext)密码,用1表示
16. 2) Message Digest 5(MD5)加密格式,用2表示
17. 8. Authentication  
18. 验证数据
19. 9. LSA数量/# LSA:
20. 该更新包中包含的LSA数量。
21. 10. LSU包
22. 包含有一系列LSA。每个LSA的开始是20个字节的通用头部Link State Advertisement Header,这个头部的字段格式在前面已经学习过

Link State Acknowledgment packet

view source print ?
01. 1. Version Number:
02. 当前为OSPF版本2    
03. 2. Type:
04. 定义OSPF包的类型,对于DBD包来说,这是2
05. 3. Packet Length:
06. 包的长度,单位字节    
07. 4. Router ID(RID):
08. 产生OSPF包的源路由器    
09. 5. Area ID:
10. 定义OSPF包是从哪个area产生出来的    
11. 6. Checksum(校验和):
12. 错误校验  
13. 7. Authentication Type:
14. 验证方法,可以是:
15. 1) 明文(cleartext)密码,用1表示
16. 2) Message Digest 5(MD5)加密格式,用2表示
17. 8. Authentication  
18. 验证数据
19. 9. Link State Advertisement Header   
20. 包含了LSA头部的列表,通过LSA头部的描述确认每个LSA

4. BGP/BGP4(Border Gateway Protocol)边界网关协议

0x1: BGP简介

BGP是一种不同自治系统AS的路由器之间进行通信的外部网关协议BGP系统与其他BGP系统之间交换网络可到达信息。这些信息包括数据到达这些网络所必须经过的自治系统AS中的所有路径。这些信息足以构造一幅自治系统连接图。然后,可以根据连接图删除选路环,制订选路策略。
首先,我们将一个自治系统中的IP数据报分成:

view source print ?
1. 1) 本地流量
2. 在自治系统中,本地流量是起始或终止于该自治系统的流量。也就是说,其信源IP地址或信宿IP地址所指定的主机都位于该自治系统中
3. 2) 通过流量
4. 其他的流量则称为通过流量

在Internet中使用BGP的一个目的就是减少通过流量。即通过合理的算法将尽量多的流量都导向成本地流量,减少跨AS的耗时数据报

可以将自治系统分为以下几种类型:

view source print ?
1. 1. 残桩自治系统(stub AS)
2. 它与其他自治系统只有单个连接。stub AS只有本地流量。
3. 2. 多接口自治系统(multihomed AS)
4. 它与其他自治系统有多个连接,但拒绝传送通过流量。
5. 3. 转送自治系统(transit AS)
6. 它与其他自治系统有多个连接,在一些策略准则之下,它可以传送本地流量和通过流量。BGP允许使用基于策略的选路。由自治系统管理员制订策略,并通过配置文件将策略指定给BGP。制订策略
7. 并不是协议的一部分,但指定策略允许BGP实现在存在多个可选路径时选择路径,并控制信息的重发送。
8. 选路策略与政治、安全或经济因素有关。

这样,可以将整个Internet的总拓扑结构看成是由一些残桩自治系统、多接口自治系统以及转送自治系统的任意互连。

在实现BGP协议、或者具有路由功能的linux系统上,保存有BGP的三张表

view source print ?
01. /*
02. 我们在文章的开头说过,借助BGP、ASN。渗透测试研究员和网络管理员可以获取当前AS网络中的拓朴信息。这些信息就保存在BGP的这3张表中。作用和SNMP的MIB数据库一样
03. */
04. 1. 邻居关系表
05. 1) 保存所有BGP邻居
06. 2. 转发数据库
07. 1) 记录每个邻居的网络
08. 2) 包含多条路径去往同一目的地,通过不同属性判断最好路径
09. 3) 数据库包括BGP属性
10. 3. 路由表
11. 1) 最佳路径放入路由表中
12. 2) EBGP路由
13. 从外部AS获取的BGP路由信息,管理距离为20
14. 3) IBGP路由
15. 从内部AS获取的BGP路由信息,管理距离为200

0x2: BGP协议的特点

view source print ?
01. 1. BGP与RIP和OSPF的不同之处在于BGP使用TCP作为其传输层协议。两个运行BGP的系统之间建立一条TCP连接,运行在TCP的179端口,然后交换整个BGP路由表。从这个时候开始,在路由表发
02. 生变化时,再发送更新
03. 信号。
04. 2. BGP是一个距离向量协议,但是与RIP不同的是,BGP列举了到每个目的地址的路由。这样就排除了一些距离向量协议的问题(闭合环路问题)。采用16bit数字表示自治系统标识。
05. 3. BGP通过定期发送keepalive报文给其邻站来检测TCP连接对端的链路或主机失败。两个报文之间的时间间隔建议值为30秒。
06. 要注意的是,应用层的keepalive报文与TCP的keepalive选项是独立的。
07. 4. 由于传输是可靠的,所以BGP使用增量更新,在可靠的链路上不需要使用定期更新,所以BGP使用触发更新。类似于OSPF和ISIS路由协议的Hello报文,BGP使用keepalive周期性地发送存活
08. 消息(60s)(维持邻居关系)
09. 5. BGP在接收更新分组的时候,TCP使用滑动窗口,接收方在发送方窗口达到一半的时候进行确定,不同于OSPF等路由协议使1-to-1窗口。 ? 
10. 6. 丰富的属性值 
11. 7. 可以组建可扩展的巨大的网络

0x3: BGP协议格式

和RIP、OSPF一样,BGP协议有几种不同的消息类型数据报,同时,所有的BGP消息数据报都共享同样的共有首部

view source print ?
01. 1. open:
02. 用来建立最初的BGP连接,包含
03. 1) hold-time
04. 2) router-id
05. 2. keepalive:
06. 对等体之间周期性的交换这些信息以保持会话有效,默认60
07. 3. update:
08. 对等体之间使用这些信息来交换网络层可达性信息
09. 4. notification:
10. 这些消息用来通知出错信息

OPEN Message Format

打开报文,主要是利用此报文建立邻居,运行BGP的路由器打开与邻居的TCP连接,并发送打开报文

view source print ?
01. 1. Marker
02. 这个16字节标记字段保留给鉴别用
03. 2. Length
04. 这个2字节字段定义包括首部在内的报文总长度
05. 3. Type
06. 这个1字节字段定义分组数据报的类型
07. 1) OPEN
08. 2) UPDATE
09. 3) NOTIFICATION
10. 4) KEEPALIVE
11. 对于OPEN数据报来说这个字段为1
12. 4. 版本
13. 这个1字节字段定义BGP的版本,当前版本是4
14. 5. 自治系统
15. 这个2字节字段定义自治系统AS的编号
16. 6. 保持时间
17. 这个2字节字段定义一方从另一方收到保活报文或更新报文之前所经过的最大秒数,若路由器在保持时间的期间内没有收到这些报文中的一个,就认为对方是不工作的
18. 7. BGP协议标识
19. 这个2字节的字段定义了发送打开报文的路由器,为此,这个路由器通常使用它的IP地址中的一个作为BGP标识符
20. 8. Authentication Code
21. 验证序列号
22. 9. Authentication Data
23. 验证数据

KEEPALIVE Message Format

 

view source print ?
01. 1. Marker
02. 这个16字节标记字段保留给鉴别用
03. 2. Length
04. 这个2字节字段定义包括首部在内的报文总长度
05. 3. Type
06. 这个1字节字段定义分组数据报的类型
07. 1) OPEN
08. 2) UPDATE
09. 3) NOTIFICATION
10. 4) KEEPALIVE
11. 对于KEEPALIVE数据报来说这个字段为3

UPDATE Message Format

更新报文: 更新报文是BGP协议的核心,路由器使用它来撤销以前已通知的终点和宣布到一个新终点的路由,或两者都有。BGP可以撤销多个以前曾通知过的终点,但在单个更新报文中则只能通知一个新终点

 

view source print ?
01. 1. Marker
02. 这个16字节标记字段保留给鉴别用
03. 2. Length
04. 这个2字节字段定义包括首部在内的报文总长度
05. 3. Type
06. 这个1字节字段定义分组数据报的类型
07. 1) OPEN
08. 2) UPDATE
09. 3) NOTIFICATION
10. 4) KEEPALIVE
11. 对于UPDATE数据报来说这个字段为2
12. 4. Total Path Attribute Length:
13. 这个2字节字段定义下一字段的长度,即Path Attributes的长度
14. 5. Path Attributes 
15. 这个域中包含了很多的path attribute,每个path attribute都是一个三元组
16. 1) attribute type,
17. 2) attribute length
18. 3) attribute value
19. 6. Network域
20. 4字节代表一个在Path Attributes中描述的内部自治路由Inter-Autonomous System

NOTIFICATION Message Format

 

view source print ?
01. 1. Marker
02. 这个16字节标记字段保留给鉴别用
03. 2. Length
04. 这个2字节字段定义包括首部在内的报文总长度
05. 3. Type
06. 这个1字节字段定义分组数据报的类型
07. 1) OPEN
08. 2) UPDATE
09. 3) NOTIFICATION
10. 4) KEEPALIVE
11. 对于NOTIFICATION数据报来说这个字段为4
12. 4. 差错码
13. 这个1字节字段定义差错的种类
14. 1) Message Header Error
15. 2) OPEN Message Error
16. 3) UPDATE Message Error
17. 4) Hold Timer Expired
18. 5) Finite State Machine Error
19. 6) Cease       
20. 5. 差错子码
21. 这个1字节字段进一步定义每一种差错的类型
22. 1) Message Header Error subcodes:
23. 1.1) Connection Not Synchronized.
24. 1.2) Bad Message Length.
25. 1.3) Bad Message Type.
26. 2) OPEN Message Error subcodes:
27. 2.1) Unsupported Version Number.
28. 2.2) Bad Peer AS.
29. 2.3) Bad BGP Identifier.
30. 2.4) Unsupported Authentication Code.
31. 2.5) Authentication Failure.
32. 3) UPDATE Message Error subcodes:
33. 3.1) Malformed Attribute List.
34. 3.2) Unrecognized Well-known Attribute.
35. 3.3) Missing Well-known Attribute.
36. 3.4) Attribute Flags Error.
37. 3.5) Attribute Length Error.
38. 3.6) Invalid ORIGIN Attribute
39. 3.7) AS Routing Loop.
40. 3.8) Invalid NEXT_HOP Attribute.
41. 3.9) Optional Attribute Error.
42. 3.10) Invalid Network Field
43. 6. 差错数据
44. 这个字段可用来给出关于差错的更多诊断信息

5. 自治域AS简介

自治系统是在单一技术管理体系下的多个路由器的集合,在自治系统内部使用内部网关协议(例如RIP、OSPF)和通用参数来决定如何路由数据包,在自治系统间则使用AS间路由协议来路由数据包(例如BGP)。
自从这一经典定义面世,一个自治系统内经常会使用多个IGP协议,并且有时也会使用多种参数。在这里之所以要使用自治系统这个术语,是因为我们想强调这样一个事实:即使在一个自治系统内可以使用多种IGP协议和参数,对其余的自治系统来说,某一自治系统的管理都具有统一的内部路由方案,并且通过该自治系统要传输到的目的地始终是一致的。

0x1: AS号码池

自治系统号(ASN)由16个比特组成,一共具有65536个可能取值。

view source print ?
1. 1. 号码0被保留了,可能会用来标识非路由网络
2. 2. 最大号码65536也被保留了
3. 3. 在6451265534之间的号码块被指定为专用
4. 4. 23456被保留作为在ASN池转换时使用
5. 5. 从164511(除去23456)之间的号码能够用于<a href="http://www.it165.net/news/nhlw/" target="_blank" class="keylink">互联网</a>路由
6. 6. ASN号码是非结构性的,因为在ASN号码结构中没有内部字段,ASN也不具备汇总或总结功能。

Copyright (c) 2014 LittleHann All rights reserved

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐