计算机网络:网络层 —— IPv4 地址与 MAC 地址 | ARP 协议

文章目录

        • IPv4地址与MAC地址的封装位置
        • IPv4地址与MAC地址的关系
        • 地址解析协议ARP
          • 工作原理
          • ARP高速缓存表

IPv4地址与MAC地址的封装位置

在数据传输过程中,每一层都会添加自己的头部信息,最终形成完整的数据包。具体来说:

  • 应用层生成的应用程序数据被称为应用层报文
  • 当数据传递到运输层时,会被加上运输层首部,形成运输层段
  • 接下来,网际层会在前面的基础上再添加IP首部,形成IP数据报
  • 最后,在网络接口层,数据会被封装成带有MAC地址数据帧,并通过物理链路进行传输。

在整个过程中,数据从高层向下层层封装,直至最底层的物理信号流。反向传输时,则是逐层解封,恢复成最初的应用层数据。

![[IPv4地址与MAC地址的封装位置.png]]

  • 在数据包的传送过程中,数据包的源IP地址和目的IP地址保持不变,因为IP地址是用来识别网络中的逻辑位置,而不是物理位置。

  • 在数据包的传送过程中,数据包的源MAC地址和目的MAC地址逐链路(或逐网络)变化

![[IPv4地址与MAC地址的变化.png]]

当数据包从一个局域网(LAN)移动到另一个局域网时,其源 MAC 地址和目的 MAC 地址会发生改变。例如,从 H1 发出的数据包最初的源 MAC 地址是 MAC1,到达 R1 时,源 MAC 变成了 MAC3;然后从 R1 转发到 R2 时,源 MAC 变成 MAC4,以此类推,直到达到目的地 H2,此时源 MAC 是 MAC6。

网络通信的本质IP 地址用于跨网络的寻址和路由,而 MAC 地址用于同一局域网内的直接通信。每次数据包跨越不同的局域网边界时,都需要重新确定 MAC 地址,以适应新环境下的通信需求。

IPv4地址与MAC地址的关系

如果仅使用 MAC 地址进行通信,则会出现以主要问题:

  • 因特网中的每台路由器的路由表中就必须记录因特网上所有主机和路由器各接口的MAC地址

  • 手工给各路由器配置路由表几乎是不可能完成的任务,即使使用路由协议让路由器通过相互交换路由信息来自动构建路由表,也会因为路由信息需要包含海量的MAC地址信息而严重占用通信资源

  • 包含海量 MAC 地址的路由信息需要路由器具备极大的存储空间,并且会给分组的查表转发带来非常大的时延

因特网的网际层使用IP地址进行寻址,就可使因特网中各路由器的路由表中的路由记录的数量大大减少,因为只需记录部分网络的网络地址,而不是记录每个网络中各通信设备的各接口的 MAC 地址。

路由器收到 IP 数据报后,根据其首部中的目的IP地址的网络号部分,基于自己的路由表进行查表转发

查表转发的结果可以指明 IP 数据报的下一跳路由器的 IP 地址,但无法指明该 IP 地址所对应的 MAC 地址。因此,在数据链路层封装该 IP 数据报成为帧时,帧首部中的目的 MAC 地址字段就无法填写,该问题需要使用网际层中的地址解析协议ARP来解决

地址解析协议ARP

地址解析协议(ARP,Address Resolution Protocol)是一种用于将网络层(IP层)的32位IP地址解析为数据链路层(物理层)的48位MAC地址的协议。用于解决同一局域网内,主机之间或路由器的 IP 地址和 MAC 地址的映射问题,不能跨网络使用

![[地址解析协议ARP范围.png]]

  • 由于 ARP 协议的主要用途是从网际层使用的IP地址解析出在数据链路层使用的MAC地址。因此,有的教材将 ARP 协议划归在网际层,而有的教材将 ARP 协议划归在数据链路层。这两种做法都是可以的。

  • ARP 协议还有其他类型的报文,例如用于检查 IP 地址冲突的“无故ARP”(Gratuitous ARP)

  • 由于 ARP 协议很早就制定出来了(1982年11月)当时并没有考虑网络安全问题。因此,ARP 协议没有安全验证机制,存在ARP欺骗和攻击等问题

  • ARP 高速缓存表用来记录 IP 地址与 MAC 地址的对应关系

工作原理
  1. 请求广播

    • 当一个设备(发送方)需要发送数据包给另一个设备(目标方)时,它首先检查本地ARP缓存中是否有目标方的MAC地址。

    • 如果没有,发送方会广播一个ARP请求,ARP请求报文包含发送方的IP地址和MAC地址,以及目标方的IP地址

主机A 发送广播 ARP 请求

