ARP:

我们知道,网络层和网络层以上使用的是IP地址,但在实际网络的链路上传送数据帧时,数据包首先是被网卡接受到再去处理上层协议的,所以最终还是必须使用该网络的硬件地址。但IP地址和下面的网络的硬件地址之间由于格式不同而不存在简单的映射关系(例如,IP地址有32位,而局域网的硬件地址是48位)。此外,在一个网络上可能经常会有新的主机加进来,或撤走一些主机。更换网络适配器也会使主机的硬件地址改变。地址解析协议(ARP)解决这个问题的方法是,在主机ARP高速缓存中应存放一个从IP地址到硬件地址的映射表,并且这个映射表还经常动态更新(新增或超时删除)。

每一台主机都设有一个ARP高速缓存,里面有本局域网上的各主机和路由器的IP地址到硬件地址的映射表,这些都是该主机目前知道的一些地址。

以太网帧(RFC 894)格式:

其中的源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的。用ifcong命令看一下,“HWaddr 00:0C:28:0F:35:E3 ”部分就是硬件地址。帧协议类

型字段有三种值,分别对应IP、ARP、RARP。帧末尾是CRC校验码。

以太网帧中的数据长度规定最小46字节,最大1500字节,ARP和RARP数据包的长度不够46字节,要在后面补填充位。最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU,如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation)。ifcong命令的输出中也有“MTU:1500”,MTU这个概念指数据帧中有效载荷的最大长度,不包括帧首部的长度。

ARP数据报的格式如下:

源MAC地址、目的的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。

硬件类型指链路层网络类型,1为以太网,协议类型指要转换的地址类型,0x0800为IP地址,后面两个地址长度对于以太网地址和IP地址分别为6和4(字节),op字段为1表示ARP请求,op字段为2表示ARP应答。

例:请求帧如下(为了清晰在每行的前面加了字节计数,每行16个字节):

以太网首部(14字节)

0000: ff ff ff ff ff ff   00 05 5d 61 58 a8   08 06

ARP帧(28字节)

0000: 00 01

0010: 08 00   06 04  00 01  00 05 5d 61 58 a8  c0 a8 00 37

0020: 00 00 00 00 00 00   c0 a8 00 02

填充位(18字节)

0020: 00 77 31 d2 50 10

0030: fd 78 41 d3 00 00 00 00 00 00 00 00

以太网首部:目的主机采用广播地址,源主机的MAC地址是00:05:5d:61:58:a8,上层协议类

型0x0806表示ARP。

ARP帧: 硬件类型0x0001表示以太网,协议类型0x0800表示IP协议,硬件地址(MAC地址)长度为6,协议地址(IP地址)长度为4,op为0x0001表示请求目的主机的MAC地址(arp),源主机MAC地址 00:05:5d:61:58:a8,源主机IP地址为c0 a8 00 37(192.168.0.55),目的主机MAC地址全0待填写,目的主机IP地址为c0 a8 00 02(192.168.0.2)。

例:若当前链路层网络类型为以太网,网络层协议为IP协议,

以太网源地址为MAC1,源IP地址为IP1,

以太网目的地址为MAC2,目的IP地址为IP2.

则ARP请求帧应为:                                          ARP应答帧:

以太网目的地址:ff ff ff ff ff ff                 以太网目的地址:MAC1

以太网源地址:MAC1                                 以太网源地址:MAC2

帧类型:0806                                             帧类型:0806

硬件类型:以太网(0001)                            硬件类型:以太网(0001)

协议类型:IP协议(0800)                        协议类型:IP协议(0800)

硬件地址长度:6  个字节                            硬件地址长度:6个字节

协议地址长度: 4 个字节                            协议地址长度:4个字节

op: 1                                                         op:2

发送端以太网地址:MAC1                            发送端以太网地址:MAC2

发送端IP地址:IP1                                     发送端IP地址:IP2

目的以太网地址:00 00 00 00 00 00            目的以太网地址:MAC1

目的IP地址:IP2                                        目的IP地址:IP1

转载于:https://www.cnblogs.com/zhangbing12304/p/10729737.html

