既然有了IP地址,为什么还需要MAC地址?两者到底有啥区别,深入分析后终于明白了!

在计算机网络中,IP地址和MAC地址是两个最基本的概念。IP地址在互联网中是用于标识主机的逻辑地址,而MAC地址则是用于标识网卡的物理地址。虽然它们都是用于标识一个设备的地址,但是它们的作用和使用场景是不同的。

IP地址是在网络层(OSI模型中的第三层)使用的,它是一个动态分配且具有结构化特性的地址,可以实现跨网络的通信和路由。

MAC地址是在数据链路层(OSI模型中的第二层)使用的,它是一个固定且扁平化的地址,可以实现局域网内部的寻址和数据传输。

因此,在网络通信中,使用IP地址和MAC地址这两种不同类型的地址是非常必要的。

IP地址和MAC地址的定义和格式

IP地址

IPInternet Protocol)是互联网协议的简称,它是一种规定了网络设备如何在互联网上进行通信的协议。IP协议定义了一种逻辑地址,即IP地址,用于在互联网上唯一标识一个网络设备。

IP协议目前有两个版本,分别是IPv4IPv6

IPv4Internet Protocol version 4)是目前最广泛使用的IP协议版本,它使用32位二进制数来表示一个IP地址,通常以点分十进制形式来显示,例如192.168.1.1。

一个IPv4地址由两部分组成:网络号主机号

  • 网络号表示该设备所属的网络,
  • 主机号表示该设备在该网络中的编号。

不同长度的网络号可以划分出不同等级的网络,例如A类、B类、C类等。为了方便表示不同长度的网络号,IPv4引入了子网掩码(subnet mask)的概念,它是一个32位二进制数,其中与网络号对应的位为1,与主机号对应的位为0。例如255.255.255.0就是一个子网掩码,表示前24位为网络号,后8位为主机号。

IPv6Internet Protocol version 6)是为了解决IPv4地址耗尽问题而设计的新一代IP协议版本,它使用128位二进制数来表示一个IP地址,通常以冒分十六进制形式来显示,例如2001:db8::1。

一个IPv6地址由两部分组成:前缀接口标识符

  • 前缀表示该设备所属的网络或子网,
  • 接口标识符表示该设备在该网络或子网中的编号。

IPv6没有固定长度的网络号或主机号,而是使用前缀长度(prefix length)来表示前缀占用多少位。例如2001:db8::1/64就表示前64位为前缀,后64位为接口标识符。

MAC地址

MACMedia Access Control)是媒体访问控制的简称,它是一种规定了数据链路层如何访问物理媒介(如电缆、光纤等)进行数据传输的协议。MAC协议定义了一种物理地址,即MAC地址,用于在局域网内部唯一标识一个网卡或其他网络设备。MAC协议有多种类型,其中最常见的一种是以太网(Ethernet)协议。

以太网协议使用48位二进制数来表示一个MAC地址,通常以冒分十六进制形式来显示,例如00-16-EA-AE-3C-40。一个以太网MAC地址由两部分组成:OUI和NICI。

  • OUI(Organizationally Unique Identifier)是组织唯一标识符,占用前24位,表示该网卡或其他网络设备的制造商编号。
  • NICI(Network Interface Card Identifier)是网卡标识符,占用后24位,表示该制造商分配给该网卡或其他网络设备的序列号。

因此,一个以太网MAC地址可以唯一地标识一个网卡或其他网络设备,并且不能被更改。

IP地址和MAC地址的工作原理和过程

IP地址

IP协议工作在网络层(OSI模型中的第三层),它负责将数据封装成数据包(packet),并根据目标IP地址进行路由选择和转发。当一个主机要发送数据给另一个主机时,它需要知道目标主机的IP地址,并将其写入数据包头部。然后根据路由表(routing table),选择合适的下一跳(next hop),也就是下一个转发该数据包的路由器或其他网络设备,并将数据包发送出去。

当数据包到达下一跳时,下一跳会根据自己的路由表再次选择合适的下一跳,并将数据包转发出去。这个过程会重复多次,直到数据包到达目标主机所在的局域网为止。在这个过程中,每个路由器或其他网络设备只需要知道下一跳的IP地址,并不需要知道目标主机或其他中间节点的具体位置或物理连接方式。

MAC地址

MAC协议工作在数据链路层(OSI模型中的第二层),它负责将数据封装成帧(frame),并根据目标MAC地址进行寻址和传输。当一个主机要发送数据给另一个主机时,它需要知道目标主机的MAC地址,并将其写入帧头部。然后根据物理媒介(如电缆、光纤等)的特性,将帧发送出去。

