网卡与 MAC 地址(媒体访问控制)
假如我们想把电脑里的一张照片发给打印机。照片原本存在电脑里,而打印机是另一台设备,因此需要有东西把数据送出去,也需要说明这一次交给哪个接口。网络接口完成前一件事,MAC 地址(媒体访问控制地址,Media Access Control)帮助完成本地交接。我们就跟着这张照片,从能看见的硬件开始。
照片怎样离开电脑
电脑用二进制位表示信息。一个二进制位只有两个可能的值,写作 0 和 1。一张照片需要许多位,软件把它们按规则组织起来,让另一台电脑能够恢复图像。在讨论地址之前,我们先抓住一点:发送照片,就是传送按规则排列的数据。
把电脑接入网络的硬件叫网络接口控制器,简称 NIC;做成可插拔电路卡的版本常叫网卡。有线以太网用网线,Wi-Fi 接口用无线电信号。这一课拆看有线以太网卡,让我们能从电脑连接端一直顺着看到网线插口。网络接口这个大概念也适用于 Wi-Fi,不过无线电硬件和数据帧细节有所不同。
顺着网卡的部件走一遍
按编号依次选择部件。选中的部件会带上绿色高亮,其余部件留在原处,便于看清它的位置。你可以拖动旋转,也可以使用视角和大小按钮,不需要鼠标滚轮。
1 · 连接电脑
金色接点插进电脑的 PCI Express 插槽。PCI Express 是网卡与电脑交换数据的一种连接方式。操作系统把数据准备在内存中,驱动程序便可以告诉网卡哪些工作已经就绪。驱动程序就是知道如何控制这件设备的软件。
使用 Blender 制作的代表性以太网卡模型。部件布局和比例用于教学,不对应某个商业产品的精确设计。
现在回到照片。软件准备数据,网卡处理自己负责的本地传输,网线携带信号;另一端的接口再恢复数据。这样我们知道了数据怎样移动,但还有一个问题:同一个本地网络里有好几个接口,怎样说明这一份数据应该交给谁?
一小段一小段读懂 MAC 地址
以太网数据帧包含目的 MAC 地址和源 MAC 地址。目的地址指出本次交接的接收接口,源地址指出发送接口。常见以太网 MAC 地址有 48 位。每次都写四十八个 0 和 1 太长,于是我们把它分成六个字节。一个字节有八位,因此 。
写法还可以更短。四个位有十六种组合,因为每增加一位,选择数就翻倍,所以 。十六进制给这十六个值各安排一个字符:0 到 9,然后用 A、B、C、D、E、F 表示十到十五。因此两个十六进制字符就能表示一个字节。冒号只是分隔字节,不是额外的数据位。
打开六个字节中的一个
先从六对字符中选一对,它的八个二进制位就会展开。位值从右边搭起:最后一位数一个,左边数两个一组,两组二就是四,再向左依次是八、十六、三十二、六十四、一百二十八。某一位为 1,就把对应数量算进来;为 0,就不算。可以直接点击一个位来切换,也可以拖滑块。每次只改当前字节,切到另一个字节时,之前的修改仍保留,方便回头比较。“还原例子”才会把六个字节一起恢复。
某一位是 1,就把它的位值算进去;是 0,就不贡献数值。这里 。写成十六进制时,先数出完整的十六个一组:。因此这两个十六进制字符写作 5E。
滑块用于解释数的写法。改变第一个字节还可能改变地址类别;这里不会修改真实网卡。
初始例子里的 5E,意思是五组十六,再加十四:。字节观察器把同一个 94 展开为 01011110:。二进制、十进制和十六进制只是同一个字节的不同写法。
跟随一次交接,再看下一次
附近的打印机与互联网上的远方服务器,不能用完全相同的方式到达。IP 地址让软件指出网络目的地,并选择经过不同网络的路线。带有这层网络地址的数据单位叫 IP 数据包。在以太网链路上,数据包放进数据帧里,帧中的 MAC 地址安排当前这一次本地交接。电脑通过路由表决定直接交付还是先交给网关(把数据转发到其他网络的设备),不是通过比较 MAC 地址来决定。
两类地址之间还需要建立联系。在这里的 IPv4 以太网中,ARP 用来询问“已知下一站 IP,它对应哪个 MAC 地址”。“下一站”是路径上紧接着要交给的接收方,可能就是最终设备,也可能是一台路由器。观察这次询问与回复,就能看到发送方怎样取得发送照片数据所需的地址。
本地打印机和远方服务器的例子可以切换比较。点“下一步”,每次只推进一次操作。绿色外框表示当前正在处理的设备。地址框把帧与它里面的内容分开,旁边的说明会指出这一刻改变了什么。
先确定照片最终要到哪里
最终收件人是 192.0.2.20 这台打印机。本例的路由表指出它就在这个本地网络中,因此可以直接交给它的网络接口。
——图中压缩了网络路径。这里使用 IPv4 的 ARP 例子;IPv6 使用邻居发现。以太网的错误检查能检测许多传输错误,但它本身不保证整份文件一定送达。
接口地址可以改变
这个地址属于网络中的接口,不永久绑定一个人。同一台电脑的以太网接口与 Wi-Fi 接口就可以有不同地址。制造商可以从登记的地址块中分配地址,软件也可以设定本地管理的地址。私有 Wi-Fi 地址正是利用这个可能性来减少跨网络追踪,有些设置还会定期更换地址。
00:00:5E:00:53:10这个例子使用专门保留给文档的地址范围。它的单播/组播位为 0,表示单个接口;全局/本地位也为 0。制造商分配的地址块使用后一种类别,但复制一个地址并不能证明设备真伪或所有者身份。
要查看这两个标志,先把第一个字节 00 写成 00000000。按通常的二进制书写方式从右往左看,最右一位选择单个接口(0)或一组接口(1);再左一位选择全局管理(0)或本地管理(1)。这里说的是纸面上的位序,不是网线上的发送顺序。
同一个本地网络中,两个活动接口若使用相同的单播地址,就可能让交付混乱。因此分配地址需要协调,或适当的随机化与冲突处理。“48 位”说明的是字段大小,并不保证所有正在使用的地址都不同,也不意味着 MAC 不能改变,更不意味着知道地址就能访问设备。
自己试着解释
1. 电脑给本地网络之外的服务器发送数据包。第一段以太网链路上的目的 MAC 应该写谁?
查看推理
写下一站网关接口的 MAC。路由表选择网关,ARP 可以通过网关的 IP 查询它的 MAC。在本例中,里面的 IP 数据包仍以服务器为最终目的地。
2. 十六进制字节 2A 对应哪个十进制数?
查看推理
A 表示十。第一位数的是多少组十六,所以 。这个字节仍然有八位,书写时用字母并不会改变数据大小。
3. 手机重新连接时换了私有 Wi-Fi MAC 地址。是不是必须更换了物理 Wi-Fi 芯片?
查看推理
不是。同一个接口可以由软件换用另一个本地管理地址。本地交接使用的地址与物理芯片是两回事,仅凭 MAC 地址不能证明永久设备身份。
