发布时间:2026/8/27 11:12:20
【Linux】网络编程 —— 数据链路层 欢迎来到Linux专栏 ~~ 网络编程博客主页张小姐的猫~江湖背景所属专栏Linux ~ 不破不立作者水平很有限如果发现错误可在评论区指正感谢网络编程欢迎来到Linux专栏 ~~ 网络编程认识以太网以太网的帧格式数据链路层的发送实况交换机ARP协议✅ARP的原理✅ARP的缓存表✅ARP欺骗RARP协议写在最后所谓的跨网络通信本质上其实还是把多个局域网进行串联的过程 ——实际上在网络里跑的报文都是数据帧数据链路层中的所以我们就需要学习局域网的通信协议以太网的数据链路层认识以太网以太网不是⼀种具体的网络而是一种技术标准既包含了数据链路层的内容也包含了⼀些物理层的内容。例如规定了网络拓扑结构访问控制方式传输速率等例如以太网中的网线必须使用双绞线传输速率有10M100M1000M等以太网是当前应用最广泛的局域网技术和以太网并列的还有令牌环网无线LAN等也就是站在IP层时看不到底层网络的任何特点的一切皆IP——虚拟化技术的体现以太网的帧格式源地址和目的地址是指网卡的硬件地址(也叫MAC地址)长度是48位是在网卡出厂时固化的帧协议类型字段有三种值分别对应IP、ARP、RARP帧末尾CRC校验码mac地址用来表征在局域网内的唯一性——六字节mac地址类似于我们的身份证在全球上也是唯一的但是只能在中国能用并且唯一在全球上唯一不代表就能在全球范围上使用实际上在数据链路层收到的报文有可能是网络层orARPorRARP三者的其中一个发的同理未来接收方收到数据帧同样要向上进行交付这三者的其一。1️⃣接收方如何分离报头和有效载荷采用的是固定长度的格式前面的目的地址 源地址 类型共14字节分离后面的4字节的CRC也分离 —— 剩下的就是有效载荷了拼接也是同理的2️⃣接收方如何进行分用根据2字节的类型来决定交付给上层的什么协议对比理解MAC地址和IP地址还是[唐僧西行的例子]IP地址描述的是路途总体的起点和终点MAC地址描述的是路途上的每一个区间的起点和终点数据链路层的发送实况局域网的通信原理一个主机发送报文所有的主机都能收到大家根据目的mac地址来判断是不是发给自己的不是的就丢弃造成了我们认为主机A给主机B通信是单独通信的错觉在一个局域网里A和B想通信B和C也想通信等等大家都往一个以太网里发送数据的话必然会出现光电信号的干扰—— 所以一个以太网也是一个碰撞域为了防止数据碰撞就要进行数据检测和避免碰撞避免的本质是在数据链路层对数据进行延迟重发—— 重传机制凡是出现数据碰撞的就都要进行延迟重发让其他数据先传不就是要求任何时刻只允许一台主机发送数据吗就会引出两个问题1️⃣数据帧长度是否影响碰撞的概率如果一个数据帧的长度很长导致这一批的数据都要进行重传 —— 代价过高mac帧在通信的本质利用以太网的空闲进行通信 利用所有主机的通信间隙来进行通信所以制造出更多的通信间隙要求每一台主机发送数据时不要长时间占用以太网不就可以提升通信的效率一个一万大小的报文 和 十个一千大小的报文更加倾向于十个一千大小的报文造成九个间隙也不用过多的担心数据碰撞 ——光电信号速度很快它的这个物理特性就导致它的效率不会太低 —— 所以不用太担心因为碰撞避免导致效率问题2️⃣主机增多会增加碰撞概率吗客观上是你肯定的但是我们是感受不到发生了碰撞的 —— 应该会感觉到网速变慢本质就是单位时间内通过局域网出去和进来的报文数量减少了局域网发送碰撞了进而做碰撞避免 —— 单位时间的吞吐量降低那么为了避免在局域网中主机增多尽可能不要减少我们数据发送碰撞的一种设备 —— 交换机交换机交换机存在的意义划分碰撞域下图不就划分了两个碰撞域ABD 和 CE 那么左侧区域进行通信时不就和右侧不冲突了嘛接着来聊聊交换机的原理交换机通过学习设备的MAC地址建立MAC地址表然后根据目的MAC地址把数据帧转发到正确的端口交换机会自己进行学习对局域网内部信息做动态学习的设备如果收到了左侧的A设备的数据就能知道主机A肯定是在左侧就记录下MACA的地址 —— 就把数据传给右侧后续主机E接收到报文进行返回时交换机也一定能知道macE是一定在交换机的右侧不断学习就能知道左右两侧有哪些mac地址了左侧的主机A继续给D发数据数据先经过交换机交换机一看发现A 和 D都在我的左侧就不做通信直接把该数据帧丢弃后续让A 和 D自己通信数据链路层只保证在局域网中发出并且不发生碰撞至于对方有没有收到是不确定的因为没有应答IP地址负责确定最终/下一跳的逻辑位置MAC地址负责在当前局域网中把帧送到具体设备比如得知了下一跳的IP地址是192.168.1.1 这个包下一步应该交给 IP 地址为 192.168.1.1 的路由器但是网卡不能直接把一个IP地址 放到以太网里进行转发┌──────────── 以太网帧 ────────────┐│ 目的 MAC │ 源 MAC │ IP 数据包 │└─────────────────────────────────┘所以我们必须要知道192.168.1.1→ 对应哪个MACARP协议ARP不是⼀个单纯的数据链路层的协议而是⼀个介于数据链路层和网络层之间的协议ARP协议建⽴了主机IP地址和MAC地址的映射关系在网络通讯时源主机的应用程序知道目的主机的IP地址和端口号却不知道目的主机的硬件地址数据包首先是被网卡接收到再去处理上层协议的如果接收到的数据包的硬件地址与本机不符则直接丢弃因此在通讯前必须获得目的主机的硬件地址目的ip —— 子网掩码 目标网络 —— 下一跳ip地址下一跳ip地址不等于目的ip那我们知道了下一跳ip这个mac地址我们是如何得知的呢——在同一个网段中必须要能把下一跳IP地址转化为下一跳主机的MAC地址✅ARP的原理ARP的过程是先进行广播然后再1:1发送MAC地址的过程ARP协议的工作流程源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播);目的主机接收到广播的ARP请求发现其中的IP地址与本机相符则发送⼀个ARP应答数据包给源主机将自己的硬件地址mac填写在应答包中再想⼀想结合我们刚才讲的工作流程ARP的数据报应该是⼀个什么样的格式?所以arp报文就存放在mac帧的有效载荷里大小为固定长度28字节注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现⼀次对于链路层为以太网的情况是多余的但如果链路层是其它类型的网络则有可能是必要的硬件类型指链路层网络类型1为以太网协议类型指要转换的地址类型0x0800为IP地址硬件地址长度对于以太网地址为6字节协议地址长度对于和IP地址为4字节 —— 一般前四个都固定op字段为1表示ARP请求op字段为2表示ARP应答任何主机可能被别人发起ARP该主机可能会受到ARP请求任何主机也可能曾经向别人发起过ARP未来一定会得到对应的应答该主机也可能会受到ARP应答接下来继续完整具体的通信过程因为该mac帧是广播类型的所以任何主机都能收到并且拆分此报文继续向上传递给arp层但发现目的ip地址是IPE只要不是主机E收到此报文就会进行丢弃 —— 在arp层进行丢弃主机E收到报文拆分完后首先看op字符是多少1 — arp请求2 — arp应答接着再去看目的IP地址对比发现就是发给我的 —— 于是开始构建arp应答了继续向下封装mac帧把这个mac帧发送到局域网里主机B能收到这个报文但是对比了以太网目的地址后发现macA不是自己就直接丢弃请求的丢弃和应答的丢弃是不一样的请求因为是广播要到arp层才丢弃应答的丢弃则是在mac帧层就丢弃了所以对于任何的arp报文只要对应的层收到arp请求永远先看OP字段因为不知道收到的是什么请求还是应答。如果发现op是2就直接看报文中发送端的以太网地址macE这样主机A不就能得到主机A的mac地址了吗 —— 实现了arp的作用这一通操作下来我已经知道了对方的mac地址了 —— 接着不就是封装mac帧进一步地发送数据如果我在美国要发数据给中国的一个主机先通过ARP广播 — 应答拿到对方的mac地址。不就可以封装好自己mac帧 正常发送数据了✅ARP的缓存表在整个通信的过程中ARP的工作是在每个各自的局域网里可能会一直产生所以这样沿路不断产生arp对网络压力有点大arp的本质ip地址和mac地址的映射关系。主机会将这种关系缓存起来 ——提高效率每台主机都维护⼀个ARP缓存表可以用arp-a命令查看。缓存表中的表项有过期时间(⼀般为20分钟)如果20分钟内没有再次使用某个表项则该表项失效下次还要发ARP请求来获得目的主机的硬件地址如果我想要得到局域网内网中所有的IP地址和所对应的mac地址该怎么做ping命令可以直接使用网络层的一些功能直接向目标主机发送IP报文不需要tcp、udp就必然会进行arp拿到mac地址所以ping命令可以用它来促使我们向目标主机发送ARP的过程可以先构建出一批虚拟的ip地址再逐个进行ping它最后就能知道哪些是有效的ARP缓存表的缓存时间默认是分钟级别的为什么不能设置成缓存永远生效因为用户的主机有可能会离线同一个电脑会向路由器申请多个IP地址也就是IP地址会变如果把缓存表里的ip与mac地址映射关系定死了不就是拿前朝的剑斩本朝的官吗还有可能就是主机的mac地址变换了主机更换一个网卡这样地址映射关系就要重新进行✅ARP欺骗因为ARP缓存对同记录只会记录最新的信息中间人攻击—— 可以盗取两个主机通信的数据了RARP协议那么如果需要将 mac 转化成 IP 地址呢 ——逆地址解析协议这样的实现一定比ARP更加容易的因为我已经知道了你的mac地址了不就可以直接向你发你应答时把你对应的IP地址给我不就可以了ARP 仍然广泛使用而RARP基本已经被 BOOTP/DHCP取代写在最后接下来登场的是 NAT

