哈工大计算机网络课程局域网详解之:MAC地址与ARP协议

news2024/12/26 21:15:16

哈工大计算机网络课程局域网详解之:MAC地址与ARP协议

文章目录

  • 哈工大计算机网络课程局域网详解之:MAC地址与ARP协议
    • MAC地址
    • ARP:地址解析协议
    • 寻址:从一个LAN路由至另一个LAN

MAC地址

在介绍MAC地址前,首先回顾一下之前在网络层中介绍过的IP地址。

在IP地址中,以IPv4为例,IP地址是32位来表示,作为这样一个地址:

  • 是用来标识网络中网路设备的接口的,比如主机的网口,路由器的接口等。
  • 用于标识网络层(第三层)分组,支持分组转发。

作为MAC地址和网络层的IP地址有很大差异,MAC地址在现实网络中也往往被称为物理地址、LAN地址、以太网地址等。 需要注意的是,称为物理地址并不代表它是物理层的,而是在数据链路层被使用的。 由于MAC地址常常使用在以太网或者局域网这样的网络中,因此也被称为LAC地址或以太网地址。

MAC地址的作用:

MAC地址作用于数据链路层,用于局域网内标识一个帧从哪个接口发出,到达哪个物理相连的其他接口。

作为现在的网络中,尤其是最常见的一些局域网中,使用的最多的MAC地址形式是48比特MAC地址。一般在网卡出厂时,就会在ROM中固化一个唯一的MAC地址,从而保证每一块网卡拥有的MAC地址是唯一的。有时也可以软件设置和修改,但是修改后仍然需要帮助在所在的局域网内MAC地址是唯一的。

MAC地址的形式比如:1A-2F-BB-76-09-AD,把48位比特分成了6个字节,用16进制来书写。

MAC地址的重要意义,也就在于局域网中的每块网卡都有一个唯一的MAC地址。这样的话,在一个局域网内,构造数据帧时,就可以利用这个唯一的MAC地址来标识这个数据帧从哪里发出,目的地址是哪里。

在这里插入图片描述

为了保证每个网卡都拥有的是唯一的MAC地址,显示是需要有一种机制来管理的。具体来说,MAC地址的管理是由国际组织IEEE统一管理与分配。

任何一个网卡生产商需要去IEEE组织购买MAC地址空间(前24比特)。而后24比特则由厂商自行为每个网卡分配地址。

有了这样的机制之后,才可以保证在全球任何一个地点,购买任何一个网卡生产商生产的网卡,其MAC地址一定是唯一的。

为了更好的理解MAC地址,我们与前面介绍过的IP地址做个类比:

  • MAC地址:像身份证号。每个人都有一个唯一的身份证号。
  • IP地址:邮政地址。邮政地址有一个归属关系或者层次关系,比如省-市-县-街道等构成。

因此,有时也可以将MAC地址理解为一种“平面“地址,所谓“平面”地址,就是标识所有地址空间在一个平面内,在这个平面内,每个地址都有其唯一性,没有所谓的区域划分。所以是可“携带”的,即一块网卡,无论拿到任何地方,原则上都可以确定它的MAC地址是唯一的。

但是IP地址不一样,IP地址是层次地址,是不可“携带”的。因为IP地址是归属某一个网络的,之前我们讲过,IP地址前缀表示子网,剩余位数才表示子网内的主机号。因此,如果单纯把IP地址拿到另一个子网去,实际上是无效的,因为它可能不归属于当前子网。

当然,更重要,也是最基本的差异在于,IP地址是一个网络层地址,而MAC地址是一个数据链路层地址,用作的目的是不同的(IP地址用于标识一个数据报,MAC地址用于标识一个数据帧)。

ARP:地址解析协议

作为IP地址与MAC地址之间的关系,实际上就涉及到一个非常重要的协议把两者关联起来。比如,对于主机的网卡来说,它会有一个唯一的MAC地址,同时,它又是关联到某一个接口的,因此也会有一个网络层的IP地址。

在这里插入图片描述

那么如何将两者关联起来呢?也就是说,在同一个局域网(LAN)内,如何在已知目的接口IP地址的前提下,确定其MAC地址呢?

为了解决上面的问题,在现代网络中,通常都采用这样一种做法:

  • 每一个主机,包括路由器,都会维护一个ARP表。
  • ARP表存储某些LAN结点的IP/MAC地址映射关系。
  • 典型的信息比如:<IP地址;MAC地址;TTL>
  • TTL(Time to Live):表示经过这个时间之后该映射关系会被遗弃(典型值为20min)。目的是为了更新旧数据,使得有新的映射关系时,能够更新ARP表。

