MAC 地址与 IP 地址的区别

2021/06/06 MAC IP 共 4510 字,约 13 分钟

基础知识

如今的网络是分层来实现的,就像是搭积木一样,先设计某个特定功能的模块,然后把模块拼起来组成整个网络。局域网也不例外,一般来说,在组网上我们使用的是 IEEE802 参考模型,从下至上分为:物理层媒体接入控制层(MAC)逻辑链路控制层(LLC)

标识网络中的一台计算机,一般至少有三种方法,最常用的是域名地址IP 地址MAC 地址,分别对应应用层网络层物理层

网络管理一般就是在网络层针对 IP 地址进行管理,但由于一台计算机的 IP 地址可以由用户自行设定,管理起来相对困难,MAC 地址一般不可更改,所以把 IP 地址同 MAC 地址组合到一起管理就成为常见的管理方式。

什么是 MAC 地址

MAC 地址就是在媒体接入层上使用的地址,也叫物理地址硬件地址链路地址,由网络设备制造商生产时写在硬件内部。

MAC 地址与网络无关,也即无论将带有这个地址的硬件(如网卡、集线器、路由器等)接入到网络的何处,都有相同的 MAC 地址,它由厂商写在网卡的 BIOS 里。

MAC 地址可采用 6 字节(48 比特)或 2 字节(16 比特)这两种中的任意一种。但随着局域网规模越来越大,一般都采用 6 字节的 MAC 地址。

这个 48 比特都有其规定的意义,前 24 位是由生产网卡的厂商向 IEEE 申请的厂商地址,目前的价格是 1000 美元买一个地址块,后 24 位由厂商自行分配,这样的分配使得世界上任意一个拥有 48 位 MAC 地址的网卡都有唯一的标识。另外,2 字节的 MAC 地址不用网卡厂商申请。

MAC 地址通常表示为 12 个 16 进制数,每 2 个 16 进制数之间用冒号隔开。

如:08:00:20:0A:8C:6D 就是一个 MAC 地址

其中前 6 位 16 进制数 08:00:20 代表网络硬件制造商的编号,它由 IEEE 分配,而后 6 位 16 进制数 0A:8C:6D 代表该制造商所制造的某个网络产品(如网卡)的系列号。每个网络制造商必须确保它所制造的每个以太网设备都具有相同的前三字节以及不同的后三个字节。这样就可保证世界上每个以太网设备都具有唯一的 MAC 地址。

这两种地址各有好处,使用时也因条件而采取不同的地址。

MAC 地址的分类

从结构角度划分

  • 单播地址: 第一字节最低位为 0,例:0==0==-e0-fc-00-00-06,也即 0000 000==0==-…
  • 多播地址: 第一字节最低位为 1,例:0==1==-e0-fc-00-00-06,也即 0000 000==1==-…
  • 广播地址: 48bit 位全为 1,例:ff-ff-ff-ff-ff-ff,也即 11111111-…

也即如果第二个十六进制数为偶数就为单播地址,为奇数就为多播地址(同时非广播地址)。

注:

  1. 交换机对多播、广播地址不会进行学习。
  2. 普通设备网卡或者路由设备路由接口的 MAC 地址一定得是单播的 MAC 地址才能保证与其他设备的互通性。
  3. MAC 地址是一个以太网设备在网络上运行的基础,也是链路层功能实现的立足点。

从功能角度划分

  1. 静态 MAC 地址(Static MAC)
    由用户通过 shell 命令或者 snmp 代理配置的静态转发的 MAC 地址,静态 MAC 地址和动态 MAC 地址的功能不同 ,静态地址一旦被加入,该地址在删除之前将一直有效,不受最大老化时间的限制。
  2. 动态 MAC 地址(Dynamic MAC)
    由交换机从接受到报文自动学习到的 MAC 地址,当端口收到一个报文时,会查找报文的源 MAC 地址是否存 在于 MAC 地址表中,如果不存在则会将相应的端口、VLAN 和源 MAC 地址关联起来,并保存到 MAC 地址表中, 动态 MAC 地址在达到一定老化时间后会被老化删除,但如果该地址在老化时间内被正确使用过,则会重新 激活该条地址的老化时间,同时 MAC 地址和端口的对应关系会随着设备所连的交换机的端口的变化而变化。
  3. 过滤 MAC 地址、黑洞 MAC 地址
    由用户通过 shell 命令或者 snmp 代理配置的静态过滤的 MAC 地址,当网关接收到的报文中,源或者目的 MAC 地址为过滤 MAC 地址,则直接丢弃该报文。

