计算机网络基础:什么是NIC,MAC和ARP?

Tags: 安全 网络

“停住!把绳拴在港口上,用排水管排掉甲板和船尾的水!”

这些话对海盗来说(或许)至关重要。它还说明了每个行业自己的行话对业内人士如何拥有丰富的技术含义,但对门外汉却十分费解。当你第一次听见一个网络极客对你说:“你的机子当然不会被找到,因为它的MAC地址不在ARP映射表里”时,你只有羞愧得恨不得找个洞钻进去。

在学习了本文的这些重要东西后,你就可以做出更有效而温和的回击了。在网络中的设备并不会马上检测到相同网络中其他设备的存在及其位置。如果你想知道他们 之间是如何发现彼此的,那你就要准备好进入网络适配器(NIC, 也称网卡), 媒体访问控制(MAC)和地址解析协议(ARP)的虚幻而神秘的世界。

 一台计算机中的两个地址

为了解释NIC, MAC和ARP,我们将从你的计算机开始。我们将你计算机的桌面操作系统称作Redbeard,一个局域网里众多计算机中的一台。

你可能知道Redbeard有一个IP地址。一个IP地址就像一个邮箱地址,它帮助其他计算机将网络信息传给Redbeard。但IP地址却更加复杂。一 些IP地址是静态的,这就是说,它们多半是永久的。但是其他的IP地址是动态的,也就是说,将被分配自(也将被回收到)一个范围的IP地址(例 如,192.168.0.1 - 192.168.0.254)。动态分配IP地址是你能带着你的笔记本走到某个新地方却依然联着网和接受IP数据的必要条件。当你带着你的笔记本到处乱逛 的时候,处于某处的一台DHCP服务器已经动态地分配了一个临时IP地址给你的笔记本了。

那么随着你的计算机在网络中不断地移动,IP地址不断地改变,在局域网中的其他计算机是如何找到Redbeard的呢?秘密在于(好吧,其实也不是什么秘 密;只是一个经验丰富的管理员了解得很清楚但却忘了告诉你的一个事实):每一台网络设备都有两个地址。一个是IP地址,可能是静态也可能是动态。另一个是 MAC地址,一个通常不会改变的地址。

MAC仅仅是我网卡的名字

当你连接计算机到你的以太局域网时,你知道你的网线正在插进什么东西么?从外面来看,你在将网线头插进一个金属孔(译者注:就是你计算机上的网口)中,但 是事实并非这样。在这个孔的里面是一个网络适配器(网卡)。网卡是每个网络设备(计算机,打印机,路由器,等等)中都有的硬件,它们处理一个计算机网络中 所有收发数据包的技术方面的工作。

就像你家里的邮箱地址,你的计算机的网卡也有一个唯一的地址。这个地址必须在全球都是唯一的。否则,网络数据不能找到到达正确计算机的路径。

这个识别网卡的独特地址就是所谓的媒体访问控制(MAC)地址。一个MAC地址是一个独一无二的字符串。由于它标识一个独特的物理设备——一个唯一的网卡 ——MAC地址,按照约定,在网卡中将永不会改变。任何两块网卡都不会有相同的MAC地址(除非人为地改变)。因为你的网卡MAC地址是不变的,它常常被 认为是“真”的,物理的,计算机地址。

一个标准的MAC地址是6字节,16进制表示,就像这样:

00:90:7F:12:DE:7F
00:90:7F:12:DE:7F

在16进制记法里,仅仅用两个字符就能表示一个字节。MAC地址里每个字节都用冒号(:)或连字号(-)分开。

你不用像获得IP地址那样获得MAC地址,而是制造商在每一个网卡里都预先编号了一个带有唯一MAC地址的芯片。IEEE标准协会给每个网卡制造商分配了 一个唯一的3字节代码,即所谓的组织唯一标识符(OUI,Organizationally Unique Identifier),它用来识别制造商。任何一个MAC地址的前半部分(3字节)表示这种制造商代码。例如,找到上面提到的MAC地址的OUI,你可 以再IEEE的OUI注册表中查找00:90:7E,最后你将发现00:90:7E代表来自WatchGuard的网卡。

MAC地址的后半部分不同于其前半部分。网卡制造商确保他们生产的每一块网卡的MAC地址都以唯一的3字节数结尾。由于一个3字节的16进制数至少能表示一千六百万个地址,因此这样做是可行的。

MAC地址和IP地址的优缺点

MAC地址似乎相当酷,是不是?但当你买到一块网卡时却无法控制其MAC地址的值,而且通常你还不能修改它,这就会由它引出一些事情。同时MAC地址是不 能被路由的,换句话说,网络层协议将不会把MAC地址作为目的地址(而且,它还比IP地址多了两字节)。MAC并不能构成网络拓扑。所以你仅仅在局域网内 部用MAC地址,而不会经过路由器。

相反,IP地址的网络拓扑结构相当好。在你的私有网络中,你可以随心所欲地将其分为很多分支(即所谓的子网或分网)。你可以按你所愿给任何一台或一组设备分配IP地址。

我们说事情都是优劣互补的。具有延展性的IP地址让你的网络拥有了灵活的管理。而永不变化的MAC地址给物理设备提供了一个独特可靠的地址。

或者你也可以说,我们取长补短。IP地址在整个全球因特网中路由数据包,而MAC地址则帮助数据包在两个硬件设备间做狭小的局部的传递。正是由于你的网络设备拥有MAC地址和IP地址才让这复杂的网络传输变得可能。

