引言
MAC地址是网络中一个很基础的概念,基础到大多数人都知道它是什么,但是却难以深入的描述它(就像时间一样)。本文先主要了解一下关于MAC地址的相关概念,后面会将结合其他网络知识再次详细补充MAC地址的知识。
什么是MAC地址
MAC地址(Media Access Control Address),我们一般将其称为物理地址或硬件地址。
人们主要用它来标记和确认网络设备的位置。
MAC地址属于OSI模型中的数据链路层。
MAC地址用于最初用于表示网络中的硬件接口(主要指网卡),现在也用于识别其他设备(如蓝牙),甚至是软件。
在生产网卡时,网络设备制造商会将MAC地址烧录在EPROM(一种闪存芯片,通常可以通过程序擦写)。
MAC地址长什么样
MAC地址长度为48bit,6个字节,一般用16进制表示,并用冒号或者连接号将每个字节分割开来,比如:fa:16:3e:6c:78:25、fe-dc-ba-12-34-56,也可表示为三个由点号分隔的四个16进制数字,如0123.4567.890a。
第1个字节的最低有效位(LSB)为单播地址(值为0)/多播地址(值为1)。
第1个字节从LSB去数,第2位为通用管理地址(UAA,值为0)/本地管理地址(LAA,值为1)。
前3个字节通常合起来称为OUI(Organizationally Unique Identifier, 组织唯一标识符)。
前3~24位由IEEE分配给网络硬件制造商,且不重复;后3个字节由网络设备生产商自行指定且不重复。通俗一点来讲,只要不更改自己的MAC地址,MAC地址在世界上就是唯一的。
在虚拟化技术中,像QEMU和Xen这样的管理程序有自己的 OUI。最后3个字节将被分配为在本地网络上唯一的值,每个新的虚拟机都使用一个 MAC 地址。 另外,由于MAC地址可能被更改,实际上可能存在MAC相同的设备,但是只要两个 MAC 地址是属于不同的数据链路层就不会出现问题。
几个特殊的地址:
ff:ff:ff:ff:ff:ff是广播地址。01:xx:xx:xx:xx:xx是多播地址。01:00:5e:xx:xx:xx是IPv4多播地址。怎么查看MAC地址
我们以Linux系统为例,可以通过ifconfig命令来查看,不过ifconfig命令有被废弃的趋势,推荐使用ip命令来查看。MAC地址为HWaddr或ether字段的值。
此外MAC地址也会被系统写入/sys/class/net/xxx/address文件中,其中的xxx为网卡名称。
参考以下几个命令:
结果示例:ifconfigip addr showcat /sys/class/net/xxx/address # xxx为网卡名称
$ ip addr show1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether fa:16:3e:6c:78:25 brd ff:ff:ff:ff:ff:ffinet 10.248.135.114/22 brd 10.248.135.255 scope global eth0valid_lft forever preferred_lft foreverinet6 fdbd:dc03:ff:1:1:248:135:114/128 scope globalvalid_lft forever preferred_lft foreverinet6 fe80::f816:3eff:fe6c:7825/64 scope linkvalid_lft forever preferred_lft forever$ cat /sys/class/net/eth0/addressfa:16:3e:6c:78:25
怎么修改MAC地址
当然,我们也可以通过命令来修改MAC地址,不过,修改MAC地址是一种非常危险的行为,除非你知道你在做什么,否则不要去修改。
通常修改MAC地址时是需要管理员权限的,我们可以通过ifconfig命令或者ip命令(推荐)来修改,修改的时候网卡会临时不可用,所以不建议远程连接的情况下操作。ifconfig xxx down # 禁用网卡,xxx为网卡名称,下同ifconfig xxx hw ether fa:12:34:56:78:90 # 修改该网卡的MAC地址ifconfig xxx up # 启动网卡
上面的方式均是临时修改MAC地址,系统重启后又将会恢复原来的值。如果需要永久修改,可以将上面的命令追加到ip link set dev xxx downip link set dev xxx address fa:12:34:56:78:90ip link set dev xxx up
/etc/rc.d/rc.local文件末尾,这样每次系统重启都会执行这几条命令。即便如此,也只是通过软件的方式去模拟修改了MAC地址,网卡中的真实地址还是原来的值,只能通过硬件方式擦除和修改。后记
目前关于MAC地址的介绍就到这里,后面主要会介绍MAC地址的工作原理,在其他诸如ARP协议、VLAN等话题中也会有所涉及,敬请期待。