ARP的一次请求与应答相关推荐

  1. arp 项删除失败: 请求的操作需要提升。_ccna必懂篇-arp协议工作原理详解。

    本次呢,要说的是arp协议,那么什么是arp协议呢?有什么作用呢? 什么是arp ARP(Address Resolution Protocol)地址解析协议,地址解析协议由互联网工程任务组(IETF ...

  2. DMA 请求/应答协议

    文章目录 (1)握手模式 (2)单步模式 (3)完整服务模式 (4)需求模式 这里主要讲述4种类型的DMA请求/应答协议. (1)握手模式    在握手模式下,一个单独的DMA请求信号对应一个DMA应 ...

  3. etcd 笔记(05)— etcd 代码结构、各模块功能、整体架构、各模块之间的交互、请求和应答流程

    1. etcd 项目结构和功能 etcd 项目代码的目录结构如下: $ tree ├── auth ├── build ├── client ├── clientv3 ├── contrib ├── ...

  4. ARP的超时重新请求

    文章目录 1 原理 2 代码实现 1 原理 问题:ARP表项是否一直有效? 实现原理如下: 2 代码实现 先看下代码组织结构: prot_pcap.c中增加如下代码: /*** 获取自程序启动以来,过 ...

  5. icmp时间戳请求和应答程序实现_ICMP报文详解之ping实现

    ping是向网络主机发送ICMP回显请求(ECHO_REQUEST)分组,是TCP/IP协议的一部分.主要可以检查网络是否通畅或者网络连接速度快慢,从而判断网络是否正常. ping命令底层使用的是IC ...

  6. ARP实验(ARP请求、回应包结构与ARP代理配置)

    ARP实验 要求 过程 要求 1.在本地电脑搭建环境进行ARP实验,要求能实现查看ARP请求与回应.ARP代理; 2.分析ARP请求与回应的报文结构,分析免费ARP的报文结构特征; 3.实现ARP代理 ...

  7. ARP原理概述——基于WinPcap发送ARP请求数据包获取远程MAC地址

    ARP原理概述--基于WinPcap发送ARP请求数据包获取远程MAC地址 ARP协议 ARP概述 ARP工作原理 ARP数据包格式 编写程序发送ARP请求获取本机和远程IP的MAC 注意: ARP协 ...

  8. 使用JMS实现请求/应答程序

    2019独角兽企业重金招聘Python工程师标准>>> JMS是用来为发送者和接收者解耦的: 消息通过一个进程发送给代理,然后代理在另外一个进程异步的接收消息,一种可以利用JMS来实 ...

  9. 使用SOCK_PACKET编写ARP请求程序的例子

    2010-01-14 11:06:35|  分类: linux program |  标签: |字号大中小 订阅 使用SOCK_PACKET编写ARP请求程序的例子 本节利用SOCK_PACKET套接 ...

最新文章

  1. java android aes加密解密_AES加密解密在JAVA和ANDROID下互通
  2. android 开发 gradle 自己会容易混淆的东西
  3. (89)FPGA三分频设计,面试必问(十三)(第18天)
  4. java 确定对象的引用_JVM学习笔记之了解对象存活判断和4种引用【三】
  5. numpy—np.repeat、np.roll
  6. Java 连接sql server
  7. SQLServer2008R2密钥
  8. [TLSR8266] 1、搭建tlsr8266编译框架在win服务器中
  9. 一份优秀的大数据开发简历是怎么样的?
  10. React移动web极致优化
  11. oracle PL/SQL 这些查询结果不可更新,请包括ROWID或使用SELECT ...FOR UPDATE 获得可
  12. python3实战练习:快递价格计算器
  13. faststone image viewer64位 v6.6
  14. 解决Redis错误MISCONF Redis is configured to save RDB snapshots
  15. matlab 定义自然数变量,matlab数值数据和变量名
  16. 神州优车上云之路:如何在效率、质量和成本三方面达到平衡?
  17. 保险保费基本计算规则
  18. Beta测试与Alpha测试的区别?
  19. List去重 排序 多list 穿插筛选 (java 8)
  20. 神舟电脑为什么这么便宜

热门文章

  1. 我去德国出差后学习的一些德语
  2. 关于Tomcat如何处理Open Redirect的问题
  3. SAP CRM产品主数据工作流相关调试
  4. 如何在ABAP Netweaver和CloudFoundry里记录并查看日志
  5. php 查看文件锁定状态_php文件锁死锁怎么办
  6. 用iframe transform: scale() 缩小后点不到按钮_“打分”或者“打多少分”用英文可以怎样去表达?...
  7. mysql数据库 on 命令_MySql 数据库基础命令
  8. FIR设置过采样率 matlab,Xilinx FIR IP的介绍与仿真
  9. 语言求余和乘除优先级_愉快地学Java语言:第二章基本程序设计 第2讲
  10. php解析api xml并输出到html页面,怎样操作JS读取xml内容并输出到div内