BPG 连接建立失败问题的答案和解析

本文是 BPG 连接建立失败问题 一文的答案和解析。

抓包文件中有两处可疑的地方。

第一处是 BGP OPEN 消息建立的过程,我可以直接 follow 这个 tcp stream:

Open 消息

可以看出:

  • Server 是可以正常和对端设备建立 TCP 连接的,所以 4 层以下的网络没有问题;
  • 在 TCP 连接建立之后,一旦发送 OPEN 消息,直接收到了 TCP RST,意味着对面的设备拒绝和我们建立 BGP 连接;
  • 我们收到的 RST 包,IP 层的 TTL 是 1,这个也很可疑。

另一处可疑的地方是,对面的设备一直再对我们发送 keepalive 的消息:

从对面发给我们的 keepalive 消息

综上可以推断:我们的 Server 和对面的设备已经存在一个 BGP 会话了,而且 Server 上建立 BGP 会话使用的 port 是 22709,根据这个 port,我们可以找出来是哪一个进程。

后来我们发现,机器上有一个 bird 进程,使用 EBGP (这也就是为什么发过来的 keepalive 包的 TTL 都是 1 的原因)与对面的设备建立连接。由于连接已经建立好了,所以我们的进程如果使用 IBGP 再尝试建立连接的话就会被直接拒绝。

为什么一次升级会触发这个问题呢?

因为之前我们的 IGBP 会话是正常的,bird 尝试的 EBGP 反而是一直失败的,在我们重启过一次之后,EBGP 会话成功建立了,我们的 IGBP 就一直失败。

(还好只是一个无关紧要的环境,上面部署的东西太乱了。)



Leave a comment

您的邮箱地址不会被公开。 必填项已用 * 标注