假设一个只有 3台电脑组成的局域网, 该局域
网由交换机连接。 其中一个电脑名叫 A, 代表攻击
方; 一台电脑叫S , 代表源主机, 即发送数据的电脑;
另一台电脑名叫 D, 代表目的主机, 即接收数据的电
脑。 这3台电脑 的 I P地址分别为 1 9 2 . 1 6 8 . 0 . 2 ,
1 9 2 . 1 6 8 . 0 . 3 , 1 9 2 . 1 6 8 . 0 . 4 。 MA C地址分别为
MAC A, MAC—
S, MAC—
D。
现在, S电脑要给D电脑发送数据了, 在S电脑内
部, 上层的T C P和U D P的数据包已经传送到了最底层的
网络接口层, 数据包即将要发送出去, 但这时还不知道目
的主机D电脑的M A C地址 MA C _ D 。 这时候, S电脑要
先查询自身的A R P缓存表, 查看里面是否有1 9 2 . 1 6 8 . 0 . 4
这台电脑的MA C地址, 如果有, 那很好办, 就将 M A C _ D
封装在数据包的外面。 直接发送出去即可。 如果没有,
这时S电脑要向全网络发送一个 A R P广播包, 大声询
问: “ 我的I P是 1 9 2 . 1 6 8 . 0 . 3 , 硬件地址是 M A E _ S , 我想
知道 I P地址为 1 9 2 . 1 6 8 . 0 . 4的主机的硬件地址是多
少? ”这时, 全网络的电脑都收到该 A R P广播包了, 包
括A电脑和 D电脑。 A电脑一看其要查询的 I P地址
不是自己的, 就将该数据包丢弃不予理会。 而 D电脑
一
看I P地址是自己的, 则回答S电脑: “ 我的I P地址是
1 9 2 . 1 6 8 . 0 . 4 , 我的硬件地址是 M A E D” 。 需要注意的
是, 这条信息是单独回答的, 即D电脑单独向S电脑发
送的, 并非刚才的广播。 现在 S电脑已经知道目的电
脑 D的M A C地址了, 它可以将要发送的数据包上贴上
目的地址 M A C _ D, 发送出去了。 同时它还会动态更新 自身的A R P缓存表, 将 1 9 2 . 1 6 8 . 0 . 4一 MA C — D这一条
记录添加进去, 这样, 等s电脑下次再给 D电脑发送数
据的时候, 就不用大声询问发送 A R P广播包了。 这就
是正常情况下的数据包发送过程。
这样的机制看上去很完美, 似乎整个局域网也天
下太平, 相安无事。 但是, 上述数据发送机制有一个致
命的缺陷, 即它是建立在对局域网中电脑全部信任的
基础上的, 也就是说它的假设前提是: 无论局域网中那
台电脑, 其发送的A R P数据包都是正确的。 那么这样
就很危险了!因为局域网中并非所有的电脑都安3 + - z g
己, 往往有非法者的存在。 比如在上述数据发送中, 当
S电脑向全网询问“ 我想知道I P地址为1 9 2. 1 6 8. 0 . 4的
主机的硬件地址是多少? ” 后, D电脑也回应了自己的
正确 M A C地址。 但是当此时, 一向沉默寡言的A电脑
也回话了: “ 我的I P地址是 1 9 2. 1 6 8. 0 . 4 , 我的硬件地址
是M A C — A ” , 注意, 此时它竟然冒充自己是 D电脑的I P
地址, 而M A C地址竟然写成自己的!由于 A电脑不停
地发送这样的应答数据包, 本来 s电脑的A R P缓存表
中已经(北联网教程,专业提供视频软件下载)
……