ARP表、MAC表、路由表的区别和各自作用
文章目录
- ARP表、MAC表、路由表的区别和各自作用
- 同一网络内:
- ARP表
- request - 请求
- reply - 响应
- MAC地址
- 在同一网络内,交换机如何工作?
- 不同网络
- 路由表
- 不同网络通信流程
- PC1到路由器
- 路由器到PC2
- 流程图
- 简短总结
ARP表、MAC表、路由表的区别和各自作用
拓扑图如下:
同一网络内:
ARP作用: 让发送方知道目标的MAC地址, 不管是发给同一网络内的PC终端还是路由器, 均需要知道对方的MAC地址
ARP表
ARP协议: 2种类型的报文
请求时是广播, 响应时是单播
request - 请求
当PC1作为发送方,PC2作为接收方时:
源MAC地址 | 已知 |
---|---|
源IP地址 | 已知(假设是PC1: 192.168.1.1) |
目标MAC | FFFF-FFFF-FFFF(广播MAC地址: 代表网络内的所有节点) |
目标IP | 已知 (假设是PC2: 192.168.1.2) |
当第一次发送时, 路由器是不会接受该数据包的, 因为数据包在解封装时, 会先检查第二层MAC地址, 再检查第三层IP地址, MAC地址符合,但是IP地址不符合,因此,最终只有PC2能够接受该数据包
reply - 响应
PC2回复PC1:
源MAC地址 | 已知 |
---|---|
源IP地址 | 已知(假设是PC1: 192.168.1.2) |
目标MAC | 已知 |
目标IP | 已知 (假设是PC2: 192.168.1.1) |
PC1会将收到的PC2的MAC地址会存放在自己的ARP缓存表中, PC1的ARP缓存表如下图:
同时PC2也会记录PC1传来的MAC地址,PC2的ARP缓存表如下图:
ARP缓存表有生存时间, 主要目的是为了确保缓存表中的信息是最新的和有效的。
什么样的设备有ARP表: 只要这个设备需要充当发送方或者是接收方时
PC机, 路由器有ARP表
开始时,路由器R1没有PC1的MAC地址:
PC1在ping 192.168.1.254(R1)之后,R1则记录了PC1的mac地址:
每一条ARP记录的生存时间(EXIPRE)如上图 20 min
交换机也可以有ARP表:
只不过是空的, 尽管发送的请求要经过交换机, 但是当给交换机配置了IP地址, PC1去ping之后, 交换机就有了APR表,这里就不展示了
因此, 在同一网络中,只要某个设备充当发送方或者是接收方时,该设备就会有ARP表
MAC地址
在同一网络内,交换机如何工作?
交换机存储的是MAC地址表:
交换机在收到数据帧(Frame)时, 会检查MAC地址表
- 有表, 按表转发
- 没表, 泛洪(向除源端口其他所有端口发送)
不同网络
路由表
实现跨网络通信需要路由,路由存在路由表里面
当ping另外一个网络的终端时, 本设备可以根据IP和子网掩码判断出目的ip地址是跨网络通信, 因此本设备(主机)也应该有路由表, 其中第一条为默认路由, 使用route PRINT
命令查看本机路由表, 模拟器看不了,只能在本机上查看
注意
: 因此并不是只有路由器才会有路由表
配置网关就相当于配置默认路由
不同网络通信流程
PC1在进行跨网络通信时,需要先将包发送给本网络内的路由器, 那PC1是如何知道要发送给路由器的呢? 路由器又是如何知道要将该数据包发送给PC2的呢?
PC1到路由器
- 确定目的网络: 当发送数据时, PC1会先检查目的IP地址是否与自己在同一网络
- 使用路由表: 当PC1发现是跨网络通信时, 因为给PC1配置了网关==(192.168.1.254), 也就是相当于配置了默认路由(因此主机也是有路由表的==)因此PC1会使用其路由表来确定下一跳将包发送给路由器, 那么问题来了 => 在通信时,发送方要知道接收方的IP地址和MAC地址
- 但是现在PC1知道要发送给路由器, 但是现在不知道路由器的MAC地址(默认开始时PC1的ARP表为空)
- 解析路由器MAC地址: 因此PC1会发送一个ARP请求广播到本地网络,以获取路由器的MAC地址
- 路由器收到APR请求后, 以单播形式发送ARP响应报文给PC1
此时PC1中的ARP缓存表中记录了路由器的MAC地址
- 这样PC1就可以构建包含路由器MAC地址的以太网帧,并将数据包发送给路由器,数据包格式如下图:
其中数据链路层
记录了源MAC地址(即主机)
,目的MAC地址(即路由器)
, 而网络层
记录了源IP地址(即主机)
,目的IP地址(即PC2)
,从而将数据包发送给了路由器,接下来就有路由器进行转发即可
路由器到PC2
- 路由器接收到数据包后,会查看路由表来确定
下一跳地址
和转发接口
, 也就是判断将该数据包发送给哪个网段内
的主机。 - 确认网段后, 路由器也要先
查看ARP表
, 看是否有目标ip对应的MAC地址, 如有就进行发送, 没有,则先进行APR广播来获取目标主机的MAC地址, 最后再将数据包发送给目标主机PC2
流程图
简短总结
在同一网络内,为了获取目标的MAC地址,使用ARP协议。ARP通过广播请求和单播响应来实现这一过程。数据封装遵循OSI七层模型,从应用层到物理层依次封装;解封装则相反。首次通信时,设备通过ARP请求学习目标MAC地址并缓存至ARP表中,后续通信直接查表。交换机根据MAC地址表转发帧,未找到记录时采用泛洪方式,并定期刷新MAC表以防止攻击。对于不同网络间的通信,则需借助路由器及其路由表完成跨网传输。
相关文章:

ARP表、MAC表、路由表的区别和各自作用
文章目录 ARP表、MAC表、路由表的区别和各自作用同一网络内:ARP表request - 请求reply - 响应 MAC地址在同一网络内,交换机如何工作? 不同网络路由表不同网络通信流程PC1到路由器路由器到PC2流程图 简短总结 ARP表、MAC表、路由表的区别和各自作用 拓扑图如下: 同一网络内:…...

Android 使用OpenGLES + MediaPlayer 获取视频截图
概述 Android 获取视频缩略图的方法通常有: ContentResolver: 使用系统数据库MediaMetadataRetriever: 这个是android提供的类,用来获取本地和网络media相关文件的信息ThumbnailUtils: 是在android2.2(api8)之后新增的一个,该类为…...

浏览器的事件循环机制
浏览器和Node的事件循环机制 引言浏览器的事件循环机制 引言 由于JS是单线程的脚本语言,所以在同一时间只能做一件事情,当遇到多个任务时,我们不可能一直等待任务完成,这会造成巨大的资源浪费。为了协调时间,用户交互…...

Z2400032基于Java+Mysql+SSM的校园在线点餐系统的设计与实现 代码 论文
在线点餐系统 1.项目描述2. 技术栈3. 项目结构后端前端 4. 功能模块5. 项目实现步骤注意事项 6.界面展示7.源码获取 1.项目描述 本项目旨在开发一个校园在线点餐系统,通过前后端分离的方式,为在校学生提供便捷的餐厅点餐服务,同时方便餐厅和…...
k8s使用的nfs作为sc。
k8s使用的nfs作为sc。 当前出现一个问题: 1.有一个pod他是通过流进行文件解压并写入到nfs服务器对应的目录中。 2.一个大压缩包下有20多个压缩包,递归解压。解压完成后应该是20多个文件夹,文件夹下有.json文件。 3.pod中的程序解压后去找以.j…...

linux下Qt程序部署教程
文章目录 [toc]1、概述2、静态编译安装Qt1.1 安装依赖1.2 静态编译1.3 报错1.4 添加环境变量1.5 下载安装QtCreator 3、配置linuxdeployqt环境1.1 在线安装依赖1.2 使用linuxdeployqt提供的程序1.3 编译安装linuxdeployqt 4、使用linuxdeployqt打包依赖1.1 linuxdeployqt使用选…...
tp6 合成两个pdf文件(附加pdf或者替换pdf)
最近在做项目有个需求,项目中需要根据设置的html合同模板自动生成PDF合同供客户下载签署,并根据回传的已签署合同尾页来替换原来未签署合同的尾页,合成新的已签署合同文本。 读取两个PDF文件并合成的 具体代码记录如下: use set…...

