ARP协议以及CRC校验

来源:互联网 发布:数据恢复 被覆盖 恢复 编辑:程序博客网 时间:2024/05/20 19:30

地址解析协议(ARP)

网络中每个主机都有一个唯一的物理地址(又称为硬件地址)进行标识。TCP/IP协议支持异构的物理网络连接,低层的差异由IP层屏蔽,即在IP层通过IP地址(由称逻辑地址)实现对主机的统一标识。换言之,IP层通过IP地址来标识IP地址来标识主机,而网络接口层通过MAC地址来标识主机。因此,MAC地址与IP地址之间有了一定的对应关系,只要网卡不变,主机的物理地址则不变,而IP地址可以变化。
地址解析协议ARP就是根据某主机得IP地址解析出其物理地址。它使得主机能够在只知道同一物理网络上(也可以是跨网)某个主机IP地址的情况下,获得该主机的物理地址。

ARP数据报

数据报格式

这里写图片描述
在下面举例说明用ARP请求和应答的时候,我们以 IP1,MAC1为源; IP2, MAC2为目的;求的就是MAC2;
硬件类型指的是链路层网络类型,1为以太网,协议类型指要转换的地址类型,op字段为1表示ARP请求,op字段为2表示ARP应答;

ARP发送请求数据报

这里写图片描述
当发送请求的时候,我们并不知道目的地址的MAC,所以是广播的ARP请求,所有的网卡都会抓取这个广播请求,然后与自己的IP地址进行比较,只有IP地址对应上的进行ARP请求处理,将IP地址转换为MAC地址,下次发送应答信号,其他的IP接收到与自己的IP进行比对以后丢弃它;
所以,我们已经能够转换出MAC2,然后需要给发送端返回一个应答信号,告诉发送端,我接收到,并且执行完了;

ARP发送应答数据报

这里写图片描述

ARP抓取主机mac地址

#!/bin/bashi=1count=0while [ $i -le 254 ]do    if [ $count -gt 20 ];then        count=0        sleep 2    fi    ping -c1 "192.168.138.$i" &    let i++    let count++done

每隔2秒对IP进行一次Ping;
这里写图片描述

CRC校验

1、CRC校验原理
CRC校验原理的根本思想就是先在发送的帧后面附加一个数(这个数就是用来校验的校验码,但是要注意,这里的数是二进制序列的),生成一个新帧发送给接收端。当然这个数不是随便添加的,它要使所生成的新帧能与发送端和接收端共同选定某个特定数整除(这里采用的是模2除法)。到达接收端后,再把接收到的新帧模2除法,为在发送端发送数据帧之前就已通过附加一个数,做了“去余”处理(也就已经能整除了),所以结果应该是没有余数。如果有余数,则表明该帧在传输过程中出现了差错。
【说明】“模2除法”与“算术除法”类似,但它既不向上位借位,也不比较除数和被除数的相同位数值的大小,只要以相同位数进行相除即可。模2加法运算为:1+1=0,0+1=1,0+0=0,无进位,也无借位;模2减法运算为:1-1=0,0-1=1,1-0=1,0-0=0,也无进位,无借位。相当于二进制中的逻辑异或运算。也就是比较后,两者对应位相同则结果为“0”,不同则结果为“1”。如100101除以1110,结果得到商为11,余数为1,如图左图所示。如11×11=101,如右图所示。
这里写图片描述
具体来说,CRC校验原理就是以下几个步骤:
(1)先选择(可以随机选择,也可按标准选择,具体在后面介绍)一个用于在接收端进行校验时,对接收的帧进行除法运算的除数(是二进制比较特串,通常是以多项方式表示,所以CRC又称多项式编码方法,这个多项式也称之为“生成多项式”)。
(2)看所选定的除数二进制位数(假设为k位),然后在要发送的数据帧(假设为m位)后面加上k-1位“0”,然后以这个加了k-1个“0“的新帧(一共是m+k-1位)以“模2除法”方式除以上面这个除数,所得到的余数(也是二进制的比特串)就是该帧的CRC校验码,也称之为FCS(帧校验序列)。但要注意的是,余数的位数一定要是比除数位数只能少一位,哪怕前面位是0,甚至是全为0(附带好整除时)也都不能省略。
(3)再把这个校验码附加在原数据帧(就是m位的帧,注意不是在后面形成的m+k-1位的帧)后面,构建一个新帧发送到接收端;最后在接收端再把这个新帧以“模2除法”方式除以前面选择的除数,如果没有余数,则表明该帧在传输过程中没出错,否则出现了差错。
2、 CRC校验码的计算示例
由以上分析可知,既然除数是随机,或者按标准选定的,所以CRC校验的关键是如何求出余数,也就是校验码(CRC校验码)。
下面以一个例子来具体说明整个过程。现假设选择的CRC生成多项式为G(X) = X4 + X3 + 1,要求出二进制序列10110011的CRC校验码。下面是具体的计算过程:
(1)首先把生成多项式转换成二进制数,由G(X) = X4 + X3 + 1可以知道(,它一共是5位(总位数等于最高位的幂次加1,即4+1=5),然后根据多项式各项的含义(多项式只列出二进制值为1的位,也就是这个二进制的第4位、第3位、第0位的二进制均为1,其它位均为0)很快就可得到它的二进制比特串为11001。

(2)因为生成多项式的位数为5,根据前面的介绍,得知CRC校验码的位数为4(校验码的位数比生成多项式的位数少1)。因为原数据帧10110011,在它后面再加4个0,得到10110011**0000**,然后把这个数以“模2除法”方式除以生成多项式,得到的余数(即CRC码)为0100,如图所示。注意参考前面介绍的“模2除法”运算法则。
这里写图片描述
(3)把上步计算得到的CRC校验0100替换原始帧10110011**0000**后面的四个“0”,得到新帧10110011**0100**。再把这个新帧发送到接收端。
(4)当以上新帧到达接收端后,接收端会把这个新帧再用上面选定的除数11001以“模2除法”方式去除,验证余数是否为0,如果为0,则证明该帧数据在传输过程中没有出现差错,否则出现了差错。

原创粉丝点击