有了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地址由两部分组成:OUINICI

OUIOrganizationally Unique Identifier)是组织唯一标识符,占用前24位,表示该网卡或其他网络设备的制造商编号。

NICINetwork 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地址。下面我们用一个例子来说明这种情况下的工作过程。

假设有如下拓扑:

其中:

主机AIP10.0.0.1MAC00-16-EA-AE-3C-40

主机BIP10.0.0.2MAC00-16-EA-AE-3C-41

主机CIP10.0.0.3MAC00-16-EA-AE-3C-42

路由器R1Fa0/0接口IP10.0.0.254MAC00-16-EA-AE-3C-43

路由器R2Fa0/0接口IP10.1.0.254MAC00-16-EA-AE-3C-44

服务器SIP10.1.0.1MAC00-16-EA-AE-3C-45

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

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

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

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

4R1收到ARP请求,将主机AIPMAC加入自己的ARP缓存表,用自身IPMAC响应主机AARP请求

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

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

7R2收到ARP请求,将R1IPMAC加入自己的ARP缓存表,用自身IPMAC响应主机R2ARP请求。

8R1收到ARP响应,将R2IPMAC加入自己的ARP缓存表

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

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

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

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

13R2收到ARP响应,将服务器SIPMAC加入自己的ARP缓存表

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

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

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

IP地址和MAC地址区别

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

定义IP地址是用来标识网络上的设备,MAC地址是用来标识网络适配器(NIC)的。

唯一性IP地址在网络中是具有唯一性的,但是在全球范围内会有重复的情况。而MAC地址是在全球范围内都是唯一的。

分配方式IP地址由ISP分配,而MAC地址是由网络适配器(NIC)制造商分配。

使用场景IP地址是用来实现Internet上的数据传输,而MAC地址是用来实现局域网内的数据传输。

长度IP地址是32位二进制数,而MAC地址是48位二进制数。

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

IP地址可以更改,而MAC地址无法更改。

IP地址是分级和分段的,可以根据网络的需求进行调整。而MAC地址是固定的,无法调整。

IP地址可以有多个,而MAC地址只有一个。

IP地址可以动态分配,而MAC地址一般都是静态分配。

总结

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

好了今天的分享就到这里,如果分享的内容对你有所帮助,欢迎点赞收藏转发!!

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

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

相关文章

数据结构之树与二叉树——算法与数据结构入门笔记(五)

本文是算法与数据结构的学习笔记第五篇,将持续更新,欢迎小伙伴们阅读学习。有不懂的或错误的地方,欢迎交流 引言 前面章节介绍的都是线性存储的数据结构,包括数组、链表、栈、队列。本节带大家学习一种非线性存储的数据结构&…

chatgpt赋能python:Python分词:从原理到实践

Python分词:从原理到实践 分词是自然语言处理中的关键步骤之一,它是指将一句话或一段文本分成若干个词语(token)并进行标注。Python作为一种非常流行的编程语言,具备强大的文本处理能力,而分词也是它的强项…

chatgpt赋能python:Python如何切换中文

Python 如何切换中文 Python 是一种广泛使用的编程语言,被用于多种目的,包括数据分析、机器学习、Web 应用程序等。在使用 Python 进行开发时,需要处理不同的语言,其中中文也是包括在内的。对于需要切换中文的情况,本…

学生考试作弊检测系统 yolov8

学生考试作弊检测系统采用yolov8网络模型人工智能技术,学生考试作弊检测系统过在考场中安装监控设备,对学生的作弊行为进行实时监测。当学生出现作弊行为时,学生考试作弊检测系统将自动识别并记录信息。YOLOv8 算法的核心特性和改动可以归结为…

关于数据生成二维码保存和解密删除二维码

文章目录 前言一、pom配置依赖二、文件引入1.BufferedImageLuminanceSource2.QRCodeUtil3.MyPicConfig4.UploadUtils三、测试前言 所需文件: MyPicConfig 主要解决上传图片实时刷新BufferedImageLuminanceSource 算法文件QRCodeUtil 生成二维码工具类UploadUtils 主要解决上传…

软考A计划-系统架构师-官方考试指定教程-(13/15)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

【Java基础学习打卡03】计算机中数据的表示、存储与处理

目录 前言一、数据的表示1.数据与信息2.计算机中的数据3.计算机中数据的单位 二、数据的存储三、数据的处理1.进位计数值2.进制间转换 四、字符编码总结 前言 本小节主要介绍在计算机中数据的表示、存储与处理。要知道计算机内部使用二进制数据,也就是0和1组成的数…

