据我所知,我们正在使用路由协议来实现第 3 层连接,我对 BGP 在 L4 的 TCP 上工作这一事实感到困惑。如何在没有先前 L3 连接的情况下建立 L4/TCP?
BGP 如何通过 TCP 工作?
TCP/IP 套接字通过网络在两个特定寻址的端点之间建立端到端连接。BGP 使用 TCP/IP 在路由器(任何交换路由信息的设备)之间进行通信。交换的信息由 BGP 对等方使用,以便更好地选择他们选择发送位置的方式,(也称为下一跳)数据包发送。
在互联网的最边缘,事情很简单;“一切都是这样”,对您的互联网提供商。更中间的是,路由器可能有多种选择。因此,它使用 TCP/IP 在其路由邻居之间移动 BGP 流量。然后,当数据包有多种方式可以到达目的地时,BGP 信息会告诉路由器首选哪些路径。
端点(如Web浏览器)和路由器都讲TCP / IP。但是路由器使用TCP/IP(由 TCP/IP 数据包组成的 BGP 通信)来讨论如何处理它们需要路由的其他 TCP/IP 数据包。
路由协议不会“实现”L3 连接。它们用从其他路由器学到的信息填充路由器的路由(转发表)表。
BGP 是在 TCP/IP 上运行的“应用程序”。换句话说,BGP 路由器使用 TCP/IP 与其他 BGP 路由器通信以交换路由信息。
为了让 BGP 工作,您必须已经在路由器之间建立了 L3 连接。
OSI 网络模型及其分层对于理解主机之间的端到端通信很有用,但它并不真正旨在解释网络控制平面的功能。建立完整的 BGP 连接存在固有的引导问题,但这种引导发生的方式是众所周知的,并且没有任何循环依赖。
就BGP而言,形成邻接和交换信息的方式取决于会话的类型。
最简单的是eBGP。通常,eBGP 在两个直接连接的路由器之间的 TCP 会话上运行。在这种情况下,每个对等体都知道如何与对方通信,因为它们在同一子网上都有一个接口,因此不需要使用外部路由协议来形成邻接。
有了 iBGP,事情就有点复杂了。在最简单的配置中,自治系统内的所有路由器都将配置为全网状网络的一部分,与网络中的所有其他路由器进行 iBGP 会话。在自治系统内,内部网关协议(例如 OSPF 或 ISIS)用于构建内部路由拓扑。当 IGP 完成它的工作后,所有路由器都会有一个路由表,其中填充了到所有 iBGP 邻居的路由,从而允许 TCP 会话形成而没有循环依赖。
更有趣的是,并非自治系统内的所有路由器都运行完整的 BGP 表。如果 iBGP 网格不完整,您可能会遇到网络中间的路由器与其直接邻居具有不同的表视图的情况。这将导致次优路由,在某些情况下会导致路由循环,导致设备之间的流量反弹,直到 TTL 到期。
该链路配置了静态地址和关联的路由条目,用于建立 BGP 会话。使用 BGP,然后使用指向其他网络的条目扩展路由表。
由于BGP仅用于直接对等体之间,因此此时不需要指向另一端的路由。
例如,如果我们想要对等,我们会就 /30 或 /31 子网达成一致,为网络的每一端分配一个地址,并为该子网创建到此链接的网络路由,然后我们将另一个配置为BGP 对等体,此时我会为您宣布通过路由器发送的所有网络获得额外的路由条目(这又是本地静态配置的网络路由的一部分)。