【Linux】MAC帧协议 + ARP协议
文章目录
- 📖 前言
- 1. 数据链路层
- 2. MAC帧格式
- 3. 再谈局域网
- 4. ARP协议
- 4.1 路由器的转发过程:
- 4.2 ARP协议格式:
- 5. 如何获得目的MAC地址
📖 前言
在学完网络层IP协议之后,本章我们将继续向下沉一层,进入到数据链路层的学习。
该层有两个重要的协议需要我们来学习,一个是ARP协议,另一个就是MAC帧协议,这二者都是处于数据链路层。
ARP协议在MAC帧协议的上一层,它们属于上下层的关系。老规矩,我们先来认识报头的各个字段,再来学习它们的作用。搬好小板凳,我们马上开讲啦…
1. 数据链路层
在内网(局域网)当中要进行转发的时候,首先要考虑的是,数据怎么从A主机送到出口路由器当中,这个工作就是数据链路层要解决的问题了。
IP地址的核心工作是提供一种能力,将数据从A主机经过路径选择交给B主机,一定是有目的IP不断地查路由表。
但是A和B根本就不在一个网段, 首先要解决的是将数据先从A主机送到下一跳的能力!!
当数据进行转发的时候,就是将数据从一个子网送到另一个子网的过程(重点):
因为路由器是横跨两个子网的,所以只要将数据报转发到子网的路由器,这个路由器集联到下个子网的话,我们把这种在局域网内转发的行为,也可以称之为跨网络转发。
交付到路由器是一个内网转发的行为,但是逻辑上相当于将数据包从一个子网交到了下一个子网。
数据链路层能够将数据发送到内网中的任一台主机,也一定能将数据送到内网当中的任意一台路由器。只要这台路由器横跨两个网段,把数据交给这个路由器的过程,就意味着将数据交给了另一个网段,也就实现了跨网络传输的功能。
小结:
- 数据链路层: 提供了在内网中,从一点到另一点的能力。
- 网络层: 提供了寻找路径的能力。
数据链路层 + 网络层就能提供把数据从A主机跨网络,经过路径选择送到B主机的能力。
- 一旦此层转发有问题,传输层再继续让我们重发。
- 这几层就提供了将数据从A主机经过路径选择可靠的送到B主机的能力。
- 只要A主机能到B主机,那么就一定能从B主机到A主机。
所以传输,网络,链路核心解决的是数据包可靠传送的问题。
2. MAC帧格式
MAC帧(Media Access Control Frame)是在计算机网络中用于数据传输的基本单位。它包含了数据链路层的头部和尾部,用于在物理介质上传输数据。