当帧到达目标主机所在的局域网时,局域网内的所有设备都会接收到该帧,并根据帧头部的目标MAC地址判断是否是自己。如果是自己,则接收该帧,并将其解封装成数据包,交给网络层处理。如果不是自己,则丢弃该帧。在这个过程中,每个设备只需要知道与自己直连的设备的MAC地址,并不需要知道目标主机或其他中间节点的逻辑位置或网络连接方式。

那么,一个主机如何获取另一个主机的MAC地址呢?

这就需要用到ARPAddress Resolution Protocol)协议,它是一种用于根据IP地址获取MAC地址的协议。ARP协议的工作原理和过程如下:

  • 当一个主机要发送数据给另一个主机时,首先会检查自己的ARP缓存表(ARP cache),看是否已经有目标主机的IP地址和MAC地址的对应关系。如果有,则直接使用该MAC地址封装帧并发送出去。
  • 如果没有,则需要发起ARP请求(ARP request),向局域网内广播一个特殊的帧,其中包含了自己的IP地址和MAC地址,以及目标主机的IP地址。该帧的目标MAC地址为广播地址FF-FF-FF-FF-FF-FF,表示所有设备都要接收该帧。
  • 局域网内的所有设备都会收到该ARP请求帧,并根据其中的目标IP地址判断是否是自己。如果不是自己,则丢弃该帧,并且将发送者的IP地址和MAC地址加入自己的ARP缓存表中。如果是自己,则回复一个ARP应答(ARP reply),向发送者单播一个特殊的帧,其中包含了自己的IP地址和MAC地址,以及发送者的IP地址。该帧的目标MAC地址为发送者的MAC地址。
  • 发送者收到该ARP应答帧后,就知道了目标主机的MAC地址,并将其加入自己的ARP缓存表中。然后就可以使用该MAC地址封装帧并发送出去。

当一个主机要发送数据给另一个主机时,如果目标主机与自己在同一局域网内,那么就可以直接使用ARP协议获取目标主机的MAC地址,并将其封装在帧中发送出去。但是,如果目标主机与自己不在同一局域网内,那么就需要经过路由器的转发。这时候,就需要知道路由器的MAC地址,而不是目标主机的MAC地址。下面我们用一个例子来说明这种情况下的工作过程。

假设有如下拓扑:

其中:

  • 主机A:IP为10.0.0.1,MAC为00-16-EA-AE-3C-40
  • 主机B:IP为10.0.0.2,MAC为00-16-EA-AE-3C-41
  • 主机C:IP为10.0.0.3,MAC为00-16-EA-AE-3C-42
  • 路由器R1:Fa0/0接口IP为10.0.0.254,MAC为00-16-EA-AE-3C-43
  • 路由器R2:Fa0/0接口IP为10.1.0.254,MAC为00-16-EA-AE-3C-44
  • 服务器S:IP为10.1.0.1,MAC为00-16-EA-AE-3C-45

现在假设主机A要向服务器S发送数据包,完整过程如下:

1)主机A发现目标IP与自己不在同一网段,需要经过路由器转发

2)查路由表获得R1的IP地址及出接口(从哪个网卡发出),查ARP表无对应条目

3)发起ARP请求,目的IP为R1,目的MAC为广播MAC(FF:FF:FF:FF:FF:FF),源IP和源MAC为主机A网卡的IP和MAC

4)R1收到ARP请求,将主机A的IP和MAC加入自己的ARP缓存表,用自身IP和MAC响应主机A的ARP请求

5)主机A收到ARP响应,将R1的IP和MAC加入自己的ARP缓存表,用自身IP和MAC为源,服务器S的IP和R1的MAC为目的,封装数据帧,并将其转发给R1(此时数据帧源IP为主机A,目的IP为服务器S,源MAC为主机A,目的MAC为R1)

6)R1收到数据帧,根据目的IP查路由表,发现需要R2转发,查ARP表,无对应条目。以自身IP和MAC为源,目的IP为R2,目的MAC为广播发送ARP请求,并将来自主机A的数据帧丢弃。

7)R2收到ARP请求,将R1的IP和MAC加入自己的ARP缓存表,用自身IP和MAC响应主机R2的ARP请求。

8)R1收到ARP响应,将R2的IP和MAC加入自己的ARP缓存表

9)主机A发现超时,重发数据帧

10)R1收到数据帧,查路由表,须经R2转发,查ARP表,获得R2的MAC地址。将数据帧的源MAC修改为自身,目的MAC修改为R2,并将数据帧转发给R2(此时数据帧源IP为主机A,目的IP为服务器S,源MAC为R1,目的MAC为R2)

11)R2收到数据帧,根据目的IP查路由表,发现目标主机与自己在同一网段,查ARP表,无对应条目。以自身IP和MAC为源,目的IP为服务器S,目的MAC为广播发送ARP请求,并将来自R1的数据帧丢弃。

