ARP 原理
1.同一个子网内:
    我们以主机A(192.168.1.1)向主机B(192.168.1.2)发送数据为例。
    当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到了,也就知道了目标MAC地址,直接把目标MAC地址写入帧里面发送就可以了;
    如果在ARP缓存表中没有找到相对应的IP地址,主机A就会在网络上发送一个广播,目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询问:“192.168.1.2的MAC地址是什么?”网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应:“192.168.16.2的MAC地址是bb-bb-bb-bb-bb-11”。这样,主机A就知道了主机B的MAC地址,它就可以向主机B发送信息了。
    同时它还更新了自己的ARP缓存表,下次再向主机B发送信息时,直接从ARP缓存表里查找就可以了。ARP缓存表采用了老化机制,在一段时间内如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。

2 不同子网ARP
    当源主机要和外网段的主机进行通信时,它并不需要获取远程主机的MAC地址,而是把IP分组发向缺省网关,由网关IP分组的完成转发过程。如果源主机没有缺省网关MAC地址的缓存记录,则它会通过ARP协议获取网关的MAC地址,因此在A的ARP表中只观察到网关的MAC地址记录,而观察不到远程主机的MAC地址。
  
扩展式学习:
    当数据包封装到网络层的时间数据包的IP包头已经有了源IP地址和目的IP地址.到了数据链路层就不同了,当目的地址和源地址不在一个段的时候,ARP产生作用,它会把目的IP解析为网关的IP......
然后,返回网关的MAC地址从而完成链数层的封装.然后再从物理层到达网关.当网关收到该数据包的时候,会重新再封装帧头.在整个过程中目的IP始终未变.
   网关会继续查看目的IP是否可以通过自己转发,如果不能则丢弃包.如果可以则网关重新再封装数据包.主要是对帧头进行重新封装,而重新封装后的包的目的MAC地址则是下一跳的互联接口的MAC地址.
   一直重复该过程直到数据包到达目的地.
 
3.MS_DOS下
命令  “arp -a”可查看ARP缓存表中内容
      “arp -d”可删除ARP表中某一行内容
      “arp -s”可手动绑定ARP表中指定IP地址与MAC地址的对应
  
ARP***的表现
  1.使用校园网时突然掉线,过一段时间后恢复正常。IE浏览器频繁出错,以及一些常用软件出现故障等。
  2.如果校园网是通过身份认证上网的,会突然出现可认证,但不能上网的现象(无法ping通网关)
 
ARP***的原理
   
    ARP欺骗分为二种,一种是对路由器ARP表的欺骗;另一种是对内网PC的网关欺骗。
    1.第一种ARP欺骗的原理是——截获网关数据。它不断向路由器发送一系列错误的内网MAC地址,使真实信息无法通过更新保存在路由器中,造成正常PC无法收到信息。   
    2.第二种ARP欺骗的原理是——伪造网关。它是建立假网关,让被它欺骗的PC向假网关发数据,使PC无法上网.
 
 
ARP***的解决办法
 
1.“ CTRL ”+“ ALT ”+“ DEL ”键,“任务管理器”,“进程”
察看有没“ MIR0.dat ”的进程。有,已经中毒。“结束进程”.
2."开始","运行","cmd","ipconfig/all"记录网关IP地址; "ARP -a"记录网关对应MAC地址
正常上网时,次MAC正确. 无法上网时,该MAC为毒源计算机MAC.
3."arp –s 网关 IP 网关物理地址"命令绑定ARP对应关系.
4."tracert -d 
[url]www.163.com[/url](任意网址)"命令,返回的第一行的IP地址为毒源IP.
5.使用Anti Arp Sniffer  软件
 
实验设计
  我们通过设计一个简单的实验来帮助学员更深入直观地理解上述三个知识点所涉及的基本概念与原理。在实验中,我们利用ping命令来检验主机间能否进行正常的双向通信。在“ping”的过程中,源主机向目标主机发送ICMP的Echo Request报文,目标主机收到后,向源主机发回ICMP的Echo Reply报文,从而可以验证源与目标主机能否进行正确的双向通信。
A与B为实验用的PC机,使用Windows2000 Professional作操作系统。