目的地址和源地址: 目的MAC地址和源MAC地址。
- 每一台主机在数据链路层当中都要有自己的身份标识,就是通过MAC地址标识的。
- MAC地址通常是48位的植入到网卡当中的具有唯一性标识的地址。
- 虽然全球唯一但是要求在局域网内唯一就可以了。
以太网或者令牌环网,是局域网当中所采用的标准:
- 局域网转发这件事上,底层网络通信的方式是有差异的,我们重点讲的是以太网帧格式。
- 底层网络有差异并不影响网络在全球的使用,原因就是有IP地址的存在,IP全球是唯一的。
报头和有效载荷如何分离:如何解包?
- 目的地址,原地址和类型固定大小的,最后有个CRC也是固定大小的。
- 所以以太网帧格式附加的相关的报头或者校验字段一共是18Byte。
- 在对帧格式在做提取时,可以
6 Byte,6 Byte,2 Byte提取报头,再将最后4Byte扔掉,剩下的就是有效载荷。 - 所以能拆包也就一定能封装。
未来一个收到了MAC帧的主机,应该如何向上进行交付:如何分用?
- 两个字节的类型,我们称之为帧类型,通常代表的是有效载荷应该向上交付给哪一个协议。
- 例如:如果帧类型是
0800对应的有效载荷就是IP数据包。 - 其他的类型就是对应的不同的字段。
- 所以就能知道数据载荷字段是什么类型,进一步再向上交付就可以了。
帧类型:
- 在MAC(媒体访问控制)帧协议中,类型字段(Type Field)是用来指示数据帧中所携带的上层协议类型的字段。
- 它位于MAC帧的报头部分,并占据2个字节(16位)。
- 类型字段的作用是告诉接收方如何解析数据帧的有效载荷部分。
- 通过读取类型字段的值,接收方可以确定上层协议的类型,并将数据帧传递给相应的协议栈进行进一步处理。
类型字段可以是:
0x0800:表示IPv4协议。0x86DD:表示IPv6协议。0x0806:表示ARP(地址解析协议)。0x8100:表示VLAN(虚拟局域网)标记协议。
3. 再谈局域网
局域网内,一个主机如何知道自己的报文应该交给哪台主机呢?是由报文所要去的目的IP地址决定的!!
将报文丢在局域网当中,每台主机都要收到这个报文:
- 凡是在局域网中的所有主机,无时无刻都要从局域网当中抓数据。
- 因为随时随地都要从局域网中拿数据。
- 主要局域网中有数据了,所有的主机都必须将报文拿到自己的主机里面。
- 因为只有拿到才能确认这个数据是不是发给自己的。
- 不管是不是发给自己的对于这台主机来讲都是有意义的。
数据在局域网中传输:
- 每一个主机都要获取。
- 每一个主机的哪一层协议先获取这个数据帧呢?
-
- 数据链路层(不考虑物理层),网络永远都是终于链路层始于链路层的。
- 每一个主机数据链路层协议的解析(解包 + 分用)。
- 对比目的mac地址和自己的mac地址是否相同。
-
- 相等:向上交付(根据类型),分用。
-
- 不相等:丢弃,一旦底层将数据包丢弃了,上层就不知道有这个数据包的存在了。
抓包:
- 网卡有一种模式可以被设置叫做混杂模式。
- 网卡就不做数据筛选,直接将局域网读到的数据一股脑网上交付,这个就叫做抓包。
数据碰撞:
- 当多台主机同时向局域网内发送数据时,冲突吗?—— 冲突!!
- 因为在网络中走的都是一些光电信号,会互相进行干扰,那么谁发送的数据都没办法处理。
- 所以就要让冲突的几台主机,随机休眠上一段时间,再进行在局域网当中对数据做重发。
- 我们把这个局域网也叫做一个碰撞域。
交换机:
- 因为交换机这样的设备存在,将大的局域网划分成小的区域。
- 这个小的区域当中,合法请求转发,再小的区域中就能完成的通信过程就不要往外面却散了。
- 进而可以减少一个一个碰撞域的体积。
- 交换机除了在局域网当中进行数据帧转发(不转也能发送),核心工作:划分碰撞域。
- 在一定程度上,减缓主机之间碰撞的可能性。
要明确几点:
- 主机越多越好,还是越少越?
-
- 好肯定是越少越好了,发生碰撞的概率越低
- 交换机或网桥:划分碰撞域(硬件上)。
-
- 网卡和交换机都是工作在数据链路层的设备。
- 软件上减少局域网内碰撞的概率:
- 一般MAC帧一般体积不要过大,要对得上MTU的要求。
网络层IP报文分片的原因:
- 一旦碰撞了就是否定了之前所做的工作,曾经花费的成本就付之东流了。
- 所以MAC帧的体积不要太大,就要对上层提要求。
- 要求IP层发送的数据包不要太大,所以IP层才会分片,才有了MTU这样的概念。
- MAC帧规定上层交给它的数据(IP报文)不能超过
1500Byte。
碰撞域在物理上减少主机的个数,在软件上减少报文的大小,进而就可以减少碰撞,还有一些碰撞避免的算法。
数据包的大小体积不由MAC帧决定(它只提标准),更不由网络层决定(它只是个跑腿的),而是由传输层(TCP/UDP) 决定,传输层决定了IP报文要不要分片的问题。
4. ARP协议
4.1 路由器的转发过程:

- 当路由器接收到一个数据包时,它首先会解析以太网帧,提取出其中的MAC地址信息。
- 然后,路由器会根据目标IP地址在路由表中查找下一跳的信息。
- 接下来,路由器会封装数据包为新的以太网帧,更新目标MAC地址为下一跳的MAC地址,并将数据包发送到下一个路由器。这个过程被称为数据包的转发。
- 在下一个路由器上,类似的过程会再次发生。该路由器会解析以太网帧,提取出目标IP地址,并根据路由表确定下一跳的信息。
- 然后,它会封装数据包为新的以太网帧,更新目标MAC地址,并将数据包发送到下一个路由器或目标主机。
这样,数据包通过一系列的路由器转发,最终到达目标主机所在的网络。每个路由器都负责解析和封装以太网帧,以便在不同网络节点之间进行数据包的转发和路由选择。
4.2 ARP协议格式:
当我们数据包到了对方子网入口路由器时,怎么将数据包给指定主机呢?

路由器D只知道它收到的报文,将来是要给IP为主机C的IP的主机,并不知道主机C的MAC地址,所以没办法发送。
—— 所以有了ARP协议。
- 同层协议也有上下关系,ARP协议是MAC帧协议的上层。
- MAC帧协议数据除了是IP报文,也可能有ARP这样的协议充当MAC帧的有效载荷。
当路由器D收到了报文之后,并不知道目的主机的MAC地址:
- 那么能否确定该要找的主机就在这个局域网里呢?
-
- 能知道!!因为当前是根据目的IP地址来判断的。
-
- 具体来说就是根据网络号判断的。
- 只要判断在这个局域网,那么就在通信之前先进行ARP请求,得到主机C的MAC地址。
- 然后再路上封装MAC帧,将报文准确的一对一交给主机C。
- 至此就完成了数据包转发。

假设有主机A和主机B,主机A只知道主机B的IP地址,但是并不知道主机B的MAC地址。
硬件类型: 指链路层网络类型,1为以太网。
协议类型: 指要转换的地址类型,0x0800为IP地址。
硬件地址长度: 6个字节。
协议地址长度: 4个字节(IPv4)。
发送端以太网地址: MAC A。
发送端IP地址: IP A。
目的以太网地址: 全F。
目的IP地址: IP B。
路由器然后将整个报文封到了MAC帧的有效载荷,然后将数据帧转出去。
而数据帧在转的时候也不知道要转给谁,所以目的地址填的也是全F。
所以这个数据帧在转发的时候,在局域网当中就全部被转发,以播的形式被每个主机都收到了。
5. 如何获得目的MAC地址
路由器MAC帧将ARP封装到了自己的有有效载之后,就要在局域网内广播:
- 那么每个主机都要提取,目的地址是全F,每一台主机都要处理(目的地址广播所有主机都要处理)。
- 每一台主机都要提取MAC帧的帧类型,帧类型是0806发现是ARP。
- 每一个主机都要将报文解开,将有效载荷交给上层ARP协议。
- ARP层接收到了先看目的IP地址,所有的主机都会拿着目的IP地址与自身的IP地址对比。
- 如果请求不是自己的,就在ARP层将数据包丢弃了。
- 这时是在ARP层丢弃的,并不是在MAC帧层丢弃的,但也是在数据链路层。
op字段为1表示ARP请求,op字段为2表示ARP应答。
- 任何一台主机,可能同时在向别的主机发起ARP,也在接受别的主机给他的ARP应答!
- 任何一台主机,都可能被发起ARP请求。
对于任何一台主机(重点):
- 发出:
-
- 一定发出的是ARP的请求。
- 接收:
-
- 别人向我发起的ARP请求。
-
- 我向别人发起ARP请求时,得到的ARP响应。
假设局域网内从A主机发送给B主机具体流程:
主机A要发起ARP了,填写报文的相应字段。主机A构建了一个ARP请求,并不是直接发过去的,而是交付给下一层。

