ARP协议简介:

ARP协议能实现任意网络层地址到任意物理地址的转换,此次讨论从IP地址到以太网地址(MAC地址)的转换。其工作原理是:主机向自己所在的网络广播一个ARP请求,该请求包含目标机器的网络地址。此网络上的其他机器都将收到这个请求,但只有被请求的目标机器会回应一个ARP应答,其中包含自己的物理地址。

1.搭建网络环境,见下图


用了两个虚拟机系统来充当两个结点主机进行通信,搭建完环境之后测试一下网络的连通性。

在主机192.168.0.141下面输入:ping 192.168.0.125进行测试

2.分别用ifconfig命令输出两个主机的IP和MAC地址信息,见下图

3.两个主机都打开echo服务

打开echo服务的具体步骤见博客:http://blog.csdn.net/linux_ever/article/details/50515632

4.用arp命令查看arp缓存,并用arp -d 192.168.0.125删除缓存

在主机192.168.0.141用arp -d 192.168.0.125删除缓存


5.在主机192.168.0.141登陆主机192.168.0.125的echo服务并监听帧

首先:在主机192.168.0.141下监听收到的帧

root@linux_ever:~# tcpdump -i eth0 -ent '(dst 192.168.0.125 and src 192.168.0.141) or (dst 192.168.0.141 and src 192.168.0.125)'


其次:在主机192.168.0.141下另外一个终端中输入telnet 192.168.0.125 echo, 登陆主机192.168.0.125的echo服务,登陆成功之后输入quit退出。此时我们可以看到tcpdump监听到的帧。


监听命令:

由tcpdump抓取的数据包本质上是以太网帧,我们通过该命令的众多选项来控制帧的过滤(比如用dst和src指定通信的目的端IP地址和源端IP地址)和显示(比如用-e选项开启以太网帧头部信息的显示)。


登陆命令:

6.分析arp数据包

第一个数据包中,ARP通信的源端的物理地址是08:00:27:23:9c:b4(主机1:192.168.0.141),目的端的物理地址是ff:ff:ff:ff:ff:ff,这是以太网的广播地址帧。数值0x806是以太网帧头部的类型字段的值,它表示分用的目标是ARP模块。
“Request”表示这是一个ARP请求,“who-has 192.168.1.125 tell 192.168.1.141”则表示是主机1:192.168.0.141要查询主机2:192.168.0.125的MAC地址。

该以太网帧的长度为42字节(实际上是46字节,tcpdump未统计以太网帧尾部4字节的CRC字段),其中数据部分长度为28字节。

第二个数据包中,ARP通信的源端的物理地址是08:00:27:5e:44:7e(主机2:192.168.0.125),目的端的物理地址是08:00:27:23:9c:b4(主机1:192.168.0.141)。

“Reply表示这是一个应答,“192.168.0.125 is-at 08:00:27:5e:44:7e”则表示目标机器主机2:192.168.0.125报告其物理地址。

该以太网帧的长度为60字节(实际上是64字节,tcpdump未统计以太网帧尾部4字节的CRC字段),可见它使用了填充字节来满足最小帧长度。

7.以太网ARP请求/应答报文详解

1、硬件类型字段定义物理地址的类型,它的值为1表示MAC地址。
2、协议类型字段表示要映射的协议地址类型,它的值为0x800,表示IP地址。
3、硬件地址长度字段和协议地址长度字段,顾名思义,其单位是字节。对MAC地址来说,其长度为6;对IP(v4)地址来说,其长度为4。
4、操作字段指出4种操作类型:ARP请求(值为1)、ARP应答(值为2)、RARP请求(值为3)和RARP应答(值为4)。
5、最后4个字段指定通信双方的以太网地址和IP地址。发送端填充除目的端以太网地址外的其他3个字段,以构建ARP请求并发送之。接收端发现该请求的目的端IP地址是自己,就把自己的以太网地址填进去,然后交换两个目的端地址和两个发送端地址,以构建ARP应答并返回之(当然,如前所述,操作字段需要设置为2)。
6、ARP请求/应答报文的长度为28字节。如果再加上以太网帧头部和尾部的18字节,则一个携带ARP请求/应答报文的以太网帧长度为46字节。不过有的实现要求以太网帧数据部分长度至少为46字节,此时ARP请求/应答报文将增加一些填充字节,以满足这个要求。在这种情况下,一个携带ARP请求/应答报文的以太网帧长度为64字节。

