计算机网络Day01
计算机网络网络层学习总结:从寻址到路由的核心逻辑
最近花了几天时间啃完计算机网络的网络层的一小部分,从一开始对着“数据报”“虚电路”一头雾水,到现在能理清IP地址划分和路由转发的逻辑,总算有了些眉目。这篇博客就以我的学习视角,把网络层的核心知识点串一遍,也给同样在学的小伙伴做个参考~
一、网络层:到底在解决什么问题?
先搞懂网络层的定位——它是“跨网络传输的指挥官”。比如我们在家用WiFi发消息到公司服务器,数据要经过家庭路由器、运营商网络、公司网关等多个网络,网络层的核心任务就是把数据准确送到目标地址,具体要做两件事:
- 寻址:确定目标设备的“网络位置”(比如
IP地址); - 路由选择:选一条从源到目的的
最优路径(比如走电信还是联通的链路)。
二、网络层的两种传输方式:数据报 vs 虚电路
网络层有两种核心传输模型,刚开始总搞混,后来画了个对比表才算分清,本质是“要不要先建连接”的区别:
| 对比维度 | 数据报(无连接服务) | 虚电路(有连接服务) |
|---|---|---|
| 连接建立 | 无需建立,直接发 | 传输前先建虚拟电路 |
| 地址携带 | 每个数据包带完整源/目的IP | 数据包只带简短“虚电路号” |
| 路径选择 | 每个数据包独立选路(可能走不同路) | 所有数据包走同一条固定路径 |
| 可靠性 | 不保证(可能丢包、乱序) | 保证(按序到达,有确认重传) |
| 适用场景 | 实时应用(视频会议、手游) | 可靠传输场景(文件下载、邮件) |
| 代表协议 | IP协议(我们常用的互联网就是数据报网络) | X.25、ATM(早期电信网络用得多) |
举个直观的例子:数据报像寄快递,每个包裹都写全地址,快递员可能走不同路线;虚电路像打电话,先拨通建立连接,通话过程中数据都走这条“专线”。
三、IP地址:设备的“网络身份证”
IP地址是网络层的“核心语言”,32位二进制数(通常转成点分十进制,比如192.168.1.1),但不是“一台设备一个IP”,而是“一个网络接口一个IP”——比如路由器有3个接口,就有3个IP地址。
3.1 传统IP地址分类(A/B/C类)
早期IP地址按“网络号+主机号”的固定长度划分,虽然现在有CIDR,但分类是基础,必须记:
| 地址类别 | 二进制开头 | 有效网络号范围 | 网络号长度 | 主机号长度 | 单个网络最大主机数 |
|---|---|---|---|---|---|
| A类 | 0 | 1.0.0.0~126.255.255.255 | 7位 | 24位 | (2^{24}-2)(约1677万,减2是去掉全0网络地址和全1广播地址) |
| B类 | 10 | 128.1.0.0~191.255.255.255 | 14位 | 16位 | (2^{16}-2)(约65534) |
| C类 | 110 | 192.0.1.0~223.255.255.255 | 21位 | 8位 | (2^8-2)(254) |
这里要注意两个坑:
- A类的127.x.x.x是“回环地址”,用于本机测试(比如ping 127.0.0.1测TCP/IP协议栈);
- 全0地址(0.0.0.0)表示“
本网络的本主机”,只能当源地址(比如主机刚启动没IP时用);全1地址(255.255.255.255)是全网广播,路由器不转发。
3.2 私有IP地址:内部网络的“专属地址”
公网IP不够用?于是有了“私有IP”——只在内部网络用,公网路由器不转发,比如家里的手机、电脑用的都是私有IP:
| 类别 | 私有IP范围 | 子网掩码 |
|---|---|---|
| A类 | 10.0.0.0~10.255.255.255 | 255.0.0.0 |
| B类 | 172.16.0.0~172.31.255.255 | 255.255.0.0 |
| C类 | 192.168.0.0~192.168.255.255 | 255.255.255.0 |
3.3 子网划分与CIDR:解决地址浪费
传统分类有个问题:比如一个小公司要100台主机,选C类(最多254台)会浪费154个,选B类(6万多)更浪费——这时候“子网划分”就派上用场了。
子网划分原理
从“主机号”里拆一部分当“子网号”,比如B类地址(网络号14位+主机号16位),拆8位当子网号,就变成“网络号14位+子网号8位+主机号8位”,这样一个B类地址能拆成256个子网,每个子网最多254台主机,大大减少浪费。
子网掩码:怎么判断IP属于哪个子网?
子网掩码是“区分网络/子网部分”的工具,和IP地址做按位与运算,结果就是“网络地址”。
举个例子:IP=162.15.13.56,子网掩码=255.255.0.0(B类默认掩码)
二进制计算:
IP:10100010.00001111.00001101.00111000
掩码:11111111.11111111.00000000.00000000
按位与结果:10100010.00001111.00000000.00000000 → 162.15.0.0(网络地址)
CIDR:灵活的地址划分
后来子网划分也不够灵活,就有了CIDR(无类别域间路由),用“x.x.x.x/L”表示,L是“网络前缀长度”(比如192.168.1.0/24,代表前24位是网络前缀,后8位是主机号)。
CIDR打破了A/B/C类的限制,比如想要200台主机,只需要前缀长度23位(主机号9位,(2^9-2=510)台),更高效。
四、路由:数据怎么选路?
知道了IP地址,接下来要解决“数据怎么从源到目的”——这就是路由的核心,先分清两个易混概念:
- 路由(Routing):选路径的过程(比如从北京到上海,选高铁还是飞机);
- 转发(Forwarding):选好路径后,路由器把数据包从一个接口传到下一个接口的动作(比如高铁上的站点停靠)。
4.1 路由算法:静态 vs 动态
路由算法分两类,本质是“路径要不要手动配”:
| 对比维度 | 静态路由 | 动态路由 |
|---|---|---|
| 配置方式 | 管理员手动写路由表 | 路由器通过协议自动学习(比如OSPF、RIP) |
| 适应性 | 网络变了要手动改,不灵活 | 网络拓扑变了自动更新路由表 |
| 适用场景 | 小型网络(比如家庭、小公司) | 中大型网络(比如运营商、企业园区网) |
| 故障恢复 | 要人工干预,恢复慢 | 自动算新路径,恢复快 |
实际场景中会“混合用”:比如公司核心层用动态路由(应对复杂网络变化),边缘层用静态路由(简化管理)。
4.2 动态路由的两种核心算法
动态路由算法主要分两类,各有特点:
-
距离向量路由算法
- 原理:路由器只跟邻居分享“自己到各个网络的距离”(比如跳数),像“传话”一样扩散路由信息;
- 代表协议:RIP(适用于小型网络);
- 缺点:有“无穷计数问题”(比如某条链路断了,路由信息扩散慢,可能导致环路)。
-
链路状态路由算法
- 原理:每个路由器都“知道全网拓扑”(通过广播自己的链路状态,比如带宽、延迟),然后自己算最优路径;
- 优势:收敛快(算路径快)、路径优;
- 缺点:配置复杂,对路由器性能要求高;
- 代表协议:OSPF(企业网常用)。
4.3 路由转发的关键规则:最长前缀匹配
路由器转发数据包时,会从路由表中选“和目的IP重叠位数最多”的路由——这就是“最长前缀匹配”,确保路径精准。
举个例子:路由表有两条路由:
- 路由A:
192.168.1.0/24(覆盖192.168.1.1~192.168.1.254); - 路由B:
192.168.0.0/22(覆盖192.168.0.1~192.168.3.254)。
当数据包目的IP是192.168.1.100时:
- 和A匹配:重叠24位(完全命中
192.168.1.x); - 和B匹配:重叠22位(命中
192.168.0.0/22大网段); - 最终选A路由,避免数据走冗余路径。
4.4 路由聚合:简化路由表
如果路由器要维护上百条细分子网路由,会很耗资源——“路由聚合”就是把多个小前缀合并成一个大前缀,减小路由表体积。
比如路由器连接了3个子网:192.24.0.0/21、192.24.8.0/22、192.24.16.0/20,通过聚合可以合并成一个更大的前缀,让路由表更简洁,转发更快。
五、IP数据报:网络层的数据载体
最后补一个细节:网络层传输的数据单元叫“IP数据报”,由“首部+数据”组成,首部里有几个关键字段要记:
- 版本:IPv4(32位)或IPv6(128位);
- 生存时间(TTL):防止数据包在网络中无限循环(每经过一个路由器减1,减到0就丢弃);
- 源/目的IP地址:数据的起点和终点;
- 首部校验和:检查首部是否传错(数据部分的校验交给上层协议,比如TCP)。
六、学习心得
网络层的知识点环环相扣:从IP地址的划分,到子网掩码的计算,再到路由算法和转发规则,缺一个都容易卡壳。我的方法是“先搭框架,再填细节”——先搞懂“网络层要解决什么问题”,再逐个突破“寻址”“路由”“传输方式”这几个核心模块,遇到不懂的就画示意图(比如子网划分的二进制拆分),慢慢就通了。
接下来打算学传输层(TCP/UDP),据说比网络层更复杂,大家有好的学习方法也欢迎在评论区交流~