局域网内,发出去的数据包一定能被主机B收到!!
主机B除外的其他主机收到报文后:
- 其他主机也能拿到这个报文,因为是广播,目的MAC地址全F。
- 于是其他主机就开始处理这个报文,在MAC帧层解包,然后将有效载荷交付给上一层(ARP层)。
- ARP层首先要提取出op字段,先根据op来判断这次的ARP报文是请求还是响应。
- 然后立马再看目的IP,一看填的是IP
B和自己不一样,所以其他主机直接将报文丢弃。
主机B收到报文后:
- 与此同时,主机B也要做同样的工作,MAC帧层也要将报文的有效载荷交给ARP层。
- 主机B也要先提取op,发现是1,那就是请求。
- 然后立马再看目的IP,一看填的是IP
B和自己的一样。 - 再看是哪个主机要请求主机B的MAC地址,提取出发送端以太网地址,和发送端IP地址。
主机B再下来就要构建一个ARP应答:

然后MAC帧就封装好了发送到局域网里,其他的主机也能收到,只不过在MAC帧层提取以太网目的地址时,发现和自己不一样,直接就将报文丢弃了。
所以第一次丢弃(发送时)和第二次丢弃(响应时)是不一样的!!第一次是在ARP层丢弃的,第二次是在MAC帧层丢弃的。
主机A收到报文后:
- 于是主机A收到了报文,在MAC帧层提取报头中的以太网目的地址,发现数据就是发给主机A的。
- 帧类型是
0806是ARP,所以解包将报文直接向上交付给自己的ARP层。 - 接下来ARP层先看op,值为2代表的是应答。
- 就意味着主机A曾经向别的主机发起过ARP请求,这个时候请求的那个主机给我应答了。
- 这时主机A才获取发送端的以太网地址,发送端的IP地址。
所以主机A就得到了主机B,IP为B的主机的MAC地址。然后再将报文重新封装成MAC帧再定向的发送给主机B,此时就能正常的进行通信了。
衍生问题:
如果远方的发送主机,非常高频的向主机B发数据的话,难道每次发送每一个报文的时候都要遵守先ARP得到MAC地址,然后再向主机B发送的过程吗?
- 这是不是有点挫了?这样效率太低了!!
- ARP肯定不是每一次都要发起的,需要被缓存起来!谁请求?谁缓存!!
- 缓存的是目的IP和目的MAC的映射关系。
- 一旦经过一次ARP得到目的IP和目的MAC地址对的映射关系,在系统层面上缓存起来。
- 往后的再发的报文直接拿着目的IP去查表查到MAC地址就好了,然后再将报文发过去。
万一主机B的MAC地址发生变化了:
- 比如说这个主机不联网退出了,重新又接入了一台主机。
- 那么这个IP地址就被新主机拿到了(动态分配IP)。
- 所以这个缓存是暂时缓存,一般是
15 ~ 20分钟(可以配置)。
这个缓存有个特点,因为MAC地址一直在变,所以就注定了这个缓存要保存最新的MAC地址。只要ARP比较新,就会重新更改缓存数据。
查看ARP缓存表:
Linux指令:arp -a
补充:
ARP的过程不是只在一个局域网内发生的, 而是在每一个局域网中发生,也可以在路由的路上进行ARP。
相关文章:
【Linux】MAC帧协议 + ARP协议
文章目录 📖 前言1. 数据链路层2. MAC帧格式3. 再谈局域网4. ARP协议4.1 路由器的转发过程:4.2 ARP协议格式: 5. 如何获得目的MAC地址 📖 前言 在学完网络层IP协议之后,本章我们将继续向下沉一层,进入到数…...
深入理解指针:【探索指针的高级概念和应用一】
目录 前言: 1. 字符指针 2. 指针数组 3.数组指针 3.1数组指针的定义 3.2 &数组名VS数组名 3.3数组指针的使用 前言: 🍂在了解今天的内容之前我们先复习一下指针的基本概念: 1,内存单元是有编号的ÿ…...
Leetcode周赛365补题(3 / 3)
目录 1、2、有序三元组的最大值 - 预处理前后最大值 遍历 (1)预处理前后值遍历(枚举j) (2)枚举k 2、无限数组的最短子数组 - 前缀和 滑动窗口 1、2、有序三元组的最大值 - 预处理前后最大值 遍历 …...
Python基础入门例程13-NP13 格式化输出(三)
目录 描述 输入描述: 输出描述: 示例1 解答: 1)第一种strip函数 2)先删除左边,再删除右边的空格,使用.lstrip函数和 .rstrip函数 3) 使用replace函数 4)使用split和join函数,…...
Vue快速入门
一、概述 1.是一套前端框架,可免除原生JavaScript中的DOM操作,基于MVVM思想,实现数据双向绑定。 实现由MVC——>MVVM的转换 二、入门 1.新建HTML页面,引入Vue.js文件 2.在JS代码区,创建Vue核心对象,进行…...
MySQL - 如何判断一行扫描数?
在MySQL中,一行扫描数是在执行查询操作时,需要扫描的行数,以找到与查询条件匹配的行。这个值反映了查询的效率。 MySQL 判断一行扫描数的方法: 索引的使用:MySQL首先会检查查询是否可以使用索引。如果可以࿰…...
3682: 【C3】【递推】台阶问题
题目描述 有N级的台阶,你一开始在底部,每次可以向上迈最多K级台阶(最少1级),问到达第N级台阶有多少种不同方式。 输入 两个正整数N,K。(N≤100000,K≤100) 输出 一个正整数,为不同方式数&a…...
C++(Qt)软件调试---线程死锁调试(15)
C(Qt)软件调试—线程死锁调试(15) 文章目录 C(Qt)软件调试---线程死锁调试(15)1、前言2、常见死锁3、linux下gdb调试C死锁1.1 使用代码1.2 gdb调试 3、linux下gdb调试Qt死锁1.1 使用代码1.2 gdb调试 4、Windows下gdb调试C死锁5、W…...
HugeGraph Hubble 配置 https 协议的操作步骤
背景 HugeGraph 图数据库的 Server 端支持 https 配置,官方文档中有说明相对比较容易,而 Hubble 部署过程都是 http的。 我们有一个应用要嵌入 hubble 页面,而且部署为 https ,那么 Hubble 是否支持配置 https 呢?网…...
大型应用的架构演进--spring家族在其中的作用
01 大型应用的架构演进 带来的挑战: 运维与监控 分布式带来的复杂性 接口的调整成本 测试成本 依赖管理成本 02 Spring家族 在我看来,springboot的3大特点(我常用的):内置的web容器;开箱即用的starter模版;自动配置&…...
LinkedHashMap 简单实现LRU
要使用 LinkedHashMap 来实现LRU(最近最少使用)缓存,可以设置它的访问顺序为true,以便在每次访问一个元素时,将它移到最后,从而实现LRU的特性。以下是一个简单的Java示例: import java.util.Li…...
mysql字符串函数
函数名 描述 示例 ASCII(s) 返回字符串s的第一个字符的ASCII码 返回CustomerName字段第一个字母的ASCII码: SELECT ASCII(CustomerName) AS NumCodeOfFirstChar FROM Customers; CHAR_LENGTH(s) 返回字符串s的字符数 返回字符串RUNOOB的字符数: …...
【强烈推荐】视频转gif、图片拼gif,嘎嘎好用,免费免费真的免费,亲测有效,无效过来打我
问题描述 最近遇到一个需求是需要将视频生成gif,这个看上去不是很难,所以有了以下的解决办法 解决办法 首先想到的当然是自己写一个,用了两套代码: from moviepy.editor import *# 读取视频文件 video_clip VideoFileClip(&quo…...
C# Onnx Yolov8 Detect 印章 指纹捺印 检测
应用场景 检测文件中的印章和指纹捺印,用于判断文件是否合规(是否盖章,是否按印) 效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.…...
0034【Edabit ★☆☆☆☆☆】【修改Bug4】Buggy Code (Part 4)
0034【Edabit ★☆☆☆☆☆】【修改Bug4】Buggy Code (Part 4) bugs conditions strings Instructions Emmy has written a function that returns a greeting to users. However, she’s in love with Mubashir, and would like to greet him slightly differently. She add…...
第十五篇-推荐-Huggingface-镜像-2023-10
推荐一个Huggingface-镜像网站 可下载模型和数据集,解决Huggingface无法访问问题,希望可以一直使用 https://hf-mirror.com/ 举个栗子 https://hf-mirror.com/models?searchqwen 有时需要验证,按要求点就好 域名 hf-mirror.com…...
Macos文件图像比较工具:Kaleidoscope for Mac
Kaleidoscope是一款文件图像比较工具,它可以方便地比较两个文本或者图片文件的差异。这个工具可以在Mac系统上使用,并且支持多种文件格式,包括文本文件、图片文件、PDF文件等等。 Kaleidoscope有一个直观的用户界面,可以让用户轻…...
Docker搭建Plex流媒体服务并播放自己本地视频
Docker搭建Plex流媒体服务 安装Docker创建存储配置文件的目录创建Plex容器配置Plex设置媒体库访问Plex 1 介绍 Plex是一个流媒体服务器,可以轻松地将你的媒体文件库(如电影、电视节目和音乐)通过网络流式传输到各种设备上。 Plex 是一套媒体…...
idea + Docker-Compose 实现自动化打包部署(仅限测试环境)
一、修改docker.service文件,添加监听端口 vi /usr/lib/systemd/system/docker.service ExecStart/usr/bin/dockerd -H fd:// --containerd/run/containerd/containerd.sock -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock重启docker服务 systemctl daemo…...
ubuntu 下载Python
目前为止,Python 3.11 是最新版本的 Python。要在 Ubuntu 中下载和安装 Python 3.11,可以按照以下步骤进行: 安装编译所需的依赖项: sudo apt update sudo apt install -y build-essential zlib1g-dev libffi-dev libssl-dev libl…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
Spring Boot + MyBatis 集成支付宝支付流程
Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例(电脑网站支付) 1. 添加依赖 <!…...
Qwen系列之Qwen3解读:最强开源模型的细节拆解
文章目录 1.1分钟快览2.模型架构2.1.Dense模型2.2.MoE模型 3.预训练阶段3.1.数据3.2.训练3.3.评估 4.后训练阶段S1: 长链思维冷启动S2: 推理强化学习S3: 思考模式融合S4: 通用强化学习 5.全家桶中的小模型训练评估评估数据集评估细节评估效果弱智评估和民间Arena 分析展望 如果…...
CVE-2023-25194源码分析与漏洞复现(Kafka JNDI注入)
漏洞概述 漏洞名称:Apache Kafka Connect JNDI注入导致的远程代码执行漏洞 CVE编号:CVE-2023-25194 CVSS评分:8.8 影响版本:Apache Kafka 2.3.0 - 3.3.2 修复版本:≥ 3.4.0 漏洞类型:反序列化导致的远程代…...
二叉树-144.二叉树的前序遍历-力扣(LeetCode)
一、题目解析 对于递归方法的前序遍历十分简单,但对于一位合格的程序猿而言,需要掌握将递归转化为非递归的能力,毕竟递归调用的时候会调用大量的栈帧,存在栈溢出风险。 二、算法原理 递归调用本质是系统建立栈帧,而非…...
GC1808:高性能音频ADC的卓越之选
在音频处理领域,高质量的音频模数转换器(ADC)是实现精准音频数字化的关键。GC1808,一款96kHz、24bit立体声音频ADC,以其卓越的性能和高性价比脱颖而出,成为众多音频设备制造商的理想选择。 GC1808集成了64倍…...
