现在的局域网都是交换机连接的,交换机工作在二层(二层交换机),交换机的端口会记录端口连接的设备的mac地址。
当网络刚刚通电,所有设备都还没有进行通信的时候,如果主机A(192.168.1.1)要跟主机B(192.168.1.2)进行通信,首先检查自己的arp缓存是否有B电脑的MAC地址,如果没有,这时候主机A会喊一句ARP广播:“谁是IP为192.168.1.2的主机?“,此时收到这个广播的是交换机的端口,就是连接主机A的那个端口,交换机会将arp广播从其他端口发送出去,当主机B收到这个吆喝时,就会答应一句:“寡人便是!”,而其他主机就会不理睬,这个回答同样会通过连接B主机的交换机端口发送,然后这个回答是ARP单播,这样交换机端口也记录下了相应端口有B主机的mac地址。此时单播抵达了A主机,A主机的arp缓存便记录下了B主机的mac地址。之后的通信中,由于主机A已经有了B的MAC地址,交换机也在相应端口有记录,主机A就可以直接进行单播通信了。
所以交换式局域网进行通信时,虽然有arp广播的存在,但是只要不进行通信,就不会得知其他设备的MAC。
以前的共享式局域网通信,采用HUB连接,半双工通信,那种局域网会记录比较多的存活设备,因为无论谁只要通信过,都会在局域网内进行广播,所有主机都能知道它在“说话“,也就知道了这个主机的存在。
首先在你电脑开机后或者ARP缓存表老化后,本地ARP缓存表里面不会有对应的表项。当你去ping一台主机时电脑会判断你ping的目标地址与你本地地址是否在同一网段,如果是在同一网段则查本地ARP缓存表是否有对应的ARP表项,有则封装数据包发出去,没有则ARP广播泛洪请求目标Mac地址,对端设备收到后查看ARP广播报文判断是否是给自己的,不是给自己的丢弃并将源Mac记录在ARP缓存表里面,是给自己的则发送ARP应答报文并将源MAC记录在ARP缓存表里面,本地主机收到ARP应答后会将目标主机MAC记录在自己的ARP缓存表里面。