当前位置: 首页 > news >正文

《TCP/IP详解 卷1:协议》之第四、五章:ARP RARP

目录

一、ARP && RARP 报文结构

1、ARP请求报文示例

2、ARP响应报文示例

3、RARP请求报文示例

4、RARP响应报文示例

5、关于 padding

6、免费ARP

二、tcpdump 的使用

1、基本语法

2、常用选项

3、常用过滤条件

三、arp 命令的使用

1、基本语法

2、常用选项

3、示例


一、ARP && RARP 报文结构

ARP 主要用于将 IP 地址解析为 MAC 地址,而 RARP 用于将 MAC 地址解析为 IP 地址。

RARP报文的格式与ARP报文非常相似,它们都使用相同的报文结构,主要区别在于帧类型的不同(ARP帧类型为0x0806,RARP帧类型为0x8035),以及操作码(Operation Code)字段值不同。报文结构如下:

字段长度(字节)说明
硬件类型2表示硬件地址类型,以太网为1
协议类型2表示协议地址类型,IPv4为0x0800
硬件地址长度1硬件地址(MAC地址)的长度,以太网为6字节
协议地址长度1协议地址(IP地址)的长度,IPv4为4字节
操作码2表示操作类型,1为ARP请求,2为ARP响应,3为RARP请求,4为RARP响应
发送方硬件地址6发送方的MAC地址
发送方协议地址4发送方的IP地址
目标硬件地址6目标设备的MAC地址
目标协议地址4目标设备的IP地址

1、ARP请求报文示例

以太网帧头

目的MAC地址源MAC地址类型
FF:FF:FF:FF:FF:FF00:11:22:33:44:550x0806(ARP协议)

ARP请求报文内容:

字段值(十六进制)说明
硬件类型0001以太网
协议类型0800IPv4
硬件地址长度06MAC地址长度
协议地址长度04IP地址长度
操作码0001ARP请求
发送方硬件地址00:11:22:33:44:55主机A的MAC地址
发送方协议地址C0:A8:01:64主机A的IP地址(192.168.1.100)
目标硬件地址00:00:00:00:00:00未知,用全0填充
目标协议地址C0:A8:01:C8主机B的IP地址(192.168.1.200)

2、ARP响应报文示例

以太网帧头

目的MAC地址源MAC地址类型
00:11:22:33:44:55AA:BB:CC:DD:EE:FF0x0806(ARP协议)

ARP响应报文内容

字段值(十六进制)说明
硬件类型0001以太网
协议类型0800IPv4
硬件地址长度06MAC地址长度
协议地址长度04IP地址长度
操作码0002ARP响应
发送方硬件地址AA:BB:CC:DD:EE:FF主机B的MAC地址
发送方协议地址C0:A8:01:C8主机B的IP地址(192.168.1.200)
目标硬件地址00:11:22:33:44:55主机A的MAC地址
目标协议地址C0:A8:01:64主机A的IP地址(192.168.1.100)

3、RARP请求报文示例

以太网帧头:

目的MAC地址源MAC地址类型
FF:FF:FF:FF:FF:FF00:11:22:33:44:550x8035(RARP协议)

RARP请求报文内容

字段值(十六进制)说明
硬件类型0001以太网
协议类型0800IPv4
硬件地址长度06MAC地址长度
协议地址长度04IP地址长度
操作码0003RARP请求
发送方硬件地址00:11:22:33:44:55无盘工作站的MAC地址
发送方协议地址00:00:00:00无盘工作站的IP地址(未知,用0.0.0.0填充)
目标硬件地址00:00:00:00:00:00未知,用全0填充
目标协议地址00:00:00:00未知,用0.0.0.0填充

注:无盘工作站没有本地存储设备,启动时需要从网络上的服务器获取操作系统映像。它们通过RARP请求一个IP地址,以便能够与服务器通信。

4、RARP响应报文示例

假设RARP服务器收到请求后,为无盘工作站分配了IP地址192.168.1.100,并发送一个RARP响应报文。

以太网帧头:

目的MAC地址源MAC地址类型
00:11:22:33:44:55服务器的MAC地址0x8035(RARP协议)

RARP响应报文内容

字段值(十六进制)说明
硬件类型0001以太网
协议类型0800IPv4
硬件地址长度06MAC地址长度
协议地址长度04IP地址长度
操作码0004RARP响应
发送方硬件地址服务器的MAC地址RARP服务器的MAC地址
发送方协议地址C0:A8:01:64RARP服务器的IP地址(192.168.1.1)
目标硬件地址00:11:22:33:44:55无盘工作站的MAC地址
目标协议地址00:00:00:00分配给无盘工作站的IP地址(192.168.1.100)

5、关于 padding

ARP数据为28字节,根据以太网帧最小负载长度为46字节的规定,需要 padding 18个字节。如下报文所示:

①、常见的几个字节长度解释:

46:以太网帧(Ethernet Frame)的最小数据负载长度。