相关新闻

2026/8/27 11:12:20

硬件篇三、DO数字量输出电路

前言:在工业控制、电力监测等嵌入式场景中,DO 数字量输出接口用于驱动继电器、电磁阀、指示灯等外部执行机构,是控制系统对外输出控制命令的关键通道。MCU/FPGA 的 IO 端口大多为 3.3V/5V 低压逻辑,输出驱动能力弱,不能…

2026/8/27 11:12:20

基于SpringBoot的知识分享平台设计与实现源码+文档

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/27 11:12:20

零基础用Dify+RAG+Agent搭建游戏问答助手实践指南

Dify、RAG、Agent 这三个词放在一起,很容易让人以为这是一套需要写大量代码的 AI 工程模板。实际上,如果只是做一个游戏问答助手,而不是做一个完整的企业级平台,用 Dify 社区版配合 RAG 和 Agent,大部分流程可以靠界面…

2026/8/27 11:47:33

数学建模B题破题逻辑:动态协同优化与分阶段建模方法

1. 这道B题到底在考什么:从赛题文本到建模本质的穿透式解读 2023年亚太赛APMCM B题刚发布时,我正带着一支跨校队伍在实验室调试一个交通流仿真模型。看到题目PDF第一眼,不是急着翻代码库,而是把整道题干逐字抄在白板上——这不是为…

