【计算机网络】数据链路层-MAC和ARP协议
文章目录
- 1. 认识以太网
- 2. MAC协议
- MAC帧的格式
- MAC地址和IP地址的区别
- MTU
- 3. 局域网通信原理
- 碰撞检测和避免
- 4. ARP协议
- ARP数据报的格式
- ARP缓存
1. 认识以太网
网络层解决的是跨网络点到点传输的问题,数据链路层解决的是同一网络中的通信。
数据链路层负责在同一局域网(同一链路)中两台设备的通信。 局域网的种类有很多,如:以太网、令牌环网。以太网是最常见的局域网技术,广泛用于家庭、企业和数据中心网络。
“以太网” 不是一种具体的网络,而是一种技术标准,既包含了数据链路层的内容,也包含了一些物理层的内容。例如:规定了网络拓扑结构,访问控制方式,传输速率等;以太网中的网线必须使用双绞线;传输速率有10M,100M,1000M等。
2. MAC协议
数据链路层的MAC协议规定,同一链路中数据,以MAC帧的格式传输。 不同局域网类型的MAC协议不同,这里介绍的是以太网MAC协议。
MAC帧的格式
目的MAC地址和源MAC地址: 标识该数据帧的目的主机和源主机;
类型: 指的是封装上层数据的协议类型,有三种类型:IP, ARP, RARP,分别对应数字:0800, 0806, 8035。
CRC校验码: 判断该数据帧的正确性。
MAC地址和IP地址的区别
- MAC地址用于标识同一链路相互连接的不同主机,在通信过程中描述路途上每一个区间的起点和终点。 MAC地址的长度为6字节48位,一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)。MAC地址通常是唯一的,在网卡出厂时就设定了,不能修改。
- IP地址用于标识网络中的不同主机,在通信中描述全过程的起点和终点。
MTU
MTU(Maximum Transmisson Unit)最大传输单元,指数据链路层中一个数据帧有效载荷的最大长度。
不同数据链路对于数据帧的长度限制不同,以太网MAC帧数据部分的长度规定最小是46字节,最大是1500字节。如果数据长度小于46字节,要求在数据部分后面填充额外的空白字节,以满足最小长度要求。最大是1500字节,这就是MTU。
为什么要设置MTU?
- 提高网络传输的效率;
- 降低碰撞概率,减少碰撞后重传的成本。大数据帧传输时间长,增加碰撞的风险,碰撞避免的成本很高。(关于数据碰撞,后面详谈)
数据帧长度过小也不合理,小数据帧传输速度快,时间短,碰撞检测可能在碰撞发生前触发,会导致碰撞检测失败。因此,为了在网络效率和碰撞检测之间取得平衡,通常设置帧数据部分长度范围在46~1500字节比较合理。
MTU对上层的影响:
MTU的限制,决定了上层不应该传递过大数据给数据链路层:
对于IP协议,采用分片与组织的策略,在我的另外一篇文章已详细介绍,详见:
对于TCP协议,不想让IP发生过多分片,因此引入了MSS,规定了TCP数据部分的最大长度。TCP在三次握手发送SYN的时候,会进行MSS协商(在首部变长的选项字段中携带MSS长度),取双方MSS最小值作为传输所用的MSS。
对于UDP协议,如果UDP单个报文的数据长度大于1472(MTU - IP报头长度 - UDP报头长度),就会被IP分成多个分片,提高丢包率(一片丢就相当于整个丢了)。因为UDP没有可靠性机制,丢包报文不会重传。
MSS与MTU的关系:
通常情况下:
MSS = MTU(1500byte) - IP报头长度(20byte) - TCP报头长度(20byte) = 1460byte
3. 局域网通信原理
-
局域网采用“广播”的策略进行数据通信,即在同一链路中,主机A向主机B发送数据,并不是直接向B转发,而是群发到同一链路的所有主机中,由接收主机辨认数据包是否是发给自己的。
-
在同一链路上,每台主机有一个MAC地址,用于标识了该主机在链路中的唯一性。 每个发出的数据帧都携带源MAC地址和目标MAC地址。当主机A向主机B发送消息时,同链路所有主机都收到这个消息,并在数据链路层查看消息的目标MAC地址是否为本主机MAC地址,不是则在MAC层将消息丢弃,是则向上交付。
碰撞检测和避免
如果多个主机同时向链路中发送数据,可能会发生数据碰撞。 在同一物理媒介如电缆、无线信道中发生光电信号的交叉碰撞,会导致数据的损坏。因此,数据链路层引入了碰撞检测与碰撞避免机制。
-
碰撞检测
数据链路层的碰撞检测机制,通俗理解:因为主机以广播的形式向同一链路的目标发送数据,所以发送方自己也能收到自己发出去的数据。碰撞检测就是在链路中收取自己发送的数据帧,通过CRC校验等方式,检测数据是否损坏。
-
碰撞避免
碰撞避免就是当检测到发生数据碰撞,发送方的数据链路层会随机等待一段时间,再尝试重传数据帧。这个等待时间是为了避免多个设备在同一时间重新发送数据,从而减少再次发生碰撞的可能性。因此,不仅TCP有重传机制,数据链路层也有,只不过机制比较简单。
另外的,同一链路中设备越多,数据碰撞的概率越高。因此数据链路层引入了 交换机(Switch) 以解决这个问题。
交换机是工作在数据链路层的设备,其主要作用是划分碰撞域,如下:
主机A-F处于同一个局域网,只不过这个局域网被交换机分成了左右两个区间。左右两边完全可以正常通信,只需要由交换机转发即可。交换机的主要作用是:
当主机A和主机B同时向链路中发送数据时,发生碰撞,此时交换机识别到数据碰撞,不会将碰撞产生的垃圾数据转发到右边,这样一来,右边的通信就不会受到左边碰撞的影响,大大降低了碰撞率。
当左边的主机A和主机B正常通信时,交换机检测到通信的数据与右边无关,也不会转发到右边,从而减少右边链路的载荷,降低碰撞率。
4. ARP协议
💭通信前,发送方通常只知道目标主机的IP地址和端口号,不知道同一局域网下目标设备的MAC地址,而在同一链路中通信必须清楚对端的MAC地址。因此,在查路由表得到下一跳的IP地址后,要先进行一个IP地址转MAC地址的过程,再向同一局域网中的下一跳主机发送消息。
ARP协议(Address Resolution Protocol)就是用于IP地址转换MAC地址。 ARP通俗来讲就是一个“询问”的过程,知道目标IP,在局域网中群发询问目标IP对应的MAC地址,与IP对应的目标主机会返回它的MAC地址。
这就像老师知道张三同学的学号,但不知道他的名字,要通过学号得知这位同学的名字,就在班级群里问“哪位同学的学号是XXX,你的名字是什么?”,其它同学对比自己的学号不匹配就不回答,张三同学比对后学号匹配,就会回答“老师,我是张三”。
ARP协议也是数据链路层协议,但在MAC协议之上。
ARP数据报的格式
ARP是MAC帧的一种类型(MAC帧报头的类型字段填为0806),只不过规定了MAC数据部分的字段格式。
各个字段解释:
- 硬件类型:指链路层网络类型,1表示以太网;
- 协议类型:指要转换的地址类型,0x0800表示IP地址;
- 硬件地址长度:物理地址长度,以太网MAC地址是6字节;
- 协议地址类型:要转换的地址长度,IP地址是4字节;
- op:op字段为1表示ARP请求,op字段为2表示ARP应答。
一次ARP的过程(主机A想要得知主机C的MAC地址):
- 主机A向主机C发送ARP请求(格式如下图),此时主机A并不知道主机C的MAC地址,只知道其IP地址,因此将目的MAC地址设为全1,目的IP设为ipC。(帧类型ARP的0806, op是1表示ARP请求)
-
主机A的ARP请求广播到局域网中,所有主机都会收到。
- 对于其它非目标的主机,收到这个MAC数据帧后,发现MAC报头的类型字段为0806,得知该数据帧是ARP数据帧,便由MAC协议交付给上层的ARP协议。ARP协议解开报头,查看op字段,确定为ARP请求(这是固定过程,每个主机都可能会收到ARP请求或应答,必须先判断是请求还是应答,再作进一步处理)。然后判断目标IP是否为本机的IP地址,检测到不是,在APR层丢弃数据包。
- 对于主机C,收到数据帧,判断是ARP请求,在ARP层判断目标IP为本机IP,则表示这个ARP请求想要获取本机的MAC地址。紧接着进行应答的构建
-
主机C构建ARP应答(格式如下图),然后广播到链路中
-
主机A收到ARP数据帧,其它主机丢弃应答(这里MAC报头中的目标地址已经确定,主机通过判断MAC报头中的目标地址,决定是否在MAC层丢弃,而不用交付给ARP层)。主机A收到了一个发送给自己的ARP应答,提取源MAC地址macC和源IP地址ipC,得到了一组IP地址和MAC地址的映射关系。主机A终于得到了主机C的MAC地址,可以正常通信了!
细节:
-
ARP层收到一个ARP数据帧,解开报头后,第一步必然是查看op字段。
- op为1表示该帧为ARP请求,执行动作:判断目标IP是否为本机IP,是则表示该ARP请求想要获取本机的MAC地址,紧接着构建并发送应答;否则在APR层丢弃该请求。
- op为2表示该帧为ARP应答,不用考虑是否丢弃,因为已经再MAC层完成,执行动作:提取源MAC地址和源IP地址,得到一组IP和MAC地址映射关系
-
ARP请求的丢弃发生在ARP层,ARP应答的丢弃发生在MAC层。
ARP缓存
如果每次发送数据时,都要进行ARP映射MAC地址,不仅效率低,还会导致链路中存在大量的ARP数据帧,增加链路的负担,因此就有了ARP缓存。
每个主机都会维护一张ARP缓存表,用于存储历史建立的IP与MAC地址的映射关系。 数据链路层收到IP数据包后,根据目标IP地址,查看ARP缓存表,若表中存在与目标IP地址对应的映射关系,则直接打包MAC帧发往目标主机,否则进行ARP过程。缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址。
Linux下通过arp
指令查看ARP缓存表。
ENDING…
相关文章:

【计算机网络】数据链路层-MAC和ARP协议
文章目录 1. 认识以太网2. MAC协议MAC帧的格式MAC地址和IP地址的区别MTU 3. 局域网通信原理碰撞检测和避免 4. ARP协议ARP数据报的格式ARP缓存 1. 认识以太网 网络层解决的是跨网络点到点传输的问题,数据链路层解决的是同一网络中的通信。 数据链路层负责在同一局域…...

本周三商店更新:多款套装下线,四款升级武器带异色皮肤返厂
本周三将迎来26.2版本更新与11商店大更新,版本更新可点击26.2版本更新公告进行查看,这里不一一赘述了,下面大概罗列一下商店更新,有皮肤下架,大家还能趁最后时间入手,最重要的是四款升级武器返厂咯。 危险玩…...

WindowsServer2019-搭建FTP服务器
这里写自定义目录标题 一、基础配置IP地址安装FTP服务检查连通性Windows10连接FTP服务 二、了解和使用FTP具体模块及其配置1、FTP IP地址和域限制2、FTP SSL设置3、FTP当前会话4、FTP防火墙5、FTP目录浏览6、FTP请求筛选7、FTP日志8、FTP身份验证9、FTP授权规则10、FTP消息11、…...
国际阿里云服务器买哪种好用点?
在当时数字化年代,云核算已经成为了企业进行事务运营和数据存储的重要东西。而阿里云作为我国最大的云核算服务供给商,其服务器产品线也适当丰厚。那么,对于用户来说,阿里云服务器买哪种好用点呢?这需求依据个人和企业…...
2023NOIP A层联测25 总结
T1 让你构造 40 40 40\times40 4040 的只含 r,y,x 的矩阵,含有 r y x ryx ryx 的个数恰好为 n n n, n ≤ 2222 n\le2222 n≤2222。看完题后就开始想构造,一开始想构造 3 ∗ 3 3*3 3∗3, 5 ∗ 5 5*5 5∗5 的单位矩阵的,但是始…...

