0

我正在尝试使用 scapy 和 python 建立与 HP-MSR 路由器的 bgp 会话。我成功创建了一个 tcp 套接字。此后,路由器向我发送一条 BGP Open 消息。作为回复,我发送 BGP Open 消息,并确认路由器的 BGP Open。路由器也在确认我的 BGP Open 消息。最后Router能够实现“Open Confirm”状态。当它达到打开确认状态时,它开始发送一些 [TCP Re-transmission message, Group: Sequence] 错误。它保持在打开确认状态,直到保持时间到期。

案例1)当我的bgp id低于Router id时。在这种情况下,路由器发送 Keep alive 消息,但它也发送相同的错误 [TCP Re-transmission message, Group: Sequence]。当我发送一些保持活动消息时,我没有得到路由器的任何确认,并且它保持在“打开确认状态”,直到保持计时器到期。在这种情况下,路由器还按预期发送“连接冲突解决方案”。

情况 2)当我的 bgp id 大于路由器 ID 时。在这种情况下,路由器不会发送任何保持活动消息,也不会确认我的消息。它一直发送相同的错误消息 [TCP Re-transmission message, Group: Sequence] 直到保持计时器到期。

我正在考虑,路由器应该遵循下面的 bgp 图:

-> syn
syn, ack <-
-> ack
Bgp open <-
-> BGP Open
-------------------- Open Confirm
Keep alive <-
-> Keep alive 
-------------------- Established

我期望上图中解释的行为。

4

1 回答 1

1

“消息头的 Marker 字段的预期值是全 1。如果消息头的 Marker 字段不符合预期,则发生同步错误,错误子代码必须设置为连接未同步。” --https://datatracker.ietf.org/doc/html/rfc4271#section-6.1

但在旧代码上,它可能与身份验证有关:“如果消息类型为 OPEN,则消息头的 Marker 字段的预期值全为 1。所有其他类型的 BGP 消息的 Marker 字段的预期值基于BGP OPEN 消息中是否存在 Authentication Information 可选参数和实际的身份验证机制(如果 BGP OPEN 消息中的 Authentication Information 存在)。如果消息头的 Marker 字段不是预期的,则存在同步错误发生并且错误子代码设置为连接未同步。” --https://datatracker.ietf.org/doc/html/rfc1771

“可选参数类型 1(身份验证信息)已被弃用。更新消息错误子代码 7(AS 路由循环)已被弃用。打开消息错误子代码 5(身份验证失败)已被弃用。使用标记字段进行身份验证已被弃用. 实现必须支持 TCP MD5 [RFC2385] 进行身份验证。” --https://datatracker.ietf.org/doc/html/rfc4271#section-6.1

如果两个对等方的路由器 id 相同,我似乎也记得这个问题,这听起来像你的情况。

于 2021-08-18T15:46:35.887 回答