专门做孩子早教的网站,在网站开发中进行用户管理,沂seo网站推广,汕头建总前言
本博客是博主用于复习计算机网络的博客#xff0c;如果疏忽出现错误#xff0c;还望各位指正。
这篇博客是在B站掌芝士zzs这个UP主的视频的总结#xff0c;讲的非常好。
可以先去看一篇视频#xff0c;再来参考这篇笔记#xff08;或者说直接偷走#xff09;。
…前言
本博客是博主用于复习计算机网络的博客如果疏忽出现错误还望各位指正。
这篇博客是在B站掌芝士zzs这个UP主的视频的总结讲的非常好。
可以先去看一篇视频再来参考这篇笔记或者说直接偷走。
一条视频讲清楚什么是ARP协议-ARP攻击又是什么_哔哩哔哩_bilibili 前篇
计算机网络——MAC地址和IP地址-CSDN博客计算机网络——交换机和路由器-CSDN博客计算机网络——网络地址转换NAT技术-CSDN博客计算机网络——TCP和UDP协议-CSDN博客计算机网络——DHCP协议-CSDN博客 引言
想必大家时常会听到ARP协议、ARP攻击等概念。到底ARP协议是什么 什么是ARP协议。
还是以写信举例子经常写信的同学都知道信封上有两个关键的字段需要填写一个是收件人一个是收件地址。
假设我只写收件人是张三不知道张三的地址那么这封信是无法寄到的。
在这种情况下聪明的同学都会先打电话给张三问一下张三的地址然后填写到信封上那么这封信就可以正常寄出了。
在网络世界中也是这样的收件人就是IP地址而收件地址就是MAC地址。
计算机每发出一包数据都需要填写数据链路层的源MAC、目标MAC和网络层的源IP、目标IP这四个参数。
一般情况下IP地址都是由用户指定的源MAC是本机的那目标MAC是如何获取的呢
那就是ARP协议了。对应刚才举过的例子ARP会帮我们打电话给目标IP并查询他的MAC地址。
所以总结一句话ARP协议就是通过IP地址查询MAC地址的协议。
ARP帧结构
ARP帧结构的字段说明
下面是ARP数据帧的结构及各个字段的说明
目的MAC地址6字节指示ARP请求或响应的目标设备的物理MAC地址。在ARP请求中这个字段通常被设置为全0表示请求的目标MAC地址未知。在ARP响应中这个字段包含目标设备的真实MAC地址。
源MAC地址6字节指示ARP请求或响应的发送设备的物理MAC地址。
帧类型2字节指示数据帧中所携带的上层协议类型对于ARP数据帧该字段的值为0x0806。
硬件类型2字节指示硬件地址的类型如以太网的硬件类型为1。
协议类型2字节指示上层协议类型如IPv4的协议类型为0x0800。
硬件地址长度1字节指示硬件地址的长度以字节为单位如以太网的地址长度为6。
协议地址长度1字节指示协议地址的长度以字节为单位如IPv4地址的长度为4。
操作码2字节指示ARP请求或响应的类型如请求为1响应为2。
发送方硬件地址6字节指示ARP请求或响应的发送设备的物理MAC地址。
发送方协议地址4字节指示ARP请求或响应的发送设备的协议地址如IPv4地址。
目标硬件地址6字节指示ARP请求或响应的目标设备的物理MAC地址。在ARP请求中该字段通常被设置为全0表示请求的目标MAC地址未知。在ARP响应中该字段包含目标设备的真实MAC地址。
目标协议地址4字节指示ARP请求或响应的目标设备的协议地址如IPv4地址。 要注意的是操作码Opcode字段在ARP请求帧中操作码字段的值为1表示请求。而在ARP响应帧中操作码字段的值为2表示响应。目标MAC地址Target MAC Address字段在ARP请求帧中目标MAC地址字段被设置为全0表示请求的目标MAC地址未知。而在ARP响应帧中这个字段包含了目标设备的真实MAC地址。
ARP协议的工作流程
假设我们有一台计算机A它的IP地址是192.168.1.0。
现在计算机A需要向192.168.1.11发送一包UDP报文。
此时操作系统会把这一包UDP报文暂存接着用ARP协议去查询对方的MAC地址。
主机A会通过网络向外广播一包ARP请求报文请求报文中源MAC和源IP都是主机A的目标MAC是要通过目标IP查询的这时候ARP协议中目标IP也就是192.168.1.11目标MAC是一个全零的MAC地址。
注意这些是ARP协议的内容属于网络层数据链路层的目标MAC地址是全F的地址表示在数据链路层进行广播。
这一帧请求报文发出后会在网络中广播网络中的所有计算机都可以收到这一帧请求报文。
收到报文的计算机会解析报文查看目标IP地址。
如果跟自己的IP地址相同那么说明自己需要对这一报文应答。
比如计算机B就是192.168.1.11它收到后会生成一帧ARP回复报文在回复报文中会填入自己的MAC地址。这一帧报文是使用单播的方式进行回复的。
回复报文被主机A收到后从中解析出主机B的MAC地址并把之前暂存的UDP数据取出填入目标MAC地址后正常的发送这样就完成了这帧UDP报文的发送。
当然并不是每次都需要执行这个查询步骤的通过ARP协议查询到的MAC地址会写入到主机的ARP表中缓存起来下次再往192.168.1.11发送数据可以直接从ARP表中查询到其MAC地址即可。
若查询不到才需要再执行上述的ARP查询步骤。
总结就是
主机A需要发送数据到目标主机B但只知道目标主机的IP地址。在发送数据之前主机A首先检查本地的ARP缓存表看是否已经有目标IP地址对应的MAC地址。如果有则可以直接使用该MAC地址发送数据。如果ARP缓存表中没有目标IP地址对应的MAC地址主机A会发送一个ARP请求广播。ARP请求包含主机A的MAC地址、IP地址和目标IP地址以及一个操作码指示这是一个ARP请求。所有收到ARP请求的主机都会检查目标IP地址是否与自己匹配。如果目标IP地址与自己匹配则该主机会将自己的MAC地址作为响应发送给主机A。主机A收到ARP响应后会更新本地的ARP缓存表将目标IP地址和MAC地址的映射关系存储起来。主机A现在知道了目标主机B的MAC地址可以使用该MAC地址发送数据包到目标主机B。主机B收到数据包后进行相应的处理和响应。 IP地址变更操作
比如当前网络中有3台主机主机A、主机B和主机C他们的IP分别是192.168.1.10 、192.168.1.11和192.168.1.12。
当前已经互相发现了对方ARP表已经完成填充并且通信也很正常。
这时我们把主机B和主机C的IP地址通过手动设置互换一下。
此时对于主机A来说它的ARP表并没有发生变化它将往192.168.1.11发送数据。
从ARP表查询到的是主机B的MAC地址数据发送出去之后这一帧数据会被送到主机B上。
实际上现在主机C的IP地址才是192.168.1.11主机B收到这一帧数据后会直接丢弃。
实际上真实情况不是这样的。
我们先回到初始状态在这种情况下当设置完主机的IP地址后操作系统会主动向网络中广播一包免费IP数据包。
这一包数据不需要回复目的就是告诉网络中的所有其他主机当前的IP地址和MAC地址的绑定关系。
每一台收到免费ARP的主机自己更新自己的ARP表就好了。
这样网络中的其他设备几乎都能立即更新IP地址和MAC地址的映射关系了。 什么是ARP攻击
假设我们现在有这么一个网络这个网络中有多台计算机通过交换机互相通信同时通过一台路由器连接到了互联网上。
假设路由器的IP地址是192.168.1.1主机A的IP地址是192.168.1.10。
主机A所有访问互联网的数据包不管是TCP协议还是UDP协议都要通过路由器发送到互联网上。
也就是说在主机A上所有的数据包中数据链路层的目标MAC地址都是路由器的MAC地址。
当然这个MAC地址也是通过ARP协议查询网关的IP192.168.1.1得到的。
假设此时网络中另一台主机比如主机C它的IP是192.168.1.11它一直在网络中广播一包免费ARP包这帧IP报文中伪造了其IP地址是192.168.1.1(也就是路由器的MAC地址)MAC地址是自己这一帧免费ARP包发送到网络中之后相当于告诉网络中的其他主机192.168.1.1在我这里。
主机A收到后按照我们上面讲的内容主机A会误认为192.168.1.1的MAC地址改了从而修改自己的ARP表。
这样所有正常通信的数据包填写的目标MAC地址都会变成主机C的MAC地址这些数据包都会被发送到主机C上从而导致主机A无法正常上网。
这就是一个典型的ARP攻击的案例。
发生ARP攻击后会导致网络中所有设备都无法正常访问。互联网防御ARP攻击是一件非常困难的事情因为这种ARP欺骗报文无法有效的进行检测。
最简单的方法还是配置静态ARP通过静态配置的方式将网关的IP地址和MAC地址绑定。这种方法虽然普通用户操作起来也有一定难度但确实是最简单行之有效的方法。