3层交换头包有时丢失原因
3层交换 在转发时需要找到路由表中的下一跳的MAC地址,对于同一台交换机2个VLAN接口的2个子网。需要ARP请求目标主机的MAC地址,因为它门是直联网络,所以不需要请求下一跳的MAC,而是直接请求目标主机的MAC了。因此首先会发一个ARP查询,正是这样导致第一个数据包总被丢失的,而第2次转发,是在ARP查询得到结果之后,才开始的,第2次转发实际依据的是IPFDB表又叫IP转发数据库里面有包含类似ARP表的直联段以及下一跳的IP和MAC的映射关系还有出接口和VLAN标记都有很全的一张表,此时,是完全的ASIC芯片的一种利用。它把帧的头部与尾部提剥离,看到目标IP然后,一次匹配,注意这次匹配时是依照硬件转发表HWFIB匹配的,然后立刻结合FDB缓存中的目标主机的MAC地址,封装成帧。交给目标主机,以上是针对不同网段情况的3层转发描述。而且是同一交换机。
那2台交换机2个VLAN接口的话,就有点点点的区别,关键是在3层交换机查路由表时查找的不是目标主机的MAC,而是下一跳的MAC,那其实这个下一跳的MAC,我门早就已经知道了,为什么?因为此下一跳是与我本路由器直联着的,对于这样的地方,我门依照主机路由会查到对放IP的MAC。更因为FDB里早就已经发现了铃局的信息了,那这样来说实际我门早就知道了下一跳的MAC了,那头个包的丢失不是因为下一跳的MAC不知道而丢的,那是发生与什么时候呢?其实很简单,当你依照下一跳把该包扔到了第2台交换机了,第2台交换机默认的时候并不会知道目标主机的MAC吧,即使它是直连着的关键是主机没有与3层交换机通信过而且交换机也不会理睬你发的免费ARP包(当然可以开起这个学习免费ARP那这样就不会丢了)但注意ARP表会老化,这样看来问题又回到了第1种方式里的了。这样第一个包,第2台交换机,在发现是直联路由之后,必须广播请求目标主机的MAC。目标主机回用ARP单播回复这个请求,这样第一个包就丢了(。之后呢?之后交换机会依照ARP表或FDB的表项正确的直接找到目标主机的MAC
同网段不需要经过3层,当然还有个条件在进行3层转发时,PC机网关必须指向3层交换机的3层接口,。当然同一个网段我门直接是由PC机发去的ARP请求从而直接得到对方主机的MAC地址,而在平时路由,以及3层交换时,我门发现的MAC地址,一直是在变化的,一直是下一跳IP的MAC而已。注意还是那个原则,路由转发里,目标IP源IP一直没标。目标MAC和源MAC一直在变(其实交换机性能好第一个包很难丢的,因为很快)

那我门如何解决第一个包丢失的小问题,其实也没必要只是为了更好的理解此转发原理,很简单,直接在末端交换机,就是最后一台处理该数据包的,交换机处,捆绑或开起免费ARP学习FDB的支持都可以让第一个包不丢,,但确实没意义,写了这么多,只是为了告诉大家3层交换是如何转发不同网段的数据包的。
3层转发里的ARP表,路由表,MAC表,FIB表,FDB表,HWFIB表的关系
依靠FIB加FDB加HWFIB来实现快速转发, 可HWFIB表是为纯硬件转发准备的,又叫HWFIB这里只放非直联的
路由表是备用的一个选择了。快速转发失败或头次转发才转到路由表,FIB是依靠路由表生成的直连的叫D,非直连的叫I,FDB是依靠ARP来生成的 没有ARP你也不能构建FDB ,FIB,从路由表那里得到转发信息,再依靠转发信息,查FDB转发数据库,得到下一跳的MAC,最后构件一个HWFIB,硬件转发表,该表里没有下一跳IP,何以说,他就是FIB与FDB的结合。他的下一条直接就是硬件的MAC了。它并不会有直联段的信息,因为直联段的只要依靠FIB+FDB就解决了,从FIB找到合适的路径,依靠FDB的铃接关系准确发给目标,但这里是对直联段的处理。非直联的考HWFIB,这里都是FIB里为I的那些路由信息。也就是非直联的
fib表主要是依据路由表生成的一些信息,又叫转发信息库。内容较单一和路由差不多COPY路由表而来,下一跳IP,依靠这里去找FDB里下一跳MAC,目标段,这里是HWFIB里的目标段的来源,再就是一个出接口和路由表一样。
HWFIB,是真的硬件转发表,该表只会在有静态路由或动态路由时才会有项目存在(FIB里为I的路由),主要包过下一跳的MAC注意这里是MACHWFIB里无下一跳IP,出接口(通常是某个2层的物理接口表示符合此条项因该直接从哪一个物理接口出去)VLAN标签。目标网段。该表不会老化,它是3层硬件转发的核心
FDB,和ARP差不多都是邻接的内容,但多了很多,主要是一些主机信息和ARP表很象差别在与ARP表里没有该设备本身接口的只有学到的,也有老化时间,如果主机长时间不和对方通信的话,那20分钟左右便会清理ARP和FDB表了 但本身的设备接口的IP不会老化!可以说他是HWFIB的下一跳准确的核心
FDB表里有5种状态,表示该项所属于的状态。HWFIB表里利用到的那一个MAC,在FDB里是属于学习状态表示它不段的在学习不会老化,FDB的字段关键的就是一个IP地址, 转发逻辑接口 转发端口号物理的,VLAN标记 是否有效。MAC该MAC就是IP的,
总结下,3层交换机依靠路由表构成FIB,FIB转发时,依靠FDB,直联时,转发数据库查下一跳的准确出路那里有下一跳的准确物理E口。FIB和FDB一起成了HWFIB,因此在没有非直联路由时HWFIB是不存在的,因为FDB表里没有构件HWFIB所必须的MAC也没必要经过3层转发,还有种情况就是同一网段时的,那这是直接查MAC表的。

图:如:PCA-----SW1----SW2---PCB
PCA发包如果交换机发现该MAC非自己的3层接口MAC,则查MAC表,如果有则发给同网段的其他主机,如果无则FLOODING。如果目标MAC是交给自己3层接口的那此时头次是依靠路由表结果发现和自己是直联网段的此时便直接在该网段请求ARP目标主机MAC,找到便提交,但以后都是走的FIB表出去了,FIB依靠FDB转发数据表直接交给目标主机。这里有可能不一样,因为我知道FIB表实际是来自路由表的换句话说路由表只要存在FIB就有了。
还有种情况就是我门图里的情况 PCA PCB不同网段,那这时,PCA的包交给交换机的3层接口(其实就是PC机的网关而已)。这时查路由表看是否是直联,直连交FDB处理,
但这里不是直联的,因此寻找下一跳,先根据路由表找下一跳IP再据FDB找到下一跳MAC和出接口,送出去到了SW2,SW2一看此包是和我直联的一个网段所以直接交给FDB了。第一次通信过了,这样在SW1上和SW2上都会有HWFIB,因为这是非直联段的,所以HWFIB出先了,以后只要FRAME是交给该交换机的某个3层接口的就交给HWFIB处理,
如果HWFIB表里无就又交给路由表去处理了。
提示:FIB很可能是早就依照路由表构建好了。所以第一个包很可能是依靠它来转发 高端设备几乎只有FIB因为他们基本上都是基于NP的