ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

计算机网络第二节课:吃透分层模型,打通协议与排障思维

计算机网络第二节课:吃透分层模型,打通协议与排障思维 很多同学学计算机网络第一节课还挺轻松老师讲讲计算机网络是什么、因特网由什么组成、几种交换方式大家听着也像常识。可一到第二节课画风突然就变了——黑板上出现一张七层模型物理层、数据链路层、网络层、传输层、应用层摆了一排紧接着就是协议、服务、接口、报文、帧、分组、报文段这一堆名词。我第一次听的时候整个人是懵的坐在底下光忙着抄图根本不知道这些“层”到底是干嘛用的。后来等我把这门课啃完、又在实际网络环境里摸爬滚打了几年才真正明白一个道理计算机网络第二节课其实是整门课真正的骨架。前面那些概念是为了让你有个印象后面每一章不管是学IP、学TCP、学HTTP本质上都是在某一条“层”上往下深挖。如果第二节课的分层逻辑没吃透后面学什么都会发虚只能靠死记硬背撑过去一到综合题就露馅。这篇内容我就围绕“计算机网络第二节课”展开把课堂里最容易糊弄过去的地方掰开揉碎讲清楚再附上一些我实操过的验证方法。不管你是刚上这门课的大学生还是在准备考研408、校招面试或是走DevOps方向想补网络基础这节课都值得你多花点时间。1. 第二节课到底在讲什么从“概述”到“体系结构”的转折点1.1 课程路线先给你一张全景图再一处处展开大多数教材和课程第一节课都是在讲“计算机网络的宏观面貌”比如网络的分类、网络性能、交换方式。到了第二节课通常就会进入一个关键主题网络体系结构也就是分层模型。为什么非得这样安排因为计算机网络是一个极其复杂的系统两台主机之间传一份数据要涉及硬件线路、信号编码、地址寻址、路由选择、差错控制、会话管理、数据表示等一大堆问题。如果把这些揉在一起来讲谁都没法学。所以早期设计者就想到一个“分而治之”的办法把整个通信过程拆成若干层每一层只解决这个过程中的一部分问题层与层之间通过清晰的服务接口对接。课堂上的做法通常就是先发一张全貌图把各层画出来说明每一层负责什么、和谁打交道然后告诉你后面每个章节都会深入其中一层。所以第二节课本质上是给你装一张“地图”后面所有内容都是在这张地图上做标注。我记得很多老师会用一个特别形象的生活类比——快递系统。你在网上下单商家打包快递公司分拣运输车跑高速到了目标城市再分拣最后快递员派送到你手上。整个过程被拆成了“电商平台”“仓储打包”“干线运输”“末端派送”几个环节每个环节只管自己的事却又通过单据、面单、签收信息衔接起来。计算机网络的分层逻辑上跟这个非常像。1.2 为什么分层模型是这门课的第一个“门槛”很多同学觉得第二节课难不是因为它有什么高深数学而是因为它要求你换一种思维方式。以前学物理、学数学往往是一个知识点对应一个公式、一个结论。但网络分层是一个“多个模块协作完成任务”的思维方式数据要从应用层一路往下封装成比特流到了对端再从下往上解封装。这中间出现“协议”“服务”“接口”三个词很多人直接就昏了。这里我当年也卡过很久后来我用一个很笨的方式搞懂了协议是同一层之间沟通的规则。比如通信双方都遵守某种报文格式这叫协议。你和我说话都讲普通话普通话就是我们的协议。服务是下层为上层提供的能力。比如传输层可以为应用层提供可靠的数据传输能力这就是一种服务。接口是上下层之间调用关系的入口。上层要使用下层的服务得通过接口来操作类似于你打开手机App调用底层Wi-Fi模块的接口。这三个概念期末选择题特别喜欢出诸如“TCP是传输层的协议还是服务”“IP层为上层提供了哪种服务”如果你第二节课没把这三者的边界划清楚后面就是一团浆糊。另外一个很现实的问题第二节课没搞懂后面的应用层、传输层、网络层每一章都会变成新的“背诵材料”。你记了TCP三次握手但你不知道握手过程是在哪一层完成的你记了HTTP的请求报文格式但不知道它为什么要依赖TCP。这些东西一旦脱离分层框架去单独记忆遗忘速度特别快考完就还给老师。你要是第二节课能吃透后面每一章学的时候都会有一种“原来这块是在填之前那张图的这个格子”的爽感。2. 分层模型的关键细节七层、四层与五层别死记硬背2.1 OSI参考模型每一层到底管什么第二节课讲分层一般会从OSI参考模型讲起。它把网络通信分成七层从上到下分别是应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。很多教材会把下四层当重点把上面三层简单带过因为实际使用中会话层和表示层的功能往往被应用层协议吸收了。但考试偶尔会考概念至少你要知道每层在干嘛。我习惯用一张表把这个“分工逻辑”钉死层级核心职责典型设备或协议最关键的数据单位应用层为用户应用提供网络服务HTTP、DNS、FTP、SMTP报文流消息表示层数据格式转换、加密压缩JPEG、ASCII、SSL早期概念数据表示会话层建立和管理会话NetBIOS会话数据传输层端到端可靠传输、端口复用TCP、UDP报文段TCP/数据报UDP网络层路由选择、逻辑寻址路由器、IP、ICMP分组/数据报数据链路层相邻节点之间的帧传输、差错控制交换机、网卡、以太网帧物理层比特流的透明传输定义电气和物理特性集线器、中继器、网线比特流这张表看起来要记的东西很多但你可以抓主线数据从应用层产生往下每一层都会“加一层头”或者“按自己的规则处理”到物理层变成比特流放到线缆上到了接收端再反过来一层层剥掉头最后还原成应用数据。这个“封装—解封装”过程是第二节课最重要的主线没有之一。我提醒一句OSI是概念上的理想模型真正跑在互联网上的是TCP/IP体系。考试如果要求你画层级图通常要画五层版本也就是把OSI的会话层、表示层合并进应用层形成“应用层、传输层、网络层、数据链路层、物理层”这种更贴近工程实际的结构。2.2 从分层思考到实际排障这比背协议名更有用理解分层模型最高价值的一点是它会成为你以后排查网络问题的“坐标系”。很多DevOps工程师、运维工程师遇到网络故障时心里想的就是这张分层图。问题到底出在哪一层一层一层往下问就行。我举个实际场景。网站打不开普通用户只会说“网坏了”但工程师脑子里应该是这样一套问题链物理层网线有没有插好Wi-Fi信号是不是断了设备是不是被断电了数据链路层交换机端口有没有起来链路状态是否正常网络层本机能不能ping通网关能不能ping通对端服务器IP路由是否可达传输层服务器的端口比如80/443是否在监听防火墙有没有放行应用层服务进程是否正常返回的HTTP状态码是什么这就像是拿着一个分层清单逐格扫描。如果你第二节课只是把七层模型背了下来却没有形成这种“分层排查”的意识那这门课对你的实际价值就会大打折扣。我自己的工作习惯是把这张排查思路固定成一个速查表贴在工位旁边现象优先怀疑的层先跑的工具网线指示灯不亮物理层检查线缆、供电ping网关通、ping公网IP不通网络层路由检查路由表、网关配置ping公网IP通、域名解析不出来应用层DNSnslookup、dig端口连不上传输层telnet、nc、ssHTTP返回5xx应用层服务查看应用日志这个方法不需要额外学习成本只要你理解了分层模型自然就能用出来。所以第二节课的内容真的不只是应付考试它是在训练你一套思维框架。3. 网络性能指标衡量“快慢”的那些数字背后3.1 速率、带宽、吞吐量三个词三条不同的“车道”第二节课除了分层模型通常还会讲一组性能指标最常见的就是速率、带宽、吞吐量、时延。这几个概念初看特别像都是描述“速度”的但严格来说各有各的侧重点。速率通常指额定速率就是网络设备标称的“最大数据传输率”单位是bit/s。比如网卡写着100Mbps这里的100Mbps就是额定速率。带宽在计算机网络中带宽也被用来表示网络的通信线路传送数据的能力即链路允许的最高速率。你可以简单理解成“公路的车道数”决定理论上最多能跑多快。吞吐量是实际单位时间内成功传过的数据量。它受带宽限制但还会受服务器性能、拥塞、丢包等情况影响通常小于带宽。我用一个生活化类比来说带宽像高速公路上最高限速速率像汽车的仪表盘标称极速吞吐量则是你这一路跑下来的平均车速。三者不相等而且实际场景里差别可能非常大。我很久以前测过一个文件传输场景本地交换机是千兆带宽两台服务器直连理论上速率能达到千兆。但我实际传一个大文件往磁盘上写由于硬盘读写速度和系统协议栈开销最终吞吐量可能只有700-800Mbps甚至更低。这很正常也正好说明为什么不能把“带宽大”直接等价于“传得快”。带宽只是理论上限真实吞吐量要看整条链路里最弱的那一环。还有一个特别容易踩的坑速率单位是bit/s但很多软件显示下载速度用的是Byte/s1 Byte等于8 bit。如果运营商标称宽带是100Mbps你测速时下载速度能跑满12.5MB/s左右就算正常了。可别看到数字不对就觉得设备坏了先检查单位换算。3.2 时延、RTT与丢包率用户感知的“卡顿”到底来自哪里比“带宽”更影响日常体验的往往是时延。第二节课会集中讲四种时延发送时延、传播时延、排队时延、处理时延。发送时延节点把数据送上传输链路所需的时间等于数据位数除以发送速率。数据量越大发送时延越大。传播时延信号在信道里跑的时间等于信道长度除以信号的传播速率。信道越长传播时延越大。排队时延数据在路由器缓存队列里等转发的时间和网络拥塞程度有关。处理时延路由器或主机检查报文头、查路由表等处理所需的时间。这里很多初学者容易把“发送时延”和“传播时延”搞混其实区别很简单发送时延是“路口放行的过程需要多久”传播时延是“车上了高速之后跑完这段路需要多久”。一个是“把数据从网卡送出去”的动作一个是“信号沿着网线跑到对端”的过程。举个例子假设你要发送一个10MB的文件链路带宽是100Mbps信道长度是1000km信号传播速度按2×10^8 m/s算。发送时延 数据量 / 发送速率 80Mbit / 100Mbps 0.8秒传播时延 距离 / 传播速度 1000km / (2×10^8 m/s) 1000000m / 200000000m/s 0.005秒在忽略排队和处理时延的情况下总时延大约是0.805秒。从这个例子就能看出在近距离传输中发送时延往往占主导但在跨洋链路那种几千公里的场景下传播时延就成了不可忽视的部分。游戏里的“延迟”、视频通话中的“卡顿”很多时候不是带宽不够而是时延太高。这也是为什么你在家测带宽很高但打游戏到外服依然卡——因为物理距离在那里光速再快也需要时间。RTT往返时间是另一个高频考点。简单说就是从发送方发送数据开始到收到对方的确认应答所经历的时间。我们可以用ping命令直接观测到后面马上会讲到。丢包率则是指传输过程中丢失的数据占发送总量的比例。丢包率高了视频会花屏、语音会断续TCP会触发重传传输效率断崖式下降。第二节课能把时延、带宽、吞吐量这几个概念理清后面学TCP拥塞控制、学习路由算法时很多“为什么这么设计”的问题都能迎刃而解。4. 课后动手三个能加深理解的小实验第二节课的内容光看书很容易飘。我特别建议当天就在自己的电脑上做三个小实验都不复杂但能让你对理论和现实的差距产生非常直观的感知。4.1 实验一用 ping 观察 RTT 和丢包ping是网络诊断里最常用的命令它基于ICMP协议正好属于第二节课讲的网络层范畴。在Windows的CMD或Linux终端里输入一行命令就能看到本机到目标设备的往返时间。ping baidu.com在我这边执行典型的输出长这样64 bytes from 110.242.68.66: icmp_seq1 ttl53 time3.91 ms 64 bytes from 110.242.68.66: icmp_seq2 ttl53 time3.82 ms 64 bytes from 110.242.68.66: icmp_seq3 ttl53 time3.97 ms其中time字段就是RTT单位是毫秒。你可以多试几个目标对比一下本地网关和远程网站延时的差异体会“传播时延”和“链路距离”的关系。如果想看丢包统计Linux下可以加上参数ping -c 100 baidu.com发送100个包后ping会汇总统计丢包率。Windows下默认只发4个包要连续发的话用ping -t baidu.com按CtrlC结束后会显示统计结果。注意有些服务器或本地网络会禁ICMP如果ping不通不代表目标主机真的挂了很可能是安全策略拦了ICMP。这种“我用排除法考察每一层是否正常”的思路本身就是排障的日常。4.2 实验二用 tracert/traceroute 观察路径和每一跳ping能看到点和点之间的RTT但你看不到中间经过哪些路由节点。这时可以用tracert命令Windows下写法是tracertLinux/macOS下是traceroute原理是利用IP报文里的TTL字段逐跳探测路径。tracert -d baidu.com输出会列出从本地到目标经过的路由器IP以及每一跳的响应时间。这里的-d参数是为了不解析域名显示IP就够了跑起来更快。我第一次跑tracert的时候特别有感触原来我从宿舍访问一台服务器数据包要从学校网关跑到运营商骨干网再一路蹦到目标机房跨越那么多节点。后来再看“互联网由许多网络互连而成”这句话感觉就完全不一样了。这个实验还能让你更直观地理解“传播时延积累”是怎么回事——每一跳都有一点延迟跳数越多总延迟自然越高。4.3 实验三用 Wireshark 抓包亲眼看到分层如果第二节课你非要选一个实验来做我的强烈建议是这个装一个Wireshark抓一次你自己上网访问的数据包亲眼看一看“协议分层”到底长什么样。很多学校计算机网络实验一就是抓包实验像HN大学这类高校课程实验的入门题目往往就是“用Wireshark分析HTTP报文结构”原理就是这个。操作方法很简单安装并打开Wireshark选择当前正在上网的网卡比如有线或Wi-Fi开始抓包。打开浏览器访问一个普通HTTP网站注意很多大网站现在默认是HTTPS抓到的内容会加密不方便看结构最好找一个本地HTTP服务或者支持HTTP的站点。停止抓包在过滤栏输入http找到HTTP请求报文。双击一条报文在中间的报文详情面板里你会看到一层一层的结构最下面是Frame和Ethernet二层信息往上是IP层、TCP层最上面是HTTP层。你会真实地看到一帧网络数据长什么样看到IP地址、MAC地址、端口号、序列号、校验和这些抽象概念如何落在具体字段里。那一刻课本上画的那些一层叠一层的图突然就变成“实物”了这种记忆比其他任何方式都牢固。Wireshark抓包的时候注意权限问题Windows下有些网卡需要以管理员身份运行Linux下通常要sudo才能看到完整内容。这只是工具使用细节不影响大局。5. 不同目标的资源选择与学习节奏别在第二节课就迷路5.1 教材和网课怎么选谢希仁、自顶向下、王道、湖科大第二节课听不懂不一定是你笨有可能是教材或网课的风格跟你不对路。市面上主流的计算机网络学习资源各有侧重我结合自己用过、带人用过的经验说下区别。谢希仁《计算机网络》国内经典教材语言规范概念讲得细考点覆盖系统特别适合对应学校期末考试和国内考研基础。它的章节结构是很多高校教学大纲的原型。缺点是部分内容偏理论初学者读起来可能有点干。《计算机网络自顶向下方法》这本书是行业口碑很好的教材从应用层一路“自顶向下”讲到物理层强调互联网真实工作方式课后有很多搭建实操性实验。如果你是走工程方向或者DevOps这类需要理解真实网络协议的岗位这本书的思维方式非常贴合实际。它和国内课程的“自底向上”顺序不太一样但第二节课要学的分层框架是相通的。王道计算机考研系列课程面向408考研真题导向强把考点压缩得很精炼。对于目标就是考研的学生王道能把第二节课和后面各章的重点难点拎得很清楚配套题一定要做。注意考研考的是综合能力光看不练不行“计算机网络王道”经常被推荐就是因为它的题跟考点结合紧密。湖科大教书匠这位老师的课程在B站等平台很火讲解偏基础细致能把第二节课这一类抽象概念用动画和拆解讲得很清楚。“湖科大教书匠计算机网络适合考408吗”是很多人搜过的问题我的看法是它可以作为打基础和入门的辅助动画演示帮助理解概念非常有效但如果目标纯粹是冲刺408拿高分建议还是配合王道这类真题向材料一起用两者并不冲突。我的建议很简单在校生跟紧学校教材听不懂的部分去湖科大教书匠补基础目标408、期末复习就上手王道刷题工程方向、面试方向自顶向下加Wireshark实操是黄金组合。5.2 第二节课之后怎样的学习节奏最不容易崩我见过太多同学第二节课听得稀里糊涂之后每一节课都越来越跟不上最后只能靠期末熬夜背题。要避免这个情况建议第二节课之后立刻采取这样的节奏当天画一张分层图。不用画得很漂亮但你要能闭着眼说出数据从应用层到物理层经过哪些层每层的数据单位叫什么。每学完一个新章节回到这张分层图上标注“这章属于哪一层”把新增的协议、知识点挂到对应层级上。比如学完IP标记网络层学完TCP标记传输层。每周做一次“手写封装过程”。随便想一个场景比如“从浏览器输入网址到服务器返回页面”然后写下数据在各层之间如何封装、如何传递。能写完整就说明你的分层思维成型了。把课后实验和知识点绑定。学到应用层就抓一次HTTP的包学到网络层就跑一次traceroute让理论和证据互相印证。说句实在话很多人的计算机网络是在第二节课“掉队”的但反过来也是在第二节课“开窍”的。差别就在于有没有及时动手验证、有没有把抽象模型跟现实对应起来。早一点踩这个油门后面会轻松很多。6. 容易被带偏的认知误区与避坑清单6.1 我见过最多的三个误区第一把“带宽大”等同于“体验快”。这个前面说过了带宽只是上限时延、丢包、服务器能力都会影响体验。第二节课就明确这两个维度后面学拥塞控制时才不会钻牛角尖。第二以为“光纤比铜线快”指的是速度快了一个量级。其实光纤的优势主要是带宽大、抗干扰强信号在光纤里的传播速度大约是真空光速的2/3左右跟网线里的电信号传播速度差异并没有想象中那么大。真正的瓶颈通常在路由转发、排队时延这些环节而不只是介质本身。第三认为第二节课“背住名字就行”。第二节课其实是整本书里考法最灵活的章节之一它不只是考“OSI有哪七层”还经常考“某个协议属于哪一层、某一层提供什么服务、给定时延参数怎么算”。这些需要理解模型不是背一排名字能解决的。我在带新人时还发现一个常见问题很多人遇到网络不通第一反应是把所有配置全看一遍眉毛胡子一把抓。其实只要脑子里有分层框架从下往上挨个验证通常几分钟就能锁定问题范围。这种“分层排查”的思维习惯应该就是从第二节课开始养成的。6.2 期末复习题库怎么用才不算浪费每到期末很多人会去搜“计算机网络期末复习”“计算机网络题复习题库”。题库当然有用但用法不对等于白做。我建议把复习分成三个角色基础概念题用来过一遍知识框架。看到题目要能立马反应出考的是哪一层、哪个协议。计算题重点掌握速率、时延、信道容量这些公式。第二节课的知识如果出计算题大概率就是给你带宽、距离、数据量求总时延这种题拿分最容易但也最考理解。平时多算几道把发送时延和传播时延的关系理清。简答题用来训练分层表达能力。比如“为什么计算机网络要分层”这种题年年都有人丢分原因就是他们背了答案但没理解“分层使复杂问题模块化、让不同厂商设备可以互联、便于独立实现和维护”这些核心论点。理解了这些怎么写都不会跑偏。如果你发现一个知识点的题反复错别急着刷下一题先回去看那层的概念把错题对应的原理搞清楚再往下走。这一节的知识是整本书的底层逻辑越早夯实后续学习越省力。我自己现在做网络相关的工作遇到任何故障脑子里第一件事仍然是调出那张分层图先锚定“在哪一层”再动手查。回头看所有习惯的职业化基础都起源于第二节课的这层窗户纸。所以如果你恰好也卡在这里不要急静下心把那层图吃透再往下走你会发现后面所有的章节都只是这幅框架的肌肉和血肉。
返回列表