Thread类的基本操作(JAVA多线程)
线程是操作系统中的概念,操作系统内核实现了线程这样的机制,并提供了一些API供外部使用。 JAVA中 Thread类 将系统提供的API又近一步进行了抽象和封装,所以如果想要使用多线程就离不开 Thread 这个类。 线程的创建(Thread类) 在JAVA中 创建…...
Redis 的三种部署模式
提前叠个 buff:这个文章不涉及图(画起来比较麻烦),只是记录我的胡思乱想。 redis 从单点 -> 集群总共有三个部署模式:单机模式,主从模式,哨兵模式,集群模式 单机模式 新手入门模…...
【ArcGIS Pro二次开发】(73):使用NPOI库操作Excel
NPOI是一个开源的C#读写Excel、WORD等微软OLE2组件文档的项目。 NPOI可以在没有安装Office的情况下对Word或Excel文档进行读写操作。 相较于之前使用的Microsoft.Office.Interop.Excel,已经感觉到的优势,一是读写速度较快,虽然小数据量的读…...

python获取电脑所连接的wifi密码
电脑连接wifi后,很难直观地看到当前连接wifi的密码,需要借助命令行公管局才可以查看到相关信息。 CMD命令 查看所有已保存的wifi配置信息 netsh wlan show profiles查看某一个wifi的详细信息,需要输入wifi名称来查询 netsh wlan show pro…...

