当前位置: 首页 > news >正文

计算机网络:网络层 —— 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.mrgr.cn/news/59048.html

相关文章:

  • Unity SRP学习笔记(一)
  • MemoRAG:重新定义长期记忆的AI问答模型
  • 【计算机网络 - 基础问题】每日 3 题(五十八)
  • 智驭4A安全运维审计系统
  • 关于在vue2中接受后端返回的二进制流并进行本地下载
  • 【JAVA】第三张_Eclipse下载、安装、汉化
  • PSI-BLAST生成的PSSM文件转换为pssm_dict字典
  • leetcode hot100【LeetCode 128. 最长连续序列】java实现
  • 首发CSP-J2题解
  • 【已解决】编译Linux内核报错multiple definition of yylloc
  • 大模型训练、微调数据集
  • linux网络编程6——基于UDP的可靠传输协议KCP/QUIC
  • Minio文件服务器:安装
  • [LeetCode] 77. 组合
  • shodan1,shodan简介和kali下的使用
  • 【Linux】线程池详解及其基本架构与单例模式实现
  • [LeetCode] 494. 目标和
  • 【动态规划】【简单多状态dp问题】买卖股票相关问题(冷冻期、手续费、限制次数)
  • 基于SSM农业信息管理系统的设计
  • python曲线拟合通用代码
  • 数据结构(java)——数组的构建和插入
  • 【网络安全】一文讲清Zero Trust(零信任)安全
  • 【Python爬虫+数据分析】详细教学知网文献基本信息爬取方式(附详细教程+完整代码)
  • ctfshow的sql注入解题思路171-211
  • 文言编程:古老文字与现代编程的融合
  • 禾川SV-X2E A伺服驱动器参数设置——脉冲型