60:46字节的基础上 +  14字节长度的以太网帧头。

64:60字节的基础上 +   4字节长度的以太网帧尾。

②、关于以下原文的解释:“其原因是我们在发送该以太网数据帧的系统(bsdi)上运行tcpdump命令。应用程序rarpd写42字节到BSD分组过滤设备上(其中14字节为以太网数据帧的报头,剩下的28字节是RARP应答),这就是tcpdump收到的副本。但是以太网设备驱动程序要把这一短帧填充空白字符以达到最小传输长度(60)。如果我们在另一个系统上运行tcpdump命令,其长度将会是60。” :

1、在本"主机A"上使用 tcpdump 捕获发包,捕获的是副本,没有经过以太网设备驱动程序的 padding 处理。

2、如果在另一台"主机B"上使用 tcpdump 捕获(接收)这个报文,是经过 padding 处理的,因为包在从“主机A”发出时,经过了以太网设备驱动程序的处理。

6、免费ARP

免费ARP报文结构:

免费ARP是一种特殊的ARP报文,报文的格式与普通ARP报文相同,但有一些特定的字段值。以下是报文的详细结构:

字段长度(字节)说明
硬件类型2硬件地址类型,以太网为1
协议类型2协议地址类型,IPv4为0x0800
硬件地址长度 1硬件地址长度,以太网为6字节
协议地址长度1协议地址长度,IPv4为4字节
操作码2操作类型,免费ARP通常使用2(ARP响应)
发送方硬件地址6发送方的MAC地址
发送方协议地址4发送方的IP地址
目标硬件地址6目标硬件地址,通常为发送方的MAC地址
目标协议地址4目标协议地址,通常为发送方的IP地址

假设设备A(IP地址为192.168.1.100,MAC地址为00:11:22:33:44:55)发送一个免费ARP报文,以下是报文的具体内容:

以太网帧头

字段值(十六进制)说明
目的MAC地址FF:FF:FF:FF:FF:FF广播地址
源MAC地址00:11:22:33:44:55设备A的MAC地址
类型0806表示这是一个ARP报文

ARP报文内容:

字段值(十六进制)说明
硬件类型0001以太网
协议类型0800IPv4
硬件地址长度06MAC地址长度
协议地址长度04IP地址长度
操作码0002ARP响应(免费ARP通常使用响应格式)
发送方硬件地址00:11:22:33:44:55设备A的MAC地址
发送方协议地址C0:A8:01:64设备A的IP地址(192.168.1.100)
目标硬件地址00:11:22:33:44:55设备A的MAC地址(免费ARP中通常与发送方MAC地址相同)
目标协议地址C0:A8:01:64设备A的IP地址(192.168.1.100)

目的MAC地址:免费ARP报文通常以广播形式发送,因此目的MAC地址为全1(FF:FF:FF:FF:FF:FF)。

操作码:免费ARP通常使用操作码2(ARP响应),而不是1(ARP请求)。这是因为免费ARP的目的是通告自己的IP和MAC信息,而不是请求其他设备的MAC地址。

目标硬件地址和目标协议地址:在免费ARP中,目标硬件地址和目标协议地址通常与发送方的硬件地址和协议地址相同。这是因为设备在通告自己的信息。

应用场景:

1、检测IP地址冲突:设备启动时发送免费ARP报文,如果收到响应,则表明网络中存在IP地址冲突。

2、更新ARP缓存表:当设备的MAC地址发生变化(如更换网卡)时,发送免费ARP报文以更新其他设备的ARP缓存表。

二、tcpdump 的使用

1、基本语法

tcpdump   [选项]   [过滤条件]

2、常用选项

  • -i <interface>:指定监听的网络接口。

    • 示例:tcpdump -i eth0(监听 eth0 接口的流量)。

  • -n:不解析主机名(显示 IP 地址而不是主机名)。

    • 示例:tcpdump -n(不解析主机名)。

  • -nn:不解析主机名和端口号(显示原始 IP 地址和端口号)。

    • 示例:tcpdump -nn(不解析主机名和端口号)。

  • -v:详细模式,显示更多报文信息。

    • 示例:tcpdump -v(显示详细信息)。

  • -vv:更详细模式,显示更多报文信息。

    • 示例:tcpdump -vv(显示更详细信息)。

  • -c <count>:捕获指定数量的报文后停止。

    • 示例:tcpdump -c 10(捕获 10 个报文后停止)。

  • -w <file>:将捕获的报文保存到指定文件中。

    • 示例:tcpdump -w capture.pcap(将捕获的报文保存到 capture.pcap 文件中)。

  • -r <file>:从指定文件中读取报文。

    • 示例:tcpdump -r capture.pcap(从 capture.pcap 文件中读取报文)。

  • -s <size>:设置捕获的报文大小(默认为 65535 字节)。

    • 示例:tcpdump -s 100(捕获每个报文的前 100 字节)。

  • -e:用于显示以太网帧的头部信息,包括源MAC地址、目的MAC地址以及以太网帧的类型等

    • 实例:tcpdump -e

