1、首先理解几个名词
1.1:MAC地址:网卡地址,每个网络设备都有,由12个16进制数字组成。全球唯一值。电脑使用cmd命令打开控制台,使用ipconfig/all命令可查看自己电脑的mac地址。
1.2:以太网协议:是一种通信协议标准,详细信息可自己百度,此处只说明以太网可简单分为含两部分,以太网帧头,以太网数据。以太网头包含目的MAC地址,源MAC地址。(实际以太网帧还包含前导码,起始界定符,以太网帧头,以太网数据,校验位)
1.3:ARP协议(Address Resolution Protocol:地址解析协议):在同一子网络中,查询对方MAC地址的一种协议。一个ARP请求包含四个内容,如下图。
ARP协议为广播协议,向统一局域网内所有机器发送请求,接收方如果发现请求的目的ip与自己的ip相同,则返回接收方的ip以及MAC地址,否则忽略。发送方收到会之后,将ip以及对应的MAC地址缓存。
2、请求过程:
首先需要明确,请求数据包和ARP数据包是两种数据包,请求数据包包含ARP请求数据包外还包含请求数据,ARP请求只包含上图地址。
2.1:局域网内部:电脑A局域网ip为IP_A,MAC地址为MAC_A,局域网内服务器B,B的ip地址为IP_B,MAC地址为MAC_B。
假如A发送数据包请求,目的MAC地址是MAC_B,缓存中没有MAC_B地址,此时,主机A先将数据包缓存,然后向局域网内所有机器发送ARP广播请求,目的MAC地址为FF:FF:FF:FF:FF:FF,目的ip为IP_B,B发现ip地址是自己的。首先将A的IP和MAC地址缓存,然后返回ARP响应,告诉A自己的IP地址和MAC地址。A收到B的响应后,首先将IP_B和MAC_B缓存,然后将先前缓存的数据包加上MAC_B后重新发送。B收到数据包请求后,返回对应的响应。
2.2:局域网中跨网段访问:电脑A局域网ip为IP_A,MAC地址为MAC_A,局域网内服务器B,B的ip地址为IP_B,MAC地址为MAC_B。电脑A所在局域网网关IP地址为GATEWAY_IP,MAC地址为MAC_GATEWAY,
假如A没有缓存,A发送数据包请求,目的ip为MAC_B,发现地址缓存中没有对应值,先将数据包放入数据包缓存中,在发送广播ARP,也没有响应,说明目的机器不在局域网内部。那么A向网关发送数据包请求(假定网关IP已缓存),数据包请求内容如下
网关收到请求后,首先将MAC_A,IP_A(随后响应会应用)放入地址缓存中,然后解析包,发现MAC地址是自己的,但是ip地址不是,所以网关会查询自己的地址缓存,发现没有对应值,所以发送ARP请求获取IP_B的地址,发送的ARP请求如下
B收到请求,首先将IP_A,MAC_GATEWAY放入自己的地址缓存中,发现ip地址是自己的,返回自己的MAC地址。网关收到返回的MAC地址后,将先前数据从缓存中取出,添加mac_B后重新发送。
B收到请求,MAC地址和ip与自己的对应。返回响应。响应内容如下
网关收到后,发现mac地址是自己的,但是ip不是,所以从内存中找出ip对应的mac地址。并将发送端的mac地址换成自己的。重新发送给A
此时,整个请求过程结束。
综上所述,可以理解为,
1、ARP请求是根据ip获取MAC地址的一个广播协议,如果机器中没有一个ip的地址缓存,那么就会发送一个ARP协议,获取ip对应的mac地址。
2、网关在请求转发的过程中,mac地址是不断变化的,但是ip地址是不变的。