2026/8/27 11:47:33

MPLAB Harmony开发指南:从MCU固件分层到代码生成实践

最近搜固件开发相关的资料时,热搜词里蹦出来的画风堪称魔幻:一边是 Linux 网卡驱动报 mt7921e: direct firmware load for mediatek/wifi_ram_code_mt7961 失败,一边是模拟器玩家满世界找 MelonDS 的 BIOS7/BIOS9,还有人在 Cube…

2026/8/27 11:47:33

2026黄山工程建筑材料检测排名 TOP5 CMA 资质提供钢材检测、水泥检测、砂石检测 全覆盖联系方式推荐

黄山本地建筑材料检测机构鳞次栉比,市场鱼龙混杂,建筑总包单位、建材生产厂家、市政工程项目、装修建设企业选材验收时,极易遇上无资质机构出具的检测报告无法用于工程报审、竣工验收备案。小编实地走访筛选本地正规第三方建筑材料检测实验室…

2026/8/27 11:47:33

2026黄南工程建筑材料检测排名 TOP5 CMA 资质提供钢材检测、水泥检测、砂石检测 全覆盖联系方式推荐

黄南建材检测机构鳞次栉比,鱼龙混杂。建筑总包单位、建材生产厂家、市政工程项目、装修建设企业选材验收时,极易遇上无资质机构出具的检测报告无法用于工程报审、竣工验收备案。小编实地走访筛选本地正规第三方建筑材料检测实验室,整理优质服…

2026/8/27 11:47:33

Blender电缆管道接口建模全流程:从曲线到白模

相信很多做工程建模、机械设计、建筑可视化的朋友都有这种体会:模型本身不难,难的是电缆、通风管、运输管这类“长条形构件”怎么建得又快又规整,接口处怎么处理才不会穿模,最后导出的白模能不能直接给渲染或者游戏引擎用。 本文…

2026/8/26 9:13:28

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/27 10:58:22

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/27 7:46:21

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/27 0:01:16

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

1. 项目概述:从零构建一个企业级的AI服务网关 最近在帮一个做内容审核的团队做技术架构升级,他们原来的业务里,每天有几十万张图片和短视频需要过审,最初是接了几个开源的AI模型自己部署,但效果和性能一直不太稳定。后…

2026/8/27 0:01:16

LeetCode Hot100(51-60)算法精解与面试技巧

1. 题目背景与核心价值"hot100(51-60)"这个标题看起来像是某个编程题库或算法练习集中的一组题目编号。在技术社区中,类似命名通常指向LeetCode、牛客网等平台的热门题目集合。作为刷过300题的算法老手,我理解这类题目的核心价值在于&#xff…

2026/8/27 0:01:16

CRC校验实战:从模2除法到HJ212协议排错

1. 为什么一个“校验码”能扛住工业现场90%的数据 corruption? 你有没有遇到过这样的场景:嵌入式设备通过RS-485上传温湿度数据,上位机偶尔收到一帧乱码——温度显示成-273℃,湿度跳到999%,但串口波形看起来完全正常&a…

2026/8/26 19:34:06

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/26 19:17:08

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/26 19:34:05

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…