资讯动态

计算机网络Day3:物理层与数据链路层核心知识点解析

发布时间:2026/10/14 3:52:47 来源:尧图企业网站定制
刚学完计算机网络的前两天内容今天进入Day3坦白说这一天的知识点明显比前两天“硬核”不少。前两天还在讲网络分层模型、TCP/IP协议栈之类的宏观框架今天一上来就开始啃物理层和数据链路层很多概念开始需要“动手算”和“抓包看”不再只是背定义就完事了。如果你也正好学到这儿或者靠自学补基础这篇就当作一份同步学习笔记来看。我尽量把那些教材里写得绕来绕去的术语换成实际操作中你能感知到的东西来讲。1. 本节定位与整体学习路线1.1 Day3在整门课里处于什么位置计算机网络这门课大多数教材都遵循五层协议体系物理层、数据链路层、网络层、传输层、应用层。前两天一般会铺完概述和体系结构也就是让你知道每一层大概干吗数据怎么从上往下封装、再对端从下往上解封装。Day3这个位置正好是要往协议栈深处钻的第一站从物理层到数据链路层。这两层离硬件最近也是整个网络体系里最 “实在” 的两层。学完今天的内容你应该能回答这些问题数据在网线上到底是怎么变成电信号/光信号传播的网卡上那个MAC地址是谁在用的和IP地址什么关系为什么上网时偶尔会碰到“MTU”这个参数它到底影响什么交换机靠什么把数据帧转发到正确的设备1.2 这两天学习节奏上的一个明显变化说实话Day1和Day2的内容以“概念理解”为主只要你理清楚各层的职责边界做题基本没什么问题。但Day3开始突变因为物理层和数据链路层涉及到大量的信号编码、速率计算、校验算法这类硬核内容。我个人的学习建议是不要试图一天把这两层全背完重点抓“数据链路层”物理层只需要理解关键概念即可。实际工作中物理层的问题大多数由硬件和布线解决你只需要具备“能定位到是不是物理层问题”的判断力而数据链路层的帧结构、MAC地址、交换机转发逻辑这块几乎天天用得到。2. 物理层数据是怎么变成信号的2.1 从比特到信号这中间发生了什么物理层干的事说人话就是把上层的0和1比特流变成能在传输介质上传播的信号传到对端之后再还原成比特流。这里首先要区分一个概念数据通信系统里信源产生的是数字数据0和1如果要在模拟信道上传输就得做调制如果在数字信道上传输就要做编码。实际计算机网络里我们用的是数字信道居多所以重点看编码而不是调制但像光纤通信、无线通信这些场景调制仍然是绕不开的环节。拿最简单的以太网举例早期10Base-T用的编码方式是曼彻斯特编码。这种编码的规则是每个比特的中间有一次跳变从高到低代表0从低到高代表1或者反过来按具体标准而定。它最大的好处是接收方可以从跳变里提取时钟信号解决收发双方时钟同步的问题。曼彻斯特编码的代价也很明显一个比特要用两倍的信号变化来表示带宽利用率只有50%。所以后来高速以太网就不再用这种编码了转而用4B/5B、8B/10B这类更高效的编码方案——本质都是“插入额外比特来保证时钟同步和直流平衡”。这里有个我当年学的时候绕了很久的点为什么要保证直流平衡当时老师举了个例子我一下就通了——如果信号长时间保持高电平接收端交流耦合的电容会因为持续充电而饱和导致电平判读漂移。简单说过长的连续同电平会让接收电路无法准确区分“高低”编码方案里设计平衡码就是为了避免这种极端情况。2.2 带宽、速率、吞吐量这三个词别再混了Day3物理层很爱考这三个概念的辨析。我自己踩过的坑是一开始把带宽和速率当一回事做题时翻车好几次。带宽信道能传输信号的频率范围单位是Hz比如一条网线的带宽是100MHz表示它能有效通过最高100MHz频率的信号。速率单位时间传输的比特数单位是bps比如100Mbps以太网速率就是每秒1亿比特。吞吐量实际传输数据的速率往往低于理论速率。三者之间的关系有个奈奎斯特公式和香农公式这两个是物理层最重要的计算工具。奈奎斯特公式C 2W log2(V)其中C是极限码元速率W是信道带宽V是码元的状态数信号电平的取值个数。这个公式适用于无噪声的理想信道。香农公式C W log2(1 S/N)其中S是信号功率N是噪声功率S/N就是信噪比。它的意义在于不管用什么调制技术在有噪声的信道上信道容量存在理论极限。举个例子感受一下计算量级。假设一条电话线带宽为3000Hz信噪比为30dB那么先转信噪比30dB对应的S/N 10^(30/10) 1000代入香农公式C 3000 × log2(1001) ≈ 3000 × 9.97 ≈ 29910 bps这就是为什么传统电话线上网早期只有28.8Kbps、56Kbps这种量级因为信道本身的物理极限就卡在那儿再好的调制技术也突破不了这个瓶颈。很多教材喜欢在香农公式和奈奎斯特公式之间做对比题记住一个判断技巧题目提到噪声就优先考虑香农公式提到码元状态数就优先考虑奈奎斯特公式。2.3 传输介质的选型逻辑物理层的另一个重头戏是各类传输介质。这几年实际接触下来选择逻辑其实很清晰双绞线便宜、易施工、适用短距离100米以内分屏蔽和非屏蔽。家用和办公室布线绝大多数是超五类或六类非屏蔽双绞线。同轴电缆现在家庭宽带基本淘汰了但早期有线电视网和某些局域网还在用抗干扰比双绞线强。光纤带宽大、衰减小、抗电磁干扰长距离和骨干网基本标配。要注意区分单模和多模单模纤芯细、传输距离长、成本高多模纤芯粗、距离短、成本低。无线介质无线电波、微波、红外线。无线网卡、蜂窝网络、蓝牙都用这类介质但要注意无线信道是共享介质存在冲突和干扰问题。实战中判断一个网络卡顿到底是物理层还是数据链路层的问题有个简单办法查看交换机端口上的CRC错误计数如果错误数持续增长多半是物理层问题——线路质量差、接头松动、干扰大。如果错误数基本为零但丢包频繁问题就大概率在上层。3. 数据链路层让比特流变成“帧”3.1 为什么要有“帧”物理层负责传比特流但它不关心这些比特是什么含义。问题来了如果接收端收到一长串比特怎么知道从哪到哪是一个完整的数据单元数据链路层的第一个任务就是“组帧”。它把网络层下发的IP数据报加上帧头帧尾封装成一个“帧”然后交给物理层发送。接收端从比特流里识别出帧的边界提取出帧里的数据部分再向上交给网络层。组帧最常见的三种方法字符计数法帧头用字节计数标明帧长简单但是错一个计数就全乱了现在基本不用。字节填充法用特定字符定界数据里遇到相同字符就加转义字符常用于PPP等协议。比特填充法以连续6个1为定界符数据里遇到连续5个1就插入一个0HDLC协议用这个方式。这里我建议你打心底记住网络里所有的数据链路层协议核心都是在“比特流里切割出帧”这件事上做文章。组帧逻辑没想明白后面看以太网帧格式、PPP抓包都会觉得莫名其妙。3.2 以太网帧格式逐字段拆解现在绝大多数局域网用的都是以太网协议所以Day3里的“帧格式”指的就是以太网帧。先看最常用的Ethernet II帧格式字段长度说明前导码7字节同步时钟用物理层附加帧起始定界符1字节标志帧的开始目的MAC地址6字节接收方网卡物理地址源MAC地址6字节发送方网卡物理地址类型/长度2字节0x0800表示IPv40x86DD表示IPv60x0806表示ARP数据载荷46-1500字节上层IP数据报含头部帧校验序列FCS4字节CRC-32校验值每个字段背后都有设计考量我挑几个重点展开MAC地址为什么是6字节48位因为全球网卡数量太大48位地址空间足够给地球上的每一块网卡分配全球唯一地址而且最早设计时已经考虑了分配效率。前三字节是厂商代码后三字节由厂商自定义理论上全球唯一。不过现在虚拟化环境里MAC地址可以随意修改所以“唯一”指的是硬件出厂时不是运行时。数据载荷为什么下限是46字节因为帧的最小长度是64字节从目的MAC到FCS除去18字节头部和4字节FCS数据部分最少46字节。如果IP数据报不足46字节要补零。这个最小帧长的设计是为了区分“正常帧”和“冲突碎片”在CSMA/CD协议中发送方在发送完一个帧之前必须能检测到冲突如果帧太短发送完了才发生冲突就检测不到这是早期共享式以太网的遗产。类型字段0x0800我们需要特别记。抓包时如果看到这个值说明帧里封装的是IPv4报文。如果看到0x0806就是ARP报文。这个字段相当于告诉接收方“你把我拆开之后交给谁处理”。3.3 差错检测CRC到底是怎么算的帧尾部有个4字节的FCS作用是检测传输过程中有没有比特出错。用的算法是CRC-32全称循环冗余校验。CRC的原理可以这样理解发送方把整个帧当作一个二进制大数G(x)除以一个约定的生成多项式P(x)得到的余数R(x)附加在帧后面一起发送。接收方对收到的整个比特串原文CRC做同样的除法如果能整除说明没有检测到错误如果不能整除说明数据出错。举个例子简化版用CRC-3多项式 x^3 x 1也就是二进制1011假设要发送的数据是101001生成多项式是1011计算过程在数据后面补3个0变成101001000。用1011做模2除法异或运算不借位。得到余数0013位。发送帧为原始数据 余数 101001001。接收方用同样的多项式去除整个101001001如果余数为0校验通过。实际操作中没人手算CRC但是理解这个“模2除法取余”的思路很重要因为很多书籍和面试题会拿这个来考基础。你至少得知道CRC能检测出所有单比特错误、双比特错误、奇数个比特错误对突发错误的检测能力也很强但不是100%可靠也就是说CRC校验通过不代表绝对没错只是出错概率极低。注意CRC和校验和有本质区别校验和是“累加求和取反”CRC是“多项式除法取余”前者的检错能力远低于后者。做面试题时看到“帧校验序列FCS使用CRC”这个点要能说出为什么选CRC而不是校验和——因为数据链路层的误码率必须压到极低校验和能漏过的错误模式太多。3.4 最大传输单元MTU一个值得反复琢磨的参数以太网帧的数据部分上限是1500字节这个数值直接定义了MTU最大传输单元。也就是说IP层如果要把一个超过1500字节的数据报发送出去必须先分片变成多个小于等于1500字节的IP分片然后每个分片放进一个以太网帧里传输。我实测排查过一个小问题某台服务器能正常访问内网但访问某些外网服务特别慢最后定位到是MTU不匹配。服务端返回的包超过路径MTU而网络设备配置了黑洞路由或禁了ICMP导致路径MTU发现机制失效大包发不出去、小包正常。后来把网卡MTU调成1400就恢复正常了。所以Day3学到MTU时我建议你顺手把ping -M do -s 1472 目标IP这类命令也练一练。注意这里的1472是ICMP载荷大小加28字节20字节IP头8字节ICMP头正好等于1500如果包太大需要分片就会收到提示。这是实际排查网络问题时很有用的技巧。4. ARP协议从IP地址到MAC地址的桥梁4.1 为什么有了IP还要MAC地址这个困惑我当年也卡了很久。IP地址解决的是“设备在互联网中逻辑上所处的位置”MAC地址解决的是“同一链路上的设备各自的物理身份”。打个比方IP地址类似“某市某某路某某号”用于跨网络寻址和路由MAC地址更像“这栋楼里某个房间的门牌号”只在本地网络通信时使用。你去外地出差想的是住到某酒店某房间到了酒店大堂还得按房间号找具体房间——IP寻址帮你找到酒店网段MAC寻址帮你从交换机的广播域里定位到具体网卡。所以当一台主机要向同一局域网内的另一台主机发送数据时它需要知道对方的MAC地址才能构造以太网帧。问题是怎么知道4.2 ARP的工作原理和抓包验证ARP地址解析协议解决的就是这个IP到MAC的映射问题。工作过程并不复杂发送方A要发数据给B但只知道B的IP不知道B的MAC。A在本地网段广播一个ARP请求报文“谁的IP是192.168.1.10请告诉我你的MAC地址。”全网段的主机都能收到这个广播帧但只有IP匹配的那台主机会以单播方式回复ARP响应“我就是192.168.1.10我的MAC是xx:xx”。A收到响应后把IP-MAC映射关系写进本地ARP缓存表下次通信直接查表不再广播。这个过程用抓包工具看尤其直观。我建议你在自己的实验环境试一下先arp -d清空ARP缓存再ping一台局域网主机同时在Wireshark里过滤arp就能看到完整的请求-响应过程。第一次ping会有两个数据包——一个是ARP请求的广播另一个是对应的单播而后续ping就只剩ICMP回显请求了不再有ARP这就是缓存生效。这里有几个值得留意的细节ARP请求是广播帧目的MAC是全FFF:FF:FF:FF:FF:FF但ARP响应是单播直接发给请求方。ARP协议是跨层设计的一个典型例子它在TCP/IP体系里属于网络层IP层的一部分但报文直接封装在以太网帧里不经IP封装所以抓包时它的“协议类型”是0x0806而不是0x0800。ARP缓存条目有老化时间Windows和Linux默认不一样Linux通常是300秒左右。如果过期了还要通信就得重新发ARP请求。4.3 交换机怎么“学习”MAC地址数据链路层的核心设备是交换机或者网桥它们靠一张内容寻址存储器CAM表来转发帧。这张表其实就是MAC地址表。交换机的自学习过程收到一个帧时先把“源MAC地址 入端口”记录到MAC表里。这个动作叫学习。查表找“目的MAC地址”对应的出端口。查到了就从对应端口单播转发查不到就向所有其他端口转发洪泛。为什么查不到要洪泛因为在不知道对方在哪台设备后面的时候最安全的办法就是每台设备都发一份对方收到后会回应交换机再记录它的位置下次就能精准转发了。这个机制保证了交换机不需要预配置就能自适应网络的拓扑变化。实际部署中MAC表老化时间默认300秒左右一旦设备换了物理端口老化前可能暂时无法通信这个阶段叫做“MAC漂移”。我遇到过几次比如电脑从交换机A口换到B口后立刻上网不通多半就是交换机还没来得及更新MAC表通常等老化或清表就好了。另外大型网络里如果出现冗余链路交换机的MAC学习机制会产生广播风暴。原因很简单——帧在环路里会被反复转发、反复学习最终把交换机的CPU和带宽打满。为此生成树协议专门用来阻塞冗余端口破坏环路。Day3学到交换机转发机制时最好顺带看一眼前导码CSMA/CD和生成树协议的基本思想后面学网络层时不会觉得突兀。5. 常见问题与实验心得5.1 常见报错、排查技巧速查Day3知识点密集实际动手时最容易碰到的问题无非是这几类现象可能原因排查方法网卡灯亮但无法通信物理层链路协商异常检查双绞线线序、接头压接质量、交换机端口rate/duplex配置局域网内一台电脑访问不到另一台ARP缓存错误或MAC表未更新arp -a查看缓存必要时arp -d清空后重ping抓包看到大量FF:FF:FF:FF:FF:FF的帧广播帧过多用Wireshark统计广播占比排查是否存在环路大文件传输极慢小包正常MTU不一致用ping指定大小不分片逐级探测MTU交换机端口CRC错误数持续增长物理层线路质量问题检查线缆长度、接头、附近干扰源5.2 我建议每个人都要做的三个小实验理论学习再多不如亲手跑一遍印象完全不同。我强烈建议你在Day3学完之后花半小时做完下面三件事实验一抓一个ARP请求/响应。电脑接在路由器或交换机上Wireshark过滤arp然后清ARP缓存并ping一台局域网IP。看广播帧的目的MAC是全F看响应帧是单播。看完你就彻底理解“广播请求、单播响应”这个套路。实验二用Wireshark看一个HTTP请求的帧结构。打开浏览器随便访问一个网站在Wireshark里过滤http或tcp.port 80。右键看以太网帧头注意帧里同时有源MAC、目的MAC、类型0x0800。这一下就能把“网络层数据包封装到帧里”的抽象概念落回实处。实验三自己手工算一次CRC。网上有CRC在线计算器但建议先拿纸笔按模2除法推一遍。手算过一次之后你会对“为什么FCS能检测错误”有非常直观的感受。以后再看到校验字段就不会当成“神秘的魔法字节”了。5.3 学习资料和工具清单Day3内容的资料我推荐两个观点不同的理解路径先看Wireshark官方抓包样例再看教材对应章节。Wireshark有个专门的“Ethernet”抓包样本文件下载后直接看帧字段的十六进制和解析对照比干看表格强得多。命令层面掌握三个就够用了ping测通性和MTU探测arp -aWindows/ip neighLinux查ARP缓存tcpdump -i eth0 -eLinux下查看带MAC头的帧信息做实验时注意在真实交换机上别乱抓包最好用虚拟化环境或者家用的小交换机。如果用云服务器做实验很多云平台默认不允许发ARP广播你只能模拟抓不到实际广播这是环境限制不是什么玄学。6. 最后再说两句学习建议Day3的内容量在我看来其实是整个计算机网络课程的一个分水岭。前面两天的内容偏抽象但门槛低从今天开始协议细节开始变多做题和实验之间的关联明显增强。如果你今天觉得知识点太碎记不住那是正常的不用焦虑。我的个人体会是Day3最值得投入时间的地方不是背术语表而是把“帧——MAC——ARP——交换”这条线串成一个完整的故事。你先在脑子里建立一个场景一台电脑A向同一个网段的电脑B发数据应用层把数据交给了IP层封装成包然后数据链路层查ARP表得到B的MAC地址封装成以太网帧交给物理层发出去交换机收到帧后查MAC表决定从哪个端口转发B网卡收到帧后剥离帧头和帧尾把IP包交给网络层处理。把这个故事从头到尾完整讲一遍今天就算真正学会了。Day3之后下一站就是网络层的IP寻址与路由那又是一块硬骨头。但只要物理层和数据链路层的基础打得扎实后面学起来会顺畅很多。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