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

  • 前言
  • 一、IP层转发分组的过程
    • 第一步:接收数据包并解封装
    • 第二步:提取目标 IP 地址
    • 第三步:查询路由表
    • 第四步:封装并转发至下一跳
    • 第五步:逐跳转发直至目标
  • 二、划分子网和构造超网
    • 2.1 划分子网
    • 2.2 使用子网时分组的转发
    • 2.3 无分类编址 CIDR(构造超网)
  • 三、网际控制报文协议 ICMP
    • 3.1 ICMP 是什么?
    • 3.2 ICMP 报文的种类
    • 3.3 ICMP 的应用举例
    • 3.4 总结


前言

  • 前面我们已经讲解了网络层的重要概念及网际协议(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

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/92528.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/92528.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/92528.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python爬虫实战:研究concurrent-futures库相关技术

1. 引言 1.1 研究背景与意义 网络爬虫作为互联网数据采集的重要工具,在信息检索、舆情分析、学术研究等领域具有广泛应用。随着互联网数据量的爆炸式增长,传统单线程爬虫的效率已难以满足需求,并发爬虫技术成为研究热点。 1.2 相关工作 现有爬虫框架如 Scrapy、Beautifu…

Neo4j 框架 初步简单使用(基础增删改查)

Neo4j 是一个高性能的、开源的图数据库。它将数据存储为图结构&#xff0c;其中节点表示实体&#xff0c;边表示实体之间的关系。这种图数据模型非常适合处理复杂的关系型数据&#xff0c;能够高效地进行关系查询和遍历。 Neo4j 的主要特性包括&#xff1a; 强大的图查询语言 C…

【iOS】锁[特殊字符]

文章目录前言1️⃣什么是锁&#x1f512;&#xff1f;1.1 基本概念1.2 锁的分类2️⃣OC 中的常用锁2.1 OSSpinLock&#xff08;已弃用&#xff09;&#xff1a;“自旋锁”的经典代表为什么尽量在开发中不使用自旋锁自旋锁的本质缺陷&#xff1a;忙等待&#xff08;Busy Waiting…

在easyui中如何设置自带的弹窗,有输入框

这个就是带input的确认弹框&#xff08;$.messager.prompt&#xff09;// 使用prompt并添加placeholder提示 $.messager.prompt(确认, 确定要将事故记录标记为 statusText 吗&#xff1f;, function(r) {if (r) {// r 包含用户输入的内容var remark r.trim();// 验证输入不为…

Android-API调用学习总结

一、Postman检查API接口是否支持1.“HTTP Request” 来创建一个新的请求。——请求构建界面&#xff0c;这是你进行所有 API 调用的地方。2.设置请求方法和 URL&#xff1a;选择请求方法&#xff1a; 在 URL 输入框左侧&#xff0c;有一个下拉菜单。点击它&#xff0c;选择你想…

《计算机网络》实验报告一 常用网络命令

目 录 1、实验目的 2、实验环境 3、实验内容 3.1 ping基本用法 3.2 ifconfig/ipconfig基本用法 3.3 traceroute/tracert基本用法 3.4 arp基本用法 3.5 netstat基本用法 4、实验结果与分析 4.1 ping命令的基本用法 4.2 ifconfig/ipconfig命令的基本用法 4.3 tracer…

MySQL深度理解-深入理解MySQL索引底层数据结构与算法

1.引言在项目中会遇到各种各样的慢查询的问题&#xff0c;对于千万级的表&#xff0c;如果使用比较笨的查询方式&#xff0c;查询一条SQL可能需要几秒甚至几十秒&#xff0c;如果将索引设置的比较合理&#xff0c;可以将查询变得仍然非常快。2.索引的本质索引&#xff1a;帮助M…

Django母婴商城项目实践(九)- 商品列表页模块

9、商品列表页模块 1、业务逻辑 商品模块分为:商品列表页 和 商品详情页 商品列表页将所有商品按照一定的规则排序展示,用于可以从销量、价格、上架时间和收藏数量设置商品的排序方式,并且在商品左侧设置分类列表,选择某一个分类可以筛选出对应的商品信息。 商品列表页…

8、STM32每个系列的区别

1、F1和F4的系列的区别 F1采用Crotex M3内核&#xff0c;F4采用Crotex M4内核。F4比F1的主频高。F4具有浮点数运算单元&#xff0c;F1没有浮点单元。F4的具备增强的DSP指令集。F407的执行16位DSP指令的时间只有F1的30%~70%。F4执行32位DSP指令的时间只有F1的25% ~ 60%。F1内部S…

DeepSPV:一种从2D超声图像中估算3D脾脏体积的深度学习流程|文献速递-医学影像算法文献分享

Title题目DeepSPV: A deep learning pipeline for 3D spleen volume estimation from 2Dultrasound imagesDeepSPV&#xff1a;一种从2D超声图像中估算3D脾脏体积的深度学习流程01文献速递介绍1.1 临床背景 脾肿大指脾脏增大&#xff0c;是多种潜在疾病的重要临床指标&#x…

病历数智化3分钟:AI重构医院数据价值链

一、方案概述本方案针对某省医联体医院病例数据管理需求&#xff0c;通过AI技术实现病历数字化→信息结构化→数据应用化的全流程改造。系统采用双端协同架构&#xff1a; - 普通用户端&#xff1a;为一线医护人员提供病历拍摄、AI识别修正、安全上传功能 - 管理员后台&#…

CSS+JavaScript 禁用浏览器复制功能的几种方法

&#x1f6e1;️ 禁用浏览器复制功能完整指南 网页中禁用用户的复制功能&#xff0c;包括 CSS 方法、JavaScript 方法、综合解决方案以及实际应用场景。适用于需要保护内容版权、防止恶意爬取或提升用户体验的场景。 &#x1f4cb; 目录 &#x1f680; 快速开始&#x1f3a8…

Java 虚拟线程在高并发微服务中的实战经验分享

Java 虚拟线程在高并发微服务中的实战经验分享 虚拟线程&#xff08;Virtual Threads&#xff09;作为Java 19引入的预览特性&#xff0c;为我们在高并发微服务场景下提供了一种更轻量、易用的并发模型。本文结合真实生产环境&#xff0c;讲述在Spring Boot微服务中引入和使用虚…

《拆解WebRTC:NAT穿透的探测逻辑与中继方案》

WebRTC以其无需插件的便捷性&#xff0c;成为连接全球用户的隐形桥梁。但很少有人知晓&#xff0c;每一次流畅的视频对话背后&#xff0c;都藏着一场与网络边界的无声博弈——NAT&#xff0c;这个为缓解IPv4地址枯竭而生的技术&#xff0c;既是网络安全的屏障&#xff0c;也是端…

前端开发 React 组件优化

1. 使用 React.memo 进行组件优化问题&#xff1a;当父组件重新渲染时&#xff0c;子组件也会重新渲染&#xff0c;即使它的 props 没有变化。解决方案&#xff1a;使用 React.memo 包裹子组件&#xff0c;让其只在 props 变化时才重新渲染。示例场景&#xff1a;展示一个显示计…

变频器实习DAY12

目录变频器实习DAY12一、继续&#xff0c;柔性平台测试&#xff01;上午 王工Modbus新功能测试下午 柔性平台继续按照说明书再测一遍附加的小知识点中国狸花猫.git文件附学习参考网址欢迎大家有问题评论交流 (* ^ ω ^)变频器实习DAY12 一、继续&#xff0c;柔性平台测试&…

Redis--多路复用

&#x1f9e9; 一、什么是“客户端连接”&#xff1f;所谓 客户端连接 Redis&#xff0c;指的是&#xff1a;一个程序&#xff08;客户端&#xff09;通过网络连接到 Redis 服务端&#xff08;比如 127.0.0.1:6379&#xff09;&#xff0c;建立一个 TCP 连接&#xff0c;双方可…

数组——初识数据结构

一维数组数组的创建数组是一种相同类型元素的集合数组的创建方式C99 中引入了变长数组的概念&#xff0c;变长数组支持数组的大小使用变量来指定明显这里的vs2019不支持变长数组数组初始化和不完全初始化第二个数组就是典型的不完全初始化&#xff0c;开辟了10个空间&#xff0…

技术速递|使用 Semantic Kernel 与 A2A 协议构建多智能体解决方案

作者&#xff1a;卢建晖 - 微软高级云技术布道师 翻译/排版&#xff1a;Alan Wang 在快速发展的 AI 应用开发领域&#xff0c;能够协调多个智能体已成为构建复杂企业级解决方案的关键。虽然单个 AI 智能体擅长特定任务&#xff0c;但复杂的业务场景往往需要跨平台、跨框架甚至跨…

前端跨域请求原理及实践

在前端开发中&#xff0c;"跨域"是一个绕不开的话题。当我们的页面尝试从一个域名请求另一个域名的资源时&#xff0c;浏览器往往会抛出类似Access to fetch at xxx from origin xxx has been blocked by CORS policy的错误。下面将深入探讨跨域请求的底层原理&#…