12)服务器S收到ARP请求,将R2的IP和MAC加入自己的ARP缓存表,用自身IP和MAC响应主机R2的ARP请求。

13)R2收到ARP响应,将服务器S的IP和MAC加入自己的ARP缓存表

14)主机A发现超时,重发数据帧

15)R1收到数据帧,查路由表,须经R2转发,查ARP表,获得R2的MAC地址。将数据帧的源MAC修改为自身,目的MAC修改为R2,并将数据帧转发给R2

16)R2收到数据帧,查路由表,须经服务器S转发,查ARP表,获得服务器S的MAC地址。将数据帧的源MAC修改为自身,目的MAC修改为服务器S,并将数据帧转发给服务器S(此时数据帧源IP为主机A,目的IP为服务器S,源MAC为R2,

IP地址和MAC地址区别

尽管IP地址和MAC地址都是用来标识网络中的设备,它们的本质和作用却有很大的区别。下面是两者的主要区别:

  1. 定义:IP地址是用来标识网络上的设备,MAC地址是用来标识网络适配器(NIC)的。
  2. 唯一性:IP地址在网络中是具有唯一性的,但是在全球范围内会有重复的情况。而MAC地址是在全球范围内都是唯一的。
  3. 分配方式:IP地址由ISP分配,而MAC地址是由网络适配器(NIC)制造商分配。
  4. 使用场景:IP地址是用来实现Internet上的数据传输,而MAC地址是用来实现局域网内的数据传输。
  5. 长度:IP地址是32位二进制数,而MAC地址是48位二进制数。

另外,还有一些其他的区别:

  1. IP地址可以更改,而MAC地址无法更改。
  2. IP地址是分级和分段的,可以根据网络的需求进行调整。而MAC地址是固定的,无法调整。
  3. IP地址可以有多个,而MAC地址只有一个。
  4. IP地址可以动态分配,而MAC地址一般都是静态分配。

总结

IP地址和MAC地址是计算机网络中非常重要的概念。尽管它们有着不同的作用和范围,但是它们之间存在着密切的关联。在网络通信中,IP地址和MAC地址都起着至关重要的作用。因此,学习和了解IP地址和MAC地址对于理解和解决网络通信问题非常重要。同时,了解IP地址和MAC地址也有助于我们更好地保护网络安全。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

logstash同步数据从kafka到es集群

背景:需求是这样的,原始文件是txt文件(每天300个文件),最终想要的结果是每天将txt中的数据加载到es中,开始的想法是通过logstash加载数据到es中,但是对logstash不太熟悉,不知道怎么讲…

基于SpringBoot的生鲜管理系统的设计与实现

背景 困扰交易市场的许多问题当中,生鲜交易管理一定是交易市场不敢忽视的一块。但是管理好生鲜交易又面临很多麻烦需要解决,例如有几个方面:第一,生鲜市场往往人数都比较多,如何保证能够管理到每一个商家,如何在工作琐碎,记录繁多的情况下将生鲜交易的当前情况反应给领导相关部…

柔顺机构学读书笔记1:悬臂梁变形

题目: 如图考虑悬臂梁,材料各向同性,即各个方向上的弹性模量和强度都相同。如果在x方向上作用一个可使最大应力等于屈服强度 S S S的力 F x F_x Fx​时, x x x轴方向的变形为多少,书上给出了答案: 我们来验…

2022级云曦实验室考试(一)pwn

讲真,俺都不知道pwn是啥,等俺搜搜! pwn简介: CTF中的pwn指的是通过通过程序本身的漏洞,编写利用脚本破解程序拿到主机的权限,这就需要对程序进行分析,了解操作系统的特性和相关漏洞&#xff0…

SHELL——流程控制条件判断

1、判断当前磁盘剩余空间是否有20G,如果小于20G,则将报警邮件发送给管理员,每天检查一次磁盘剩余空间。 2、判断web服务是否运行 1)、查看进程的方式判断该程序是否运行 2)、通过查看端口的方式判断该程序是否运行&am…

数据分析真的很火吗?真的有很多企业需要这样的岗位吗?求大佬指点。

“我是去年毕业的,因为疫情影响,整个就业环境都很不好,很多企业都裁员了。加上疫情三年基本都是玩过去,也没啥一技之长,就业就更难了。听说现在做数据分析的人很多,我身边的朋友都在转行做数据分析。 其实…

【C++】哈希——unordered系列容器哈希概念哈希冲突

文章目录 1. unordered系列的关联式容器1.1 引言1.2 unordered_map的使用说明1.3 unordered_set的使用说明1.4 unordered_set和unordered_map的应用1.5 性能比较 2. 哈希概念3. 哈希函数4. 哈希冲突5. 哈希冲突的解决——开散列和闭散列5.1 闭散列5.2 开散列 1. unordered系列的…

