核心表项对比
表项 | 全称 | 工作层级 | 主要功能 | 涉及设备 | 典型生命周期 |
MAC表 | 媒体访问控制表 | 数据链路层(二层) | Mac地址和端口关系 | 交换机、网桥 | 动态学习 |
FDB表 | 转发数据库 (Forwarding DataBase) | 数据链路层(二层) | Mac地址与端口关系,一般还包括vlanId | 交换机、网桥 | 动态学习(默认5分钟) |
ARP表 | Address Resolution Protocol 地址解析协议表 | 网络层与数据链路层之间(二层和三层间) | Ip地址和mac地址的关系 | 主机、路由器 | 动态(通常2-20分钟) |
路由表 | Routing Table | 网络层(三层) | 存储目标网络与下一跳的映射关系 | 路由器、三层交换机、主机 | 静态或动态更新 |
详细解析
MAC表 & FDB表
事实上mac表和fdb表广义上可以说是一个东西,大多数情况下都是指代的同一个东西。狭义上的区别是mac表只有mac地址和端口关系,而fdb表则包含了vlanId信息。
因为fdb表包含更多的信息,所以现在业务上一般都使用包含了vlanId的fdb表。
那么这两个表项用来干嘛的?
主要是二层间数据转发时候使用,目标地址为mac,通过该表找到对应mac所在的端口,进一步将报文通过该端口转发发去。
这里需要提一下dot协议:
Dot1d:即 IEEE 802.1D,是 生成树协议(STP, Spanning Tree Protocol) 的标准,用于防止网络中的环路,确保冗余链路环境下数据帧的无环转发。
Dot1q:即 IEEE 802.1Q,是 VLAN 标签(VLAN Tagging) 的标准,用于在以太网帧中插入 VLAN 信息,实现虚拟局域网(VLAN)的划分。
特性 | 802.1D (Dot1d) | 802.1Q (Dot1q) |
用途 | 防止网络环路(STP) | VLAN 标签(Trunking) |
工作层次 | 数据链路层(L2) | 数据链路层(L2) |
依赖关系 | 不依赖 VLAN | 依赖 VLAN 环境 |
帧格式 | 不修改帧结构 | 在以太网帧头插入 4 字节 VLAN Tag |
典型应用 | 交换机防环 | 跨交换机的 VLAN 通信 |
- Dot1d(802.1D) 解决 环路问题(STP)。
- Dot1q(802.1Q) 解决 VLAN 跨设备通信问题(Trunking)。
我们在读取mac表(或者说fdb表)信息时,都是读取以上两个信息,一般是优先读取dot1q的表项信息,如果其不存在则读取dot1d表项的信息。
ARP表
在设备发送ip包出去的时候,此时传输数据只有ip头部,传输到二层需要封装帧头和帧尾,这时候需要查询arp表确定下一跳的mac地址,用于三层ip包封装成二层帧时的地址填充。
我们来看下网络中数据发送和接受流程中的封装和解封装情况:
封装(Encapsulation):发生在发送端,是自上而下(从高层到低层)的过程
应用数据 → TCP/UDP头部 → IP包头 → 以太网帧头帧尾
解封装(Decapsulation):发生在接收端,是自下而上(从低层到高层)的过程
去掉以太网帧头帧尾 → 解析IP包头 → 处理传输层头部 → 交付应用数据
发送端封装流程: [IP包] → (查询ARP表获得MAC) → [添加帧头] → [完整以太网帧] ↑ 需要ARP表 接收端解封装流程: [完整以太网帧] → [检查MAC] → [去掉帧头] → [IP包] ↓ 不需要ARP表 |
即发送前要封装,封装需要MAC,MAC来自ARP表。
路由表
决定数据包在三层中的下一跳地址,包括目标网络、子网掩码、下一跳、出接口等信息。
可以通过静态配置或通过路由协议动态学习,包含管理距离和度量值等路由选择参数,存在于三层设备(路由器、三层交换机)和主机上
这个表项相对来说我们更常见一点,偶尔会遇到在主机上配置路由的情况,罗列一下对应的命令:
环境 | 命令 |
Windows | route print |
Linux | ip route show |
网络设备(交换机、路由器等) | Show ip route |
另外还有在Windows增加路由的命令,举例如下:
Windows环境:
route -p ADD 10.10.5.0 MASK 255.255.255.0 10.10.5.254
Linux环境:
route add -net 10.10.5.75 netmask 255.255.255.8 gw 10.10.5.254
ND表
Ipv6中的邻居发现协议表(neighborhood discovery protocol)
相当于ipv6协议的ARP表,实现ipv6地址到mac地址的解析。
总结
数据流转过程中的表项协作:
1、应用层:主机名解析(host文件/DNS)
2、网络层:路由表决定出口和下一跳
3、ARP/ND表:将下一跳ip解析为mac地址
4、数据链路层:FDB/MAC表决定具体从哪个物理口转发出去
路由表:三层,解决“下一跳去哪”的问题,静态或根据协议更新(如ospf每30分钟刷新)
ARP表:二层和三层间,解决“目标MAC是谁”的问题,20分钟老化
FDB/MAC表:二层,解决“从哪个口出去”的问题,5分钟老化