计算机网络:(八)网络层(中)IP层转发分组的过程与网际控制报文协议 ICMP

发布于:2025-07-09 ⋅ 阅读:(20) ⋅ 点赞:(0)


前言

  • 前面我们已经讲解了网络层的重要概念及网际协议(IP);
  • 接下来,我们继续讲解 IP 层的分组转发过程与网际控制报文协议(ICMP)
    在这里插入图片描述

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的计算机网络专栏,欢迎来阅读
https://blog.csdn.net/2402_83322742/category_12909527.html


一、IP层转发分组的过程

在这里插入图片描述

第一步:接收数据包并解封装

  • 当一个数据包(分组)到达路由器时,就像快递送到了分拣中心。
  • 路由器首先会拆开最外层的 “包装”(也就是数据链路层的头部),露出里面的 IP 地址信息 —— 这就像看清了快递单上的收件人地址。​

第二步:提取目标 IP 地址

路由器会重点盯着数据包里的 “目标 IP 地址”,就像分拣员看快递单上的收件城市。

比如目标 IP 是 “192.168.1.100”,路由器要解决的问题是:“这个地址该往哪个方向送?”​

第三步:查询路由表

在这里插入图片描述

  • 路由器里有一张 “路由表”,相当于一本 “全国快递网点对照表”
  • 表里记录着不同 IP 地址段对应的 “最近中转站”(专业叫 “下一跳”)。

比如表中可能写着 “所有以 192.168.1 开头的地址,都先送到隔壁的 10.0.0.1 路由器”。​

如果目标 IP 在表里能找到精确匹配的记录,路由器就直接按记录走;如果没找到精确匹配,就找 “最像的”(比如同一网段的模糊匹配);

  • 要是实在没头绪,就会送到 “默认中转站”(相当于寄往陌生城市时先送到省会分拣中心)。​

第四步:封装并转发至下一跳

  • 确定好下一跳后,路由器会给数据包重新打包 —— 加上新的 “数据链路层头部”(就像给快递换一个写着下一中转站地址的面单),然后通过对应的网线或无线信号发送出去。​

第五步:逐跳转发直至目标

  • 这个过程会在每个途经的路由器上重复:接收、看目标 IP、查路由表、送往下一站
  • 就像快递从市级分拣中心到区级网点,再到小区驿站,最终送到收件人手里。​

简单说,IP 层转发分组的核心就是:“看地址→查路线→找下家→送出去”。正是这一步步的接力,才让我们发的消息、刷的视频能准确传到目的地

二、划分子网和构造超网

2.1 划分子网

为什么需要子网划分?

  • 早期的IP地址(如A、B、C类)是固定大小的,比如C类网络包含254个主机地址。
  • 但实际中,很多网络不需要这么多地址,直接使用会导致地址浪费
  • 例如,一个公司有100台电脑,直接分配一个C类网络(254个地址)就会浪费154个地址。
    子网划分的核心思想:将一个大网络拆分成多个小网络(子网),每个子网的大小可以根据需求灵活调整。
    在这里插入图片描述

如何划分子网?

  1. 子网掩码的作用:子网掩码是一个32位的二进制数,其中连续的1代表网络部分,0代表主机部分。例如,C类网络的默认子网掩码是255.255.255.0(即/24),表示前24位是网络部分,后8位是主机部分。
  2. 借位操作:从主机部分“借”若干位作为子网号。例如,一个C类网络192.168.1.0/24,如果借2位主机位,子网掩码变为255.255.255.192(即/26),可划分出4个子网,每个子网有62个可用主机地址(2⁶-2=62)。
  3. 计算方法
    • 子网数 = 2^借位数
    • 每个子网的主机数 = 2^(剩余主机位数) - 2(减去网络地址和广播地址)