下面给出一个示例性的过程,来便于理解ARP地址解析的工作过程:

  • 当局域网中某一结点A想要给同一局域网内的结点B发送IP数据报。此时结点A知道目的主机(结点B)的IP地址,但不知道MAC地址。正常情况下,结点A在将IP数据报封装到数据帧之前,会去检索本地结点(结点A)的ARP表。

    假设结点A没有在本地的ARP表中找到结点B的IP地址与MAC地址的映射关系,此时就利用到了ARP协议。

  • 此时,结点A就会利用ARP协议,在局域网内,广播ARP协议查询分组。这个查询分组实际上要封装到链路层的数据帧中,广播到其他结点。查询分组中就包含了结点B的IP地址。

    在链路层广播分组,比如在以太网,实际上就是将48位目的MAC地址全置为1:FF-FF-FF-FF-FF-FF。

  • 数据帧广播出去后,局域网内的所有结点都会收到该ARP查询

  • 收到该ARP查询分组之后,只有结点B发现查询的IP地址与自己的IP地址是匹配的,此时,结点B就会向结点A返回响应,应答自己的MAC地址。这个响应也是封装成数据帧进行传输,此时的数据帧传输应该就是单播的形式,只向结点A发送应答。

  • 结点A在收到ARP响应之后,会在其ARP表中,缓存结点B的IP地址->MAC地址对的映射关系。

通过上面的过程我们也可以看出来,ARP协议是一个“即插即用”的协议。当一个新的主机接入局域网时,本地的ARP表通常来说都是空的,而ARP表的不断丰富和更新,都是在通信过程中不断完善的。因此,作为ARP协议,在整个运行过程中,是无需网络管理员或者用户进行配置的。

上述示例性过程展示的是在同一个局域网中结点间利用ARP协议获取IP地址->MAC地址的映射关系。如果两个结点不是在同一个局域网内,要如何处理呢?

寻址:从一个LAN路由至另一个LAN

考虑这样的一个网络,A和B所在的两个子网通过路由器R互联。

在这里插入图片描述

通信过程:A通过路由器R向B发送数据报,在这一通信过程中我们重点关注寻址方式。这里寻址包括两层:IP地址(数据报中)的寻址过程和MAC地址(数据帧中)的寻址过程。

  • 假设结点A已经获取到目的结点B的IP地址。通过应用层域名解析,或者用户指定IP访问的方式,获取目的IP地址。
  • 假设结点A也已经知道第一跳路由器R左侧接口的IP地址。通过本机配置的默认网关来获取。
  • 假设结点A知道第一跳路由器R左侧接口的MAC地址。通过上面介绍过的ARP协议广播查询分组获取的。

有了上面的假设已知条件后,我们进一步来分析此时跨局域网下的ARP协议请求过程。

结点A构造IP数据报,其中源IP地址是A的IP地址,目的IP地址是结点B的IP地址。

网络层封装好的IP数据报会进一步在数据链路层封装成数据帧来传输。因此结点A根据网络层封装好的IP数据报,构造链路层数据帧,其中源MAC地址是A的MAC地址,目的MAC地址是路由器R左侧接口的MAC地址,携带A到B的IP数据报。

在这里插入图片描述

该数据帧发送后,被目的MAC地址的路由器R接收,此时数据帧从结点A传输到路由器R。路由器R左侧接口接收到该数据帧后,完成链路层的相关功能后,如果该数据帧没有问题的话,就会把该数据帧封装的网络层的IP数据报提取出来,交给上层的IP协议进行处理。进一步的,在网络层,路由器R会根据目的IP地址查询路由转发表,从而将该IP数据报转发到下一跳链路上去,图中就是路由器R的右侧接口。

在右侧的接口上,作为路由器,需要进一步的将该IP数据报封装到一个新的数据帧里去。在这个新的数据帧里,源MAC地址是路由器R右侧接口的MAC地址,目的MAC地址是B的MAC地址,用来封装A到B的IP数据报。

在这里插入图片描述

该新的数据帧在右侧的局域网中传输之后,就会到达目的主机B。B在链路层收到该数据帧之后,也要完成链路层功能,之后如果发现数据帧没有问题,就会提取出这个数据帧封装的IP数据报,交给上层的IP协议。IP协议完成IP层的功能之后,再把IP数据报封装的传输层数据段Segment提取出来,交给上层传输层。传输层处理完后,再进一步交付给上层应用层,交付给主机B的具体应用进程进行处理。