注:静态 MAC 优先于动态 MAC,同时当两者计算出的哈希值一样时,静态 MAC 就会覆盖动态 MAC。

从传输角度划分

  • SMAC: Source Mac、源 MAC 地址,报文的最初来源 MAC 地址。
  • DMAC: Destination Mac、目的 MAC 地址,报文的最终应该发往的 MAC 地址。

IP 地址与 MAC 地址的区别

  • IP 地址基于逻辑,比较灵活,不受硬件限制,也容易记忆。
  • MAC 地址在一定程度上与硬件一致,基于物理,能够标识具体。

注:SMAC、DMAC 指的不是静态、动态地址!

为什么要用到 MAC 地址

这是由组网方式决定的,如今比较流行的接入 Internet 的方式(也是未来发展的方向)是把主机通过局域网组织在一起,然后再通过交换机和 Internet 相连接。这样一来就出现了如何区分具体用户防止盗用的问题。由于 IP 只是逻辑上标识,任何人都随意修改,因此不能用来标识用户;而 MAC 地址则不然,它是固化在网卡里面的。从理论上讲,除非盗来硬件(网卡),否则是没有办法冒名顶替的(注意:其实也可以盗用,后面将介绍)。

基于 MAC 地址的这种特点,局域网采用了用 MAC 地址来标识具体用户的方法。注意:具体实现:在交换机内部通过“表”的方式把 MAC 地址和 IP 地址一一对应,也就是所说的 IP、MAC 绑定。

具体的通信方式:
接收过程,当有发给本地局域网内一台主机的数据包时,交换机接收下来,然后把数据包中的 IP 地址按照“表”中的对应关系映射成 MAC 地址,转发到对应的 MAC 地址的主机上,这样一来,即使某台主机盗用了这个 IP 地址,但由于他没有这个 MAC 地址,因此也不会收到数据包。发送过程和接收过程类似,限于篇幅不叙述。
综上可知,只有 IP 而没有对应的 MAC 地址在这种局域网内是不能上网的,于是解决了 IP 盗用问题。

MAC 地址涉及到的安全问题

从上面的介绍可以知道,这种标识方式只是 MAC 地址基于的,如果有人能够更改 MAC 地址,就可以盗用 IP 免费上网了,目前网上针对小区宽带的盗用 MAC 地址免费上网方式就是基于此这种思路。如果想盗用别人的 IP 地址,除了 IP 地址还要知道对应的 MAC 地址。

举个例子,获得局域网内某台主机的 MAC 地址,比如想得到局域网内名为 target 主机的 MAC 地址,先用 PING 命令:ping target,这样在我们主机上面的 ARP 表的缓存中就会留下目标地址和 MAC 映射的记录,然后通过 arp a 命令来查询 ARP 表,这样就得到了指定主机的 MAC 地址。最后用arp -s ip网卡 MAC 地址,命令把网关的 IP 地址和它的 MAC 地址映射起来就可以了。

如果要得到其它网段内的 MAC 地址,那么可以用工具软件来实现,我觉得Windows 优化大师中自带的工具不错,点击“系统性能优化”→“系统安全优化”→“附加工具”→“集群 Ping”,可以成批的扫出 MAC 地址并可以保存到文件。

小知识

ARP(Address Resolution Protocol) 是地址解析协议,ARP 是一种将 IP 地址转化成物理地址的协议。从 IP 地址到物理地址的映射有两种方式:表格方式和非表格方式。ARP 具体说来就是将网络层(IP 层,也就是相当于 OSI 的第三层)地址解析为数据连接层(MAC 层,也就是相当于 OSI 的第二层)的 MAC 地址。ARP 协议是通过 IP 地址来获得 MAC 地址的。