3、常用过滤条件

  • host <IP>:捕获指定主机的报文。

    • 示例:tcpdump host 192.168.1.100(捕获来自或发往 192.168.1.100 的报文)。

  • net <网络>:捕获指定网络的报文。

    • 示例:tcpdump net 192.168.1.0/24(捕获来自或发往 192.168.1.0/24 网络的报文)。

  • port <端口>:捕获指定端口的报文。

    • 示例:tcpdump port 80(捕获端口 80 的报文)。

  • tcp:捕获 TCP 协议的报文。

    • 示例:tcpdump tcp(捕获所有 TCP 报文)。

  • udp:捕获 UDP 协议的报文。

    • 示例:tcpdump udp(捕获所有 UDP 报文)。

  • icmp:捕获 ICMP 协议的报文。

    • 示例:tcpdump icmp(捕获所有 ICMP 报文)。

  • arp:捕获 ARP 协议的报文。

    • 示例:tcpdump arp(捕获所有 ARP 报文)。

  • src <IP>:捕获来自指定 IP 的报文。

    • 示例:tcpdump src 192.168.1.100(捕获来自 192.168.1.100 的报文)。

  • dst <IP>:捕获发往指定 IP 的报文。

    • 示例:tcpdump dst 192.168.1.100(捕获发往 192.168.1.100 的报文)。

  • src port <端口>:捕获来自指定端口的报文。

    • 示例:tcpdump src port 80(捕获来自端口 80 的报文)。

  • dst port <端口>:捕获发往指定端口的报文。

    • 示例:tcpdump dst port 80(捕获发往端口 80 的报文)。

  • not <条件>:排除指定条件的报文。

    • 示例:tcpdump not host 192.168.1.100(排除来自或发往 192.168.1.100 的报文)。

三、arp 命令的使用

1、基本语法

arp   [选项]   [主机名或IP地址]

2、常用选项

  • -a:显示系统中的所有 ARP 表项。

    • 示例:arp -a(显示所有 ARP 表项)。

  • -n:不解析主机名,直接显示 IP 地址。

    • 示例:arp -n(显示所有 ARP 表项,不解析主机名)。

  • -d:删除指定的 ARP 表项。

    • 示例:arp -d 192.168.1.100(删除 IP 地址为 192.168.1.100 的 ARP 表项)。

  • -s:添加或修改一个静态 ARP 表项。

    • 示例:arp -s 192.168.1.100 00:11:22:33:44:55(添加或修改 IP 地址为 192.168.1.100 的静态 ARP 表项,MAC 地址为 00:11:22:33:44:55)。

  • -f:从文件中读取 ARP 表项。

    • 示例:arp -f /path/to/arpfile(从文件中读取 ARP 表项)。

3、示例

执行 arp -a:

? (192.168.1.1) at 00:11:22:33:44:55 [ether] on eth0
  • ? 表示主机名未知。

  • 192.168.1.1 是 IP 地址。

  • 00:11:22:33:44:55 是对应的 MAC 地址。

  • [ether] 表示这是一个以太网设备。

  • on eth0 表示这些条目属于 eth0 接口。

相关文章:

  • C#使用sftp远程拷贝文件
  • 黑马点评redis改 part 4
  • 开源的自动驾驶模拟器
  • C++ 的 IO 流
  • DAPP(去中心化应用程序)开发全解析:构建去中心化应用的流程
  • SVT-AV1编码器初始化函数
  • 力扣刷题Day 25:反转链表(206)
  • 【android bluetooth 协议分析 11】【AVDTP详解 1】【宏观感受一下avdtp是个啥东东】
  • 入住刚装修好的新房,房间隔音太差应该怎么办?
  • ERP系统多少钱一套?| 上海达策TECH-SONIC
  • 三维几何变换
  • 修改element UI 分页组件样式(解决样式不生效问题)
  • Java多线程编程初阶指南
  • 【实战】oninput 文本框输入实时查询防抖机制实现
  • 数字IC低功耗设计——基础概念和低功耗设计方法
  • 出现了锁等待或死锁现象怎么办?乐观锁?分布式锁了解一下?
  • 前端笔记-Vue3(中)
  • 输入框仅支持英文、特殊符号、全角自动转半角 vue3
  • Sqlserver安全篇之_Sqlcmd命令使用windows域账号认证sqlserver遇到问题如何处理的案例
  • JVM考古现场(二十四):逆熵者·时间晶体的永恒之战
  • 神二十具备执行发射任务的各项条件
  • 新证据表明:地球水或为“自产”而非“外来”
  • 大连万达商业管理集团提前兑付“22大连万达MTN001” ,本息2.64亿元
  • 日本首相石破茂向靖国神社献祭品
  • 寻女19年的“棉花糖爸爸”明将办团圆宴,大女儿:妹妹是片区销售主管
  • 五一出境游火爆:境外包车订单增长25%,日本酒店价格贵了好几倍