以上就是当两个不在同个局域网内的主机间需要通信时如何进行寻址的过程。在整个寻址过程中,显然,A不是直接利用ARP协议直接获取B的MAC地址的。而是将每个局域网都当作一个独立的模块,在每个局域网内再根据ARP协议来对MAC地址寻址。

具体来说,其中一个局域网内的源主机通过路由发现它需要通信的目的主机不在同一个子网内,此时根据网络层路由,就会先把该IP数据报封装成数据帧,发给子网对应的默认网关。因此,实际上,在第一阶段源主机所在子网内,是根据ARP协议先获取了默认网关连接到该子网的对应接口的MAC地址。路由器接收到该数据帧后,再根据数据帧中封装的IP地址,确定下一跳转发接口的MAC地址。同时,它也利用ARP协议获取转发接口所在子网的目的结点MAC地址(如果目的结点是最终主机,则是目的主机的MAC地址,如果是路由器,则仍然是路由器对应接口的MAC地址)。进而封装成新的数据帧,发往下一个目的地,依次类推,最终到达目的主机。

经过上述介绍我们也能发现,作为ARP协议,在网络的通信过程中是非常重要的。它构建起了网络层的IP地址和数据链路层的MAC地址的映射关系。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SAP ABAP 实现数据库表行项目和程序加解锁功能

1.SAP ABAP 实现数据库表行项目加解锁功能 实现效果&#xff1a; 当一个数据库表以某字段为关键字段的数据被锁定时&#xff0c;同一时间其他程序无法修改改表内被锁定的数据&#xff0c;除非被解锁或退出程序。 1.事务代码&#xff1a;SE11 创建锁对象。PS&#xff1a;命名…

【计组】不同进制数之间的相互转换

前言 1、推荐在线进制转换器&#xff1a;&#xff08;都还不错&#xff09; 在线进制转换 | 进制转换器 — 在线工具 (sojson.com) 在线进制转换器 | 菜鸟工具 (runoob.com) 在线进制转换 - 码工具 (matools.com) 2、进位计数法 &#xff08;1&#xff09;二进制&#xf…

JavaScript字符串和模板字面量

● 上节课我们说明&#xff0c;号可以当作字符串连接符号使用&#xff0c;例如 const firstName "Sun"; const job "技术分享博主"; const birthYear 1991; const year 2023;const sun "我叫" firstName ",是一个" (year - bi…

线性结构:队列

文章目录 队列定义队列应用热土豆问题打印任务 队列定义 队尾进&#xff0c;队头出 队列是一种有次序的数据集合&#xff0c;其特征是新数据项的添加总发生在一端(通常称为“尾rear”端&#xff09;而现存数据项的移除总发生在另一端&#xff08;通常称为“首front”端&#x…

刷题记录-2最短路径

考点&#xff1a; 图论-最短路-Dijkstra 解题&#xff1a; c #include <iostream> #include <vector> #include <queue> using namespace std; const long long inf 0x3f3f3f3f3f3f3f3fLL; const int num 3e52; struct edge {int from,to;long long w;e…

算法竞赛入门【码蹄集新手村600题】(MT1001-1020)

