首先附上百度百科的arp协议总结:
https://baike.baidu.com/item/ARP/609343?fromtitle=ARP协议&fromid=1742212&fr=aladdin
本篇博客是我个人在学习网络课程时记录的笔记,与百度百科结合而写。
OSI模型把网络工作分为七层,IP地址在OSI模型的第三层,MAC地址在第二层,彼此不直接打交道。在通过以太网发送IP数据包时,需要先封装第三层(32位IP地址)、第二层(48位MAC地址)的报头,但由于发送时只知道目标IP地址,不知道其MAC地址,又不能跨第二、三层,所以需要使用地址解析协议。使用地址解析协议,可根据网络层IP数据包包头中的IP地址信息解析出目标硬件地址(MAC地址)信息,以保证通信的顺利进行。
IP地址---->MAC地址
1.在以太网中,主机A广播发出ARP(1)请求,包含主机A的IP地址,MAC地址,目的主机B的IP地址;
2.通过APR协议进行地址解析,在数据链路层封装后,传入物理层;
3.在下图以太网中,由于以太网是广播的方式发送请求,则B,C,D三台主机都能收到。C,D两台主机对比数据报中的目的IP和自己的IP是否匹配,发现不匹配则丢弃该ARP数据包,B主机的IP地址与数据报中目的IP地址匹配,则B主机接受后会产生响应:相应包括B主机的IP地址和MAC地址。
4.源主机A收到相应后记录B的MAC地址,完成地址解析。
由于每次有主机发送数据时,都是采用广播的形式,所以会造成资源的浪费。而ARP Cache(高速缓存)则解决了该问题。
在所有主机上(A/B/C/D)都有ARP Cache,当有主机发送数据时,先查找缓存,如果没有目标主机的信息,则进行广播。广播时,该源主机的IP地址和MAC地址都会被存入其他主机的ARP Cache中。
!!!另外,当源主机和目的主机不在同一网络中时(不同网段),通过源主机通过ARP协议获得的是与源主机相连的路由器的MAC地址,而不是目的地址的MAC地址。
ARP地址转换表是依赖于计算机中高速缓冲存储器动态更新的,而高速缓冲存储器的更新是受到更新周期的限制的,只保存最近使用的地址的映射关系表项,这使得攻击者有了可乘之机,可以在高速缓冲存储器更新表项之前修改地址转换表,实现攻击。ARP请求为广播形式发送的,网络上的主机可以自主发送ARP应答消息,并且当其他主机收到应答报文时不会检测该报文的真实性就将其记录在本地的MAC地址转换表,这样攻击者就可以向目标主机发送伪ARP应答报文,从而篡改本地的MAC地址表。 ARP欺骗可以导致目标计算机与网关通信失败,更会导致通信重定向,所有的数据都会通过攻击者的机器,因此存在极大的安全隐患。
这里是我的理解:
当源主机上没有缓存时,才会广播来获得目的主机的MAC地址,广播后该以太网内的所有主机都收到请求,就会有主机进行假冒,将非真是MAC地址返回给源主机,实现修改地址转换表,完成攻击。
1.实现网络可达性检查
2.网络时延测量
3.网络路由选择
4.网络安全排查等
在ICMP的概念介绍中,我们知道了它是用于传递控制消息的,通过这些控制消息,能告诉通信双方主机关于网络方面的许多讯息。
ICMP提供一致易懂的出错报告信息。发送的出错报文返回到发送原数据的设备,因为只有发送设备才是出错报文的逻辑接受者。发送设备随后可根据ICMP报文确定发生错误的类型,并确定如何才能更好地重发失败的数据包。但是ICMP唯一的功能是报告问题而不是纠正错误,纠正错误的任务由发送方完成。
我们在网络中经常会使用到ICMP协议,比如我们经常使用的用于检查网络通不通的Ping命令(Linux和Windows中均有),这个“Ping”的过程实际上就是ICMP协议工作的过程。还有其他的网络命令如跟踪路由的Tracert命令也是基于ICMP协议的。
ICMP报文包含在IP数据报中,属于IP的一个用户,IP头部就在ICMP报文的前面,所以一个ICMP报文包括IP头部、ICMP头部和ICMP报文,IP头部的Protocol值为1就说明这是一个ICMP报文,ICMP头部中的类型(Type)域用于说明ICMP报文的作用及格式,此外还有一个代码(Code)域用于详细说明某种ICMP报文的类型,所有数据都在ICMP头部后面。
这里只需要理解ICMP报文是被封装到IP报文中进行传输的即可。
差错控制报文又分为:
1.终点不可达
2.时间超过
3.源站抑制
4.参数问题
5.路由重定向
询问报文又分为:
回送请求和回答报文
时间戳请求和回答报文
掩码地址请求和回答报文
路由器询问和通告报文
(1) ping 命令使用 ICMP 回送请求和应答报文在网络可达性测试中使用的分组网间探测命令 ping 能产生 ICMP 回送请求和应答报文。目的主机收到 ICMP 回送请求报文后立刻回送应答报文,若源主机能收到 ICMP 回送应答报文,则说明到达该主机的网络正常。
(2)路由分析诊断程序 tracert 使用了 ICMP时间超过报文tracert 命令主要用来显示数据包到达目的主机所经过的路径。通过执行一个 tracert 到对方主机的命令,返回数据包到达目的主机所经历的路径详细信息,并显示每个路径所消耗的时间。
大大的小小阳