工作:三菱PLC防止程序存储器爆满方法
工作:三菱PLC防止程序存储器爆满方法 一、防止程序存储器爆满方法1、编程时,添加行注释时,记得要选“外围”,这样不会占用PLC程序存储器内存;2、选择“外围”的注释,前面会有个*星号,方便检查 二…...
jmeter 获取唯一全局变量及多线程读写的问题
一、jmeter 获取唯一ID号全局变量 在JMeter中获取唯一ID号并设置为全局变量,可以通过以下几种方法实现: 使用JMeter内置的UUID函数: JMeter提供了一个内置的函数__UUID,可以生成一个随机的UUID,这个UUID是全局唯一的。…...

掌握 Spring Boot 中的缓存:技术和最佳实践
缓存是一种用于将经常访问的数据临时存储在更快的存储层(通常在内存中)中的技术,以便可以更快地满足未来对该数据的请求,从而提高应用程序的性能和效率。在 Spring Boot 中,缓存是一种简单而强大的方法,可以…...

动手学深度学习10.5. 多头注意力-笔记练习(PyTorch)
本节课程地址:多头注意力代码_哔哩哔哩_bilibili 本节教材地址:10.5. 多头注意力 — 动手学深度学习 2.0.0 documentation 本节开源代码:...>d2l-zh>pytorch>chapter_multilayer-perceptrons>multihead-attention.ipynb 多头注…...
13 设计模式之外观模式(家庭影院案例)
一、什么是外观模式? 1.定义 在日常生活中,许多人喜欢通过遥控器来控制家中的电视、音响、DVD 播放器等设备。虽然这些设备各自独立工作,但遥控器提供了一个简洁的界面,让用户可以轻松地操作多个设备。而这一设计理念正是 外观模…...

单片机学习笔记 12. 定时/计数器_定时
更多单片机学习笔记:单片机学习笔记 1. 点亮一个LED灯单片机学习笔记 2. LED灯闪烁单片机学习笔记 3. LED灯流水灯单片机学习笔记 4. 蜂鸣器滴~滴~滴~单片机学习笔记 5. 数码管静态显示单片机学习笔记 6. 数码管动态显示单片机学习笔记 7. 独立键盘单片机学习笔记 8…...
Web安全基础实践
实践目标 (1)理解常用网络攻击技术的基本原理。(2)Webgoat实践下相关实验。 WebGoat WebGoat是由著名的OWASP负责维护的一个漏洞百出的J2EE Web应用程序,这些漏洞并非程序中的bug,而是故意设计用来讲授We…...

Zookeeper集群数据是如何同步的?
大家好,我是锋哥。今天分享关于【Zookeeper集群数据是如何同步的?】面试题。希望对大家有帮助; Zookeeper集群数据是如何同步的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Zookeeper集群中的数据同步是通过一种称为ZAB(Zo…...

SpringCloud框架学习(第六部分:Sentinel实现熔断与限流)
目录 十四、SpringCloud Alibaba Sentinel实现熔断与限流 1.简介 2.作用 3.下载安装 4.微服务 8401 整合 Sentinel 入门案例 5.流控规则 (1)基本介绍 (2)流控模式 Ⅰ. 直接 Ⅱ. 关联 Ⅲ. 链路 (3࿰…...

动态规划-----路径问题
动态规划-----路径问题 下降最小路径和1:状态表示2:状态转移方程3 初始化4 填表顺序5 返回值6 代码实现 总结: 下降最小路径和 1:状态表示 假设:用dp[i][j]表示:到达[i,j]的最小路径 2:状态转…...
Rust循环引用与多线程并发
循环引用与自引用 循环引用的概念 循环引用指的是两个或多个对象之间相互持有对方的引用。在 Rust 中,由于所有权和生命周期的严格约束,直接创建循环引用通常会导致编译失败。例如: // 错误的循环引用示例 struct Node {next: Option<B…...

东方隐侠网安瞭望台第8期
谷歌应用商店贷款应用中的 SpyLoan 恶意软件影响 800 万安卓用户 迈克菲实验室的新研究发现,谷歌应用商店中有十多个恶意安卓应用被下载量总计超过 800 万次,这些应用包含名为 SpyLoan 的恶意软件。安全研究员费尔南多・鲁伊斯上周发布的分析报告称&…...

底部导航栏新增功能按键
场景需求: 在底部导航栏添加power案件,单击息屏,长按 关机 如下实现图 借此需求,需要掌握技能: 底部导航栏如何实现新增、修改、删除底部导航栏流程对底部导航栏部分样式如何修改。 比如放不下、顺序排列、坑点如…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...