路由器和三层交换机接收数据的处理过程
1.路由器
1.1.目的网段为直连
假设ARP缓存表都存在,主机A ping 主机B时,主机A通过自己的掩码发现不在同一网段,查询网关的ARP缓存,获取到网关的mac,将数据封装成:
etII[dmac=C smac=A] sip=10.1.1.1 dip=10.1.2.1 icmp request
发送给网关,网关检查dmac发现和自己接口mac一致,因此认为该报文是发给它的,将其解封装:
sip=10.1.1.1 dip=10.1.2.1 icmp request
查询dip的路由表:
destination pro nexthop interface
10.1.2.0/24 direct 10.1.2.254 g0/0/1
发现是直连网段,但并不是传输给自己的,因此交给g0/0/1接口处理,查询dip的ARP缓存表:
ip mac
10.1.2.1 B
将其封装:
ethII[dmac=B smac=D] sip=10.1.1.1 dip=10.1.2.1 icmp request
发送给主机B
抓包验证:
主机A mac:54-89-98-C3-71-93
路由器:
g0/0/0口mac:00e0-fc99-6c81
g0/0/1口mac:00e0-fc99-6c82
主机Bmac:54-89-98-BA-48-03
主机A发出:
目标地址的路由表:
目标地址的ARP缓存:
主机B接收的报文:
1.2.目的网段为非直连(重点)
假设存在到达目的网段的路由,以及ARP缓存表都存在。
当A ping B的时候A到AR6的处理过程和上面一致,
AR6将报文解封装后:
sip=10.1.1.1 dip=10.1.2.1 icmp request
查询dip的路由表:
destination pro nexthop interface
10.1.2.0/24 static 10.1.3.2 g0/0/1
不是直连路由,因此报文交给接口g0/0/1处理,查询nexthop的ARP缓存(和直连网段的处理区别):
ip mac
10.1.3.2 F
封装成:
ethII[dmac=F smac=E] sip=10.1.1.1 dip=10.1.2.1 icmp request
发送出去
2.三层交换机
2.1.目的网段非直连(重点)
假设路由表和ARP缓存表都存在,当PC1 ping PC2的时候数据包从LSW1的g0/0/1口进入后:
etII[dmac=E smac=C tag10] sip=10.1.10.1 dip=10.1.20.1 icmp request
LSW1查询到dmac属于自己,因此解封装:
sip=10.1.10.1 dip=10.1.20.1 icmp request
查询dip路由表:
destination pro nexthop interface
10.1.20.0/24 static 10.1.30.2 vlanif30
将报文交给vlanif30处理,查询nexthop的ARP缓存表
ip mac
10.1.30.2 B
封装:
etII[dmac=B smac=A tag30] sip=10.1.10.1 dip=10.1.20.1 icmp request
根据dmac和vlan tag到mac地址表查找转发接口:
mac vlan interface
B 30 g0/0/2
总结:路由器一般根据路由表来转发(没有策略路由的情况下),而三层交换机不管是二层通信还是三层通信,最后都是根据mac地址表来进行转发