![[ARP广播请求.png]]

  • 主机A 想要与 主机B 通信,但它只知道 主机B 的 IP 地址(192.168.0.2),不知道其 MAC 地址。

  • 主机A 构造一个 ARP 请求报文,其中包含它自己的 IP 地址(192.168.0.1)和 MAC 地址(00-0C-85-72-AB-72),以及它想知道的目标 IP 地址(192.168.0.2)。

  • 这个 ARP 请求报文是一个广播报文(目的 MAC 地址设置为 FF-FF-FF-FF-FF-FF),它会被发送到同一个局域网(LAN)中的所有设备

  1. ARP响应

    • 网络上的所有设备都会收到广播ARP请求,网卡将广播帧交付上层处理,但只有目标方(即 IP 地址与 广播请求中的目的 IP 地址相同)会响应。

    • 目标方检查请求中的 IP 地址是否与其自身的 IP 地址匹配,如果匹配,则发送一个ARP响应单播,需要封装在以太网帧中发送),ARP响应报文包含目标方的MAC地址

主机 B 单播 ARP 响应

![[单播ARP响应.png]]

  • 主机B 看到 ARP 请求中的目标 IP 地址是自己,于是构建一个 ARP 响应报文,其中包括它自己的 IP 地址(192.168.0.2)和 MAC 地址(00-E0-F9-A3-43-77)。

  • 主机B 将这个 ARP 响应报文单播发送回 主机A,而不像 ARP 请求那样是广播。

  1. 更新ARP缓存

    • 发送方收到ARP响应后,将目标方的IP地址和MAC地址的对应关系存储在本地ARP缓存中。

更新 ARP 缓存:

![[更新ARP缓存.png]]

  • 主机A 接收到 主机B 的 ARP 响应后,就会将 主机B 的 IP 地址和 MAC 地址记录在其 ARP 高速缓存表中,这样以后就可以直接用 MAC 地址与 主机B 通信,而不需要再次广播 ARP 请求。

通过这个过程,主机A 成功获得了 主机B 的 MAC 地址,从而能够在局域网中实现两台设备间的通信。

ARP高速缓存表

ARP高速缓存表(ARP Cache)是一个临时表,用于存储最近IP地址到硬件地址(即MAC地址)之间的映射记录。这个缓存表对于提高网络通信效率非常重要,因为它允许设备在发送数据前快速查找目标设备的MAC地址,而无需每次都进行ARP请求。

ARP 高速缓存表中的记录分为动态记录静态记录

  • 动态记录:由主机通过 ARP 协议自动获取到的,随时间推移自动添加和删除。因为ARP高速缓存表中的IP地址与MAC地址的对应关系并不是永久不变的。例如,主机更换了一块新网卡。

    • 当设备需要解析一个 IP 地址到 MAC 地址的映射时,如果 ARP 缓存表中不存在这个映射,设备会发送 ARP 请求并等待响应。一旦收到响应,这个映射就会被添加到 ARP 缓存表中。

    • 每个动态 ARP 缓存项都有一个生存时间TTL,Time to Live)(默认为两分钟),当 TTL 为 0 时,这个缓存项就会被删除。在 Windows 系统中,TTL通常不超过 10 分钟。

  • 静态记录:静态 ARP 缓存条目是永久性的,不会随时间自动删除。这些条目可以通过 TCP/IP 工具手动添加和删除。静态 ARP 缓存条目通常用于禁止节点发送对常用本地 IPv4 地址(如路由器和服务器的 IPv4 地址)的 ARP 请求。不同操作系统下的生命周期不同,例如系统重启后不存在或系统重启后依然有效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/457190.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java--反射机制

前言: 反射与之前的知识的区别 1.面向对象中创建对象,调用指定结构(属性、方法)等功能,可以不使用反射,也可以使用反射。请问有什么区别? 不使用反射,我们需要考虑封装性。比如:出了自定义类之后,就不能…

WPF+MVVM案例实战(六)- 自定义分页控件实现

文章目录 1、项目准备2、功能实现1、分页控件 DataPager 实现2、分页控件数据模型与查询行为3、数据界面实现 3、运行效果4、源代码获取 1、项目准备 打开项目 Wpf_Examples,新建 PageBarWindow.xaml 界面、PageBarViewModel.cs ,在用户控件库 UserControlLib中创建…

电池的主被动均衡

只有串联的电池需要进行电压均衡,并联的电池由于电压一致,所以并不需要进行均衡: 被动均衡有一个很明显的特征就是会看到很多大电阻,串联在MOS和电池之间:下图中的保护板就是被动均衡板子以及它的原理图: …

软硬件开发面试问题大汇总篇——针对非常规八股问题的提问与应答

软硬件开发,从微控制器编程到复杂的嵌入式系统开发,离不开下位机、操作系统、上位机等,涵盖范围很广。 如何快速一行代码操作硬件寄存器 直接操作硬件寄存器的代码通常依赖于特定平台和编程语言。在 C 或 C 中,常见的方法是使用指…

WORFBENCH:一个创新的评估基准,目的是全面测试大型语言模型在生成复杂工作流 方面的性能。

2024-10-10,由浙江大学和阿里巴巴集团联合创建的WORFBENCH,一个用于评估大型语言模型(LLMs)生成工作流能力的基准测试。它包含了一系列的测试和评估协议,用于量化和分析LLMs在处理复杂任务时分解问题和规划执行步骤的能力。WORFBE…

