IP 地址与MAC硬件地址

喜夏-厌秋 提交于 2020-01-23 16:24:41

IP 地址与MAC硬件地址

我们都知道数据通信要使用IP地址加MAC地址,两个地址缺一不可,下为原理图:

1.下面介绍计算机A与计算机B通信的过程

  • 交换机基于数据帧的MAC地址转发数据帧,路由器基于数据包的IP地址转发数据包;
  • 数据包在传输过程不变,经过网络设备数据帧要用新的物理层(MAC)地址重新包装;
  • MAC地址决定了数据帧在网络设备中转过程中下一站由哪个设备接收,而IP地址决定了数据包的起0点和终点。

例如图中的使用M表示MAC地址,由于计算机A所处的10.0.0.2网段与计算机B所处的12.0.0.2网段不同,所以A与B不能直接通信,需要借助路由器中转。

首先,计算机发出数据帧1,里面标明了源IP地址与目标IP地址、 源MAC地址与目标MAC地址,这样数据帧1就可以通过交换机准确传输到目标MAC地址M2,即路由器Router1处;

路由器通过查找路由表确定到12.0.0.2的网段的路径,并把该数据帧发现通向该路径的M3接口处,M3接口再对数据帧1进行封装改变源MAC地址和目标MAC地址,IP地址不变并发出数据帧2;

以此类推,最终数据帧传输到12.网段的路由器上,该路由器再通过同网段的交换机把数据帧3发送到计算机B处,完成通信。

注意

  • 我们把数据传输过程中数据帧中不变的部分:即数据+IP地址(目标地址与源地址)称为数据包
  • 数据包加上MAC地址(目标地址与源地址)之后整体称为数据帧,数据帧中的MAC地址过一个网络设备变一次。
  • IP地址与MAC地址区别:IP地址决定数据包最终要到达的计算机(终点);MAC地址决定中转过程中下一站到哪个设备(中转站)去。

应用

  • 如果在交换机Switch0这个网段中的PC2中安装代理服务器(比如CCProxy)来控制该网段的其他计算机是否能上网;

  • 当在同一网段中,可以直接通过MAC地址通信,所以PC2中的代理服务器只需要设置本网段中的哪些MAC地址可以上网,就可以实现对本网段中的PC1、 PC2实现上网控制。
  • 当在不同网段时,比如使用PC2控制Switch1这两个段的所有计算机是否能上网,则在代理服务器中不仅要设置哪些MAC地址能上网,而且还要设置哪些IP地址能上网-。


2.ARP&RARP协议

ARP简介

  • 不管网络层使用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址。
  • 每一个主机都设有一个 ARP 高速缓存(ARP cache),里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。
  • 当主机 A 欲向本局域网上的某个主机 B 发送 IP 数据报时,就先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址。如有,就可查出其对应的硬件地址,再将此硬件地址写入 MAC 帧,然后通过局域网将该 MAC 帧发往此硬件地址。

ARP MAC地址欺骗

前面说过,网络层一共使用四个协议:IP、 ARP、 ICMP、 IGMP协议。ARP协议负责把IP地址解析成MAC地址,依靠广播作为解析方式。所以说网上的广播时避免不了的。

如下图所示:

四台计算机PC0~PC3通过交换机连接在一起,四台计算机的物理地址分别为M1~M4;如果PC0的10.0.0.2地址想ping(访问)PC1的10.0.0.3地址,那么PC0必须知道PC1的MAC地址。

方法为PC0发布一个同网段所有计算机都能收到的广播,广播内容为询问10.0.0.3地址对应的MAC地址。PC1收到之后就会给PC0发送相应的MAC地址信息,PC0就会把收到的该MAC地址当做10.0.0.3的MAC地址。随后通信发出的数据帧目标MAC地址都为该接收到的MAC地址即M2。

正因为ARP通过广播解析通信方MAC地址的方式造成了许多的网络安全问题。比如常说的抓包就是利用ARP协议的这种安全漏洞。

造成安全漏洞的原因为

  • PC1告诉PC0,10.0.0.3对应的MAC地址为M2,PC0收到之后不做验证就直接确信并使用该MAC地址作为目标MAC地址发送数据了。我们都知道交换机在转发数据的时候,只会把数据转发给目标地址不会转发给其他连接交换机的非目标地址,这样其他计算机是无法截获通信信息的。

  • 如果PC3想截获PC0与PC1之间通信的数据包,当PC0发出广播询问目标MAC地址时,PC3也收到了广播信息,在PC1给PC0发送完正确MAC地址M2后,PC3再向PC0发送错误MAC地址M4,由于PC0并不会检验收到的目标MAC地址是否正确,所以M4会覆盖M2成为PC0确信的目标MAC地址。

  • 随后PC0开始通讯,就会把数据发送到PC3中,PC3再把数据发送给PC1 。通过这样一个MAC地址欺骗,所有流经MAC地址M1和M2的数据帧都经过了 M4使窃听数据成为可能。

