逻辑地址和物理地址:
- ①逻辑地址就是通常在上层表示远端计算机的一个地址,即ip地址,ip地址并不是真实的计算机地址,只是一个用来映射的符号而已,就好像我们可以用ip地址来访问某一个网页,同样也可以用一个网站URL来访问,其实本质上都是dict中的一个字符串key而已,真正的物理地址,在value上。真正的地址即链路层用来传输的地址,这个地址即mac地址,是一串十六进制的符号。一开始物理层也只是知道自己的mac地址而已,并不知道对端的,这个时候,就需要有一种方式来根据ip地址(网络名字)来找到物理地址。这个协议就是地址解析协议ARP。
- ②获取对端mac地址的方法是:先发送一组广播,里面写了对端的ip和本机的ip和mac,收到广播的机器(限于局域网内部),会先检查自己是否是对方要求的ip,如果不是,则不做任何操作,如果是,则以单播的形式,回复一个消息,告知mac地址,这一套一来一回两个消息的协商的过程,就是arp地址解析协议的所有功能了。
- ③本地arp缓存,接收到以后为了避免每次都进行这种网络交互,影响连接建立的时间,本地机器都会进行相应的arp缓存,每次先从缓存中检查是否有,没有再进行arp协商。所以网络通信最最关键的是mac地址,而不是ip地址,因为底层比如网卡这些硬件需要的mac地址,ip地址仅仅只是给上层用的一个字符串而已,可以标识出局域网等属性,否则就用一个字符串来表示一台机器也是可以的。
- ④非局域网的场景:理论上不在一个网段内,广播是收不到的,通常会被路由器截断,路由器如果开启了arp代理的功能,就会把自己伪装成原来的目标,并将自己的mac返回给发起方,这个就是路由器的arp代理功能,发起方以为自己真的找到了目标机器,实际上只是路由器帮忙进行转发而已,当然,这个功能是递归的,即路由器可能又去在自己的网段内广播,又会有一个新的arp代理等,通过一层层代理转发,最终访问到目标机器。总之,在地址层面上,网络通信基础还是mac地址,并不是ip。