例子
某公司需要划分3个子网,每个子网最多39台主机。选择C类网络192.168.1.0/24,借2位主机位:

  • 子网数 = 2²=4(满足需求)
  • 每个子网主机数 = 2⁶-2=62(满足39台)
  • 子网掩码变为255.255.255.192(即/26
  • 子网范围:
    • 第一个子网:192.168.1.0/26(可用地址:192.168.1.1~192.168.1.62)
    • 第二个子网:192.168.1.64/26(可用地址:192.168.1.65~192.168.1.126)
    • 依此类推。

2.2 使用子网时分组的转发

路由器如何找到目标子网?
当数据包到达路由器时,路由器会执行以下步骤:

  1. 提取目的IP地址:例如,目的IP是192.168.1.100,子网掩码是255.255.255.192(即/26)。
  2. 计算网络地址:将IP地址和子网掩码进行逻辑与运算
    • 192.168.1.10011000000.10101000.00000001.01100100
    • 255.255.255.19211111111.11111111.11111111.11000000
    • 与运算结果:11000000.10101000.00000001.01000000192.168.1.64/26,即该IP属于192.168.1.64/26子网。
  3. 查找路由表:路由器根据计算出的网络地址,在路由表中找到对应的下一跳地址,将数据包转发到目标子网。

转发表结构
路由器的转发表通常包含以下信息:

  • 网络地址:子网的网络地址(如192.168.1.0/24)。
  • 子网掩码:用于匹配IP地址的掩码(如255.255.255.0)。
  • 下一跳地址:数据包应转发到的下一个路由器或直接连接的设备。

例子
假设有两个子网192.168.1.0/26192.168.1.64/26,路由器收到一个目的IP为192.168.1.100的数据包。通过与运算确定其属于192.168.1.64/26子网,路由器将数据包转发到该子网的网关。

2.3 无分类编址 CIDR(构造超网)

CIDR的背景
传统的A、B、C类地址和子网划分仍存在地址浪费和路由表膨胀的问题。例如,一个需要4000台主机的网络,若分配16个C类网络(每个254台),路由器需要维护16条路由条目。CIDR通过聚合地址块解决这一问题。
在这里插入图片描述

CIDR的核心思想

  • 取消分类地址:不再固定网络位和主机位的长度,而是用斜线记法(如192.168.0.0/22)表示网络前缀的长度。
  • 构造超网:将多个连续的小网络合并成一个大网络(超网),减少路由表条目。

如何构造超网?

  1. 连续地址块:待合并的网络必须是连续的。例如,192.168.0.0/24192.168.1.0/24192.168.2.0/24192.168.3.0/24这四个C类网络是连续的。
  2. 合并规则:将子网掩码向左移动(减少网络位),直到所有网络的前缀相同。例如,这四个C类网络的二进制前缀如下:
    • 192.168.0.011000000.10101000.00000000.00000000
    • 192.168.1.011000000.10101000.00000001.00000000
    • 192.168.2.011000000.10101000.00000010.00000000
    • 192.168.3.011000000.10101000.00000011.00000000
      前22位相同,因此合并后的超网为192.168.0.0/22,子网掩码为255.255.252.0
  3. 地址范围:超网包含的地址范围是192.168.0.0192.168.3.255,共1024个地址(2¹⁰)。

CIDR的优势

  • 减少路由表条目:例如,16个C类网络合并成一个超网后,路由表只需一条记录。
  • 灵活分配地址:可根据实际需求分配任意大小的地址块,减少浪费。

三、网际控制报文协议 ICMP

3.1 ICMP 是什么?

ICMP(Internet Control Message Protocol)是网络层的“交通警察”,负责在 IP 主机、路由器之间传递控制消息。它的核心作用是报告网络错误诊断网络状态,例如:

  • 当你访问网站失败时,ICMP 会告诉你“目标不可达”;
  • 当网络拥堵导致数据包丢失时,ICMP 会提醒发送方降低速率。

ICMP 报文被封装在 IP 数据包中传输,就像快递里的“附言纸条”,专门传递与运输过程相关的反馈信息。
在这里插入图片描述

3.2 ICMP 报文的种类

ICMP 报文分为两大类:差错报告报文查询报文

一、差错报告报文(报告问题)
这类报文用于通知发送方数据传输中出现的问题,常见类型包括:

  1. 目的不可达(Type 3)

    • 当路由器或主机无法将数据包送达目标时,会发送此报文。例如:
      • 网络不可达:目标网络不存在或路由配置错误;
      • 主机不可达:目标 IP 对应的设备未开机或未联网;
      • 端口不可达:目标端口被防火墙屏蔽(常见于 UDP 应用)。
    • 例子:你用手机访问某 APP 时,若服务器端口被封禁,手机会收到“端口不可达”的 ICMP 报文。
  2. 超时(Type 11)

    • 当数据包的生存时间(TTL)耗尽(如路由环路导致数据包无限循环),或分片重组超时(数据包分片未按时到达)时,路由器会发送此报文。
    • 例子:如果网络中存在环路,数据包在路由器之间来回转发,TTL 减为 0 后会触发超时报文。
  3. 参数问题(Type 12)

    • 当 IP 头部字段错误(如错误的协议字段)时,路由器或主机丢弃数据包并发送此报文。
  4. 重定向(Type 5)

    • 路由器发现源主机选择的路由路径不是最优时,会发送此报文,指导主机使用更优路径。
    • 例子:当你连接到 Wi-Fi 时,路由器可能通过重定向报文告诉你下次应直接访问网关。

二、查询报文(主动询问)
这类报文用于主动获取网络信息,常见类型包括:

  1. 回显请求/应答(Type 8/0)

    • 回显请求:主机或路由器向目标发送询问,测试对方是否可达;
    • 回显应答:目标收到请求后返回应答,确认自己存活。
    • 例子ping 命令就是基于此报文,通过发送回显请求并接收应答,判断网络连通性。
  2. 时间戳请求/应答(Type 13/14)

    • 用于测量网络往返时间(RTT),同步主机时钟。发送方记录发送时间,接收方记录接收和返回时间,通过计算差值评估网络延迟。
  3. 地址掩码请求/应答(Type 17/18)

    • 主机可通过此报文向路由器查询子网掩码,动态获取网络配置信息。

3.3 ICMP 的应用举例

ICMP 是网络诊断的核心工具,以下是两个最典型的应用:
在这里插入图片描述

一、Ping:测试网络连通性

  • 原理:发送 ICMP 回显请求报文,等待目标返回回显应答。
  • 流程
    1. 你在电脑上输入 ping www.baidu.com,电脑会发送一个 ICMP 回显请求;
    2. 百度服务器收到后返回回显应答;
    3. 若收到应答,说明网络连通,反之则可能存在故障(如防火墙拦截或线路中断)。
  • 输出解读
    • Reply from X.X.X.X: bytes=32 time<1ms TTL=64:连通正常,延迟低;
    • Request timed out:无响应,可能目标不可达或被过滤。

二、Traceroute(Windows 中为 Tracert):追踪网络路径

  • 原理:发送一系列 TTL 递增的数据包,利用 ICMP 超时报文和端口不可达报文,确定数据包经过的路由器路径。
  • 流程
    1. 第一个数据包 TTL=1,到达第一个路由器时 TTL 减为 0,路由器返回超时报文,记录其 IP;
    2. 第二个数据包 TTL=2,到达第二个路由器时 TTL 减为 0,返回超时报文,记录第二个 IP;
    3. 重复此过程,直到数据包到达目标主机。若目标主机端口未开放,会返回端口不可达报文,流程终止。
  • 例子
    Tracing route to www.baidu.com [180.97.33.107]  
    over a maximum of 30 hops:  
    1    1 ms    1 ms    1 ms  192.168.1.1  
    2    3 ms    2 ms    2 ms  10.0.0.1  
    ...  
    10   12 ms   10 ms   11 ms  180.97.33.107  
    
    输出显示数据包经过的路由器 IP 及延迟,帮助定位网络故障点。

3.4 总结

  • ICMP 的作用
    • 差错报告:如“目标不可达”“超时”,帮助排查网络错误;
    • 查询诊断:如 pingtraceroute,测试连通性和路径追踪。
  • 重要性
    ICMP 是网络的“神经系统”,虽然它不直接传输数据,但通过反馈控制信息,确保了 IP 协议的高效运行。掌握 ICMP 的原理和工具(如 ping),是网络运维和故障排查的基础技能。

通过 ICMP,我们能像“网络医生”一样,快速定位网络问题,让数据传输更加可靠。


以上就是本篇博客的全部内容,下一篇继续进入网络层的学习。

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的计算机网络专栏,欢迎来阅读
https://blog.csdn.net/2402_83322742/category_12909527.html

如果您觉得内容对您有帮助,欢迎点赞收藏,您的支持是我创作的最大动力!

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到