MAC地址表、ARP表和路由表详解

article/2025/9/17 14:19:20

一:MAC地址表详解

说到MAC地址表,就不得不说一下交换机的工作原理了,因为交换机是根据MAC地址表转发数据帧的。在交换机中有一张记录着局域网主机MAC地址与交换机接口的对应关系的表,交换机就是根据这张表负责将数据帧传输到指定的主机上的。

交换机的工作原理

交换机在接收到数据帧以后,首先、会记录数据帧中的源MAC地址和对应的接口到MAC表中,接着、会检查自己的MAC表中是否有数据帧中目标MAC地址的信息,如果有则会根据MAC表中记录的对应接口将数据帧发送出去(也就是单播),如果没有,则会将该数据帧从非接受接口发送出去(也就是广播)。

如下图:详细讲解交换机传输数据帧的过程


1)主机A会将一个源MAC地址为自己,目标MAC地址为主机B的数据帧发送给交换机。

2)交换机收到此数据帧后,首先将数据帧中的源MAC地址和对应的接口(接口为f 0/1) 记录到MAC地址表中。

3)然后交换机会检查自己的MAC地址表中是否有数据帧中的目标MAC地址的信息,如果有,则从MAC地址表中记录的接口发送出去,如果没有,则会将此数据帧从非接收接口的所有接口发送出去(也就是除了f 0/1接口)。

4)这时,局域网的所有主机都会收到此数据帧,但是只有主机B收到此数据帧时会响应这个广播,并回应一个数据帧,此数据帧中包括主机B的MAC地址。

5)当交换机收到主机B回应的数据帧后,也会记录数据帧中的源MAC地址(也就是主机B的MAC地址),这时,再当主机A和主机B通信时,交换机根据MAC地址表中的记录,实现单播了。

如下图:当局域网存在多个交换机互联的时候,交换机的MAC地址表是怎么记录的呢?


1)主机A将一个源MAC地址为自己,目标MAC地址主机C的数据帧发送给交换机

2)交换机1收到此数据帧后,会学习源MAC地址,并检查MAC地址表,发现没有目标MAC地址的记录,则会将数据帧广播出去,主机B和交换机2都会收到此数据帧。

3)交换机2收到此数据帧后也会将数据帧中的源MAC地址和对应的接口记录到MAC地址表中,并检查自己的MAC地址表,发现没有目标MAC地址的记录,则会广播此数据帧。

4)主机C收到数据帧后,会响应这个数据帧,并回复一个源MAC地址为自己的数据帧,这时交换机1和交换机2都会将主机C的MAC地址记录到自己的MAC地址表中,并且以单播的形式将此数据帧发送给主机A。

5)这时,主机A和主机C通信就是一单播的形式传输数据帧了,主机B和主机C通信如上述过程一样,因此交换机2的MAC地址表中记录着主机A和主机B的MAC地址都对应接口f 0/1。

总结:从上面的两幅图可以看出,交换机具有动态学习源MAC地址的功能,并且交换机的一个接口可以对应多个MAC地址,但是一个MAC地址只能对应一个接口。

注意:交换机动态学习的MAC地址默认只有300S的有效期,如果300S内记录的MAC地址没有通信,则会删除此记录。

 


二、ARP缓存表详解

上面我们讲解了交换机的工作原理,知道交换机是通过MAC地址通信的,但是我们是如何获得目标主机的MAC地址呢?这时我们就需要使用ARP协议了,在每台主机中都有一张ARP表,它记录着主机的IP地址和MAC地址的对应关系。

ARP协议:ARP协议是工作在网络层的协议,它负责将IP地址解析为MAC地址。

如下图:详细讲解ARP的工作原理。


1)如果主机A想发送数据给主机B,主机A首先会检查自己的ARP缓存表,查看是否有主机B的IP地址和MAC地址的对应关系,如果有,则会将主机B的MAC地址作为目标MAC地址封装到数据帧中。如果没有,主机A则会发送一个ARP请求信息,请求的目标IP地址是主机B的IP地址,目标MAC地址是MAC地址的广播帧(即FF-FF-FF-FF-FF-FF),源IP地址和MAC地址是主机A的IP地址和MAC地址。

2)当交换机接收到此数据帧之后,发现此数据帧是广播帧,因此,会将此数据帧从非接收的所有接口发送出去。

3)当主机B接收到此数据帧后,会校对IP地址是否是自己的,并将主机A的IP地址和MAC地址的对应关系记录到自己的ARP缓存表中,同时会发送一个ARP应答,其中包括自己的MAC地址。

4)主机A在收到这个回应的数据帧之后,在自己的ARP缓存表中记录主机B的IP地址和MAC地址的对应关系。而此时交换机已经学习到了主机A和主机B的MAC地址了。

 


路由表详解