智慧停车场导航系统架构及反向寻车系统解决方案

一、系统概述: 随着当前室内定位导航技术在大型公共场所如政务中心、商业综合体、车站中的应用越来越多,人们对智慧停车场的需求也日益凸显出来,并且智慧停车场对大型公共场所智慧化的整体建设起到重要作用。如何更有效提高停车效率&#xf…

如何加密电脑磁盘?电脑本地磁盘加密方法介绍

随着信息技术的不断发展,电脑磁盘加密已经成为保护个人隐私和数据安全的重要手段。本文将介绍几种常见的电脑本地磁盘加密方法,帮助用户保护自己的数据安全。 文件夹只读加密专家 文件夹只读加密专家不仅可以加密电脑中的文件夹,还可以加密保…

Android 13 SystemUI 隐藏下拉快捷面板部分模块(wifi,bt,nfc等)入口

frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java createTileInternal(tileSpec)方法注释想隐藏的模块即可。

【C++进阶篇】——STL的简介

【C进阶篇】——STL的简介 1.什么是STL STL(standard template libaray-标准模板库):是C标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。 2.STL的版本 原始版本 Alexander Stepanov、Meng Lee 在…

redis集群配置

一、Redis集群的三种方式 Redis集群提供了三种分布式方案:主从模式:一个主节点和一个或多个从节点,主节点负责写操作,从节点负责读操作,实现读写分离,分担主节点的压力。哨兵模式:哨兵系统用于监…

【每日一题】LeetCode - 盛最多水的容器

给定一个长度为 n 的整数数组 height。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。要求找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 输入示例: height [1,8,6,2,5,4,8,3,7]输出: 4…

Python依赖库的几种离线安装方法

Python依赖库的几种安装方法 python经常需要安装一些依赖库,但是有时候环境可以连通python源,有时不能连通需要离线安装(安装单个库包或者整个库环境),使用pip的如下方法可以相对简单解决问题。 一、如何copy一个pyt…

Linux 端口占用 kill被占用的端口 杀掉端口

1、yum install lsof 2、输入netstat -tln,查看系统当前所有被占用端口 3、根据端口查询进程,输入lsof -i :9555,切记不要忘了添加冒号 4、 既然知道进程号了,那杀死当前进程就简单多了,直接 kill -9 PID 回车

如何通过企业架构蓝图引导企业实现数字化转型:构建与实施的全方位指南

在当今迅速变化的商业环境中,企业进行数字化转型已成为提升竞争力、优化运营的必要手段。企业架构蓝图(EA Blueprint)作为指导企业数字化转型的战略工具,不仅提供了系统化的设计和规划路径,还帮助企业在技术与业务目标…

【读书笔记·VLSI电路设计方法解密】问题26:什么是漏电流问题

功耗现已成为半导体行业面临的主要技术难题。在当前基于CMOS的VLSI电路中,有两种主要的功耗来源:动态功耗和静态功耗。动态功耗来源于晶体管的切换以及芯片上数百万逻辑门输出端的电容反复充电和放电,是芯片为产生有效输出所消耗的能量。静态功耗则指即使在晶体管关闭时也会…

法治在沃刷积分-刷文章浏览数

最近有一个任务,需要通过浏览文章来获取积分,一个个手点文章太麻烦,专业的事情还得专业的来。 法1:模拟发包 抓包发现,是通过接口来使积分增长,那直接模拟发包即可。 至于info_id的获取,可以通…

2024年全球 MoonBit 编程创新赛-零基础早鸟教程-使用wasm4八小时开发井子棋小游戏

前言 本篇文章主要分享 “2024年全球 MoonBit 编程创新赛 游戏赛道”参赛过程中九宫棋游戏的开发技巧和心得。以此抛砖引玉。首先介绍下 MoonBit。 月兔语言 MoonBit 是一个用于云计算和边缘计算的 WebAssembly 端到端的编程语言工具链。 您可以访问 https://try.moonbitlang.…

文本预处理操作简述

自然语言处理 (NLP) 是数据科学的一个分支,主要处理文本数据。除了数值数据外,文本数据也广泛可用,用于分析和解决业务问题。然而,在使用数据进行分析或预测之前,处理数据非常重要。 我们执行文本预处理来准备用于模型…

mysql的卸载与安装

一、mysql的卸载 1、用管理员模式的打开cmd,我的服务名是mysql。 net stop 【你的服务名】 sc delete 【你的服务名】 2、将下图中有包含‘bin’目录,‘data’目录等等的这个总目录删掉 如图我的目录是:mysql-5.7.28-winx64 3、删除mysql的隐…

代码随想录算法训练营Day39 | 卡玛网-46.携带研究材料、416. 分割等和子集

目录 卡玛网-46.携带研究材料 416. 分割等和子集 卡玛网-46.携带研究材料 题目 卡玛网46. 携带研究材料(第六期模拟笔试) 题目描述: 小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成…