传输数据时为什么同时需要MAX地址和IP地址
在数据传输时,并不是直接从起始地址直接传到目标地址,这中间有很多中转站(交换机、路由器等)。每到达一个中转站,MAX帧中的源MAX地址改为当前设备(中转站)的MAX地址,目标MAX地址改为下一个设备(中转站或目的地)的MAX地址,而IP地址保持不变。
从主机A到主机B的通信过程:
结论:MAX地址决定数据下一次会发送到哪个中转站,IP地址决定最终目的地。
ARP协议(地址解析协议)的工作方式
当我们知道通讯目标的IP地址时,如何请求到对方的MAX地址呢?以广播的形式向网内所有主机讯问xxx.xxx.xxx.xxx IP的MAX地址是多少(ARP请求),其他主机收到请求后查看自己的IP是否是对方请求的IP,若IP相同则应答自己的MAX地址(ARP应答),若不相同则丢包。但是请求和应答并不是对应的,当有多个应答时,后到的应答会覆盖先到的应答。
每台主机都维护一个ARP缓存表,可以用arp -a命令查看,arp -s指定静态地址,arp -d删除静态地址。
这种方式不够安全,其他主机可以通过ARP欺骗截获目标主机的信息。
例如:路由器广播192.168.0.11的MAX地址是多少时,目标主机A回复M1。此时,有其他主机B回应M2,路由器会将M1删除,设置目标MAX地址为M2。之后路由器会将所有流向A主机的数据流向主机B。B主机收到数据后,再将数据转发到主角A,防止主机A察觉。
P2P终结者、网络执法官都是通过ARP欺骗实现。ARP防火墙通过将第一个MAX地址记录并锁死,拒绝后续的MAX地址,并提示ARP欺骗,来起到防御的作用。
关于ARP欺骗详细操作请参考:https://blog.csdn.net/shanzhizi/article/details/9995391
ARP数据报格式
以太网首部:
字段 长度(Byte) 默认值 备注
接收方MAC 6 广播时,为 ff-ff-ff-ff-ff-ff
发送方MAC 6
Ethertype 2 0x0806 0x0806是ARP帧的类型值
ARP包:
字段 长度(Byte) 默认值 备注
硬件类型 2 0x1 以太网类型值
上层协议类型 2 0x0800 上层协议为IP协议
MAC地址长度 1 0x6 以太网MAC地址长度为 6
IP地址长度 1 0x4 IP地址长度为 4
操作码 2 0x1表示ARP请求包,0x2表示应答包
发送方MAC 6
发送方IP 4
接收方MAC 6
接收方IP 4
填充数据 18 因为物理帧最小长度为64字节,前面的42字节再加上4个CRC校验字节,还差18个字节
此段来自:https://blog.csdn.net/shanzhizi/article/details/9995489
RARP协议(逆向ARP)
知道MAX地址,通过广播请求自己的IP地址。
- 给主机发送一个本地的RARP广播,在此广播包中,声明自己的MAX地址并且请求任何收到此请求的RARP服务器分配一个IP地址;
- 本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址;
- 如果存在,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用;如果不存在,RARP服务器对此不做任何的响应;
- 源主机收到从RARP服务器的响应信息,就利用得到的IP地址进行通讯;如果一直没有收到RARP服务器的响应信息,表示初始化失败。