arp协议

 通过广播根据IP地址查找mac地址 

命令arp 

-a<主机>:显示arp缓冲区的所有条目;
-H<地址类型>:指定arp指令使用的地址类型;
-d<主机>:从arp缓冲区中删除指定主机的arp条目;
-D:使用指定接口的硬件地址;
-e:以Linux的显示风格显示arp缓冲区中的条目;
-i<接口>:指定要操作arp缓冲区的网络接口;
-s<主机><MAC地址>:设置指定的主机的IP地址与MAC地址的静态映射;
-n:以数字方式显示arp缓冲区中的条目;
-v:显示详细的arp缓冲区条目,包括缓冲区条目的统计信息;
-f<文件>:设置主机的IP地址与MAC地址的静态映射。

(1)TCP/IP的32bit IP地址。仅知道主机的IP地址不能让内核发送数据帧给主机。

  (2)网络接口的硬件地址,它是一个48bit的值,用来标识不同的以太网或令牌环网络接口。在硬件层次上,进行数据交换必须有正确的接口地址,内核必须知道目的端的硬件地址才能发送数据。

在TCP编程中,两端通信之前,需要先通过ARP(地址解析协议)协议来确定指定IP的机器的物理地址,也就是它的网卡的硬件地址(MAC),MAC地址长度为48位,在网卡出厂的时候固化在网卡里面的,可以通过命令 ifconfig来查看网卡地址。ARP协议的数据报格式如下:


                 图4 ARP数据报格式

     比如当我们运行命令 ping 192.168.1.100,那么需要先arp协议获取192.168.1.100这个ip对应的MAC地址,下面是一个ARP协议的请求和响应包。通常操作系统会有ARP缓存,所以一次请求后,只要缓存没有过期,下次就可以从缓存中取而不需要发送ARP请求来获取目的IP地址的MAC地址了。

  比如当我们运行命令 ping 192.168.1.100,那么需要先arp协议获取192.168.1.100这个ip对应的MAC地址,下面是一个ARP协议的请求和响应包。通常操作系统会有ARP缓存,所以一次请求后,只要缓存没有过期,下次就可以从缓存中取而不需要发送ARP请求来获取目的IP地址的MAC地址了。

请求包


                      图5 ARP请求包

响应包


             图6 ARP响应包

对照前面贴出来的以太网帧格式,很容易分析这两个数据包。如以太网帧的头部包含的14个字节,分别是目的地址,源地址以及协议类型。最初因为不知道目的ip地址的mac地址,所以目的地址填的是ff:ff:ff:ff:ff:ff进行广播,协议类型是0x0806。而ARP协议的内容可以参照上图,分布是硬件类型(以太网,标志1),协议类型为IPV4(0x0800),硬件地址长度(6个字节),协议地址长度(IPV4,4个字节),操作码(ARP请求类型为1,ARP响应类型为2),发送方的MAC地址(本机mac地址),发送方ip地址(请求包里是192.168.1.106,响应包是192.168.1.100),目标MAC地址(请求时不知道目标MAC地址,所以填全0,响应包会填写目标MAC地址),目标IP地址(请求包是192.168.1.100,响应包是192.168.1.106)。


猜你喜欢

转载自blog.csdn.net/tiandao321/article/details/80830271