2. 网络参考模型
想搞懂华为数通方向的HCIA,网络参考模型是绝对绕不开的第一道门槛。不管你以后是去调路由器、配交换机,还是跟人家排查一个“网络不通”的问题,最后都会回到这张图上:数据到底是怎么从一台设备跑到另一台设备,中间每一层都干了什么活,出了问题该找哪一层。这篇文章就把这块内容掰开揉碎讲清楚,适合刚接触数通、准备考HCIA,或者工作中经常跟网络打交道但一直没系统梳理过基础的人。
2.1 为什么非要有个“参考模型”
先回答一个很多人心里嘀咕的问题:网络通信已经这么复杂了,为什么还要搞一套模型出来,这不是给自己添麻烦吗?
想象一下你往外地寄一个包裹。你要做的其实是一连串动作:先把东西装进箱子、封好胶带、写上收件人地址,然后交给快递站点,快递公司负责把箱子从A城运到B城,到了之后有派件员按地址送到收件人手里,收件人拆开箱子拿出里面的东西。整个过程里,你不需要自己开车跑一趟,快递公司也不知道箱子里面具体装的是什么东西。
网络通信就是这个逻辑,只不过这套“寄包裹”的流程被定义得极其严格。OSI参考模型把整个通信过程拆成七层,每一层只干自己那一摊事,层与层之间有清晰的接口。这样做最大的好处有三个:一是各层独立演进,比如底层的传输介质从铜缆换成光纤,上层的应用和服务完全不受影响;二是各厂商可以按层分工做设备,只要遵守层间接口标准,不同厂商的设备就能互相通信;三是排查问题时有明确边界——“物理层通了但应用还是不行”,那你就不用去怀疑光模块坏了,先去看上层协议配置。
不过在实际的数通领域,真正被广泛采用的是TCP/IP模型。HCIA考试和日常配置里,你打交道最多的也是TCP/IP模型。它比OSI更精简,把七层合并成四层(也有教材写成五层),但核心思想一脉相承。后面讲的内容,我主要基于TCP/IP模型展开,同时会对比OSI的对应关系,方便你在不同资料之间切换时不迷糊。
2.2 四层模型的分工逻辑,一句话各是什么
TCP/IP模型从上到下是:应用层、传输层、网络层、网络接口层(也有人叫数据链路层+物理层,不同教材划分略有差异)。为了不让你被各种叫法绕晕,我这里先给出一张对应关系表,后面详细展开。
| TCP/IP模型分层 | OSI模型对应分层 | 核心职责 | 典型协议/技术 | 数据单位 |
|---|---|---|---|---|
| 应用层 | 应用层、表示层、会话层 | 为用户提供网络应用服务 | HTTP、HTTPS、FTP、DNS、Telnet、SSH | 数据流(Message) |
| 传输层 | 传输层 | 端到端的连接管理与数据传输可靠性 | TCP、UDP | 段(Segment)/数据报(Datagram) |
| 网络层 | 网络层 | 逻辑寻址、路径选择与分组转发 | IP、ICMP、ARP(不同教材归属不同) | 包(Packet) |
| 网络接口层 | 数据链路层、物理层 | 物理传输介质访问、帧封装、差错检测 | Ethernet、PPP、HDLC | 帧(Frame)/比特(Bit) |
提示:初学阶段不用死记每一层的数据单位名称,但你看到“帧”“包”“段”这些词时,要能条件反射地想到它们分别属于哪一层。这在你后面做抓包分析时会非常有用,因为抓包工具里每一行数据都标注了对应层级。
每一层说白了都是在干两件事:对上一层提供“服务”,同时对下一层使用“服务”。数据从你的电脑发出时,是自顶向下逐层封装;数据到达目标设备时,是自底向上逐层解封装。这就是常说的“封装”和“解封装”过程,是整个网络模型最核心的运转方式。
2.3 应用层:离用户最近,但最容易背忽略的一层
应用层是唯一直接面向用户的一层。你在浏览器里输入网址、用微信发消息、用客户端收邮件,这些动作最终都是通过应用层协议把数据“翻译”成网络能理解的形式。
应用层要干的事不仅是“传输数据”,还包括数据格式的约定、会话的建立与维护、身份认证等等。比如HTTP协议,它定义了客户端怎么发起请求、服务器怎么返回响应,请求行、状态行、报文头、报文体这些格式全都标准化了。你打开一个网页,实际上就是你的浏览器和服务器之间通过HTTP协议做了一次“对话”。
在华为数通的HCIA考试里,应用层的考点主要集中在两方面:一是常见应用层协议的特点,二是域名解析流程。DNS是常客,它负责把人类容易记忆的域名转换成设备能识别的IP地址。很多人觉得DNS不就是在“查表”吗,有什么好学的?但实际上DNS用的是分层递归查询,本地缓存、根域名服务器、顶级域名服务器、权威域名服务器之间的协作关系,加上UDP端口53的报文封装方式,这些都值得仔细看。考试不会直接问你“DNS的端口是多少”这种送分题,而是把查询失败、缓存过期、DNS劫持这类场景混在一起考你排查思路。
个人经验:在HCIA学习阶段,不要急着去背所有应用层协议。先把HTTP、DNS、FTP、Telnet、SSH这五个搞熟,尤其要搞清楚HTTP与HTTPS的差异、Telnet与SSH的差异,因为后面配置设备远程登录时天天和它们打交道。
2.4 传输层:可靠传输和端口号的大本营
从应用层下来的数据,到了传输层要干两件大事:一是对数据进行分段(Segmentation),给每一段加上传输层头部;二是负责端到端的可靠或不可靠传输。这里就引出了两个最重要的协议:TCP和UDP。
很多人会觉得TCP“可靠、面向连接”,所以“更好”;UDP“不可靠、无连接”,所以“更差”。这种认知太粗糙了。可靠性是有代价的,TCP的三次握手、确认重传、滑动窗口、拥塞控制,每一样都在消耗带宽和时延。如果你的应用场景是视频直播、语音通话、在线游戏,偶尔丢一两帧数据完全没关系,但绝对不能等重传,这时候UDP反而更合适。而HTTP、FTP、邮件这些要求数据完整性的应用,才需要TCP托底。
端口号也是传输层的重点。一台服务器上可能同时跑着Web服务、FTP服务、SSH服务,传输层靠端口号来区分这些不同的应用进程。源端口、目的端口各占16位,取值范围0~65535,其中0~1023是知名端口,比如HTTP是80、HTTPS是443、FTP是21、SSH是22、DNS是53。考试里会让你判断某个端口对应的协议,或者反过来根据协议判断端口。这个没什么技巧,就是熟。
传输层的头部结构也值得细看。TCP头部里除了源端口、目的端口,还有序号、确认号、标志位、窗口大小、校验和等字段。其中标志位里的SYN、ACK、FIN在三次握手和四次挥手过程中起着关键作用。UDP头部就简单多了,源端口、目的端口、长度、校验和,一共8个字节。
注意:在很多HCIA教材的练习题里,容易混淆的是“TCP可靠传输靠什么保证”。答案不是单一的“重传机制”,而是序号+确认+重传+流量控制这整套协同机制。如果你只记住“重传”,做题时一旦选项里同时出现“序号”“窗口”就容易犹豫,说明你对可靠性的理解还停留在表面。
2.5 网络层:IP地址、路由和“找路”的艺术
网络层是整个TCP/IP模型里最“数通”的一层。路由器的核心工作基本都在这一层完成:维护路由表、根据目的IP地址做最长匹配、决定从哪个接口把数据包转发出去。HCIA的考试重点也集中在这里——IP地址规划、子网划分、路由协议基础。
IP协议是网络层的核心。IPv4地址是32位二进制,通常写成点分十进制,比如192.168.1.1。这32位里,网络位和主机位的边界由子网掩码决定。子网掩码的作用就是告诉你“哪些位属于网络位,哪些位属于主机位”。比如255.255.255.0,意味着前24位是网络位,最后8位是主机位。为什么要做子网划分?最直接的原因是节省IP地址。一个C类地址段默认有256个地址,但如果你只需要20台主机,直接用一个完整的C类段会造成大量浪费。这时候把主机位借几位出来当子网位,就能把一个段切成多个小段,按需分配。
这里有一个HCIA里常考的点:计算可用主机数。公式是“2的n次方减2”,n是主机位数,减掉的两个地址一个是网络地址(主机位全0),一个是广播地址(主机位全1)。很多初学者会纠结“是不是所有地址都不能用”,其实不是,是你不能把网络地址和广播地址分配给主机接口。可用地址永远是2^n - 2。
另一个容易被忽视的点是ARP协议。很多人把ARP归到网络层,但华为的教材有时候会把它放在网络接口层或者单独提出来。ARP的作用是从已知的IP地址解析出对应的MAC地址。数据要在一个广播域内从一个设备到另一个设备,网络层只认识IP地址,而数据链路层只认MAC地址,ARP就是这两个世界之间的“翻译官”。
实战补充:在华为设备上敲命令的时候,你经常会看到“display arp”这条命令。它查看的是设备的ARP缓存表。排查网络不通时,如果发现网关的MAC地址解析不出来,大概率是二层链路的问题;如果解析出来了但还是不通,再往三层和路由方向查。这个思路比一上来就看路由表高效得多。
2.6 网络接口层:帧封装、MAC地址与物理传输
到了最底层,数据变成了比特流在介质上传输。这一层在TCP/IP模型里被合并成“网络接口层”,对应OSI的数据链路层和物理层。虽然简化成了一层,但实际工作一点也不简单。
数据链路层把网络层发下来的IP报文封装成帧(Frame),加上帧头帧尾。帧头里有目的MAC地址、源MAC地址、类型字段等,帧尾有FCS校验。这里有一个考试常考的区分:MAC地址是48位,通常写成十六进制,比如00-1C-42-5A-3F-87。MAC地址是烧录在网卡上的,理论上全球唯一,但通过软件也可以修改。数通设备上很多接口都支持MAC地址克隆、替换,这在做网络实验时经常用到。
以太网是这一层最常见的协议。传统以太网用CSMA/CD机制避免冲突,不过现在交换机组网基本都是全双工模式,CSMA/CD只有在半双工的古老场景里才会触发。你只需要理解以太网帧的结构即可:前导码、目的MAC、源MAC、类型/长度、数据、FCS。到了物理层,关注点变成接口类型、线缆类型、光模块、信号编码这些东西。华为设备上常见的物理接口有RJ45电口、光口(SFP/QSFP)、console口等。
一个容易踩的坑:很多人在排查“链路不通”时,先查IP地址和路由,折腾半天发现是网线没插紧、光模块型号不匹配这种物理层问题。所以遇到故障,先看接口状态指示灯,再在设备上看接口的up/down状态,这些信息在华为设备上用“display interface”就能看。物理层通了,才有资格谈上层。
2.7 数据封装与解封装的完整旅程
前面把每一层都拆开讲了,现在把它们串起来,走一遍完整的流程。这是理解网络参考模型最关键的一环,也是HCIA考试里经常出现的综合题场景。
假设你在电脑上打开浏览器,访问一个网站的首页。数据从你按下回车键开始:
- 应用层:浏览器构造一个HTTP请求报文,包含请求行、请求头部、请求体。这份“数据”被当作应用层数据交给下一层。
- 传输层:TCP把HTTP数据分段,加上TCP头部。TCP头部的关键字段包括源端口(随机高位端口)、目的端口(80或443)、序号、确认号、标志位。这时数据单位叫“段”。
- 网络层:IP协议在TCP段外层套上IP头部,写上源IP(你的电脑IP)和目的IP(目标网站服务器IP)。这时数据单位叫“包”。
- 网络接口层:以太网协议在IP包外层套上帧头和帧尾,填写源MAC(你的网卡MAC)和目的MAC(下一跳设备的MAC,很可能是网关的MAC)。这时数据单位叫“帧”。
- 物理层:帧被转换成比特流,通过网线、交换机的级联链路、运营商网络,一站一站地转发。
数据到达服务器后,从下往上逐层解封装:物理层收到比特流还原成帧,链路层检查MAC地址和FCS校验,网络层读取IP地址,传输层根据端口号找到对应进程,应用层把HTTP报文解析出来,服务器程序做出响应。服务器响应时,又会走一遍同样但方向相反的封装过程。
理解这个流程有什么实际价值?抓包分析的时候,你看到的数据包每一层都有对应字段,抓包工具有时会故意把IP头部、TCP头部、应用层数据分开高亮。如果脑子里没有“每一层加了什么头”这个过程,你看抓包就是看天书。反过来,一旦脑子里能自动“拆包”,你看到任何一个数据包都能快速定位问题出在哪一层。
华为设备上也有一条和这个模型强相关的常用命令——tracert。它利用的是ICMP报文中的TTL超时机制,让路径上的每一台路由器都向你返回一个超时消息,从而实现“逐跳追踪”。这条命令在跨设备排查路径问题时非常有用,和封装解封装的过程配合起来,可以非常直观地理解数据经过网络设备时的状态变化。
2.8 华为设备视角:常用命令与参考模型的对应关系
学网络参考模型不能只停留在纸面上,还得跟设备命令挂钩。这里谈谈华为数通设备上常见命令和模型各层的对应关系,方便你在实验环境里边敲命令边加深理解。
物理层和链路层相关命令:
- display interface:查看接口状态。输出里你会看到up/down状态、速率、双工模式、MAC地址、物理层和链路层信息。如果显示“down”,先怀疑物理层问题。
- display mac-address:查看MAC地址表。交换机是靠MAC地址表做二层转发的,这张表记录着哪个MAC地址在哪个接口上。MAC地址表有问题,二层通信就会出问题。
- display arp:查看ARP表,前面提过,这是IP地址和MAC地址的映射关系表。
网络层相关命令:
- display ip interface brief:查看接口的IP地址、状态。这是排查三层问题时最常用的开局命令。
- display ip routing-table:查看路由表。路由器转发数据包靠的就是这张表。看路由表时重点关注路由的来源、目的网段、下一跳、出接口。
- ping:最基础的三层连通性测试命令。华为设备上可以带源IP、带次数、带大小等参数。ping不通不一定是网络层问题,但ping通了至少能说明三层可达。
传输层相关命令:
- display tcp status:查看TCP连接状态。排查服务器端口问题时很有用,能看到ESTABLISHED、LISTEN、TIME_WAIT这些状态。
- telnet / ssh:远程登录命令,本身就是应用层和传输层协作的产物。
学习建议:在模拟器里搭一个最简单的实验——两台路由器直连,两端的环回口各配一个地址,然后在两端ping对方。通了之后,再分别查看路由表、ARP表、MAC地址表的变化。你会发现“封装解封装”不再是抽象概念,而是能对应到设备上的一张张表。这是我认为最有效的入门训练方式。
2.9 常见误区:这些坑我踩过,你不要再踩了
学到这里,很多人会觉得自己懂了,但一做题还是错。说几个典型误区。
第一个误区:把MAC地址当作IP地址一样去“路由”。MAC地址只在同一个广播域内有意义,路由器不会拿MAC地址去做跨网段转发。你Ping通一个跨网段地址,中间经过的每一跳路由器都在网络层做转发决策,ARP只负责解决“当前段里IP到MAC的映射”。所以,不要用MAC地址去解释跨网段通信。
第二个误区:认为TCP比UDP“高级”。我之前强调过,它们只是适用于不同场景。HCIA考试里经常有一道题是用表格列出若干应用,让你选出哪些适合TCP哪些适合UDP。做错的人往往是因为死记硬背,而不是真正理解“可靠性需求”和“实时性需求”之间的权衡。
第三个误区:把子网掩码算错边界。尤其遇到借位创建子网的题目,很多人在计算时忘记“网络位向主机位借1位后,子网数量是2的借位数次方,但每个子网可用主机数要减2”。还有些人在算地址范围时忽略网络地址和广播地址。我的建议是做题时先画一张简单的二进制表,不要把十进制换算当唯一解法,一眼看出来二进制位变化会更稳定。
第四个误区:忽略TTL。IP头部里TTL字段的值每经过一台路由器就减1,减到0时数据包被丢弃,并返回一个ICMP超时消息。HCIA的基础题里关于TTL的考点不算多,但这是理解tracert原理的前提。不要觉得TTL只是“防环”的工具,它也是路径追踪的基础。
第五个误区:混淆“半双工”和“全双工”。物理层和链路层的内容在HCIA占分不高,但偶尔会出概念题。全双工时设备可以同时收发数据,不需要额外协调;半双工时同一时刻只能一方发一方收,需要碰撞检测机制来协调。理解这个区别,再回头去看以太网CSMA/CD机制就会顺畅很多。
2.10 实验验证:用华为模拟器还原一套完整通信过程
理论讲了这么多,最后给一个可以直接照做的实验。你需要在模拟器里完成一个小拓扑,自己动手观察封装、解封装、路由转发这些过程。
拓扑结构很简单:两台路由器加两台PC。路由器R1和R2用一条链路直连,左边PC1接在R1上,右边PC2接在R2上。IP地址规划如下:
| 设备 | 接口 | IP地址 | 掩码 |
|---|---|---|---|
| PC1 | 以太网口 | 192.168.1.10 | 255.255.255.0 |
| R1 | GE0/0/0(接PC1) | 192.168.1.1 | 255.255.255.0 |
| R1 | GE0/0/1(接R2) | 10.0.12.1 | 255.255.255.252 |
| R2 | GE0/0/0(接R1) | 10.0.12.2 | 255.255.255.252 |
| R2 | GE0/0/1(接PC2) | 192.168.2.1 | 255.255.255.0 |
| PC2 | 以太网口 | 192.168.2.10 | 255.255.255.0 |
先把R1和R2的接口IP配上。在R1上输入三条命令:
[R1]interface GigabitEthernet0/0/0 [R1-GigabitEthernet0/0/0]ip address 192.168.1.1 255.255.255.0 [R1-GigabitEthernet0/0/0]quit [R1]interface GigabitEthernet0/0/1 [R1-GigabitEthernet0/0/1]ip address 10.0.12.1 255.255.255.252R2同理,配192.168.2.1和10.0.12.2。配完后在PC1上Ping PC2:
PC1> ping 192.168.2.10第一次Ping大概率会显示“Request time out”或者丢包。别慌,这不是配置错误,很可能是ARP还没建立。Ping工具会先通过ARP解析网关192.168.1.1的MAC地址,然后发送ICMP请求报文。多Ping两次就能通。通了之后按顺序执行以下查看命令:
PC1> arp -a你会看到PC1的ARP表里有192.168.1.1对应的MAC地址,这个MAC地址是R1左侧接口的MAC,不是PC2的MAC。说明PC1只知道下一跳MAC,它根本不需要知道PC2的MAC。
再在R1上执行:
[R1]display arp [R1]display ip routing-table路由表里应该能看到192.168.2.0/24的路由,下一跳是10.0.12.2,出接口是GE0/0/1。同时,R1的ARP表里应该有10.0.12.2对应的MAC,这是R2右侧接口的MAC。
最后在R2上执行:
[R2]display ip routing-table路由表里会有192.168.1.0/24的路由,下一跳是10.0.12.1。
做完这套实验,你再回头看封装的完整过程:PC1发数据时,数据从应用层到网络层是完整的IP包,到了链路层才封装成帧;MAC地址在每一跳都会重新封装,IP地址始终不变。这个观察结论,就是你理解整个网络参考模型的最佳证据。
如果还想继续深入,可以在R1和R2之间开启链路层抓包,看看帧的内容,或者把R1到R2的接口改成子接口、加一条静态路由,观察路由表的变化。整个HCIA阶段,网络参考模型这块内容不需要背太多命令,关键是建立“数据经过每一层时发生了什么”的画面感。这个画面感建立了,后面学路由协议、学VLAN、学ACL都会轻松很多。