动态壁纸软件Live Wallpaper HD mac中文版功能特色
Live Wallpaper HD mac提供了一系列美丽的主题场景,将为您的桌面增添活力。从城市景观、日落到遥远的星系,每个屏幕都有特别的触感,可以定制您的天气小部件和时钟样式,并使用您喜爱的图片创建您自己的个性化壁纸。 Living Wallpap…...
Spring Boot 配置主从数据库实现读写分离
一、前言 现在的 Web 应用大都是读多写少。除了缓存以外还可以通过数据库 “主从复制” 架构,把读请求路由到从数据库节点上,实现读写分离,从而大大提高应用的吞吐量。 通常,我们在 Spring Boot 中只会用到一个数据源࿰…...

【MongoDB】索引 - 单字段索引
MongoDB支持在集合文档中的任意字段上创建索引,默认情况下所有的集合都有一个_id字段的索引,用户和应用可以新增索引用于查询和操作。 一、准备工作 这里准备一些学生数据 db.students.insertMany([{ _id: 1, name: "张三", age: 20, clas…...
评估大型语言模型:综述
论文地址:https://arxiv.org/pdf/2310.19736v2.pdf github: tjunlp-lab/awesome-llms-evaluation-… 发表团队:Tianjin University 摘要 将LLM评估划分三点:知识和能力评估、一致性评估和安全性评估。特定领域化评估benchmark评…...

设计模式之工厂模式(Factory)
任何可以产生对象的方法或类,都可以称为工厂。 下面的代码定义了Car这种交通工具: public class Car {public void go() {System.out.println("Car go wuwuwuwuw....");} }然后在main函数里面想要调用调用Car的go方法,就需要new一个car对象&…...

2023/11/6 JAVA学习
处理编译异常的两种方法 第一种 第二种 问题比较容易犯,编译时异常...

Android-JobService
JobService 这里写目录标题 JobService一、API详解1 onStartJob2 onStopJob 二、onStartJob | onStopJob 返回值case 1case 2case 3 ref: 深入理解JobScheduler与JobService的使用 - 掘金 (juejin.cn) (28条消息) JobService的使用介绍_TechMerger的博客-CSDN博客 (28条消息) J…...

GraphQL入门与开源的GraphQL引擎Hasura体验
背景 Hasura 是一个开源的 GraphQL 引擎,它可以帮助开发人员快速构建和部署现代应用程序的后端。它提供了一个自动化的 GraphQL API ,可以直接连接到现有的数据库,并提供实时数据推送和订阅功能。 Hasura 团队总部位于印度。 下载安装 脚本…...

Javascript知识点详解:this关键字的指向问题
目录 this 关键字 涵义 实质 使用场合 使用注意点 避免多层 this 避免数组处理方法中的 this 避免回调函数中的 this 绑定 this 的方法 Function.prototype.call() Function.prototype.apply() Function.prototype.bind() 箭头函数中的 this this 关键字 涵义 t…...

数据库的备份和恢复
备份:完全备份,增量备份 完全备份:将整个数据库完整的进行备份 增量备份:在完全备份基础的之上,对后续新增的内容进行备份 备份的需求 1生产环境中,数据的安全性至关重要,任何数据都可能产生非…...
DS图—图非0面积/bfs【数据结构】
DS图—图非0面积 题目描述 编程计算由"1"围成的下列图形的面积。面积计算方法是统计"1"所围成的闭合曲线中"0"点的数目。如图所示,在10*10的二维数组中,"1"围住了15个点,因此面积为15。 提示&…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...

ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...

10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...

HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...