路由器负责不同网络之间的通信,它是当今网络中的重要设备,可以说没有路由器就没有当今的互联网。在路由器中也有一张表,这张表叫路由表,记录着到不同网段的信息。路由表中的信息分为直连路由和非直连路由。

直连路由:是直接连接在路由器接口的网段,由路由器自动生成。

非直连路由:就是不是直接连接在路由器接口上的网段,此记录需要手动添加或者是使用动态路由。

路由表中记录的条目有的需要手动添加(称为静态路由),有的则是动态获取的(称为动态路由)。直连路由属于静态路由。

路由器是工作在网络层的,在网络层可以识别逻辑地址。当路由器的某个接口收到一个包时,路由器会读取包中相应的目标的逻辑地址的网络部分,然后在路由表中进行查找。如果在路由表中找到目标地址的路由条目,则把包转发到路由器的相应接口,如果在路由表中没有找到目标地址的路由条目,那么,如果路由配置默认路由,就科举默认路由的配置转发到路由器的相应接口;如果没有配置默认路由,则将该包丢弃,并返回不可到达的信息。这就是数据路由的过程。

如下图:详细介绍路由器的工作原理


1)HostA在网络层将来自上层的报文封装成IP数据包,其中源IP地址为自己,目标IP地址是HostB,HostA会用本机配置的24位子网掩码与目标地址进行“与”运算,得出目标地址与本机不是同一网段,因此发送HostB的数据包需要经过网关路由A的转发。

2)HostA通过ARP请求获取网关路由A的E0口的MAC地址,并在链路层将路由器E0接口的MAC地址封装成目标MAC地址,源MAC地址是自己。

3)路由器A从E0可接收到数据帧,把数据链路层的封装去掉,并检查路由表中是否有目标IP地址网段(即192.168.2.2的网段)相匹配的的项,根据路由表中记录到192.168.2.0网段的数据请发送给下一跳地址10.1.1.2,因此数据在路由器A的E1口重新封装,此时,源MAC地址是路由器A的E1接口的MAC地址,封装的目标MAC地址则是路由器2的E1接口的MAC地址。

4)路由B从E1口接收到数据帧,同样会把数据链路层的封装去掉,对目标IP地址进行检测,并与路由表进行匹配,此时发现目标地址的网段正好是自己E0口的直连网段,路由器B通过ARP广播,获知HostB的MAC地址,此时数据包在路由器B的E0接口再次封装,源MAC地址是路由器B的E0接口的MAC地址,目标MAC地址是HostB的MAC地址。封装完成后直接从路由器的E0接口发送给HostB。

5)此时HostB才会收到来自HostA发送的数据。

总结:路由表负责记录一个网络到另一个网络的路径,因此路由器是根据路由表工作的。

原文链接:http://blog.csdn.net/bzhxuexi/article/details/44237633


http://chatgpt.dhexx.cn/article/Tqh1vyyy.shtml

相关文章

网络三张表:ARP表, MAC表, 路由表,实现你的网络自由!!

背景说明: 网络的知识,是大家开发过程中,非常重要也是非常底层的知识。所以网络知识是一个非常、非常核心的面试知识点。 在40岁老架构师 尼恩的读者交流群(50)中,其相关面试题是一个非常、非常高频的交流话题。社群中&#xff…

路由表(RIB表、FIB表)、ARP表、MAC表整理

在一些常见的网络设备中(如交换机、路由器),为了实现网络转发功能,各自通过维护一些表项来完成路由寻址及快速转发功能,其中比较重要的表项有: 路由表转发表Mac表ARP表 本文对这网络中的最关键的四个表项做一个详细介绍。 目录…

MAC表,ARP表,路由表总结

全文概要 计算机网络中一个关键步骤在于通信路径上不同节点对于流经本节点的数据包转发,常见的交换设备主要是交换机(第二层、三层)和路由器(第三层),在实际运行时,它们各自维护一些表结构帮助完成数据包的正确寻址与转发,本文详细…

LINUX下ARP表操作

