外部网关协议(Exterior Gateway Protocol,EGP)是一个在自治系统网络中两个邻近的网关主机(每个都有它们自己的路由)间交换路由信息的协议。EGP常常被用来在英特网的两个主机间交换路由表信息。路由表包括已知的路由器清单、它们能到达的地址以及与每个路由的路径相关的成本度量,以便选出最好的可用路径。每个路由器按照一定的时间间隔,通常在120秒到480秒之间,就给它的邻近路由发送信息,然后邻近路由就会将自己的完整路由表发回给它。EGP-2是EGP的最新版本。
大部分的公司和机构将它们拥有的路由器组合成一个自治系统,自治系统的本地路由选择信息使用RIP或者OSPF等内部网关协议进行收集。而在这些自治系统中,通过为位于各自自治区域边界的两台相邻路由器提供交换路由选择信息的方法,选择一台或者多台路由器使用EGP(外部网关协议,Exterior Gateway Protocol)与其他自治区域通信。EGP路由器只向其自治区域边界上的路由器转发路由选择表信息来获得对方自治系统的路由信息,从而为IP数据报选择最佳路由。因此, EGP协议应具有以下三个基本功能:
1. 支持邻站获取机制,即允许一个路由器请求另一个路由器同意交换可达路由信息。
2. 路由器持续测试其EGP邻站是否有响应。
3. EGP邻站周期性地传送路由更新报文来交换网络可达路由信息。
EGP协议为了实现以上三个基本功能,定义了在该协议实现过程中使用的10种报文类型,如表1所示。
表1 EGP协议报文类型 报文类型 报文描述 获取请求(Acquisition Request) 请求路由器建立外部邻站关系 获取确认(Acquisition Confirm) 对获取请求报文的肯定响应 获取拒绝(Acquisition Refuse) 对获取请求报文的否定响应 中止请求(Cease Request) 请求路由器中止外部邻站关系 中止确认(Cease Confirm) 对中止请求报文的肯定响应 你好(Hello) 请求外部邻站回答是否活跃 已听到(I Heard You) 对Hello报文的回答 轮询请求(Poll Request) 请求更新网络路由信息 路由更新(Routing Update) 更新网络可达信息 差错报文(Error) 对不正确报文的响应 在EGP协议中,所有的EGP报文都有其固定的报头用于说明报文类型。EGP报文的报头格式如图1所示。
图1 EGP报文头格式
从图1可以看出,版本字段取整数值,指出该报文使用的EGP协议版本号。以便接收方通过检测来确认双方是否使用相同版本的EGP协议。类型字段指出EGP报文的类型,代码字段给出了报文的子类型。状态字段包含了与该报文有关的状态信息。校验和字段用来确认报文的正确到达,自治系统编号字段表示发送该报文路由器所在的自治系统编号。序号字段用于收发双方进行联系,路由器请求邻站时赋值一个初始序号,以后每发送一个报文,序号将增加1。邻站回送最近收到的序号值,发送方将回送值与发送时的值做比较,以确保报文传输的正确性。
EGP建立外部路由器间通信的第一步是执行邻居探测。在邻居探测过程中,一个外部路由器向另一个外部路由器发出请求,要求同意它们共享路由选择表信息。在通信建立之后,路由器继续测试EGP邻居是否正在响应。路由选择表信息使用路由更新信息,按照120~480秒的间隔在EGP邻居之间进行交换。邻居通过发送其完全路由选择表做出响应。
EGP允许外部网关只通告在网关自治系统内完全可到达的目的网络,从而对外部网关加以限制。因此,外部网关使用EGP将信息传递到它的EGP邻居,而不是在自治系统外部将其自己通告给路由器。
EGP有一个主要的局限:表示特定目的地的距离并不指定通往目的地的成本。EGP只报告目的地是否可到达。由于这种局限,EGP只能用于树型网络。所有的路由选择协议域必须连接到相同的中心网络。
由于所有的路由选择协议域必须连接到相同的中心网络,所以EGP不支持循环的拓扑结构。EGP只能向给定网络通告一条路由。对于给定的任何两台机器之间的通信量,不能分担有效负载,并且当某种通信量状况导致选择路由中出现拥塞时,数据包可能选择非最佳路由。因此,如果主路由失效,EGP很难切换到另一条备用路由。