算法竞赛入门【码蹄集新手村600题】(MT1001-1020&#xff09; 目录MT1001 程序设计入门MT1002 输入和输出整型数据MT1003 整数运算MT1004 求余MT1005 输入和输出实型数据MT1006 实型数运算MT1007 平均分MT1008 圆球等的相关运算MT1009 公式计算MT1010 输入和输出字符型数据MT10…

【Visual Studio】Qt 在其他 cpp 文件中调用操作 ui 界面控件

知识不是单独的&#xff0c;一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏&#xff1a;Visual Studio。 还整了一个如何相互之间调用函数的文章&#xff0c;感兴趣可以看&#xff1a;【Visual Studio】Qt 在其他 cpp 文件中调用主工程下文件中的函数。 文章目录 …

第四章:包围体

第四章&#xff1a;包围体 引言-包围体&#xff08;1&#xff09;包围体测试和几何体测试&#xff08;2&#xff09;包围体测试的代价和作用&#xff08;3&#xff09;相交测试的优化&#xff08;4&#xff09;包围体相关章节和主旨 一、BV 期望特征1.1 有效的包围体1.2 包围体…

docker 网络配置详解

目录 1、docker网络模式 2、容器和容器之间是如何互通 3、容器之间互通 --link 3、自定义网络 4、不通网段的容器进行网络互通 1、docker网络模式 docker 网络模式采用的是桥接模式&#xff0c;当我们创建了一个容器后docker网络就会帮我们创建一个虚拟网卡&#xff0c;这…

Electron 学习_在进程之间通信

1.问题&#xff1a;Electron的主进程和渲染进程有着清楚的分工&#xff0c;并且不可互换。从渲染进程直接访问Node.js 接口&#xff0c;亦或者 从主进程访问HTML文档对象模型(DOM)都是不可能的 2.解决方法&#xff1a;使用进程间通信 (IPC) 可以使用 Electron 的ipcMain 模块和…

Redisson限流器RRateLimiter使用及源码分析

一、使用 使用很简单、如下 // 1、 声明一个限流器 RRateLimiter rateLimiter redissonClient.getRateLimiter(key);// 2、 设置速率&#xff0c;5秒中产生3个令牌 rateLimiter.trySetRate(RateType.OVERALL, 3, 5, RateIntervalUnit.SECONDS);// 3、试图获取一个令牌&#…

TCP首部格式【TCP原理(笔记五)】

文章目录 TCP首部格式源端口号&#xff08;Source Port&#xff09;目标端口号&#xff08;Destination Port&#xff09;序列号&#xff08;Sequence Number&#xff09;确认应答号&#xff08;Acknowledgement Number&#xff09;数据偏移&#xff08;Data Offset&#xff09…

Oracle 普通视图 (Oracle Standard Views)

视图&#xff08;views&#xff09;是一种基于表的"逻辑抽象"对象&#xff0c;由于它是从表衍生出来的&#xff0c;因此和表有许多相同点&#xff0c;我们可以和对待表一样对其进行查询/更新操作。但视图本身并不存储数据&#xff0c;也不分配存储空间。 本文只讨论普…

Linux下搭建pyqt5开发环境—基于Pycharm

防踩坑Tips&#xff1a; 1、不能学windows那样直接用pip安装PyQt5Designer和pyqt5-tools。这两个模块最根本的是用的windows的程序&#xff0c;linux上是运行不了的&#xff0c;特别是PyQt5Designer&#xff0c;会提示安装失败。 2、推荐在python环境安装同系统版本一致的pyq…

2023.7.16 第五十九次周报

目录 前言 文献阅读:跨多个时空尺度进行预测的时空 LSTM 模型 背景 本文思路 本文解决的问题 方法论 SPATIAL 自动机器学习模型 数据处理 模型性能 代码 用Python编写的LSTM多变量预测模型 总结 前言 This week, I studied an article that uses LSTM to solve p…

数据分析系统中的六边形战士——奥威BI系统

数据分析软件可以对收集的数据进行分析和报告&#xff0c;帮助企业获得更深入的数据洞察力&#xff0c;从而推动企业数字化运营决策&#xff0c;提高决策效率与质量。进入大数据时代&#xff0c;企业对数据分析软件的要求也在水涨船高&#xff0c;传统的数据分析软件显然已不能…

数据结构 单向链表(不循环)的基础知识和基础操作

头定义&#xff1a; typedef int datatype; typedef struct Node {//数据域存储数据datatype data;//指针域存储下一个地址struct Node *next; }*Linkelist; 创建节点 Linkelist create_node()//创建新节点 {Linkelist node(Linkelist)malloc(sizeof(struct Node));if(nodeN…

Elasticsearch 源码探究 001——故障探测和恢复机制

1、Elasticsearch 故障探测及熔断背景 探究Elasticsearch7.10.2 节点之间的故障探测以及熔断故障是怎么做的&#xff0c;思考生产上的最佳实践。 服务端故障场景&#xff1a; 单个master挂掉 除了断点断网&#xff0c;状态同步异常&#xff0c;主master也会认为自己已经失败&am…

ASPICE V模型之软件需求

ASPICE V模型之软件需求 了解ASPICE认识软件需求软件需求分解软件需求工作流程 了解ASPICE ASPICE全称是“Automotive Software Process Improvement and Capacity Determination”汽车软件过程改进及能力评定&#xff0c;是汽车行业用于评价软件开发团队的研发能力水平的模型框…

全球生成式AI大竞赛,Llama 2大模型现已可在亚马逊云科技上使用

一直以来Llama可以说是AI社区内最强大的开源大模型。但因为开源协议问题&#xff0c;一直不可免费商用。7月19日&#xff0c;Meta发布了大家期待已久的免费可商用版本Llama 2。一夜之间&#xff0c;大模型格局再次发生巨变。 作为Meta宣布的首批合作伙伴之一&#xff0c;现亚…