标题：地址解析协议
定义
地址解析协议（Address Resolution Protocol，ARP）是在仅知道主机的IP地址时确  地址解析协议定其物理地址的一种协议。因IPv4和以太网的广泛应用，其主要用作将IP地址翻译为以太网的MAC地址，但其也能在ATM( 异步传输模式)和FDDIIP(Fiber Distributed Data Interface 光纤分布式数据接口)网络中使用。从IP地址到物理地址的映射有两种方式：表格方式和非表格方式。ARP具体说来就是将网络层（IP层，也就是相当于OSI的第三层）地址解析为数据连接层（MAC层，也就是相当于OSI的第二层）的MAC地址。
FAQ
1. 什么是ARP?
ARP (Address Resolution Protocol) 是个地址解析协议。最直白的说法是：在IP-以太网中，当一个上层协议要发包时，有了节点的IP地址，ARP就能提供该节点的MAC地址。
2. 为什么要有ARP？
OSI 模式把网络工作分为七层，彼此不直接打交道，只通过接口(layer interface). IP地址在第三层, MAC地址在第二层。协议在发送数据包时，得先封装第三层（IP地址），第二层（MAC地址）的报头, 但协议只知道目的节点的IP地址，不知道其MAC地址，又不能跨第二、三层，所以得用ARP的服务。
3. 什么是ARP cache? 
ARP cache 是个用来储存(IP, MAC)地址的缓冲区。当ARP被询问一个已知IP地址节点的MAC地址时，先在ARP cache 查看，若存在，就直接返回MAC地址，若不存在，才发送ARP request向局域网查询。
4. ARP 有什么命令行？
常用的包括：（格式因操作系统、路由器而异，但作用类似）- 显示ARP cache: show arp; arp -a - 清除ARP cache: arp -d；clear arp。
举例
计算机A的IP为192.168.1.1，MAC地址为00-11-22-33-44-01；
计算机B的IP为192.168.1.2，MAC地址为00-11-22-33-44-02；
原理
在TCP/IP协议中，A给B发送IP包，在报头中需要填写B的IP为目标地址，但这个IP包在以太网上传输的时候，还需要进行一次以太包的封装，在这个以太包中，目标地址就是B的MAC地址.
计算机A是如何得知B的MAC地址的呢？解决问题的关键就在于ARP协议。
在A不知道B的MAC地址的情况下，A就广播一个ARP请求包，请求包中填有B的IP(192.168.1.2)，以太网中的所有计算机都会接收这个请求，而正常的情况下只有B会给出ARP应答包，包中就填充上了B的MAC地址，并回复给A。
A得到ARP应答后，将B的MAC地址放入本机缓存，便于下次使用。
本机MAC缓存是有生存期的，生存期结束后，将再次重复上面的过程。
ARP协议并不只在发送了ARP请求才接收ARP应答。当计算机接收到ARP应答数据包的时候，就会对本地的ARP缓存进行更新，将应答中的IP和MAC地址存储在ARP缓存中。因此，当局域网中的某台机器B向A发送一个自己伪造的ARP应答，而如果这个应答是B冒充C伪造来的，即IP地址为C的IP，而MAC地址是伪造的，则当A接收到B伪造的ARP应答后，就会更新本地的ARP缓存，这样在A看来C的IP地址没有变，而它的MAC地址已经不是原来那个了。由于局域网的网络流通不是根据IP地址进行，而是按照MAC地址进行传输。所以，那个伪造出来的MAC地址在A上被改变成一个不存在的MAC地址，这样就会造成网络不通，导致A不能Ping通C！这就是一个简单的ARP欺骗。
Arp显示和修改
“地址解析协议 (ARP)”缓存中的项目。ARP 缓存中包含一个或多个表，它们用于存储 IP 地址及其经过解析的以太网或令牌环物理地址。计算机上安装的每一个以太网或令牌环网络适配器都有自己单独的表。如果在没有参数的情况下使用，则 arp 命令将显示帮助信息。 
windows中arp命令详解
语法 
arp[-a [InetAddr] [-N If_Addr]] [-g [InetAddr] [-N If_Addr]] [-d InetAddr [If_Addr]] [-s InetAddr EtherAddr [If_Addr]] 
参数 
-a[ InetAddr] [ -N If_Addr] 
显示所有接口的当前 ARP 缓存表。要显示特定 IP 地址的 ARP 缓存项，请使用带有 InetAddr 参数的 arp -a，此处的 InetAddr 代表 IP 地址。如果未指定 InetAddr，则使用第一个适用的接口。要显示特定接口的 ARP 缓存表，请将 -N If_Addr 参数与 -a 参数一起使用，此处的 If_Addr 代表指派给该接口的 IP 地址。-N 参数区分大小写。 
-g[ InetAddr] [ -N If_Addr] 
与 -a 相同。 
-d InetAddr [If_Addr] 
删除指定的 IP 地址项，此处的 InetAddr 代表 IP 地址。对于指定的接口，要删除表中的某项，请使用 IfaceAddr 参数，此处的 IfaceAddr 代表指派给该接口的 IP 地址。要删除所有项，请使用星号 (*) 通配符代替 InetAddr。 
-s InetAddr EtherAddr [IfaceAddr] 
向 ARP 缓存添加可将 IP 地址 InetAddr 解析成物理地址 EtherAddr 的静态项。要向指定接口的表添加静态 ARP 缓存项，请使用 If_Addr 参数，此处的 If_Addr 代表指派给该接口的 IP 地址。 
/? 
在命令提示符下显示帮助。 
注释 
? InetAddr 和 If_Addr 的 IP 地址用带圆点的十进制记数法表示。 
? EtherAddr 的物理地址由六个字节组成，这些字节用十六进制记数法表示并且用连字符隔开（比如，00-AA-00-4F-2A-9C）。 
? 通过 -s 参数添加的项属于静态项，它们不会 ARP 缓存超时。如果终止 TCP/IP 协议后再启动，这些项会被删除。要创建永久的静态 ARP 缓存项，请将适当的 arp 命令置于批处理文件中，并使用“任务计划”在启动时运行该批处理文件。 
示例 
要显示所有接口的 ARP 缓存表，可键入： 
arp -a 
对于指派的 IP 地址为 10.0.0.99 的接口，要显示其 ARP 缓存表，可键入： 
arp -a -N 10.0.0.99 
要添加将 IP 地址 10.0.0.80 解析成物理地址 00-AA-00-4F-2A-9C 的静态 ARP 缓存项，可键入： 
arp -s 10.0.0.80 00-AA-00-4F-2A-9C[1]
应用
在网络执法官中，要想限制某台机器上网，只要点击“网卡”菜单中的“权限”，选择指定的网卡号或在用户列表中点击该网卡所在行，从右键菜单中选择“权限”，在弹出的对话框中即可限制该用户的权限。对于未登记网卡，可以这样限定其上线：只要设定好所有已知用户（登记）后，将网卡的默认权限改为禁止上线即可阻止所有未知的网卡上线。使用这两个功能就可限制用户上网。其原理是通过ARP欺骗发给被攻击的电脑一个假的网关IP地址对应的MAC，使其找不到网关真正的MAC地址，这样就可以禁止其上网。
防御
ARP欺骗可以导致目标计算机与网关通信失败；
更可怕的是会导致通信重定向，所有的数据都会通过攻击者的机器，因此存在极大的安全隐患。
基于PC到PC的IP-MAC双向绑定可以解决ARP欺骗
但是对于不支持IP-MAC双向绑定的设备
就需要用可以绑定端口-MAC的交换来预防ARP欺骗
另外，Windows 2KSP4 XPSP1 的Arp-S绑定是无效的
Windows XP SP2即使使用Arp -s命令静态绑定在攻击者故意制造IP地址冲突的时候，也会失效。