三层转发原理
1.二层设备查的是MAC地址表,三层设备查的是路由表;
如果在路由表里面有多条路由,怎么转发?
最长匹配原则;通过最长匹配可以找到下一跳,如果下一跳并不是直连网段,还需要根据下一跳查直连网段,直到找到直连网段,这种方法叫做迭代或者递归。
RIB->控制层面(路由条目的收敛和维护)FIB->转发;FIB表是有RIB表生成的。
设备分为盒式和框式的
盒式设备:控制层面和转发层面在一起的,统称为集中式设备;
框式设备:MPU-主控板 ,用于控制层面的处理 ;
LPU-接口板用于转发;一个IP包来了以后,可以直接查接收板卡的FIB表项,通过FIB表直接转发,减轻 控制层面的压力
2.FIB表
FIB表里面,掩码长度从大到小对IP包进行排序;减轻查表的压力和速度;FIB表是关联邻接表的
(show adjac ency),通过查一张表实现IP包的快速转发。
所以,在FIB表里面,有目的MAC,源MAC,以太类型。
*******************************************************************************
AD管理距离
直连网段
EIGRP有3个AD值;协议优先级
在什么情况下需要比较AD值?
如果同一条路由通过多种路由协议学习,需要比较AD值选出最优的一条
是有RIB来选的决定谁最优;
OSPF-110; EIGRP-90;
RIB表项会选取AD值小的路由条目;
*****************************************************************************
Metric值,度量值-距离产生的时间,时间最短的一个。
什么情况下才需要比较度量值?
如果同一条路由通过同一种路由协议的不同邻居学到,需要比较metric值,优选metric值
[AD/ME]
例子:都是通过EIGRP学到的,比较metric是由路由协议来选的,路由器A通过同一种路由协议,不同的邻居,收到同一条路由条目,A需要算,哪个邻居到达目标哪个最短最优。B到达,100,C到达,1000,B胜出;
metric是通过综合带宽来算的;带宽越大,cost值越小;
IP包转发只看路由表做最长匹配;和AD/METRIC值没有任何关系
作业:【综合实验】
PC1想访问PC4的报文转发过程?
PC1/PC2/PC3/PC4能收到哪些报文?
物理层设备
数据链路层设备
网络层设备
1.PC1->PC4
第一个包:ARP包:PC1发送的ARP请求, 请求路由器0接口的MAC地址。
PC1/PC4不在同一网段(路由器每一个接口处于不同的广播域,广播是不能跨网段的,在路由器接口终止;每一个接口都是不同的网段),之间是不可能二层可达的,要通过三层转发;
(看是否在同一网段:做一个与运算,用自己的接口掩码和目标IP地址做一个与运算);
通过与运算,网络位与自己一样,处于同一网段;网络位与自己不一样,处于不同的网段;
如果在同一网段,是可以直接二层转发互通的;如果在不同网段就需要查路由表,看有没有到达目标网段的路由;
PC1网关的地址——路由器0口的地址;通过查表可以得到一跳默认路由;可以匹配默认路由;
再看,默认路由的下一跳是路由器0的IP地址;
所以,把包给网关,看有没有到达网关的MAC。
第二步:HUB泛洪
广播报文,HUB是物理层设备,看不到数据链路层的MAC地址的,HUB收到电信号以后,会泛洪处理,从2、3口发出去,PC2是可以收到ARP请求的
第三步:交换机泛洪
信号被交换机收到,交换机收到会根据目的MAC查MAC地址表;由于现在交换机的MAC地址表是空的,交换机会做一个数据帧的泛洪;泛洪会从2口和3口发出去,同时将源MAC地址绑定到1口上面;PC3会收到ARP请求。
第四步:路由器0口收到交换机3口的ARP请求
由于数据帧的MAC地址是个广播MAC,通过二层是无法分析是给谁的?需要拆了2层看上层协议,发现是一个ARP协议,交给ARP进程处理,发现ARP报文里面的目标地址是自己接口的IP,说明ARP请求是发给自己的;路由器会回送一个ARP的应答,同时将发送源的IP地址和MAC地址绑定到ARP表里面;
ARP应答到SW,由于目的MAC已经绑定到1口上了,会做一个转发而非泛洪;
在路由器里面会生成一个ARP表项,去绑定发送源的IP地址和MAC地址;
第五步:路由器回送给PC1的单播ARP应答
源MAC:路由器接口的MAC
目的MAC:PC1的MAC
这个报文PC3收不到,回复报文因为HUB,PC2\PC1可以收到
第六步:经过这个过程PC1就获取到了网关的MAC地址,下面就可以封装一个ICMP报文,PC1发送给PC4的ICMP报文:
二层:DMAC=网关(路由器0口) SMAC=PC1 E-TYPE=0x0800
三层:源IP=PC1 目的IP=PC4 Protocol id=1 (ICMP)
ICMP:type=8 code=0
HUB泛洪,PC2可以收到这个报文; 交换机会做转发,因为SW收到路由器的单播应答时,源MAC已经绑定到3口了;是直接转发而不是泛洪。
第七步:数据帧会被路由器收到,checksum检查报文完整性;
看数据帧目标 MAC地址是不是自己的MAC;
拆了2层看3层,需要通过三层转发,获取到目标的IP地址,根据IP地址查本地的路由表项,找到路由表,找到出接口,找到下一跳;
能找到一个直连的路由,找到一个出接口;转发IP包,
重写二层,需要获取到目的IP的MAC地址,路由器会查自己ARP表项,看ARP表项里面是否有目的IP的MAC?
没有的话,发送ARP请求,获取MAC;
??!!!
PC1发送一次ARP请求,路由器也会发送一次ARP请求
第八步:路由器向PC4发送ARP请求,这个请求报文只有PC4能收到
PC4会回复ARP应答,同时在本地ARP表项里面去绑定网关和MAC地址的对应关系
第九步:PC4 向路由器发送的ARP应答
生成ARP的绑定表,绑定PC4和MAC地址
因为路由器需要先查再转发,这个ICMP报文会被路由器丢弃掉,PC1会继续发ICMP请求报文
第十步:PC1向PC4的ICMP请求
路由器收到以后拆了2层看3层,通过目标IP地址进行查表转发;现在有了目标地址的MAC,可以重新写二层发给PC4
PC2\PC4可以收到
第十一步:PC4回送一个ICMP应答
PC4->PC1
二层:DMAC=网关(路由器1口) SMAC=PC4 E-TYPE=0x0800
三层:源IP=PC4 目的IP=PC1 Protocol id=1 (ICMP)
ICMP:type=0 code=0
这个报文会被路由器收到,路由器也是拆了2层看3层,从0口发出去,并且重写二层
重写二层:源MAC=路由器0口的MAC地址;
目标MAC=PC1的MAC地址;
PC2照样可以收到
一共发了7个报文,PC2都可以收到;
经过路由器,要重写二层
每一个报文的报文结构要写出来,作业案例要求发给我
PC1/PC2/PC3/PC4能收到哪些报文?
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">