CRC校验,ARP协议及ARP抓包

来源:互联网 发布:vb label 透明 编辑:程序博客网 时间:2024/05/17 08:50

一 CRC校验

1.是什么

在实际的通信链路中,比特在传输过程中会出现差错,比如说1变成了0,0变成了1.我们把这种现象叫做比特差错。传输错误的比特占所传输比特总数的比率称为误码率(bit error rate).因此,为了保证数据传输的可靠性,计算机在传输数据的时候会进行差错检验,在数据链路层使用较为广泛的就是循环冗余检验(CRC)。

2.如何算

我们在发送一个数据X的时候,先把数据划分为几个组,假设每个组有m个比特,CRC校验就是在数据X的后面加上供差错检验用的n位冗余码,然后构成一个帧在发出去,这样的话就一共发送了(m+n)位。接下来我们要解决的问题就是,如何求这n位冗余码。(1)在数据X的后面添加上n个0,得到(m+n)位的数除以事先双方约定好的长度为(n+1)位的除数p,得出商是T,余数是R。如果R=0,则判断这个帧没有差错就接受,否则说明这个帧有错,但是并不能知道是哪一位出现差错了,所以我们只能丢弃。

3.举例

现在要传输数据101001,一共有6位,假设除数是p=1101,p的位数是n+1位,所以我们这里的n就是3,也就是说我们要在101001后面加3个0得到101001000,然后对他进行模2运算,得到余数是001。此时我们要发送的帧就成了101001001.但由于,这个余数是001不等于0,所以会被丢弃。

二 ARP协议

1.概念

地址解析协议(ARP)可以依据机器的IP地址找出它的物理地址。与它所对应的还有一个协议叫逆地址解析协议(RARP)根据物理地址去找IP地址。

2.应用

ARP在高速缓存中存放一个从IP地址到硬件地址的映射表,并且这个映射表还会动态更新。每一个主机都设有一个高速缓存,里面有本局域网的各主机和路由器的IP地址到硬件地址的映射表。

当主机A要向本局域网上的某个主机B发送IP数据的时候偶,就会先在其ARP高速缓存中找B的IP地址,如果有就在ARP上查到它的硬件地址,在把这个硬件地址写入mac帧,然后通过通过局域网把这个mac帧发往此硬件地址,如果没找到,则需要以下几个步骤:

(1)ARP进程在本局域网上广播发送一个ARP请求分组。(相当于我现在要找一个人,然后我叫了一个人)

(2)在本局域网上的所有主机上运行的ARP进程都收到了此ARP请求分组。(在场的人都能听到我在叫谁)

(3)主机B发现ARP请求分组里有自己的IP地址,知道这是在找自己呢,于是主机B就向主机A发送ARP响应分组,

         并写入自己的硬件地址。(我叫的那个人知道我在叫他,并给我一个回应,其它人则不理睬)

(4)主机A收到了主机B的ARP响应后,就在其ARP高速缓存中写入主机B的IP地址到硬件地址的映射。(我找到了那个人   ,然后完成接下来要完成自己的事情)

3.ARP协议的四种典型情况

(1)发送方是主机,要把IP数据发送到本网络上的另一个主机,这时用ARP协议找到目的主机的硬件地址。

(2)发送方是主机,要把IP地址发送到另一网络的主机上,这是用ARP找到本网络上的一个路由器的硬件地址。

(3)发送方是路由器,要把IP地址转发到本网络的一个主机。这时用ARP找到目的主机的硬件地址。

(4)发送方是路由器,要把地址发送到另一网络的一个主机上,这时用ARP找到本网络上的一个路由器的硬件地址。

三 ARP抓包

结果:

心得总结:

首先在敲这些代码的时候一定要注意空格,我在编译的时候光空格报错就有几处。另外如果你的代码出现了command not found这个问题,可能是在配置环境是出现了问题,我们有如下两个办法去解决

(1)手动加上我们所需要的东西,一些环境变量

(2)我们可以通过so命令从普通用户切到超级用户,但是你说写的文件必须也是root下的,你可能只切换到了超级用户,但之前的那个文件的路径并不在ROOT,此时需要su空格 - 这样的形式,使得完全到root下,在写一个文件,到了这里,我再次编译,出现的权限问题,使用(chmod  u+x 文件名 )这样的命令去修改文件的权限,即给文件的拥有者加上可执行这个权限。再次编译就有了我们所需要的结果。