MAC地址再起完美风暴(2)
时间:2013-11-19 16:13来源:盼盼的家园 作者:冯军 点击:次
三、IP地址、MAC地址和三层交换技术 一台计算机想要接入到网络中,必须要有两个地址。一个是网卡的地址,也就是MAC地址。在以太网中,我们通过MAC地址
三、IP地址、MAC地址和三层交换技术
一台计算机想要接入到网络中,必须要有两个地址。一个是网卡的地址,也就是MAC地址。在以太网中,我们通过MAC地址来进行数据传送和数据交换。在以太网环境中,数据会分帧传送,每一个数据帧都会包含自己的MAC和目的MAC地址信息; 另外一个地址是平时所说的IP地址,定义在网络层,每一台网络计算机都会有一个或者多个IP地址,这是一个虚拟的数据,并且可以随时更改。在硬件层次上进行的数据帧交换必须有正确的接口地址。但是,TCP/IP有自己的地址: 32 bit的IP地址。知道主机的IP地址并不能让内核发送一帧数据给主机。内核(如以太网驱动程序)必须知道目的端的硬件地址才能发送数据。ARP的功能是在32 bit的IP地址和采用不同网络技术的硬件地址之间提供动态映射。点对点链路不使用ARP。当设置这些链路时(一般在引导过程进行),必须告知内核链路每一端的IP地址。像以太网地址这样的硬件地址并不涉及。
IP地址和MAC地址是同时使用的,在数据传送过程中,一个完整的TCP/IP包需要由以太网进行数据封装,数据分帧,最后再通过物理层传输到目标计算机。在以太网封装上层的TCP/IP包的时候,它需要知道源MAC地址和目的MAC地址,但是我们只能给出一个对方的IP地址,这个时候就需要一个协议来支持IP到MAC的转换,这就是ARP,Address Resolution Protocol. ARP协议是介乎于网络层和数据链路层的一个协议。第一次传送某个目的IP地址的数据的时候,先会发出一个ARP包,其MAC的目标地址是广播地址,里面说到:"谁是xxx.xxx.xxx.xxx这个IP地址的主人?"因为是广播包,所有这个局域网的主机都收到了这个ARP请求。
收到请求的主机将这个IP地址和自己的相比较,如果不相同就不予理会,如果相同就发出ARP响应包。这个IP地址的主机收到这个ARP请求包后回复的ARP响应里说到:"我是这个IP地址的主人"。这个包里面就包括了他的MAC地址。以后的给这个IP地址的帧的目标MAC地址就被确定了。其它的协议如IPX/SPX也有相应的协议完成这些操作。
IP地址和MAC地址之间的关联关系保存在主机系统里面,叫做ARP表,由驱动程序和操作系统完成。在Microsoft的系统里面可以用 arp -a 的命令查看ARP表。收到数据帧的时候也是一样,做完CRC以后,如果没有CRC效验错误,就把帧头去掉,把数据包拿出来通过标准的借口传递给驱动和上层的协议客栈,最终正确的达到我们的应用程序。还有一些控制帧,例如流控帧也需要MAC直接识别并执行相应的行为。
三层交换机工作过程的简单概括:如果目的IP地址显示不是同一网段的,那么A要实现和B的通讯,在流缓存条目中没有对应MAC地址条目,就将第一个正常数据包发送向一个缺省网关,这个缺省网关一般在操作系统中已经设好,对应第三层路由模块,所以可见对于不是同一子网的数据,最先在MAC表中放的是缺省网关的MAC地址;然后就由三层模块接收到此数据包,查询路由表以确定到达B的路由,将构造一个新的帧头,其中以缺省网关的MAC地址为源MAC地址,以主机B的MAC地址为目的MAC地址。通过一定的识别触发机制,确立主机A与B的MAC地址及转发端口的对应关系,并记录进流缓存条目表,以后的A到B的数据,就直接交由二层交换模块完成。这就通常所说的一次路由多次转发。
MAC地址固化在网卡中的BIOS中,可以通过命令取得,但是,通过命令取得的MAC地址不一定是真实的MAC地址,因为在网卡初始化过程中,操作系统确实读取了网卡中MAC地址,但是在以后通讯过程中使用的MAC地址却是从初始化过程结束后建立的缓冲区中读取,而缓冲区中MAC地址可能是注册表定义的MAC地址,而不是真实的MAC地址,这个过程由网卡驱动程序完成。这也是WIN操作系统的MAC地址可以被轻易修改的原因。
四、真实MAC地址、注册表MAC地址和MAC地址的修改
MAC地址固化在网卡中的BIOS中,可以通过命令取得,但是,通过命令取得的MAC地址不一定是真实的MAC地址,因为在网卡初始化过程中,操作系统确实读取了网卡中MAC地址,但是在以后通讯过程中使用的MAC地址却是从初始化过程结束后建立的缓冲区中读取,而缓冲区中MAC地址可能是注册表定义的MAC地址,而不是真实的MAC地址,这个过程由网卡驱动程序完成。这也是WIN操作系统的MAC地址可以被轻易修改的原因。
------分隔线----------------------------