网络数据链路层-MAC帧(2)

云掣YunChe12个月前技术文章924

3.ARP协议

地址解析协议(Address Resolution Protocol,ARP)协议,是根据IP地址获取MAC地址的一个TCP/IP协议。


3.1为什么有ARP协议?

ARP 协议建立了主机 IP 地址 和 MAC 地址 的映射关系。


在网络通讯时,源主机的应用程序知道目的主机的 IP 地址和端口号,却不知道目的主机的硬件地址(MAC地址);

数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃;

因此在通讯前必须获得目的主机的硬件地址。

3.2ARP的定位

在TCP/IP四层模型中,网络协议栈自顶向下分为应用层、传输层、网络层和数据链路层。


其中应用层最典型的协议有HTTP、HTTPS和DNS等,传输层最典型的协议有TCP和UDP,网络层最典型的协议就是IP,数据链路层最典型的协议就是MAC帧协议,但实际数据链路层还有两种协议叫做ARP和RARP。

603d3562ced2a3dcfecbc1692e0b2be6.png



ARP、RARP和MAC帧协议虽然都属于数据链路层的协议,但ARP协议和RARP协议属于MAC帧的上层协议。


也就是说,MAC帧的上层协议不一定就直接是网络层的协议,MAC帧的上层协议有可能也属于数据链路层的协议,但就是位于MAC帧的上层。


网络层当中的ICMP协议和IGMP协议,这两个协议虽然与IP协议都属于网络层,但这两个协议属于IP的上层协议。


3.3ARP协议工作流程

c8d9fdc7d782e961a89ffd32227c46ca.png


源主机发出 “ARP请求”,询问“IP 地址是 172.20.1.2 的主机的硬件地址是多少”,并将这个请求广播到本地网段(以太网帧首部的硬件地址填 FF:FF:FF:FF:FF:FF 表示广播)。

目的主机接收到广播的 ARP请求,发现其中的 IP 地址与本机相符,则发送一个 “ARP应答” 数据包 给源主机,将自己的硬件地址填写在应答包中;

每台主机都维护一个 ARP 缓存表,可以用arp -a命令查看。 缓存表中的表项有过期时间(一般为 20 分钟),如果 20 分钟内没有再次使用某个表项,则该表项失效,下次还要发 ARP 请求来获得目的主机的硬件地址。

3.4ARP数据格式

c3fbaa40396220af3d324a936a321e62.png


硬件类型指链路层的网络类型,1为以太网。

协议类型指要将什么类型的地址转换为MAC地址,0800为IP地址。

硬件地址长度对于以太网地址为6字节,因为MAC地址是48位的,该字段如果硬件类型为以太网,则填6。

协议地址长度对于IP地址为4字节,因为IP地址是32位的,该字段如果协议类型为IP,则填4。

op字段为1表示ARP请求,op字段为2表示ARP应答。

从ARP的数据格式也可以看出,ARP是MAC帧协议的上层协议,ARP数据格式中的前3个字段和最后一个字段对应的就是以太网首部,但由于ARP数据包的长度不足46字节,因此ARP数据包在封装成为MAC帧时还需要补上18字节的填充字段。


所以根据MAC帧中的类型字段,可以决定将该MAC帧交付给上层的哪一个协议:IP协议、ARP协议还是RARP协议。


4.RARP协议

RARP(Reverse Address Resolution Protocol,反向地址转换协议),是根据MAC地址获取IP地址的一个TCP/IP协议。


也就是说,某些情况下我们可能只知道一台主机的MAC地址,此时要得知该主机的IP地址就可以使用RARP协议。


理论上来说,RARP协议一定比ARP协议简单,因为既然我们已经知道一台主机的MAC地址了,那么我们就已经可以直接向给主机发送消息了,因此我们可以直接发消息询问对方的IP地址就行了。


相关文章

磁盘存储和文件系统详解

磁盘存储和文件系统详解

1、磁盘结构设备文件:关联至一个设备驱动程序,进而能够与之对应硬件设备进行通信I/O Ports:I/O 设备地址一切皆文件:open(),read(),write(),close()设备类型:块设备...

MongoDB的写入安全级别

一、MongoDB写入安全级别为提高数据写入的安全性,在客户端可以设置相应的安全级别来进行控制,MongoDB提供四种写入级别,分别是:1、非确认式写入(Unacknowledged)非确认式写入不会...

es68 应用异常排查

es68 应用异常排查

问题描述es68应用拉取镜像缓慢问题解决直接从docker仓库拉取,配置了镜像加速。docker的阿里云镜像地址 (推荐使用)yum-config-manager \     --add-repo ...

HDFS核心参数

HDFS核心参数

1.NameNode内存生产配置(1)NameNode内存计算,每个文件块大概占用150byte,一台服务器128G内存为例,能存储9.1亿个文件128 * 1024 * 1024 * 1024  /...

kubernetes实战详解

kubernetes实战详解

一、k8s是什么?1、Kubernetes 是用于自动部署,扩展和管理容器化应用程序的开源系统2、生产级别的容器编排系统3、PaaS平台二、容器是什么?或者说docker是什么?1、容器就是一个沙箱C...

oracle自带存储过程的压测使用

1、使用前提条件:A、timed_statistics参数为true B、sysdba权限 C、11g及以上版本 D、ASYNCH_IO开启通过运行以下查询,确保为数据文件启用异步 I/OCOL NA...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。