互联网上的两台主机HostA 和 HostB想要进行通信的流程,那么主机A将需要知道自己的ip,mac 以及主机B的ip, mac。但是主机B的mac地址主机A是不知道的,于是主机A如果将他自己的IP与子网掩码进行 & 与运算得到一个ip1, 然后将主机B的ip与这个子网掩码进行相同运算得到一个ip2, 如果ip1 等于 ip2, 那么此时A与B属于同一子网。否则不属于一个子网。
- 两台主机在同一个子网:
那么主机A就将数据包中Destination Mac地址设置为FF:FF:FF:FF:FF:FF,这是一个广播地址。交换机(switch) 发现这个广播地址,于是就将数据包发给子网内所有的主机。当然这里会做一些优化,比如主机会记录一个arp表,他是其他主机的ip和mac地址的映射,如果查到目标ip对应的mac地址,则无需广播,可以直接进行通信。
- 两台主机不在同一子网:(自己的理解,不一定正确,网上查了好多资料,感觉都没说清楚)
此时主机A将目标的mac地址设置为子网的路由器的mac地址,那么如果路由器收到该数据包,发现目标的mac地址与自己的mac地址相同,但发现ip地址与自己的不同,那么它知道这个数据包不是发给他的,所以重复上述过程,他会用自己的ip和子网掩码与目标的ip进行判断,看看目标主机是不是跟自己(路由器)在同一个网段内,如果在的话,直接将目标mac地址设置为广播地址,广播给当前网段内的所有主机;否则将目标mac地址设置为下一级的路由器的mac设备。依次往下一级路由器转发,直到找到目标主机为止。
可以看得出,这是一个递归的过程。当然这里还涉及到最短路径算法,就不在此展开了。
更多细节,请查看:【计算机网络】不同网段内主机如何通信