ARP 原理:要向主机 B 发送报文,会查询本地的 ARP 缓存表,找到 B 的 IP 地址对应的 MAC 地址后就会进行数据传输。如果未找到,则广播 A 一个 ARP 请求报文(携带主机 A 的 IP 地址 Ia——物理地址 Pa),请求 IP 地址为 Ib 的主机 B 回答物理地址 Pb。网上所有主机包括 B 都收到 ARP 请求,但只有主机 B 识别自己的 IP 地址,于是向 A 主机发回一个 ARP 响应报文。其中就包含有 B 的 MAC 地址,A 接收到 B 的应答后,就会更新本地的 ARP 缓存。接着使用这个 MAC 地址发送数据(由网卡附加 MAC 地址)。因此,本地高速缓存的这个 ARP 表是本地网络流通的基础,而且这个缓存是动态的。ARP 表:为了回忆通信的速度,最近常用的 MAC 地址与 IP 的转换不用依靠交换机来进行,而是在本机上建立一个用来记录常用主机 IP-MAC 映射表,即 ARP 表。

如何修改自己的 MAC 地址

MAC 地址是固化在网卡中的,MAC 地址具有唯一性,难道没有办法更改了么?不是的,我们完全不用修改 EPROM 的内容,而只通过修改存储单元的内容就能达到修改 MAC 地址的目的。例如在 Windows 中可以通过注册表来修改。

在“开始”菜单的“运行”中输入regedit.exe,打开注册表编辑器,展开注册表到:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}子键,在子键下的 0000,0001,0002 等分支中查找 DriverDesc(如果你有一块以上的网卡,就有 0001,0002……在这里保存了有关你的网卡的信息,其中的 DriverDesc 的内容就是你的网卡的信息描述,比如我的网卡就是 Intel 21041 based Ethernet Controller),在这里假设你的网卡在 0000 子键。

在 0000 子键下添加一个字符串,命名为“NetworkAddress”,键值为修改后的 MAC 地址,要求为连续的 12 个 16 进制数。然后在 “0000”子键下的 NDI\params 中新建一项名为 NetworkAddress 的子键,在该子键下添加名为“default”的字符串,键值为修改后的 MAC 地址。

在 NetworkAddress 的子键下继续建立名为“ParamDesc”的字符串,其作用为指定 NetworkAddress 的描述,其值可为 “MAC Address”。这样以后打开网络邻居的“属性”,双击相应的网卡就会发现有一个“高级”设置,其下存在 MAC Address 的选项,它就是你在注册表中加入的新项 NetworkAddress,以后只要在此修改 MAC 地址就可以了。

关闭注册表,重新启动,你的网卡地址已改。打开网络邻居的属性,双击相应网卡项会发现有一个 MAC Address 的高级设置项,用于直接修改 MAC 地址。

如何解决 MAC 地址带来的安全性问题

我们可以将 IP 地址和 MAC 地址捆绑起来来解决这个问题。进入“MS-DOS 方式”或“命令提示符”,在命令提示符下输入命令:ARP -s 10.88.56.72 00-10-5C-AD-72-E3,即可把 MAC 地址和 IP 地址捆绑在一起。这样,就不会出现 IP 地址被盗用而不能正常使用网络的情况,可以有效保证小区网络的安全和用户的应用。

注意:ARP 命令仅对局域网的上网代理 (网络信息的中转站突破自身 IP 访问限制) 服务器 (文件传输协议支持 FTP 协议的服务器就是 FTP 服务器) 有用,而且是针对静态 IP 地址,如果采用 Modem 拨号上网或是动态 IP 地址就不起作用。

不过,只是简单地绑定 IP 和 MAC 地址是不能完全的解决 IP 盗用问题的。作为一个网络供应商,他们有责任为用户解决好这些问题之的后,才交给用户使用,而不是把安全问题交给用户来解决。不应该让用户来承担一些不必要盗用的损失。

文档信息

Search

    Table of Contents