|
|
PS:另一论坛转过来的,把问题和答案同时复制过来以便大家学习!
问题原文:
关于LAN上有两个相同MAC地址的问题
目的: 验证发往目的IP的数据包是通过目的MAC来传递
linux server 的MAC是 aa:aa:aa:aa:aa:aa
windows 98 的MAC是 BB:BB:BB:BB:BB:BB
windos 2000 的MAC是 cc:cc:cc:cc:cc:cc
将linux MAC改为与win98的MAC相同,那么LAN上有两个相同的MAC BB:BB:BB:BB:BB:BB
此时win2000还能正常和linux , windows 98通信, Why???????????
回复:
首先HUB是广播的,每一台接入HUB的主机都能受到所有的数据帧,然后对帧中的目的MAC地址进行检查,如果是本机的MAC地址就会将数据帧传给网络层处理。
网络层查看PACKET的目的IP地址,如果是本机的IP地址就分析是什么协议的数据包,然后传给相应协议处理。
即便主机受到了目的MAC地址与本机MAC地址相同的情况也会进一步发现目的IP地址不同而丢弃该PACKET.
关于ARP: ARP request 是IP--->;MAC的查询,因此会在一个广播域中进行广播查询,目的MAC地址是FFFFFF
每一台主机都会接收并将该帧传给网络层处理,如果目的(即查询)IP地址是自己的IP,才会返回一个ARP REPLY,否则就丢弃该包!只要LINUX与win98主机的IP地址不同,只会由一台主机对该包进行回应!
关于ARP CACHE: 每台主机都会有一个ARP的CACHE 默认是空的(当然windows的主机开机是会PING网关以确认其MAC地址,因此开机后会有一条记录)。ARP CACHE中的内容一般都是通过发送ARP request得到的,是动态的,若干分钟后会清空(是具体OS而定),除非你使用静态的记录。
主机在通讯前都会先通过ARP CACHE查询目的ip对应的mac,如果没有就发送ARP request查询,网络中只有与目的IP相应的主机才会返回其mac地址。接着源就能与目的进行通讯了!在一个ARP CACHE存在一个MAC对应不同IP是允许的,这也是在SWITCH环境中IP包截获的基础。
因此,如果LINUX与win98的主机用了相同的MAC主机,他们都能很好的HUB的环境下和外界进行通讯。当然SWITCH的环境就不同了,可能会造成这两天主机都无法与外界联系的情况!
有兴趣的朋友可以拜读一下W.Richard Stevens 的 TCP/IP Illustrated Volume 1---The Protocols 这本传世宝典! |
|