EIGRP-8-路由器的邻接关系
EIGRP路由器之间会建立并维护邻接关系。EIGRP在默认情况下会动态发现邻居路由器.也可以通过工程师手动配置(静态)发现邻居。
通过向目的组播组地址224.0.0.10或FF02: : A发送EIGRP Hello包.EIGRP就能够动态发现邻居。工程师一旦在接口上启用了EIGRP.EIGRP会马上发送Hello包。静态EIGRP邻居关系的形成需要工程师在路由器上手动配置。当工程师配置了静态EIGRP邻居后.本地路由器会使用单播邻居地址.向这些邻居发送数据包。通常在部署了不支持广播或组播数据包的媒介上.需要实施静态邻居配置.比如帧中继。
在工程师定义了静态邻居后.在连接那个邻居的接口上.所有EIGRP组播就都被禁用了。因此在同一条链路上的两台EIGRP路由器.如果一个配置了使用单播(静态).另一个使用组播(动态).它们之间就无法建立邻接关系。再比如在同一个网段中的所有邻居.要不就都静态配置彼此的IP地址.要不就都不要配置。
—定要理解下面这一点:仅仅在两台或多台路由器上启用EIGRP.并不能保证它们之间能够建立邻居关系。要想让两台EIGRP路由器建立邻居关系.它们之间要对以下参数达成共识:
• EIGRP认证参数(如果配置了的话);
• EIGRP的K值;
• EIGRP的AS号;
• 使用主用地址建立EIGRP邻居关系;
• 在一个子网中使用同一个IP网络地址。
如果对于上述参数中的任意一个.两台路由器无法达成共识的话.它们就无法成为EIGRP邻居。
需要注意的是.邻居之间的汁时器(也就是Hello计时器和保持计时器)并不需要相匹配。工程师可以使用下例中的命令来修改默认的Hello间隔(在配置带宽等于或低于T1的NBMA接口上.默认Hello间隔是60杪;所有其他接口是5杪)。
保持计时器告诉路由器在等待接收邻居发来的后续有效EIGRP数据包时.应该等待多长时间。如果在保持计时器超时前.路由器都没有收到任何可用的EIGRP数据包.它就会认为相应的邻居不可达.并通过DUAL告知邻居的丢失。默认情况下.保持计时器的时长是 Hello计时器的3倍.根据接口类型的不同.分別为15杪或180杪。不过要注意的是.工程师修改Hello间隔的行为并不会导致路由器自动重新计算保持时间。因此在特定环境中.这种修改结果可能会带来邻接关系翻动的问题.尤其是如果工程师将Hello间隔手动配置得接近甚至高于默认的保持时间.而又没有修改保持计时器的话。
工程师可以使用下例中所示命令.在接口配置模式中修改这些默认值。
下图为EIGRP建立邻接关系的过程
这个过程是从路由器接收到Hello包.从而发现了新邻居开始的。在上图中.R2从R1那里接收到了一个Hello包。R2会快速从相应接口发出自己的Hello包.好让R1也能够马上发现自己。一旦通过Hello包发现了新邻居.路由器就会把这个新邻居置为待定(Pending)状态。 将邻居置为待定状态是为了推迟发送和接收包含路由信息的EIGRP消息.直到邻居双方确认了双向连通性为止。
接着R2向R1发送一个空更新包.并在其中设置初始化(Init)标记。这个空更新包中携带非零的序列号.但不包含任何路由信息。设置初始化标记是为了告诉邻居.这个邻接关系是从头建立的.并要求邻居在确认了双向连通性后.发送完整的数据库更新。R1需要对接收 到的空更新包进行确认.从而确认双向连通性.并且它还必须向R2发送自己的空更新包.并且也在其中设置初始化标记.告诉邻居它也认为这个邻接关系是从头建立的。R2最终会对R1的空更新包进行确认.并完成初始化交换过程。在这个过程中.路由器可以使用单独的确认包来发送确认信息.也可以在空更新包的头部设置确认号字段.将其设置为邻居发来的空更新包中的序列号.这两种做法都是可以的。
在待定状态期间.邻居之间能够双向交换的数据包都是不可靠数据包(Hello包和确认包).携带初始化标记的可靠数据包标示着邻接关系开始建立。除此之外.只要还有邻居处于待定状态.就表示双向连通性还没有得到确认.因此在这阶段发送任何携带有用路由信息 的可靠数据包都是不合理的。因此在待定状态期间.邻居之间能够交换的可靠数据包只有空更新包。
只有当邻居确认它接收到了空更新包.并且发送了自己的空更新包并设置了初始化标记 (这两个行为的顺序并不重要).路由器才会将这个邻居从待定状态改变为连接(up)状态。 换句话说.路由器必须从邻居那里接收到邻居对其空更新包的确认.必须从邻居那里接收到带有初始化标记的空更新包.这样它才能将邻居从待定状态改变为连接状态。在某种意义上.可以把这个过程比作建立TCP会话的过程。这里的初始化标记与TCP中的同步(SYN)标记类似。R2发给R1的第一个空更新+初始化标记.类似于TCP中的SYN分段。R1发送的空更新+初始化标记+确认信息.类似于TCP中的SYN/ACK分段。R2用来确认R1空更新包+初始化标记的AC 包.类似于TCP中的ACK分段。
经历了这个初始化的三次握手后.两台邻居路由器之间就可以使用更新包来交换完整的路由更新了。同步完成后.EIGRP邻居之间只会通过增量更新来通告邻居状态和路由的变化.并不会再发送完整数据库更新.除非工程师手动重启或重新同步。
有关每个邻居的信息记录在邻居表中.工程师可以使用命令show ip eigrp neighbors来査看邻居表中的内容.
邻居表中记录了每个检测到的邻居.并且本地路由器都与其建立了邻接关系。H (Handle.处理)列显示的是EIGRP分配给每个邻居的内部号码。EIGRP通过这个H号码.以一种独立于地址家族的方式在内部识別每个邻居。Address (地址)和Interface (接口)列显示的是邻居的IP地址和本地路由器连接这个邻居的接口。Hold (保持)时间来自于邻居通告中携带的值.每杪递减;每当从邻居收到适当的EIGRP数据包后.保持时间都会重置。Uptime (连接时间)列显示的是邻居进入连接状态的时长。
SRTT是指平滑往返时间.估算的是从发送可靠数据包给邻居.到邻居对此做出确认之间的时间。RT0是指重传超时.这是在邻居未对之前发送的数据包做出确认后.路由器在重传单播数据包之前需要等待的时间。如果在收到ACK包之前RT0超时了.EIGRP会再次发送这个数据包。这些计时器的单位都是毫杪。
QCnt列表示的是排队中的可靠数据包号码.也就是说那些己经准备好发送的数据包.或者己经发送出去.但还没有从邻居那里收到ACK包的数据包。在运行状态稳定的网络中.QCnt列的值必须是0;通常只有在初始阶段路由器数据库同步过程中.或者网络拥塞时.才会出现非零的值。如果在较长的一段时间内.QCnt值一直为非零的值.就表示路由器与邻居出现了连通性问题。
Seq Num (序列号)列显示的是从邻居那里收到的最后一个可靠数据包(更新包、査询包、 响应包、SIA査询包或SIA响应包)的序列号。RTP会通过追踪这些序列号.确保按照升序处理从邻居收到的可靠数据包。需要注意的是.EIGRP中的序列号是每个进程自己维护的.并 在每次生成及传输一个新的可靠数据包后增加。如果一个邻居的某个接口遭遇了可靠通信问题.并且需要向这台路由器再次发送一个可靠数据包.那么这一列中序列号的增幅会大于1。 因此通常情况下.这一列序列号的增幅都不太相同.但总是以递增的形式变化。
下表总结了能通过邻居表查看的内容