实验方案:
步骤1:
设置两台主机的IP地址与子网掩码:
A: 10.2.2.2 255.255.254.0
B: 10.2.3.3 255.255.254.0
两台主机均不设置缺省网关。
  用arp -d命令清除两台主机上的ARP表,然后在A与B上分别用ping命令与对方通信,在A与B上分别显示,
A: Reply from 10.2.3.3: bytes=32 time<10ms TTL=128
B: Reply from 10.2.2.2: bytes=32 time<10ms TTL=128
用arp -a命令可以在两台PC上分别看到对方的MAC地址。
  分析:由于主机将各自通信目标的IP地址与自己的子网掩码相“与”后,发现目标主机与自己均位于同一网段(10.2.2.0),因此通过ARP协议获得对方的MAC地址,从而实现在同一网段内网络设备间的双向通信。
 
步骤2:
将A的子网掩码改为:255.255.255.0,其他设置保持不变。
  操作1:用arp -d命令清除两台主机上的ARP表,然后在A上ping B,在A上显示结果为:Destination host unreachable
用arp -a命令在两台PC上均不能看到对方的MAC地址。
  分析1:A将目标设备的IP地址(10.2.3.3)和自己的子网掩码(255.255.255.0)相“与”得10.2.3.0,和自己不在同一网段(A所在网段为:10.2.2.0),则A必须将该IP分组首先发向缺省网关。由于A的缺省网关没有配置,无法对分组进行正确发送,因此显示“目标主机不可到达”。
  操作2:接着在B上ping A,在B上显示结果为:Request timed out 此时用arp -a命令可以在两台PC上分别看到对方的MAC地址。
  分析2:B将目标设备的IP地址(10.2.2.2)和自己的子网掩码(255.255.254.0)相“与”,发现目标主机与自己均位于同一网段(10.2.2.0),因此,B通过ARP协议获得A的MAC地址,并可以正确地向A发送Echo Request报文。但由于A不能向B正确地发回Echo Reply报文(原因见分析1),故B上显示ping的结果为“请求超时”。在该实验操作中,通过观察A与B的ARP表的变化,可以验证:在一次ARP的请求与响应过程中,通信双方就可以获知对方的MAC地址与IP地址的对应关系,并保存在各自的ARP表中。
步骤3:
  在前面实验的基础上,把A的缺省网关设为:10.2.2.1,网关的子网掩码为:255.255.0.0。
在A与B上分别用ping命令与对方通信,各自的显示结果为:
A: Reply from 10.2.3.3: bytes=32 time<10ms TTL=128
B: Reply from 10.2.2.2: bytes=32 time<10ms TTL=127
在A与B上分别用tracert命令追踪数据的传输路径,结果分别为:
A: tracert 10.2.3.3
Tracing route to 10.2.3.3 over a maximum of 30 hops:
1 <10 ms <10 ms <10 ms 10.2.2.1
2 <10 ms <10 ms <10 ms 10.2.3.3
Trace complete.
B: tracert 10.2.2.2
Tracing route to 10.2.2.2 over a maximum of 30 hops:
1 <10 ms <10 ms <10 ms 10.2.2.2
Trace complete.
  分析:如步骤2中的分析,由于A认为B与其不在同一个网段,故从A发向B的报文需要经过网关转发;而B认为A与其在同一个网段,故B不需要经过网关直接向A发送报文,从而可以观察到A与B双向通信时传输路径的不对称性。由于ping命令结果显示的是从目标主机返回的Echo Reply报文的TTL的值,而B收到从A返回的Echo Reply报文经过了网关的转发,所以在B中显示该IP报文的TTL值降为了127(从A发出的IP分组的TTL的初始值为128,每经过一个网关,TTL值减1)。
步骤4:
  用arp -d命令清除A中的ARP表,在A上ping一台外网段的主机,如中大的WWW Server(202.116.64.8),再用arp -a可观察到A的ARP表中只有缺省网关的MAC地址信息。
  分析:当源主机要和外网段的主机进行通信时,它并不需要获取远程主机的MAC地址,而是把IP分组发向缺省网关,由网关IP分组的完成转发过程。如果源主机没有缺省网关MAC地址的缓存记录,则它会通过ARP协议获取网关的MAC地址,因此在A的ARP表中只观察到网关的MAC地址记录,而观察不到远程主机的MAC地址。