【Hello Network】数据链路层协议(下)

简介: 【Hello Network】数据链路层协议(下)

ARP协议

ARP协议,全称“Address Resolution Protocol”,中文名是地址解析协议,使用ARP协议可实现通过IP地址获得对应主机的物理地址(MAC地址)

ARP协议的作用

我们假设 一台局域网中有着下面六台主机 每台主机的编号如下

他们的mac地址依次为 m1 m2 … … m6

aee09619d71f41e383cad12ab5c0ca68.png此时我们的h1主机收到了前面一台主机的报文 该报文中有着源ip和目的ip

通过网络层路由的确认 我们确定 我们要将该数据交给此局域网中的h4主机

但是目前我们只知道h4主机的ip地址 并不知道它的mac地址是多少

所以说我们就需要一个协议来获取目标主机的mac地址 而这个协议就是arp协议

ARP协议在哪里

我们开始学网络就知道了 网络是分层的

但是细分到每一层中 还可以再继续分层

就拿数据链路层举例 它其中不止有一个协议 而ARP协议就在以太网协议的上层

d6523f75a6dc4b0e92d75d229aaf6227.png

所以说 ARP协议 在网络中的数据链路层 并且在以太网协议的上方(我们可以在以太网协议的报头类型中发现这一点)

ARP的工作过程

假设现在我们在一个教室里面 而我是一位老师

此时教室外面有个人说要找一位身份证号为 123456 的同学 但是作为一个老师 我只知道学生的名字 不知道学生的身份证号

此时我就会在教室里面说一句 有没有身份证号为 123456 的同学

这位同学听到了之后就会回应我

此时我就知道了身份证号为 123456 的同学是谁了

对应到计算机局域网通信中

ad9e207020d24d268d189fc242276b1f.png主机 h1 想要给主机 h6 发消息 但是它只知道主机 h6 的ip地址

此时它会向整个局域网发送一个广播 问询该ip地址对应的mac地址是多少

而主机h6收到之后就会回复 h1 自己的mac地址

这就是ARP协议的工作过程

ARP数据格式

2ce0824b9687409a92dce99237594dfa.png

下面是各个字段的解释

  • 硬件类型指链路层网络类型 1为以太网
  • 协议类型指要转换的地址类型,0x0800为IP地址
  • 硬件地址长度对于以太网地址为6字节 所以说填6
  • 协议地址长度对于和IP地址为4字节 所以说填4
  • 发送端以太网地址
  • 接收端以太网地址 如果我们不知道就填全1
  • 目的IP地址
  • PAD 因为MAC协议要求数据最低为46字节 所以使用PAD字段填充

对比ARP的数据格式 我们不难发现 它实际上底层使用的就是MAC帧

ec30f7212ee44f1b898cb3effa206a83.png

模拟ARP协议场景

arp请求

在上面得学习中我们知道了 arp协议的下一层是以太网协议

所以说我们将arp协议封装完之后就会传给下层的以太网协议

大概格式如下

e14254ac5c854aecb5d084026f1fcf0e.png

交付到我们额度以太网协议之后由于我们不知道以太网目的地址是多少 所以说在报文中的以太网地址这一栏填写全1 标识广播该数据

ae5d362c7c6248b6bd429dca0f0832a4.png


在广播该数据之后 整个局域网中的主机都会接收到该消息

但是 由于这些主机并不知道该数据要交付给哪台主机(有可能是自己) 所以说它们都会接收该报文 并且解包分用

在解包之后这些主机会发现类型中填写着0806 也就是ARP请求/应答 所以说会交付给上层的ARP协议(当然还是在数据链路层)

之后ARP协议会解析报文 首先看op字段 确定这是个ARP请求报文 之后看目的IP地址 如果是自己则留下该报文并开始构建响应报文 如果不是则丢弃

在广播arp请求之后 所有的主机都会接收请求嘛?

是的 所有的主机都会接收请求 因为arp协议的底层是以太网协议 而在以太网协议报文中 并没有注明要接收主机的mac地址 所以说大家都会接收并解包查看是不是发给自己的

报文丢弃发生在哪一层

报文丢弃发生在arp协议层

arp响应

在主机接收到arp请求之后便会构建响应 在响应中会填写自己的mac地址和对应主机的mac地址

也就是说和请求不同的是 响应报文的目的地址一栏是填写明确的

在广播之后 对应主机则会收到该报文并且解包分用 其他主机则会直接丢弃

在广播arp请求之后 所有的主机都会接收请求嘛?

不是 因为在报文中明确规定了目的mac地址 所以说主机看到目的mac地址不是自己后便会丢弃报文

报文丢弃发生在哪一层

以太网协议

arp缓存表

在经历一次arp请求-响应之后 操作系统会构建一个arp缓存表

我们在Linux操作系统下可以使用arp -a指令查看该表

f3a9aaefbdd84575a3b716a3fecaf4a2.png

问题总结

是不是每一次数据发送都要经过arp协议

不是 因为我们有arp缓存表 我们可以直接通过缓存表找到对应ip的mac地址

什么时候需要使用arp协议

当我们知道主机的ip地址 缺不知道主机的mac地址时 我们可以使用arp协议

为什么我们不直接用ip通信 一定要mac帧

从技术上来讲 我们是可以直接通过ip地址来进行通信的

但是实际上 如果使用了ip地址进行通信 那么数据链路层和网络层就高度耦合了

所以说为了解耦 我们特意使用mac地址进行通信

RARP协议是什么

RARP协议是通过mac地址获取IP地址的一种协议

总结

b0ae1882ecc6489ab504b5d70e05ed04.png

相关文章
|
网络协议 算法 数据安全/隐私保护
【Hello Network】数据链路层协议(上)
【Hello Network】数据链路层协议
73 1
|
29天前
|
网络协议 Java 程序员
【网络】局域网LAN、广域网WAN、TCP/IP协议、封装和分用
【网络】局域网LAN、广域网WAN、TCP/IP协议、封装和分用
29 2
|
29天前
|
网络协议 网络架构
【网络】TCP/IP 五层网络模型:数据链路层
【网络】TCP/IP 五层网络模型:数据链路层
37 1
|
4月前
|
人工智能 缓存 网络协议
网络层之三层交换、icmp协议、arp协议
网络层之三层交换、icmp协议、arp协议
|
6月前
|
域名解析 存储 网络协议
IP协议(2) 和 数据链路层协议基础
IP协议(2) 和 数据链路层协议基础
29 0
|
6月前
|
存储 缓存 网络协议
|
6月前
计算机网络:数据链路层(广域网、PPP协议、HDLC协议)
计算机网络:数据链路层(广域网、PPP协议、HDLC协议)
205 0
|
6月前
|
监控 网络协议 网络性能优化
【网络层】DHCP协议(应用层)、ICMP、IPv6详解
【网络层】DHCP协议(应用层)、ICMP、IPv6详解
139 0
|
网络协议 定位技术 网络架构
IP 协议(网络层协议)
IP 协议(网络层协议)
116 0
|
网络协议 算法 人机交互
TCP/IP、OSI七层模型---开放式系统互联模型
一、OSI七层模型—开放式系统互联模型
103 0