2.3 YARN伪分布式集群搭建

任务目的 重点掌握 YARN 集群的相关配置学会启动和关闭 YARN 集群的两种方式能够使用 jps 命令查看进程的启动情况能够通过 UI 查看 YARN 集群的运行状态任务清单 任务1:YARN 集群主要配置文件讲解任务2:YARN 集群测试任务步骤 任务1:YARN 集群主要配置文件讲解 1.1 配置环…

【新版】系统架构设计师 - 计算机系统基础知识

个人总结,仅供参考,欢迎加好友一起讨论 文章目录 架构 - 计算机系统基础知识考点摘要计算机系统计算机硬件组成浮点数Flynn分类法CISC与RISC流水线技术超标量流水线存储系统层次化存储结构CacheCache的命中率Cache的页面淘汰主存编址磁盘管理&#xff08…

Linux 信号

文章目录 1. 信号1.1 前言1.2 信号的位置1.3 接口1.3.1 sigset_t1.3.2 信号集操作接口1.3.3 signal1.3.4 sigprocmask1.3.5 sigpending 2. 信号的处理2.1 内核态和用户态2.2 信号的监测和处理 1. 信号 1.1 前言 在 Linux 中,信号是一种用于进程之间的通信机制&…

地震勘探基础(十一)之水平叠加处理

水平叠加处理 地震资料经过预处理,静校正,反褶积,速度分析和动校正处理后就要进行水平叠加处理。地震水平叠加处理是地震常规处理的重要环节。 假设一个共中心点道集有三个地震道,经过速度分析和动校正以后,水平叠加…

【数据结构】何为数据结构。

🚩 WRITE IN FRONT 🚩 🔎 介绍:"謓泽"正在路上朝着"攻城狮"方向"前进四" 🔎🏅 荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2022博客之星T…

Tik Tok的海外娱乐公会(中亚、巴西、美国、台湾)怎么申请?

TIKTOK 公会海外市场潜力巨大 自 2016 年始,多家直播平台陆续拓展至东南亚、中东、俄罗斯、日韩、 欧美、拉美等地区 海外市场作为直播发展新蓝海,2021 年直播行业整体规模达百亿美元, 并维持高速增长 TikTok 直播市场空间 TikTok 已经成…

【 Python 全栈开发 - WEB开发篇 - 31 】where条件查询

文章目录 一、where条件查询1.关系运算符查询2.IN关键字查询3.BETWEEN AND关键字查询4.空值查询5.AND关键字查询6.OR关键字查询7.LIKE关键字查询普通字符串含有%通配的字符串含有_通配的字符串 一、where条件查询 MySQL 的 where 条件查询是指在查询数据时,通过 wh…

网络安全系统教程+渗透测试+学习路线(自学笔记)

一、什么是网络安全 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面…

Qt6 C++基础入门3 对话框与MainWindow

目录 对话框MainWindow菜单工具栏 对话框 目前的对话框主要有以下几大类 文件对话框( QFile Dialog)消息对话框( QMessageBox)输入对话框( QInputDialog)颜色对话框( QColorDialog)字体对话框( QFontDialog) 这是七大对话框及其基本用法的实例参考,所有代码都写在…

四、LLC 谐振变换器

变换器实现 ZVS 的限制 全面了解LLC谐振变换器实现ZVS的条件,把变换器主电路变形成图所示形式。其中 Coss1、Coss2分别为开关管 S1、S2 漏-源极间的寄生电容,并且Coss1Coss2 Coss 。Cstray为与谐振网络并联的等效寄生电容,则变换器在 ZVS 条…

万维网服务器

一、域名解析gethostbyname函数 struct hostent {char *h_name; /* 官方域名 */char **h_aliases; /* 别名*/int h_addrtype; /* 地址族(地址类型) */int h_length; /* 地址长度 */char **h_addr_list; …

QT+OpenGL高级光照 Blinn-Phong和Gamma校正

QTOpenGL高级光照1 本篇完整工程见gitee:QtOpenGL 对应点的tag,由turbolove提供技术支持,您可以关注博主或者私信博主 Blinn-Phong 冯氏光照:视线与反射方向之间的夹角不小于90度,镜面光分量会变成0.0(不是很合理&am…

宝塔面板搭建thinkphp后请求中去除index.php后缀

宝塔面板搭建thinkphp后请求中去除index.php后缀 nginx配置 在宝塔面板网站中绑定thinkphp的public,添加站点 点击站点设置按钮打开项目设置页面 找到配置文件 选项,然后在 22行 后添加一下代码 location / {if (!-f $request_filename) {rewrite …