Elasticsearch:Explicit mapping - 显式映射

显式映射相比较动态映射(Dynamic mapping)是需要我们在索引创建时就定义字段及其类型。这个和我们传统的 RDMS 数据库一样,在我们写入数据到数据库之前,我们需要工整地定义好每个字段及其类型和长度。Elasticsearch 既可以使用显式…

使用柔性数组重写MyString

hello,各位宝子,今天阿崽将使用c和柔性数组的方式重新去写String类 在开始本次知识前,首先给大家介绍下柔性数组这个buff特点: 结构中的柔性数组成员前面至少要包含一个其他成员 sizeof返回的这种结构大小不包括柔性数组的内存 …

数据结构课程设计——哈夫曼编/译码器

数据结构课程设计任务书 学生姓名: 专业班级:软件工程 指导教师: 工作单位: 题 目: 哈夫曼编/译码器 基础要求: (1)熟悉各种…

数字信号处理基础(二):FFT和IFFT的使用以及详细分析代码书写思路

目录 1. fft和ifft的原理1.1 fft1.2 ifft 2. 书写代码思路3. 完整代码4. 结果图 1. fft和ifft的原理 1.1 fft fft是快速傅里叶变换,是MATLAB中计算信号频谱的函数,使用方法是fft(x),直接对信号x进行fft计算。 由于fft函数计算信号的频谱是0…

vue3与vue2共存环境搭建

1、全局安装vue2 npm install vue-cli -g2、自行在任意位置创建一个文件夹,局部安装vue3 npm初始化 npm initnpm初始化 提示: 初始化后 出现文件package.json 如果没有初始化 会报错,且文件夹中不会新增内容 3、局部安装vue3 npm install …

宏工科技“全面”发力CIBF,助推电池智造“高效提质”

5月16-18日,第十五届中国国际电池技术展览会(CIBF2023)在深圳盛大举行。宏工科技携电池材料与电池匀浆领域的创新产品和系统解决方案精彩亮相。 据了解,宏工科技在新能源行业的业务涉及电池材料整线产线、电池匀浆、电池回收三个…

R语言实践——rWCVP入门

rWCVP入门 介绍1. 访问到WCVP1.1 方法一1.2 方法二(谨慎) 2. WCVP数据筛选2.1 关于按分类单元筛选的说明2.2 关于按分布区域筛选的说明 笔者实践 介绍 世界维管植物名录(WCVP)是维管植物物种的全球共识。它提供了科学已知的> …

【C语言】结构体指针

结构体指针 结构体基础知识注意对于成员的赋值 结构体指针指向结构体变量的指针结构体指针与结构体成员指针用结构体指针引用结构体成员 结构体 基础知识 初识结构体,可以先看这篇浅显易懂的文章结构体–基础篇 所谓结构体,是一组类型可以不同的相关变…

怎么把录音转文字?推荐你这三款工具

随着科技不断发展,录音转文字的技术也逐渐被广泛应用于各种场景中。其中最常见的一种就是会议记录。在日常工作中,会议是企业和组织中必不可少的一个环节,但在会议过程中的录音和记录往往需要花费大量的时间和精力。这个时候,我们…

基于MAC地址的ACL配置

基于MAC地址的ACL配置 【实验目的】 掌握基于MAC地址的标准ACL的配置。验证配置。 【实验拓扑】 实验拓扑如图1所示。 图1 实验拓扑 设备参数如表所示。 表1 设备参数表 设备 接口 IP地址 子网掩码 默认网关 S1 e0/0 N/A N/A N/A e0/1 N/A N/A N/A PC1 N/…

架构-软件工程模块-2

系统分析 数据流图可能出案例题,状态转换图了解作用即可 用例图、类图选择题多,暴徒了解即可 #mermaid-svg-lGozbtkYJPEQF1eo {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-lGozbtkYJPEQF1e…

c++学习——c与c++const修饰的变量的区别

c语言下const修饰的变量 1、c语言下const修饰的变量都有空间 2. c语言的const修饰的全局变量具有外部链接属性 07 const修饰的变量.c #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h>const int a 10;//常…

解析使用FPGA逻辑实现FIR滤波器的几种架构

有限脉冲响应(finite impulse response&#xff0c;FIR)数字滤波器 一、FIR数字滤波器理论介绍 FIR滤波器的实质就是输入序列与系统脉冲响应的卷积&#xff0c;即&#xff1a; 其中&#xff0c;N为滤波器的阶数&#xff0c;也即抽头数&#xff1b;x(n)为第n个输入序列&#xff…