交流
商城
MCN
登入
注册
首页
提问
分享
讨论
建议
公告
动态
发表新帖
发表新帖
计算机网络第二章:ARP地址解析协议
分享
未结
0
973
李延
LV6
2021-06-03
悬赏:20积分
# 作用 在链路层中,我们使用的MAC地址,而在网络层中我们使用的是IP地址。地址解析是发现两个地址之间映关系的过程。 # 直接交付与ARP 当我们需要交付的数据属于同一子网,不需要路由器转发时,我们将这种交付称为直接交付。下面我们将描述一个直接交付的过程,看一下ARP在其中的作用。 - 我们以tcp协议向10.0.0.1 发送一条数据。(假设这个ip与我们在同一子网) - 应用程序首先与10.0.0.1 建立TCP连接 - 首先,我们必须将32位的ip地址转换为mac地址,这是ARP功能。 - 但此时不知道10.0.0.1的mac地址,APR向所有主机发送一个ARP请求的以太帧,这个被称为链路层广播。ARP请求包含本主机的ip地址,并寻求一下答案:“如果你的ip地址是10.0.0.1,请向我回应你的mac地址”。 - 通过ARP,所有本广播域中的机器都会收到此ARP请求,如果某个系统的ip地址是被询问的ip。它需要响应一个APR应答。这个应答包括Ip地址与mac地址。 # ARP缓冲 ARP会将已经知道的ip与mac地址映射进行缓存,确保ARP的高效运行。通常缓存时间为20分钟。 linux中 可以通过 arp -a 查看缓存数据  # 报文 ARP报文就是一种以太帧。  - 硬件类型:占两字节,表示ARP报文可以在哪种类型的网络上传输,值为1时表示为以太网地址。 - 上层协议类型:占两字节,表示硬件地址要映射的协议地址类型,映射IP地址时的值为0x0800。 - MAC地址长度:占一字节,标识MAC地址长度,以字节为单位,此处为6。 - IP协议地址长度:占一字节,标识IP得知长度,以字节为单位,此处为4。 操作类型:占2字节,指定本次ARP报文类型。1标识ARP请求报文,2标识ARP应答报文。 - 源MAC地址:占6字节,标识发送设备的硬件地址。 - 源IP地址:占4字节,标识发送方设备的IP地址。 - 目的MAC地址:占6字节,表示接收方设备的硬件地址,在请求报文中该字段值全为0,即00-00-00-00-00-00,表示任意地址,因为现在不知道这个MAC地址。 - 目的IP地址:占4字节,表示接受方的IP地址。 - op(操作类型):2字节:1 ARP请求;2 ARP 应答;3 RARP请求;4 RARP应答 ARP报文不是直接在网络层上发送的,它还是需要向下传输到数据链路层,所以当ARP报文传输到数据链路层之后,需要再次进行封装。以以太网为例,ARP报文传输到以太网数据链路层后会形成ARP帧。ARP帧如下图所示,他就是在ARP报文前面加了一个以太网帧头。 - 目的MAC地址:占6字节,如果是ARP请求帧,因为它是一个广播帧,所以要填上广播MAC地址(FF-FF-FF-FF-FF-FF),其目标主机是网络上的所有主机。 - 源MAC地址:占6字节,这是发送ARP帧的节点MAC地址。 - 帧类型:占两字节,这里用来标识帧封装的上层协议,因为本帧的数据部分是ARP报文,所以直接用ARP的协议号0x0806表示就可以了。 参考:[https://blog.csdn.net/u011784495/article/details/71716586](https://blog.csdn.net/u011784495/article/details/71716586) # 地址冲突检查 又能称无偿ARP、无故ARP。它是指主机发送ARP requset报文查询自己的IP地址,一般在ARP功能开启或者端口初始化配置完成时,主机向网络发送免费ARP来查询自己的IP地址确认地址唯一可用。 - 确定网络中是否有其他的主机使用了该IP地址,如果有应答则产生错误消息。 - 免费ARP可以更新ARP表项用,网络中其他主机收到该广播则在缓存中更新条目,收到主机强制更新,如果存在旧条目会将MAC更新为广播包中MAC。 # 示例 这里我们使用wireshark 抓包系统的所有网络消息。 这里我们电脑的网络配置是 1. ip:192.168.1.2 2. 子网掩码:255.255.255.0 3. 路由器:192.168.1.1 首先清除arp缓存 linux:arp -n|awk '/^[1-9]/{system("arp -d "$1)}' mac :arp -ad 首先开启抓包,并筛选只查看arp  ## 示例1 这里我们先通过ping命令 ping 192.168.1.5  这里我们看到我们的机器一直在发送ARP 询问谁的ip是192.168.1.5 应为目前网络中没有这个ip的ji q机器所以一直没有回答。 ## 示例2 我们将ip手动改为192.168.1.3(这个ip已经存在) 当我们设置完成后就看到我们电脑有ARP发送:  同时也收到一个回放信息。回复内容就是192.168.1.3的mac地址是 b6:7b:a8:91:4f:61 这个时候就发生了地址冲突,我们的电脑也没有办法连接网络。 ## 示例3 我们将ip手动改为192.168.1.99(这个ip不存在)  我们看到我们的设备发送ARP询问谁的ip是99 ,在没有回复后将自己的ip设置为192.168.1.99
回帖
消灭零回复
提交回复
热议榜
java 相关知识分享
8
好的程序员与不好的程序员
6
写给工程师的十条精进原则
5
spring boot以jar包运行配置的logback日志文件没生成
5
一步一步分析SpringBoot启动源码(一)
5
MockMvc测试
5
【吐槽向】是不是有个吐槽的板块比较好玩
4
logstash jdbc同步mysql多表数据到elasticsearch
3
IntelliJ IDEA 优质License Server
3
.gitignore忽略规则
3
SpringBoot启动源码分析
3
一步一步分析SpringBoot启动源码(三)
3
2
一步一步分析SpringBoot启动源码(二)
2
积分不够将无法发表新帖
2
官方产品
Meta-Boot - 基于MCN
MCN - 快速构建SpringBoot应用
微信扫码关注公众号