Linux下操作ARP表项 ARP缓存表arp_tbl由协议栈在运行期间自动维护,包括邻居新建,更新,回收等。同时,TCP/IP协议栈的实现中也提供了三个命令,可以用来由用户维护arp_tbl,这三个命令分别是SIOCDARP(删除arp_t…

ARP协议报文格式及ARP表简述

目录 1 ARP协议报文概述 1.1 ARP/RARP报文格式 1.2 ARP报文抓包 1.2.1 arp请求 1.2.2 arp应答 2 ARP映射表 2.1 动态ARP表项 2.2 静态ARP表项 2.3 短静态ARP表项 2.4 长静态ARP表项 3 ARP攻击(mac地址欺骗) 1 ARP协议报文概述 ARP&#xff0…

ARP表是什么

ARP表    提起ARP表必然先想起ARP(address resolution protocol)协议,地址解析协议。   在实际应用中,我们经常遇到这样的问题:已知一个机器的IP地址,但在实际网络的链路上传送数据帧时,最…

ARP协议报文格式及ARP表

摘自:《深入理解计算机网络》 王达著 机械工业出版社 相关知识链接 IPV4数据报头部格式请点击这里 IPv6数据报头部格式请点击这里 IPv4数据报的封装与解封装请点击这里 IPv4数据报的分段与重组请点击这里 ARP协议报文格式及ARP表 ARP(Address Res…

lwip---(六)ARP表

ARP,全称Address Resolution Protocol,译作地址解析协议,是位于TCP/IP协议栈底层的协议。任何网络的通信都是基于底层硬件链路的,底层的数据链路有着自己的一套寻址机制,在以太网中,往往是通过一个48位的MA…

网络中的三张表——ARP表、MAC表、路由表

1、ARP表 提起ARP表必然先想起ARP(address resolution protocol)协议,地址解析协议。   在实际应用中,我们经常遇到这样的问题:已知一个机器的IP地址,但在实际网络的链路上传送数据帧时,最终还…

java根据前序和中序建树_(Java实现)二叉树---根据前序、中序、后序数组还原二叉树...

概述在上一篇文章中讲到顺序存储二叉树,一般是用于完全二叉树,通过统一的数学公式可以将数组还原成完全二叉树 而对于普通的二叉树来说,也可以根据前序、中序和后序遍历得到的数组,还原二叉树 还原还原的情况分两种,分…

二叉树——前序和中序得到后序

由二叉树的前序和中序如何得到二叉树的后序呢?要给出答案,首先得明白什么是前序、中序、后序。 二叉树前序:遍历顺序为,根节点、左子树、右子树;中序:遍历顺序为,左子树、根节点、右子树&#…

二叉树的遍历|前序、中序、后序、层序遍历

文章目录 6.8 遍历二叉树6.8.1 二叉树遍历原理6.8.2 二叉树遍历方法1.前序遍历2.中序遍历3.后序遍历4.层序遍历 6.8.3 前序遍历算法6.8.4 中序遍历算法6.8.5 后序遍历算法6.8.6 推导遍历结果 6.8 遍历二叉树 6.8.1 二叉…

前序遍历二叉树

package cm.com.algorithm.tree;/*** 前序遍历2叉树* 前序遍历是指,对于树中的任意节点来说,先打印这个节点,然后再打印它的左子树,最后打印它的右子树** author liushuai13meicai.cn* date 2019-06-11 22:14*/ public class DLRT…

java根据前序和中序建树_Java实现根据前序遍历构建二叉树(前序遍历、中序遍历、后序遍历)...

Java实现根据前序遍历构建二叉树(前序遍历、中序遍历、后序遍历),Java关于ACM的代码真的好少,想参考如何用java实现二叉树googl 前言 Java关于ACM的代码真的好少,想参考如何用java实现二叉树google了一上午都没找到资料,只能自己仿…

C实现前序遍历二叉树

1. 实验目的 (1)掌握二叉树的逻辑结构; (2)掌握二叉树的二叉链表存储结构; (3)验证二叉树的二叉链表存储及遍历操作。 2. 实验目的 (1)建立一棵含有n个结…

前序序列创建二叉树

7-9 前序序列创建二叉树 (25 分) 编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以二叉链表存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是…

按照前序遍历创建二叉树及树的四种遍历方式

一.二叉树的介绍 二叉树的特点是二叉树的每个结点的度都不大于2,可以视为每个结点都有左孩子和右孩子。故二叉树结点的数据结构为 二.二叉树的特点 1.设根结点所在的层数为第1层,则第i层最多有个结点。 2.深度为k的二叉树最多有个结点。 3.对任何一个二叉…

LeetCode 144. 二叉树的前序遍历(前序遍历)

文章目录 1. 题目信息2. 解题2.1 递归2.2 循环,必须掌握 1. 题目信息 给定一个二叉树,返回它的 前序 遍历。 示例:输入: [1,null,2,3] 1\2/3 输出: [1,2,3]进阶: 递归算法很简单,你可以通过迭代算法完成吗? 来源:力…

589. N 叉树的前序遍历(javascript)589. N-ary Tree Preorder Traversal

给定一个 n 叉树的根节点 root ,返回 其节点值的 前序遍历 。 n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。 Given the root of an n-ary tree, return the preorder traversal of its n…

python中while用法

python中while用法 例子&#xff1a; a1 while a<10:print(a)a2输出结果&#xff1a; 这段代码的意思是&#xff1a;a的初始值是1&#xff0c;判断条件是&#xff1a;如果a<10&#xff0c;则打印a&#xff0c;之后在返回的a的基础上加2&#xff0c;&#xff0c;如果a&…