多台电脑共享MACIP地址
最近在论坛上看到很多人都在都在怀疑把两台电脑或多台电脑的MAC改成一样会不会引起IP冲突或不能上网。
其实是可以的,你完全可以把两台电脑的IP MAC改成一样,不但可以上网而且还没IP冲突。这种方法不但可以突破路由封锁用在ADSL共享上网,而且还可以用在IEEE802.1X认证上网的环境中,但是前提必须要用相同的账号来拨号上网(前提认证服务器没设验证账号的重复性),我的机子是通过学校校园网接入internet的,客户端采用802.1x认证客户端软件“STAR Supplicant拨号软件”来拨号上网,在我们学校里可以将两台机子的IPMAC改成一样然后用相同的一个账号来达到共享上网的目的,不过在我们学校只可以在同一个宿舍的两台机子才可以共享上网,因为我们学校的服务器不单只验证账号、ipMAC而且还验证接入服务器IPNAS IP),和接入服务器端口(NAS port),不同的宿舍接在学校交换机不同的端口,所以只限于同一个宿舍用这种法共享上网。
至于为什么不会引起IP冲突而且还能上网,这是因为ARP工作的缺陷,系统之所以会发现网上有相的IP的而提示“IP冲突”,是因为系统在启动时,TCP/IP中的ARP会广播一个免费ARP(free a
rp)请求包到网段上,这个ARP(free arp)包包含自己的IPMAC,如果网段上有机子回应了这个包,这台发广播的机子就会认为局域网有别的机子使用和自己相同的IP
例如:PCAPCBIPMAC完全一样,PCA的系统启动时会广播一个包含自己IPMAC的免费ARP(free arp)请求包到网段上,如果PCB回应了这个请求,PCA会认为自己的IP和网络上的IP有冲突并发出提示(这就是为什么IP冲突一般发生系统刚启动完成时),问题是PCB根本不会回应这个请求包,这是因为这个请求包的IPMACPCB自己的完全一样,而PCB会认为是自己发的包,所以不会回应,既然不会回应自然不会发生IP冲突了。
好了,让我来解释下一个问题,就是两台机子的IPMAC一样到底会不会导致不能上网:
既然可以,那么网络上的硬件设备是怎样区分这些数据到底是哪台机的呢??大家都知道局域网内是用硬件地址来通讯的,局域网的二层设备(如交换机)维护着一张地址表,地址表记录着本设备每个端口所对应的MAC(注:不是端口的MAC,而是端口所连设备的MAC),设备要经过地址学习状态才能知道这些端口所对应的MAC,当一个帧经过设备的某个端口时,设备会检查该帧源地址和目的地址,然后再对照自己的地址表,看地址表中是否存在该源地址的对应项,若不存在则端口会变为“地址学习状态”,将该地址保存在地址表中组成一个
新的表项,如果PCAPCBtcp ip协议中ip是指都连在同一个交换机上,则交换机经过“地址学习状态”后,地址表中存在两个相同的地址项,不过它们所对应的端口是不同的,当交换机在外部接收到一个目的地址为该地址(PCAPCB相同的MAC地址)的帧时,则会检查地址表,检查地址表后会发现存在两个相同地址的表项,于是交换机会将该帧转发到这两个表项所对应的端口,(至于交换机是用组播的方式还是说用一个帧发两遍的方式转发给这两个端口我就不太清楚了)
路由器也一样,不同是的路由器的地址表是路由表,存放的是IP而不是硬件地址。
连接这两个端口的PCAPCB都会收到同样的帧,既然会收到同样的帧,那么计算机怎样才知道哪些帧才是自己想要的呢?这取决于工作在TCP/ip上层协议,虽然网卡是接收了这个帧,但是上层的协议进行进一步的分用,也可以说成是过滤,当TCP/IP的网络接口层(也叫链路层)收到一个帧,会检查帧头中的帧类型,如果是ARP类型的就交给ARP协议去处理,如果是RARP类型就会交给RARP协议处理,如果是IP类型会去掉帧头并把这个帧传给上一层(即网络层来处理),网络层会根据包头(去掉帧头就叫IP包了)中的协议类型来分用,如是TCMP类型就交给ICMP协议处理,如果是IGMP类型就交给IGMP协议处理,如果是TCPUDP就把包头去掉并交给上一层(即传输层)来处理 ,去掉IP包头后就叫做报文分段
了(传输层的单位),同样传输层也会对报文分段的头部进行检查从而进行进一步的分用,如果是TCP类型的交给TCP协议处理,如果是UDP类型就交给UDP协议处理,TCPUDP会根据报文分段的头部中的“目的端口号”来交给应用层(交给应用层前会把报文分段的头部去掉),然后应用层的用户进程会根据该“端口号”来决是否接收这个数据,例如QQ某个进程打开了UDP 1324这个端口,传输层的UDP协议会把所有接收到的且“目的端口号”为1324的报文分段交给QQ的这个进程,  这样就完成接收数据的整个过程。虽然两台电脑都会接收到不是属于自己的数据帧,但是在把帧交给上层协议片理时有可能会被丢充,就如应用层的QQ进程不会接到除“目的端口号”为1324以外的其它数据包,因为这些数据在应用层前已经被丢弃。
我只是粗略的介绍了一下TCP/IP是如何判段该数据是否本机所要接所的,限于篇覆,不能写出整个过程,有意者请参考W.Richard Stevens所著的《TCP/IP详解》,看完这套书你就会明白到TCP/IP的工作原理,同时也会明白到这个原理。
  虽然把多台电脑的IPMAC可以共享上网,但是网速变慢。而且会有一定的影响。原因有三个。
  一、既然存在两个MAC相同的电脑,局域网的设备会把“目的地址”为该MAC的帧转发给这两台电脑,可想而之,一个数据帧要发两遍,一百台相同MAC的电脑就会发一百遍,这样会损耗了网络设备的资原,从而影响网络的性能.
  二、TCP/IP内核处理速度受到一定的影响,因为连那些不是自己的数据帧都会接收,既然接收了数据帧,TCP/IP内核就会进一步的对其进行处理,甚至有一些数据直到应用层才被丢弃,这样会影响TCP/IP内核处理速度。
  三、假如PCAPCB同样都开了QQ的某个进程,而且各自所打开的端口都是一样的,虽然QQ客户端的进程打开的端口是随机的,但不能代表PCAPCBQQ进程不会打相同的端口,机率虽小,但也有可能。这样TCP/IP内核会怎样分辩这些数据是否属于自己的??这正是我所困惑的,希望高手能够指点。是或许最终由QQ的进程来对数据中的某些信息进行判断从而决定这些数据是否自己的吧,不知道我的假想是否正确????

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。