wireshark学习-ARP
ARP用于问对方的ip地址
ping一下,抓包一下
字面意思,谁是1.2这个地址?给我回复一下mac,我是1.1
1.2的地址在我这,我的mac地址是...
言简意赅
ping完了之后会建立一个缓存表,暂时保存ip地址与mac的映射关系,不然还得一遍一遍问,被ping的那一边也会建立起这个表。
还有个用法,叫做免费arp
当pc配置好一个新的地址之后(比如配置192.168.1.1),并不会直接使用,而是会发一个arp包,问:谁有192.168.1.1这个地址?如果没人搭理它,说明这个网络里192.168.1.1这个地址没被其他人使用,这个时候pc才会正式启用这个地址。
对了,顺便一提,windows电脑在没配置静态ip地址也没拿到dhcp分配的地址的时候,会自动配置一个暂时的169.254.x.x网段地址,防止自己裸奔连二层互通的pc都不能通信。
哈哈,骗你的,只有同样169.254网段的裸奔pc才能通信
因为电脑自动配置169.254地址的时候根本不会配置网关,直接就是个空的,因此下面图中的pc8哪怕和pc9二层互通,也发不出包,为啥?
因为你要给一个ip地址发包,要先进行arp,问问人家的mac地址吧,但是pc8一看这地址,我去,是192.168.1.1,跟我不是一个网段!肯定是跨三层的!那我arp问问网关的mac地址吧,我让网关帮我转发,一查,AUV,我根本没网关啊,那没事了。
因此pc8根本一个包都不会发出去,连arp都不会发。
那是不是手动配置一个网关就好了?可以在电脑的cmd界面使用这行代码来添加静态路由
route add 192.168.1.0 mask 255.255.255.0 169.254.1.1 //当主机要访问 192.168.1.x 的任意 IP 时,应该把数据包发送给 169.254.1.1,由它(作为下一跳路由器)负责转发。169.254.1.1根本不存在呀,所以也不行。
下面再来看一个跨网段的arp
先用arp -d清除一下arp缓存表,不然已经知道mac地址的情况是不会发arp的
路由器顺便也清一下 reset arp all
开始ping
pc1一看2.1这个地址和自己不是同一网段的,于是直接把icmp发给网关,但是不知道网关的mac地址,于是去查网关的mac地址
网关(也就是路由器)拿到了icmp,一看,目的地址是2.1,于是去查路由表,发现一个符合的都没有,于是直接按默认路由发,路由表上写的,默认路由的下一跳是10.10.10.2这个地址
但是arp缓存表里没有,于是发arp问
问到了之后就把icmp发给了另一台路由器,另一台路由器拿到了icmp之后依旧是先看自己的路由表,哎,找到了,下一跳是192.168.2.254
再仔细一看,哎,这不是我自己的接口地址吗,居然还是up的,说明好使,那也就是说,我和192.168.2.1是二层互通的呀
于是直接发arp问2.1的mac地址
然后pc2就收到了icmp,往回发给pc1的时候,就不用一个一个都发arp问了,因为刚才问完了之后都缓存到arp表里了。
注意,这一套流程下来,每个设备的arp表里都只有和自己二层互通的地址的mac地址
