计算机网络基础系列写到这里,前两次课大家普遍还挺轻松,因为一开始接触的是网络分类、拓扑结构、双绞线制作这些看得见摸得着的东西。到了“一阶段-计算机网络基础3”这个位置,画风突变,IP地址、子网掩码、三次握手、路由转发这些概念全是抽象的,光靠记忆很难过关。这篇内容主要面向正在系统学习网络基础的人,或者打算转行做网络运维、备考网络工程师认证的读者,我会把第三阶段最核心的几块知识,配合这些年带新人时反复踩过的坑,一起拆开讲清楚。
1. 这套基础课为什么要单独安排“第三讲”
1.1 前两讲到底给你留下了什么
很多培训课程和自学路径会把网络基础拆成一阶段、二阶段的系列课程,这个顺序不是随便拍的。前两讲通常会把网络的分类、常见拓扑、传输介质、MAC地址、二层交换机这些概念过一遍。这些内容偏形象化,学起来不会有太大压力,但它们很重要,因为后面所有抽象概念都要落在这些物理基础之上。
举几个常见内容:星型拓扑为什么是现在组网的主流,因为它单点故障不影响全网,扩展也方便;直通线和交叉线的区别,虽然现在多数设备支持自适应,但这个概念能帮你理解物理层的协商机制;MAC地址是数据链路层的标识,交换机转发数据就是靠MAC地址表。没有这些底子,讲IP、讲路由的时候会很难理解“二层转发”和“三层路由”的差别。
1.2 第三讲必须完成的三个转变
第三次课的教学重点,在我看来是逼着学习者完成三个转变。
第一个转变是从“看得见摸得着”转向“抽象逻辑”。前两讲你还能拿根网线比划,从第三讲开始,IP地址、端口、协议栈全是看不见的东西,但这些恰恰是整个网络的灵魂。
第二个转变是从“单台设备视角”转向“端到端链路视角”。以前关注一台交换机怎么转发,现在要关注数据从源主机出发,经过交换机、网关、路由器,最后到达目的主机的完整路径。每一步都可能出问题,排查难度陡增。
第三个转变是从“记忆型学习”转向“排障型思维”。学完这一阶段,哪怕只记住一条ping的排查链路,你至少看到“上不了网”不会手足无措。很多新人学网络最大的问题就是知识点会背,但遇到真实故障不知道从哪下手,第三讲必须把这个习惯掰过来。
2. 网络参考模型:故障定位的第一步
2.1 七层模型真正有用的地方不是背
OSI七层模型,物数网传会表应,这个口诀估计很多人背过。我个人的观点是:考试需要背,但实际工作里没人会把一次通信过程逐层背诵一遍。OSI模型真正有价值的,是把复杂的网络通信拆解成边界清晰的层次,每层各司其职,层次之间有明确接口。
比如HTTP协议在应用层,它根本不关心底层是以太网还是WiFi,也不关心IPv4还是IPv6。因为分层,上层协议可以独立演进,下层替换成新硬件时上层不用改。打个生活化的比方,厨房做菜如果买菜、洗菜、切菜、炒菜全是一个人干,流程没法并行,想优化也没法下手。网络分层就是让每一层专注自己的事,效率和可维护性都上来了。
这个模型还有一个实际用途:故障定位。浏览器打不开网页,如果提示无法解析服务器地址,问题大概率在DNS或应用层配置;如果能用IP地址访问但域名不行,那就是DNS解析环节有故障;如果IP通但端口连不上,可能是传输层或防火墙策略问题。这种逐层定位思路,是基础阶段最重要的思维方式。
2.2 TCP/IP分层才是干活时的坐标系
虽然教材从OSI讲起,但实际网络用的是TCP/IP协议栈。常见说法分四层,也有教材细分为五层。我建议初学者按五层来理解,因为它和你后面用抓包工具看到的东西能对上。
五层从下往上分别是:物理层负责比特流转,比如网线的电信号和光纤的光信号;数据链路层负责同一条链路内的数据帧转发,核心概念是MAC地址;网络层负责逻辑寻址和路径选择,核心是IP地址和路由协议;传输层负责端到端的通信质量,核心是TCP和UDP,还有端口号;应用层承载各种业务协议,比如HTTP、DNS、DHCP、SSH。
理解分层时重点关注“每层解决什么,不解决什么”。路由器转发依靠网络层,不关心上层是HTTP还是数据库流量;交换机工作在数据链路层,只认MAC地址,这就解释了为什么不同网段的设备接在同一台交换机上,不配置三层接口就ping不通。
2.3 一次数据封装的完整旅程
封装和解封装是贯穿整个网络基础的核心过程。你访问一个网页,浏览器先生成HTTP请求数据,这个数据在应用层是原始业务数据;到了传输层,加上TCP头部,里面带了源端口和目的端口;到了网络层,加上IP头部,标明源IP和目的IP;到了数据链路层,加上以太网帧头,填上源MAC和目的MAC;最后在物理层变成比特流发送出去。
接收端的过程完全相反,层层剥掉头部,最终把原始数据交给上层应用。这个“加头”和“剥头”的流程,理解得越透彻,后面看协议、抓包就越轻松。
我特别建议基础阶段的读者装一个Wireshark,访问一遍任意网站,然后随便选中一个HTTP包看协议树。你能清楚看到Ethernet帧、IP层、TCP层、HTTP数据四层结构,这样封装概念就不是死记硬背,而是亲眼所见。很多人学完网络都没抓过一次包,这是很可惜的。抓包之前记得设置过滤条件,比如 tcp.port == 80,否则会看到一堆ARP和MDNS背景流量,容易被吓到。
3. IP地址规划:从算掩码到搭网段
3.1 私有地址、公有地址和NAT的关系
IPv4地址是32位二进制数,写成点分十进制。最初按类别分A、B、C、D、E类,这个分类方法到今天基本只用于考试和历史理解。现在真正用的是无类地址制度,更重要的是搞清楚公网地址、私网地址、NAT三者之间的关系。
地址总量约43亿个,互联网设备早就远超这个数,所以IPv6才要登场。但过渡期里,私网地址加NAT解决了大部分问题。私网地址有三段:10.0.0.0/8,172.16.0.0/12,192.168.0.0/16。这些地址只能在内部网络使用,不能直接出现在公网上。企业内网怎么规划都行,但出公网必须通过NAT转换成公网地址。
我见过不少新人搞混一件事:两个私网地址段想互通,比如192.168.1.0/24和192.168.2.0/24,如果中间没有三层路由,哪怕接在同一台交换机上也不通。二层交换机只按MAC地址转发,不认IP网络号,跨网段必须经过网关做三层路由。
3.2 子网掩码计算技巧与常见翻车点
子网掩码的作用是把IP地址拆成网络号和主机号。比如192.168.1.100/24,表示前24位是网络号,后8位是主机号,这个子网里有256个地址,可用的254个。如果你把掩码改成255.255.255.128,也就是/25,子网就分成两个块,每块128个地址,可用126个。
这里有个快速心算方法:用256减去最后一个非零掩码值,就能得到子网大小。比如掩码255.255.255.192,256减192等于64,这个子网的地址块就是64;掩码255.255.255.224,块大小就是32。算出块大小后,就能快速枚举出子网范围。
| 掩码 | 前缀 | 子网大小 | 可用地址数 |
|---|---|---|---|
| 255.255.255.0 | /24 | 256 | 254 |
| 255.255.255.128 | /25 | 128 | 126 |
| 255.255.255.192 | /26 | 64 | 62 |
| 255.255.255.224 | /27 | 32 | 30 |
| 255.255.255.240 | /28 | 16 | 14 |
| 255.255.255.248 | /29 | 8 | 6 |
| 255.255.255.252 | /30 | 4 | 2 |
常见翻车点有两个。一是可用地址数忘记减2,网络地址和广播地址不能分配给主机。网络地址是主机位全0,广播地址是主机位全1,这两个地址各有特殊用途。二是把广播地址或者网络地址配成主机的IP。比如192.168.10.0/24这个网段,网络号是192.168.10.0,广播地址是192.168.10.255,这两个都不能用在任何接口上。
再说个容易犯糊涂的实际情况:一台PC配置了192.168.1.101,掩码是255.255.255.192,那它的网关就不能配192.168.1.1,因为这个地址在另一个子网块里。按块大小64来分,192.168.1.101落在192.168.1.64到192.168.1.127这个块内,合法网关应该是这个范围内的某个地址,比如192.168.1.65。配置前先算清楚掩码,能省掉很多无头绪的排障。
3.3 VLSM和CIDR在项目里怎么落地
VLSM就是可变长子网掩码,简单说就是在同一大网段里,根据各区域需求使用不同的掩码长度。公司分到192.168.0.0/24,办公区需要120个地址,划分一个/25;财务区需要20个地址,划分一个/27;服务器区需要10个地址,划分一个/28;无线访客区需要60个地址,划分一个/26。这样既不浪费,又让每块区域有独立的网段边界,方便做安全策略。
CIDR的含义是即使申请到的地址是连续的几个C类段,也可以合并成一条路由发布。比如192.168.0.0/24、192.168.1.0/24、192.168.2.0/24、192.168.3.0/24四个网段都从同一出口出去,对外只要发布一条192.168.0.0/22的路由即可。这么做的意义很直接,减少中间路由器的路由表条目,降低网络维护成本。
规划IP时还有一个非常重要原则:能隔离就隔离,别把所有设备塞进一个超大网段。一个大广播域里,某台设备出问题,流量风暴可能波及全网。把办公、监控、服务器、访客分成独立网段,真出故障时排查范围立刻缩小。
3.4 一个50人办公室的IP规划实例
拿一个常见的50人办公场景举例。员工办公电脑和打印机需要固定网段,管理层和访客WiFi需要隔离,监控摄像头需要独立网段,还有一台内部服务器需要单独区域。
可以这样规划:
- VLAN 10 办公网段:192.168.10.0/24,网关192.168.10.1
- VLAN 20 无线网段:192.168.20.0/24,网关192.168.20.1
- VLAN 30 监控网段:192.168.30.0/24,网关192.168.30.1
- VLAN 40 服务器网段:192.168.40.0/24,网关192.168.40.1
- VLAN 99 设备管理网段:192.168.99.0/24,网关192.168.99.1
有人可能觉得监控才几十台设备,分一个/24有点浪费。但预留扩展空间有价值,而且网段大小统一的话,配置和记忆成本都低。网关地址统一取.1,连管理维护的心智负担也小。客户端DHCP自动分配,服务器和网络设备配静态IP。
这套方案的实际好处是什么?办公楼里监控流量不会干扰办公网络,访客网络只能上外网访问不了内网服务器,就算访客WiFi被爆破,核心网段仍然安全。这些收益不是靠配置命令堆出来的,而是靠一开始的IP网段规划定下来的。
注意:家用路由器一般不需要这么复杂,一个192.168.x.0/24网段加DHCP就够用了。上面的做法针对企业或培训机构环境,但理解这套思路后,后面再接触防火墙策略、VLAN间ACL会顺畅很多。
4. TCP与UDP:可靠和效率怎么取舍
4.1 TCP如何用序号、确认和重传换可靠
TCP的可靠不是物理线路永远不出错,而是协议本身能处理丢包、重复和乱序。核心机制是序号、确认号、超时重传和滑动窗口。
发送方把数据报编号后发出去,接收方收到后回一个确认,确认号表示“你发到哪个字节我都收到了,请从这个字节之后继续发”。如果发送方在超时时间内没收到确认,就会重发。接收方处理乱序数据时,靠序号重新排序。滑动窗口则控制发送速度,接收方通过窗口字段告诉对方“我能接收多少数据”,避免把接收缓冲区打爆。
这里适合打个快递包裹的比方:寄件人给包裹编好号,收件人每收到一件回执确认。寄件人没收到回执就重发,收到多个包裹后发现编号不连续就知道中间丢了。TCP干的其实就是这件事,只不过所有交互都发生在毫秒级。
4.2 三次握手和四次挥手的真实细节
TCP三次握手的过程,教科书写得很清楚:客户端发SYN抱文,带初始序号x;服务器回SYN+ACK,带自己的序号y,确认号是x+1;客户端再发ACK,确认号是y+1。连接建立。
为什么必须是三次,不是两次也不是四次?三次握手完成后,双方都确认了“自己能发、自己能收、对方能发、对方能收”。第一次握手,服务器确认客户端能发、自己能收;第二次握手,客户端确认自己能收、能发,同时服务器也能发;第三次握手,服务器确认客户端能收。双方收发能力都确认了。
还有一个现实原因:防止历史重复SYN被服务器误建连接。如果只有两次握手,一个迟到的旧SYN到达服务器,服务器直接分配资源,可能白白浪费。三次握手机制下,客户端发现这不是自己想要的连接,可以发RST取消,或者根本不响应。
四次挥手比三次握手复杂一点,本质原因是TCP是全双工协议,两个方向的数据可以独立关闭。A先发FIN表示“我的数据发完了”,B回ACK,然后B继续把剩余数据发完,再发FIN表示“我也发完了”,A再回ACK。这个过程中,A收到FIN后进入TIME_WAIT状态,一般等待两个MSL,保证最后一个ACK丢失时能重发。
实操里会看到四次挥手可能合并成三个包,比如B把ACK和FIN一起发出来。这是正常现象,不是协议出错,别被教科书固定顺序框住。
4.3 UDP的适用场景与选型判断
UDP比TCP简单得多,无连接,不需要握手和挥手,不保证可靠,不处理乱序。首部只有8字节,TCP首部默认20字节起步。代价是应用层需要自己承担可靠性问题。
选型判断有一条很直接:业务数据不能丢,比如网页、数据库、文件传输、远程登录,选TCP;业务可以容忍少量丢包但要求低延迟,比如语音、视频、在线游戏、DNS查询,选UDP。
举一个经典例子:DNS查询用的是UDP 53端口,但DNS区域传送用的是TCP 53。为什么同一个协议两套做法?因为普通域名查询就是一次请求一次响应,UDP最快;区域传送数据量大,必须可靠,不能丢记录。
注意:不要在UDP之上想当然地跑重要业务数据而不做任何可靠性处理。我见过有人用UDP传游戏金币数据,结果网络稍有抖动,金币状态就回滚,玩家投诉一片。如果业务必须可靠,又非要UDP,就得自己在应用层实现序号、确认、重传,这个开发成本通常远超用TCP省下的那点传输开销。
5. 综合小实验:三层交换配置与排障
5.1 用什么环境和拓扑做实验
学网络基础不配上手实验,知识点落不了地。第三阶段可以开始接触三层交换,因为这是网工日常接触最多的设备之一。
实验环境首选模拟器,比如常见的网络设备模拟器都能完成这个实验。拓扑只需要一台三层交换机SW1和两台PC。PC1属于VLAN10,PC2属于VLAN20,两台PC都通过交换机接入。如果条件允许,再加一台路由器R1做上行,模拟PC访问外部网络。
地址规划如下:PC1是192.168.10.10/24,网关192.168.10.1;PC2是192.168.20.10/24,网关192.168.20.1。交换机上VLANIF10配192.168.10.1,VLANIF20配192.168.20.1。这个拓扑麻雀虽小,但已经具备VLAN隔离、三层网关、跨VLAN通信这些核心要素。
5.2 三层交换配置里的核心步骤
配置思路分三步。第一步创建VLAN,第二步把物理端口划进对应的VLAN,第三步给VLAN配置三层虚接口,也就是VLANIF。
以通用CLI风格的命令举例:
# 创建VLAN vlan batch 10 20 # 端口划分到VLAN interface GigabitEthernet0/0/1 port link-type access port default vlan 10 interface GigabitEthernet0/0/2 port link-type access port default vlan 20 # 配置VLANIF三层网关 interface Vlanif10 ip address 192.168.10.1 255.255.255.0 interface Vlanif20 ip address 192.168.20.1 255.255.255.0表面上就这几条,但背后要理解:端口划进VLAN10后,这个端口收到的数据帧会被打上VLAN10的标签,二层广播域被隔离。VLANIF10接口在交换机内部存在,它承担了10网段的网关角色。PC1发给PC2的包到达VLANIF10后,交换机发现自己本地有到192.168.20.0/24的路由,就转到VLANIF20,再从对应端口发给PC2。这就是三层交换机的路由过程。
如果只有二层交换机,就必须在外部路由器上启用“单臂路由”,用子接口分别封装VLAN10和VLAN20的报文。理解这个区别对读配置很有帮助,不然你看到设备上有VLANIF却不知道它存在意义是什么。
5.3 一套固定的网络排障排查顺序
实验真正有价值的地方是故意制造故障,训练排障思维。把PC1改成错误的网关,或者把端口错划到VLAN30,然后开始“修复”。我建议新人固定一套ping排查流程。
第一步,ping 127.0.0.1,验证本机协议栈正常;第二步,ping 本机自己的IP,验证网卡和IP配置生效;第三步,ping同网段其他IP或者网关,验证二层链路;第四步,ping 对端网段的网关,验证三层路由;第五步,ping 对端主机,验证端到端通信。
按这个顺序走,哪一步断了,问题就集中在哪一层。比如PC1能ping通自己但ping不通网关,检查网线、端口状态、VLAN划分。如果网关能通但ping不通用一个网段的PC2,就是PC2的IP配置或防火墙问题。
配合抓包看证据会更清楚。ping不通时,如果ARP请求一直重发却没有回应,说明目标主机不在线或者ARP被拦截;如果ARP正常但ICMP request没有reply,可能是对端防火墙丢掉了ICMP,也可能是路由回程路径有问题。这些观察比单调的“看看配置”靠谱得多。
心得:我带新人做实验时发现,大多数卡壳原因不是配置复杂,而是没有按照顺序排查。先确认物理层和链路层,再排查三层,基本能解决九成的问题。实验做完以后,把这个经验固化下来,对后续学习路由协议和网络安全都是正向积累。
最后再分享一点体会
这三部分内容放在一阶段的基础课里,承载的任务是帮人从“会用网络”跨到“懂网络”。我个人带新人的经验是,第三次课能跟下来的人,靠的不是背口诀,而是亲自动手把实验做通,再亲手排掉几个故障。抓包软件里看到一次TCP三次握手,比背十遍状态转换有用;IP规划出错一次,再做一遍才发现网段、广播地址那些概念永远不会再忘。后面等进入路由协议、应用层服务的学习阶段,你回头看这一讲的东西会发现它们无处不在。