IP地址冲突,主机名(计算机名)冲突这样的提示,我相信您一定见过或者亲临过,本文就是想借这个机会和大家一起讨论一下这类冲突现象和原因。

 
通过本文,你可以了解到
 
◆比较常见的冲突方式有哪些
◆计算机名字相同,是否就会发生冲突?
◆IP冲突的原理是什么
◆简述 Gratuitous ARP

为了便于分析,我搭建了一个临时网络环境,拓扑图和大致配置如图示:
在这个基础环境中,为了将主机名和Netbios名区分开,我将两台主机的主机名和Netbios名特意区分开,因为在实验中会用到,同时也是为了避免混淆。
为了不影响这台主机之间的连通性,我们将XP1和XP2的防火墙有关访问的端口打开,即将防火墙中【例外】选项卡中的【文件和打印共享】打开即可,如下图:
这样操作后,看可以保证基本的通讯不受影响。
下面的试验中,我将分别修改XP1主机的主机名、Netbios名、IP地址等三个关键要素的属性,来模拟冲突现象并进行相关测试和分析。
注:每一种情况的测试环境都是相互独立的,互不影响。
 
第一种情况:当两台主机的主机名相同时
也就是说,将XP1的主机名:XP1修改为XP2,我们来看一下会发生什么事。
首先查看一下XP1的主机名:
这里所说的计算机名其实就是主机名,没有什么区别。
现在将XP1改为XP2。
改后提示要重启一下,其实这个修改是即时生效的,但为了保证试验的严谨,还是需要按照常规重启一次比较稳妥。
这里请大家注意,当我们将主机名修改为XP2后,相对应的Netbios名也会自动跟随主机名变更为XP2。
OK,此时我们将两台主机直连。通常情况下,当在同一网段中,如果两台计算机的主机名相同时,就会产生冲突提示,但实际上,在这种情况下,并没有出现提示。
那如何证明两台主机没有产生任何冲突呢? 这里我们依然通过协议分析工具来进行验证,下图是两台主机之间的数据包交换情况:
可见,尽管两台主机的计算机名字都是XP2,但第一台主机的Netbios名是XP2,第二台是XP2BIOS,在注册自己各自的Netbios名时很顺利,没有产生冲突,具体表现就是客户端桌面风平浪静。
总结:在同一网络中,当主机名相同,主要Netbios名不相同,就不会产生冲突。
 
第二种情况:当两台主机的Netbios名相同时
Netbios名是早期系统中比如Win98等,主机之间通讯的主要基础和手段,系统中NBNS服务可以实现Netbios名和IP地址之间的对应和解析(具体内容请参考本博客中有关Netbios的内容)。
第二种情况中,我们会将XP1的Netbios名改成和XP2的一样。我们先查看一下XP1的Netbios名:
现在我们通过注册表,将XP的Netbios名改为和XP2的一样,即 XP2BIOS
打开注册表,并找到如下位置,按照下图提示进行修改
然后,请注意,一定要重启。
重启后,再来查看一下XP1的Netbios名:
顺带检查一下主机XP2的Netbios名:
条件已经具备,现在我们可以进行测试了。
当我们将两台主机进行直连时,看看会出现什么状况
经过短暂的连接过程后,在XP2的桌面上出现一个警告提示
此提示告知用户,在网络上有一个重复的名称,其实这里所谓的【Name】
就是Netbios名。
我们看一下当时的数据包情况
可以看到,早10:22:47这个时间点上,XP1和XP2两台主机分别通过广播形式宣告并注册各自的Netbios名,但由于2台主机通告的Netbios一样,因此就会产生突出,我把冲突的情况汇总了一下,并将其整理成一幅图,如下
请大家留意上图中框选的时间,可以看到当出现Netbios名称冲突时,系统的日志、协议层以及用户桌面都会出现相应的提示,只是各自的表现方式不尽相同而已。
图中出现的NetBT也就是NetBIOS。
那,出现这样的提示会对系统有什么影响呢?这样说吧,当系统中的应用程序或服务不是很依赖Netbios名的话,这种冲突对系统而言影响会很小,因为我们还有另外一套解析系统,那就是,由DNS服务器提供的计算机主机名(严格来讲是FQDN名)和IP之间的解析,尽管Netbios也可以类似的解析,且它也有自己完整的解析服务体系和规范,但相对而言,主机名和IP用的更为广泛。毕竟现在的网络中,TCP/IP协议簇的使用在网络操作系统中已经非常普遍了。
总结:在同一网络中,当Netbios名相同时,就会产生冲突。
 
第三种情况:当两台主机的IP相同时
最精彩的总要发到最后!其实,不用测试就知道结果的,当IP相同时,一定会产生冲突提示。 那果真如此??? 什么都不说,让实验来证明吧!
现在,将主机XP1的IP地址修改为192.168.1.2(过程略),然后将两台主机连通。
很快,在XP2的桌面右下角出现一个冲突提示:
在XP1主机上,系统则在努力获取网卡
但实际上,这样显然是徒劳的,因为指定的IP地址和别的主机冲突,所以这样的状态会一直持续下去。
我把冲突发生时,协议、系统等产生的变化整理成一张图,如下:
这样大家应该看的更清楚了。
现象已经看到了,我们来一起分析一下,为什么会出现冲突提示呢?这个提示是谁发出的呢? 其实只要认真看那张的图,就不难发现,在连接初始化时候,系统会利用ARP协议来检测网上是否有主机使用就自己的IP,也就是我们所说的IP冲突检测。此时,ARP协议会发送一个Gratuitous ARP(免费ARP)这样的数据包,目的就是为了检测网内是否有何自己相同的IP,如果没有,则自动忽略,如果有,如果第三种情况,就会在客户端、系统日志中出现提示。 关于Gratuitous ARP的内容,会在下一节中详细描述。
既然知道是由免费ARP发出的冲突提示,那是否有办法禁用这个提示呢?其实是有办法的,打开注册表并定位到
HKEY_LOCAL_ MACHINE \System\CurrentControlSet\Services\TcpIp\Parameters
新建一个名为ArpRetryCountDWORD值,并将其值设置为0即可。不过这仅仅是个掩耳盗铃的方法,实际上没有太大用处,至少在这样的环境下是这样的。

 

IP冲突所带来的危害,我想应该不用多说了,在TCP/IP大行其道的今天,IP出现问题,基本上网络也就瘫痪了。所以,平时我们在工作中应竭力避免IP地址冲突,一旦出现,问题可能会很严重。对服务器而言,那就是致命的!
IP地址冲突,主机名(计算机名)冲突这样的提示,我相信您一定见过或者亲临过,本文就是想借这个机会和大家一起讨论一下这类冲突现象的原因,以及是否可以避免等问题。
总结:在同一网络中,当IP地址相同时,就会产生冲突。但可以通过一些办法禁用这个冲突提示。
以上对三种冲突情况进行了简要分析,希望对大家有一些帮助,谢谢!