Linux 使用tcpdump观察arp通信过程的更多相关文章

  1. Wireshark - 观察 ARP 地址解析过程

    下面使用 Wireshark 分析 ARP 的工作过程.试验的机器:发送者机器(IP 地址:10.21.28.47,MAC 地址:68:f7:28:0f:32:2e)下文称为 HOSTA:目标机器(I ...

  2. ARP通信

    ARP:地址解析协议,是根据IP地址获取物理地址的一个TCP/IP协议 简单介绍ARP通信过程: 1.发送端在与接收端进行数据通信转发时的过程: 发送端与接收端进行数据通信之前,需要先知道对端的MAC ...

  3. tcp/ip 卷一 读书笔记(5)arp和rarp 同网段和不同网段之间的通信过程

    arp和rarp 同网段和不同网段之间的通信过程 IPv6中已经没有arp rarp协议,所以这里都是IPv4. 链路层使用以太网地址来确定目的地址,应用则常使用ip地址通信 arp协议是指从ip地址 ...

  4. linux下tcpdump命令详解

    简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的 ...

  5. 从wireshake分析http和https的通信过程

    参考文章: Wireshark基本介绍和学习TCP三次握手 [技术流]Wireshark对HTTPS数据的解密 Wireshark/HTTPS Journey to HTTP/2 以TCP/IP协议为 ...

  6. 网络中两台主机的通信过程(TCP)

    两台主机通信有两种情况:1.在同一网段中 2.不在同一网段中 (1.)在同一网段的通信过程 主机在应用层上的操作: TCP/IP协议上tcp的端口对应的各种应用程序,客户机要访问某个应用程序就会要求打 ...

  7. TCP/IP基础概念及通信过程举例

    TCP/IP基础概念及通信过程举例 出现 上个世纪60年代,由于中央集中式网络的容灾性较弱,以美国国防部为中心的一家组织研究出分组交换网络.后来为了验证分组交换技术的实用性,ARPANET出现了,并且 ...

  8. ZLL本地局域网通信过程

    Interface_srpcserver -----以灯的状态操作位例 网关与客户端通过Socket API通信,Socket API在socket_server.c中实现,socket_server ...

  9. 通过gdb跟踪Linux内核装载和启动可执行程序过程

    作者:吴乐 山东师范大学 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验目的:通过对一个简单的可执 ...

随机推荐

  1. Windows Nodejs 安装教程

    Windows Nodejs 安装教程 1: 访问官方地址 https://nodejs.org/en/download/ 2: 解压压缩包文件到指定目录 我直接把压缩包解压到C盘根目录下,并将文件夹 ...

  2. J - Scarily interesting! URAL - 2021

    This year at Monsters University it is decided to arrange Scare Games. At the Games all campus gathe ...

  3. python如何将指定路径下的某类型文件,返回一个树形结构体,让前端显示为树形的目录结构

    最近遇到一个问题就是某个linux的目录下有各种文件现在的要求是只需要返回.kml格式的文件,并根据前端要求返回如下结构体即:[{'children': [{'children': [{'title' ...

  4. log4donet 的 一篇简单使用实例

    背景 最近在写一个Adapter,需要调用别的程序的DLL. Adapter使用的是C#还有.net的等方面的技术.今天在写log这块,就像尝试一下有没有“轮子”可以试试的.在网上搜罗了一番之后,决定 ...

  5. Flex中宽度计算

    flex 有三个属性值,分别是 flex-grow, flex-shrink, flex-basis,默认值是 0 1 auto. 发现网上详细介绍他们的文章比较少, 今天就详细说说他们,先一个一个看 ...

  6. seajs源码

    /*** Sea.js 3.0.0 | seajs.org/LICENSE.md 中文注释由 李祥威 添加,为个人对细节的理解,官方解释很详细的地方就不说了 难免有错漏,联系我: chuangweil ...

  7. SqlServer 数据库附加问题:不是主数据库文件

    一.前言 今天公司要切换数据库服务器,数据库文件大于2G,结果再附加到另一服务器的数据库里面,就产生了一个问题.如下: 标题:Microsoft SQL Server Management Studi ...

  8. 向ASP.NET Core迁移

    有人说.NET在国内的氛围越来越不行了,看博客园文章的浏览量也起不来.是不是要转Java呢? 没有必要扯起语言的纷争,Java也好C#都只是语言是工具,各有各的使用场景.以前是C#非开源以及不能在Li ...

  9. mybatis取数据库为null的字段

    数据库中存在int型的字段,但是初始值为null,mybatis取值之后就会报错, org.apache.ibatis.binding.BindingException: Mapper method ...

  10. C#读取数据库返回泛型集合(DataSetToList)

    一般我们用使用ADO.NET查询数据库返回泛型集合使用SqlDataReader逐行读取数据存入对象 代码 }