网络中的点名:ARP

我们开始想知道,“在局域网中的设备如何才知道彼此的存在呢?”网卡和MAC地址只是这个答案中重要的部分,你的网络还必须知道如何匹配同一台设备的 MAC地址和其IP地址。这就是所谓的地址解析协议(ARP, Address Resolution Protocol, 可以想象海盗边打嗝边读出它的情景)。

把ARP想像成网络中的点名。还记得你四年级时入学的第一天么?在开始上课时,老师按照点名册开始点名,希望点到你时你能够答“到”。她这是为了能将你的 名字和你的脸联系起来。每一个小孩都听到了所有的名字,但是却只回答他(她)自己的名字。ARP运用了相似的技术来将IP地址和MAC地址联系起来。

我们给Redbeard分配的IP地址为192.168.39.101,并且假设它的网卡的MAC地址为00:A0:24:30:2E:13.然后假设你 需要发送一个文件给Larry——更具体点,给他的电脑,Beancounter。当Redbeard尝试给Beancounter发送一个文件 时,Redbeard首先获得Beancounter的IP地址。发现其IP地址是局域网内的(在同一个子网中),如果Redbeard知道“真的”对方 的MAC地址和对应的IP地址,那么他能够将文件送到目的地。为了获得对方的MAC地址,Redbeard做出了和你开学第一天老师做的同样事情。他在整 个局域网内点名,让是这个IP地址的计算机用它的MAC地址答“到”。

我们假设Beancounter的IP地址是192.168.39.148。为了找到Beancounter的MAC地址,Redbeard将发送下面的ARP请求:

From(Redbeard's MAC address):     00:A0:24:30:2E:13
To(Broadcast address)             FF:FF:FF:FF:FF:FF
Packet content               Who has 192.168.39.148? Tell 192.168.39.101
来自(Redbeard的MAC地址):  00:A0:24:30:2E:13
去往(广播地址):           FF:FF:FF:FF:FF:FF
数据包的内容            Who has 192.168.39.148? Tell 192.168.39.101(谁的IP地址是192.168.39.148? 请告诉192.168.39.101,译者注)

注意到上面的“去往”分栏里的特殊地址。这个特殊地址(全是F)就是MAC广播地址。任何发送至这个地址的包都会到达Redbeard所在局域网段里的每 一个计算机。所有这些计算机(除了Beancounter,译者注)都会收到这个报文,但是都忽略它,因为这个报文并不属于它们——它属于 Beancounter。因为Beancounter的IP地址是192.168.39.148,所以它会像这样响应这个报文:

From(Beancounter's MAC address):          00:A0:24:30:4C:23
To(Redbeard's address)                    00:A0:24:30:2E:13
Packet content                   I have192.168.39.148
来自(Beancounter的MAC地址):                00:A0:24:30:4C:23
去往(Redbeard的MAC地址):                   00:A0:24:30:2E:13
数据包内容                        I have192.168.39.148(我是192.168.39.148,译者注)

现在Redbeard将IP地址192.168.39.148和它的MAC地址00:A0:24:30:4C:23“关联”起来了。Redbeard现在 能偶直接发送文件到网络中代表Beancounter的硬件(Beancounter的网卡)了。注意:Beancounter也记住了Redbeard 的IP地址和MAC地址,因为这些也是Redbeard的最初ARP请求里的内容。

我们以上所描述的整个过程就是极客们所说的“去ARP一个MAC地址”。

我也获得了你的地址

在成功地ARP了之后,Redbeard将这对新获得的MAC/IP对存储在一个ARP映射缓存中。ARP映射缓存是在你的计算机里用于临时存储MAC地 址和关联的IP地址的映射表。你的计算机为了效率而维护这个映射表,这样它就不用不断广播ARP请求去询问它已经询问过的计算机了。如果Redbeard 一会儿需要发送一些其他东西给Beancounter,Redbeard将从它的ARP映射表里直接获取Beancounter的MAC地址。

然而,ARP映射缓存有时却成为一个问题。在你的局域网里的每台设备都维护它自己的ARP映射缓存。但是路由器却并不像计算机那样频繁更新它们的ARP映 射缓存。当你在你的局域网里换了新设备时,本地路由器或许不能找到这台新设备,因为它还在查询只有老设备MAC地址的ARP映射缓存。那就是为什么当你第 一次装一台新设备时需要刷新你的路由器ARP映射缓存(现在我们用的路由器更新比较频繁了,基本不会在去手动刷新,译者注)。

 海盗们叫出,“ARrrrrrrrP!”

在日常处理中,你几乎不会涉及到ARP和MAC。多数情况下,它们工作在幕后,很少需要管理员的干预。但是当你遇到需要知道MAC地址和ARP协议的问题 时将能很好地帮助你解决麻烦的网络问题。黑客攻击的一种形式就包括修改恶意数据到ARP映射缓存,即所谓的ARP中毒。所以花一点时间来学习NIC, MAC和ARP或许能是你的网络免于从正常行驶到海底坟墓——同时,你的术语技巧将影响你同事的心开往因特网的海洋航道。

本文链接:http://www.4byte.cn/learning/53368/ji-suan-ji-wang-luo-ji-chu-shi-me-shi-nic-mac-he-arp.html