ARP 是广播请求,单播响应
在一个范围内发出广播请求ARP
抓ARP包进行分析
ARP的数据包中,只有以太网和一个ARP
来看一下ping 里边有什么
里边有:以太网,IP,ICMP
先来看ARP的第一个who has 192.168.1.2?,这是一个请求包,点开以太网的头部看看有什么
第一行:目的地址,也就是广播,全部都是F。这就是MAC地址的广播地址,也就是要发给同一个网段(局域网内)的所有人
第二行:源的地址,它的MAC就是192.168.1.1的MAC?
再点开ARP
接下来的是请求的ARP的样子:
opcode,标记的是请求,因为我们的请求和相应都用一个ARP,所以结构都是一样的,便于区分的话,请求的话就在Op位标记为请求的,相应的就标记为响应的
sender MAC address:是发送端的MAC地址,发送端就可以理解为源MAC,即为192.168.1.1的MAC
sender IP address:源IP (192.168.1.1)
Target MAC address:这里是目标MAC,由于发送这个请求就是为了要求这个目的MAC,所以在请求包里边的目的MAC啥也没有,全为0
Target IP address:,目标的IP地址就是即将要请求的192.168.1.2
接下来看192.168.1.2是如何给它回复的:
以太网中的目的MAC已经不全是F了,也就是不是广播了,而是单播,这个单播的MAC地址是谁呢?是之前192.168.1.1 的MAC,1.2要给1.1回复,所以他的目的MAC是1.1的MAC。那么1.2是如何得知1.1 的MAc的呢?这是因为上边的请求包中有一个发送端的MAC和发送端的IP,因为是广播请求的,当我发现请求的目标是我的时候,就会把你的MAC和IP学习下来。这样的话,接下来,1.2就有资格给1.1 单播回复一个响应了(就像在广播里边喊小明到校长办公室里边来,小明听到后就会到校长办公室,其他人听见跟自己没有关系就不会理会)
ARP 中回复的部分
op变为响应,就会包含发送端的MAC和IP,目的端的MAC和IP
以上是在同一个网段内(同一个局域网内),进行广播请求单播响应,加入现在要请求的目的IP地址与请求的IP不在同一个广播域(比如192.168.2.2),所以这里的2.2就不会接收到1.1广播的请求(就像在两个学校一样,一个学校的广播另一个学校听不见)
通过路由器来进行转发(通过下一跳的机制来实现):
在网络中,每经过一个路由器,ARP就需要重新编写一个新的头部