【计算机网络】详解数据链路层数据帧&Mac地址&ARP协议

一、以太网帧

"以太网" 不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了一些物理层的内容 。例如:规定了网络拓扑结构,访问控制方式,传输速率等;例如以太网中的网线必须使用双绞线,传输速率有 10M、100M、1000M等。以太网是当前应用最广泛的局域网技术;和以太网并列的还有令牌环网,无线LAN等。

源地址和目的地址是指网卡的硬件地址(也叫 MAC 地址) ,长度是48位,是在网卡出厂时固化的,帧协议类型字段有三种值,分别对应 IP、ARP、RARP;帧末尾是 CRC 校验码

二、Mac地址

MAC 地址用来识别数据链路层中相连的节点;长度为48位,及6个字节。一般用16进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)。在网卡出厂时就确定了,不能修改mac 地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址,可能会冲突;也有些网卡支持用户配置 mac 地址)。 IP 地址描述的是路途总体的起点和终点,MAC 地址描述的是路途上的每一个区间的起点和终点IP地址的主要作用是用于网络层寻址,它允许数据包在互联网上从一个网络传输到另一个网络。它是全球唯一的,能够在全球范围内进行通信。MAC地址的主要作用是用于链路层寻址,即在同一网络内部进行通信。它是局域网内设备的唯一标识,确保数据包能够准确地发送到目标设备。
MAC地址的前24位(即前三个字节)通常代表组织唯一标识符(OUI),它是由IEEE(电气和电子工程师协会)分配给制造商的。OUI用于标识生产网络设备的制造商。MAC地址的后24位(即后三个字节)是由制造商为其生产的每个设备分配的,以确保每个设备的MAC地址在全球范围内都是唯一的

三、ARP协议

ARP不是一个单纯的数据链路层的协议,而是一个介于数据链路层和网络层之间的协议。ARP 协议建立了主机IP地址和MAC地址的映射关系。在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址;数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符则直接丢弃。因此在通讯前必须获得目的主机的硬件地址。

3.1、ARP协议的工作流程

下面举一个例子:源主机发出 ARP 请求,询问"IP 地址是 192.168.0.1 的主机的硬件地址是多少",并将这个请求广播到本地网段(以太网帧首部的硬件地址填 FF:FF:FF:FF:FF:FF 表示广播);目的主机接收到广播的 ARP 请求,发现其中的IP地址与本机相符,则发送一个 ARP 应答数据包给源主机,将自己的硬件地址填写在应答包中;每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项有过期时间(一般为 20 分钟),如果 20 分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址。 arp先广播,再单发

3.2、ARP数据报格式


注意到源 MAC 地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。以太网帧需要源MAC地址和目的MAC地址来确保数据包能够正确地被发送和接收。这两个地址在以太网帧的头部被明确指定。ARP报文本身也需要包含源主机的MAC地址和目的主机的MAC地址(或未知时的全F填充)。这是为了在网络层建立IP地址和MAC地址的映射关系。由于ARP报文通常被封装在以太网帧中发送,因此源MAC地址和目的MAC地址在以太网帧的头部和ARP报文的相应字段中都会出现。这种设计既满足了链路层的需求,也符合ARP协议的工作原理。

  • 硬件类型指链路层网络类型,1为以太网。
  • 协议类型指要转换的地址类型,0x0800为IP地址。
  • 硬件地址长度对于以太网地址为6字节。
  • 协议地址长度对于和IP地址为4字节。
  • op 字段为1表示ARP请求,op字段为2表示ARP应答。
相关推荐
bobz9659 分钟前
Python 项目打包为 Windows exe 最好用的工具是哪个?
后端
用户214118326360222 分钟前
超算挑战赛实战!AI 一键生成中医药科普短视频,青少年轻松学药材
后端
还是鼠鼠28 分钟前
tlias智能学习辅助系统--Maven 高级-私服介绍与资源上传下载
java·spring boot·后端·spring·maven
追逐时光者33 分钟前
2025 年程序员必备 TOP 10 高效实用工具
后端
网硕互联的小客服35 分钟前
Apache 如何支持SHTML(SSI)的配置方法
运维·服务器·网络·windows·php
基于python的毕设1 小时前
C语言栈的实现
linux·c语言·ubuntu
20181 小时前
Supabase migration 开发实践
后端
灵魂猎手1 小时前
3. MyBatis Executor:SQL 执行的核心引擎
java·后端·源码
Undoom1 小时前
虚拟机一站式部署Claude Code &可视化UI界面
后端
Asthenia04121 小时前
建好了表,还在手动写CRUD的xml?兄弟,真得学习MBG了!
后端