应用举例:P2P终结者

如图所示:四台计算机通过一个交换机连接在一起,再通过一个路由器连接网络,其中PC3的MAC地址为M2,路由器的MAC地址为M1。正常情况下PC0~PC2访问网络时,由于网络与它们本身不在同一个网段上,所以需交由路由器的网关进行中转,路由器的网关地址为M1;如果PC3想控制PC0~PC2的上网带宽,就可以通过安装P2P终结者类似的软件实现。

P2P终结者的原理为:当PC0~PC2解析路由器网关地址时,路由器告诉它们是M1,PC3通过MAC地址欺骗再告诉它们假的路由器网关地址M2,这样PC0~PC2包含上网请求的数据包都会发送到假网关地址M2即PC3处(即PC0~PC2所有的流量都会经过M2),PC3知道路由器的真实网关地址为M1,PC3先对PC0~PC2发来数据包进行处理再把这些数据包转发给真正的路由器网关地址M1。通过这种方式实现对PC0~PC2上网带宽的管控。

如果PC0~PC2直接解析路由器网关地址访问网络,无论PC3是无法管控它们的上网,所以P2P终结者这些软件必须配合ARP欺骗来实现。

网络执法官

网络执法官的功能为:同一网段内的一台计算机(比如PC3),可以控制其他计算机(比如PC0~PC2)是否能上网,或者其中一台计算机(如PC0)能与哪些计算机通信,不能与哪些计算机通信。

实现原理:当PC3中安装了网络执行官软件后,PC0~PC2想访问网络并解析路由器网关地址时,PC3告诉它们一个不存在的MAC地址M8;随后PC0向M8发送数据帧时,交换机收到后经过查找发现M8地址不存在,要求PC0重发数据帧,又查询不到M8地址,最后该数据帧被丢弃,于是PC0~PC2谁也上不了网。

解决方案:安装ARP防火墙

沿用上图在PC0中安装ARP防火墙之后,PC0想访问网络并解析路由器网关时,当接收到第一个由路由器发出的真正的网关地址M1时就在PC0中把该地址写死,之后再接受到其他MAC地址也不覆盖M1,由此实现防止ARP地址欺骗。

仿真验证

由于高版本Windows系统如Win7、 Win10对ARP修改操作有所限制,所以使用虚拟机Windows2003仿真。

  • 在命令行窗口输入命令:
arp -a

可以查看相应计算机连接的多个路由器的网关及其对应的MAC地址。

  • 随后与其他网络的一个地址建立通信:
ping 202.99.168.8

发现当前是可以与其他网络中的地址建立通信的。说明该计算机内缓存的路由器网关对应的物理地址是正确的。

再次查看计算机缓存的网关及其对应MAC地址。

  • 然后修改该路由器网关192.168.80.1对应的MAC地址,即把原来的00-50-56-c0-00-08改为00-50-56-c0-00-09,并再次查看计算机缓存的网关及其对应的MAC地址。

    arp -s 192.168.80.1 00-50-56-c0-00-09
    arp -a

可以看出,修改后的网关192.168.80.1对应的MAC地址变为静态“static”,即以后进行数据通信都以该管理员指定的MAC地址为准,不再使用ARP解析的MAC地址。

  • 最后再次与其他网络的202.99.168.8地址进行通信:
ping 202.99.168.8

可以发现现在无法建立通信了,这里管理员指定的网关对应MAC相当于上问题到的ARP MAC地址欺骗。不过与同网段的其他计算机还是能通信的,如与192.168.80.12:

ping 192.168.80.12

现实案例

一家公司的某单位有三台服务器PC0~PC2,其中只有服务器PC2上不了网,其他两台服务器都能上网。首先排除了物理层的原因,最后确认问题是:PC2没有正确地解析到网关的MAC地址。如何知道该计算机缓存了错误的网关MAC地址呢?可以在能上网的计算机PC1与不能上网的计算机PC2的命令行窗口中都输入:arp -a,分别查看同一网关对应的MAC地址,通过比较可得知PC1中正确的网关对应MAC地址与PC2中错误的网关对应地址。


逆向ARP:RARP

RARP

物理地址通过RARP协议得到IP地址的过程叫做地址请求。计算机的IP地址默认是自动获得的,也就是计算机可通过自身物理地址申请对应的IP地址,这正好与ARP解析相反,这叫做逆向ARP即RARP,计算机请求IP的地址的过程就是逆向ARP的过程。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!