当前位置: 首页 > news >正文

【Linux网络】网络层IP协议(一)



🎬 个人主页艾莉丝努力练剑

专栏传送门:《C语言》《数据结构与算法》《C/C++干货分享&学习过程记录
Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享
⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平

🎬 艾莉丝的简介:


文章目录

  • 思维导图
  • 导入语
  • 1 ~> 网络层基础
    • 1.1 网络层的定义与核心功能
    • 1.2 基本概念与预备知识
  • 2 ~> IP 协议核心概念
    • 2.1 IP 地址存在的意义
    • 2.2 TCP 与 IP 的关系
    • 2.3 IP 地址的本质与构成
  • 3 ~> IP 协议头格式详解
    • 3.1 基础信息字段
      • 3.1.1 4 位版本号(version)
      • 3.1.2 4 位头部长度(header length)
      • 3.1.3 8 位服务类型(TOS)
      • 3.1.4 16 位总长度(total length)
    • 3.2 分片相关字段
      • 3.2.1 16 位标识(id)
      • 3.2.2 3 位标志字段
      • 3.2.3 13 位片偏移(fragment offset)
    • 3.3 控制与校验字段
      • 3.3.1 8 位生存时间(TTL)
      • 3.3.2 8 位协议号(protocol)
      • 3.3.3 16 位首部检验和
    • 3.4 地址字段
    • 3.5 选项字段
  • 4 ~> IP 报文处理机制
    • 4.1 报头与有效载荷的分离
    • 4.2 有效载荷的分用
  • 5 ~> IPv4 与 IPv6 对比
    • 5.1 地址空间差异
    • 5.2 兼容性问题
    • 5.3 应用现状
  • 总结
  • 结尾


思维导图


导入语

当我们在浏览器输入网址访问网页、用微信发送消息、通过 FTP 传输文件时,这些数据是如何跨越千山万水从一台电脑准确到达另一台电脑的?应用层负责定义数据内容,传输层负责端到端的可靠传输,但真正让数据能够在全球复杂的网络拓扑中找到路径的,是网络层的核心 ——IP 协议。

很多人学习 IP 协议时会陷入一个误区:把大量精力花在背诵 IP 报头的各个字段上。但实际上,IP 协议真正重要的是它的生态和周边问题 —— 运营商如何构建网络、子网如何划分、路由器如何选择路径、内网如何穿透到公网。IP 报头只是实现这些功能的工具,理解 “为什么这么设计” 远比 “是什么” 更重要。

本文将从网络层的基本概念出发,通过生活化的类比(如学号查找学生、唐僧取经),深入讲解 IP 地址的本质、TCP 与 IP 的分工、IP 报文的结构与处理机制,帮助你建立对 IP 协议的宏观认识,为后续学习子网划分、NAT、路由协议等核心内容打下坚实基础。


1 ~> 网络层基础

1.1 网络层的定义与核心功能

网络层也叫互联网层或网际层,是 TCP/IP 四层模型中承上启下的关键一层。它的核心功能是在复杂的网络环境中为数据包确定一条合适的传输路径。

在 TCP/IP 模型中,应用层负责定义用户数据的格式和语义,传输层负责在两个主机的进程之间建立端到端的连接,而网络层则负责将数据包从源主机经过多个中间路由器转发到目标主机。

1.2 基本概念与预备知识

  • 节点:主机和路由器的统称
  • 主机:配有 IP 地址,也需要进行路由控制的设备
  • 路由器:既配有 IP 地址,又能进行路由控制的设备,相当于网络中的 “十字路口交警”

报文在网络中的传输本质是 “一跳一跳” 的转发。在局域网中,两台同网段的主机可以直接通信;但跨网络的长距离传输,必须通过无数个子网的路由器接力转发才能到达目标主机。

当主机需要发送数据包时,它会根据目标 IP 地址和本地路由表决定下一跳应该交给哪个路由器。这就是为什么主机 B 会选择路由器 C 而不是路由器 E 转发数据包 —— 这是由目标 IP 地址和路由算法共同决定的。


2 ~> IP 协议核心概念

2.1 IP 地址存在的意义

IP 地址存在的根本意义是提供一种能力:把数据从 A 主机可靠地跨网络送到 B 主机的能力。

这里需要特别注意 “能力” 这个词。有能力不代表一定能做到,而是指有非常高的概率能够做成。这就像一个学生具有数学考满分的能力,但不一定每次考试都能考满分;IP 协议提供了跨网络传输的基础能力,但要实现真正可靠的传输,还需要上层 TCP 协议的配合。

2.2 TCP 与 IP 的关系

我们可以用一个生动的比喻来理解 TCP 和 IP 的分工:

  • 张三:具有数学考满分的能力,相当于 IP 协议
  • 老舅:为张三考满分提供各种策略和支持,相当于 TCP 协议
  • 报文:就是张三本人
  • 路由器:就是沿途帮助张三到达考场的人

TCP+IP 的组合,才真正实现了 “可靠的跨网络数据传输”。IP 负责把数据包从一个网络送到另一个网络,TCP 负责保证数据包在传输过程中不丢失、不错乱、不重复。

2.3 IP 地址的本质与构成

IP 地址本质上是一个 4 字节(32 位)的数字,通常表示为 “xx.yy.zz.mm” 的点分十进制形式。

很多人会问:为什么一个数字就能找到目标主机?我们可以用学号来类比:

  • 学号:学院 + 专业 + 班级 + 个人编号
  • IP 地址:目标网络 + 目标主机

就像通过学号可以一步步找到学生(保安大爷→学院→专业→班级→宿管→个人),通过 IP 地址也可以一步步找到目标主机(路由器→目标网络→目标主机)。

真正支持报文路由的是 IP 地址中的 “目标网络” 字段。这就像唐僧取经时,沿途的人只关心他要去 “西天”(目标网络),而不关心他要去西天的 “大雷音寺”(目标主机)找 “如来佛祖”(进程)。只有到了西天这个大的网络,才需要进一步查找具体的主机和进程。


3 ~> IP 协议头格式详解

IP 协议头是 IP 报文的控制部分,标准长度为 20 字节,如果有选项字段,最长可达 60 字节。

3.1 基础信息字段

3.1.1 4 位版本号(version)

指定 IP 协议的版本,对于 IPv4 来说,这个字段的值是 4;对于 IPv6 来说,这个字段的值是 6。

3.1.2 4 位头部长度(header length)

表示 IP 头部的长度是多少个 32 位(4 字节)。因为 4 位二进制数最大能表示 15,所以 IP 头部的最大长度是 15×4=60 字节。如果没有选项字段,这个字段的值是 5,表示头部长度为 20 字节。

3.1.3 8 位服务类型(TOS)

包含 3 位优先级字段(已废弃)、4 位 TOS 字段和 1 位保留字段(必须置为 0)。4 位 TOS 字段分别表示:

  • 最小延时:对 ssh、telnet 等交互式应用重要
  • 最大吞吐量:对 ftp 等文件传输应用重要
  • 最高可靠性:对需要数据完整性的应用重要
  • 最小成本:对普通数据传输重要

这四个选项相互冲突,只能选择一个。不同的服务类型会影响路由器选择不同的传输路径。

3.1.4 16 位总长度(total length)

表示整个 IP 数据报(包括头部和数据部分)的总字节数。因为是 16 位,所以 IP 数据报的最大长度是 65535 字节。

3.2 分片相关字段

当 IP 数据报的长度超过数据链路层的 MTU(最大传输单元)时,IP 协议会将数据报分成多个分片进行传输。以下三个字段用于分片和重组:

3.2.1 16 位标识(id)

唯一标识主机发送的一个 IP 数据报。如果一个 IP 数据报被分片,那么所有分片的这个 id 字段都是相同的,这样目标主机才能将这些分片重新组装成原来的完整数据报。

3.2.2 3 位标志字段

  • 第一位:保留,现在不用
  • 第二位:禁止分片位(DF),如果置为 1,表示不允许分片。如果此时数据报长度超过 MTU,IP 模块会丢弃该报文并返回 ICMP 错误
  • 第三位:更多分片位(MF),如果置为 1,表示后面还有更多分片;最后一个分片的这个位置为 0

3.2.3 13 位片偏移(fragment offset)

表示当前分片在原始 IP 数据报中的偏移量。实际偏移的字节数是这个值乘以 8。因此,除了最后一个分片外,其他所有分片的长度都必须是 8 的整数倍,否则报文就会不连续。

3.3 控制与校验字段

3.3.1 8 位生存时间(TTL)

表示数据报到达目的地的最大报文跳数。一般初始值是 64,每次经过一个路由器,TTL 的值减 1。当 TTL 减到 0 时,如果数据报还没有到达目的地,路由器会丢弃该报文并返回 ICMP 超时错误。

这个字段的主要作用是防止出现路由循环。如果没有 TTL 字段,一个陷入路由循环的报文会在网络中无限转发,消耗大量的网络资源。

我们可以用 ping 命令来查看目标主机的 TTL 值:

C:\Users\whb>ping www.baidu.com 来自183.2.172.177的回复: 字节=32时间=35msTTL=52

这里的 TTL=52 表示从我们的主机到百度服务器经过了 64-52=12 个路由器。

3.3.2 8 位协议号(protocol)

用于标识 IP 数据报的数据部分属于哪个上层协议。这是实现有效载荷分用的关键字段。

常见的协议号及其对应的协议:

  • 1:ICMP(互联网控制消息协议),用于 ping、traceroute 等网络诊断工具
  • 2:IGMP(互联网组管理协议),用于管理 IP 多播组成员
  • 6:TCP(传输控制协议),提供面向连接的可靠数据传输
  • 17:UDP(用户数据报协议),提供无连接的不可靠数据传输
  • 47:GRE(通用路由封装),常用于 VPN 技术
  • 50:ESP(封装安全载荷),IPSec 协议的一部分,用于数据加密和认证

3.3.3 16 位首部检验和

使用 CRC 算法对 IP 头部进行校验,用于鉴别 IP 头部在传输过程中是否损坏。如果校验和不正确,路由器会直接丢弃该报文。

注意:这个校验和只校验 IP 头部,不校验数据部分。数据部分的校验由上层协议(如 TCP、UDP)负责。

3.4 地址字段

  • 32 位源 IP 地址:表示发送方的 IP 地址
  • 32 位目的 IP 地址:表示接收方的 IP 地址

这两个字段是 IP 地址最直接的体现,决定了数据包从哪里来,要到哪里去。

3.5 选项字段

选项字段是可选的,最长可达 40 字节。用于提供一些额外的功能,如记录路由、时间戳、安全选项等。大多数普通的 IP 数据报都不使用选项字段。


4 ~> IP 报文处理机制

4.1 报头与有效载荷的分离

当网络设备收到一个 IP 报文时,它需要先将报头和有效载荷分离开来,才能进行后续处理。分离的过程如下:

  1. 提取报文的前 20 字节,这是 IP 报头的基础部分
  2. 从基础报头中提取 4 位头部长度字段,计算出完整报头的长度(头部长度 ×4 字节)
  3. 从报头中提取 16 位总长度字段
  4. 有效载荷的长度 = 总长度 - 首部长度

这个过程本质上是一个结构体的反序列化过程。IP 报头在内存中就是一个结构体,网络设备按照结构体的定义来解析各个字段。

4.2 有效载荷的分用

当网络设备将有效载荷分离出来后,它需要知道应该将这个有效载荷交给哪个上层协议来处理。这就是有效载荷的分用问题。

分用的依据就是 IP 报头中的 8 位协议号字段。例如:

  • 如果协议号是 6,就将有效载荷交给 TCP 协议处理
  • 如果协议号是 17,就将有效载荷交给 UDP 协议处理
  • 如果协议号是 1,就将有效载荷交给 ICMP 协议处理

这样就实现了网络层向上层多个协议提供服务的功能。


5 ~> IPv4 与 IPv6 对比

5.1 地址空间差异

  • IPv4:32 位地址,理论上最多有 2^32≈42 亿个地址
  • IPv6:128 位地址,理论上最多有 2^128 个地址,几乎可以为地球上的每一粒沙子分配一个 IP 地址

5.2 兼容性问题

IPv4 和 IPv6 在协议设计上整体不兼容,无法直接通信。这是 IPv6 推广缓慢的主要原因之一。我们不可能让全球所有的网络设备一夜之间从 IPv4 升级到 IPv6,这不仅是技术问题,更是一个巨大的生态问题。

5.3 应用现状

我国早在 2008 年就将 IPv6 立为国策,但目前主要还是在局域网内部应用 IPv6 技术。公网上仍然以 IPv4 为主。

IPv6 要想取代 IPv4 成为主流技术,需要形成足够大的生态优势。当中国的入网设备数量形成对全世界的数量碾压时,中国将成为 IPv6 技术的主导者。


总结

本文全面讲解了网络层 IP 协议的基础内容,核心知识点总结如下:

  1. 网络层核心功能:在复杂网络中确定传输路径,报文通过路由器一跳一跳转发,跨网络传输本质是无数个子网的接力。
  2. IP 协议本质:提供跨网络数据传输的基础能力,与 TCP 配合实现可靠传输。TCP 负责策略和可靠性,IP 负责基础传输。
  3. IP 地址构成:4 字节数字,分为目标网络和目标主机两部分。真正支持路由的是目标网络字段,类比学号的分级查找机制。
  4. IP 协议头详解
    1. 基础字段:版本号 (4)、头部长度 (5=20 字节)、服务类型 (TOS)、总长度
    2. 分片字段:标识、标志、片偏移,用于处理超过 MTU 的大数据报
    3. 控制字段:TTL (防止路由循环)、协议号 (有效载荷分用)、首部检验和
    4. 地址字段:32 位源 IP 和目的 IP
  5. IP 报文处理
    1. 报头分离:根据头部长度和总长度计算有效载荷长度
    2. 有效载荷分用:根据 8 位协议号交给对应上层协议 (TCP=6, UDP=17, ICMP=1)
  6. IPv4 与 IPv6:IPv6 解决了 IPv4 地址不足的问题,但由于兼容性问题推广缓慢,我国目前主要在局域网应用 IPv6。

理解这些基础概念对于后续学习子网划分、子网掩码、NAT、路由协议等 IP 协议的高级内容至关重要。IP 协议是整个互联网的基石,掌握它的工作原理,你才能真正理解数据在网络中是如何传输的。


结尾

uu们,本文的内容到这里就全部结束了,艾莉丝在这里再次感谢您的阅读!

艾莉丝努力练剑

C/C++ & Linux 底层探索者 | 一个正在努力练剑的技术博主

👀【关注】跟随我一起深耕技术领域,见证每一次成长。
❤️【点赞】让优质内容被更多人看见,让知识传递更有力量。
【收藏】把核心知识点存好,在需要时随时查、随时用。
💬【评论】分享你的经验或疑问,评论区一起交流避坑!

不要忘记给博主“一键四连”哦!

“今日练剑达成!”

“技术之路难免有困惑,但同行的人会让前进更有方向。”

结语:希望对学习Linux相关内容的uu有所帮助,不要忘记给博主“一键四连”哦!

往期回顾

【Linux网络】传输层协议TCP(六)补充 - 面试题:HTTP 获取网页的完整过程

🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡
૮₍ ˶ ˊ ᴥ ˋ˶₎ა

http://www.zskr.cn/news/1451346.html

相关文章:

  • 避坑指南:用bayesplot给Stan模型做可视化,这5个细节新手最容易忽略
  • 面对对象的概念
  • 内容创作者AI工具组合(20年内容基建经验浓缩):从单点提效到组织级智能跃迁的3阶段演进路径
  • 2026年热门的贵州宣传栏/贵州精工字/标识标牌/贵州吸塑灯箱优质供应商推荐 - 品牌宣传支持者
  • 2026年质量好的贵州铝型材挂牌/贵州广告牌用户口碑推荐厂家 - 行业平台推荐
  • ARL Docker 一键部署
  • 容器通过操作系统级虚拟化(OS-level virtualization),直接复用宿主机的 Linux 内核,无需像传统虚拟机(VM)那样为每个实例运行独立的 Guest OS
  • 别再凭感觉画线了!用这个在线工具5分钟搞定PCB电源线宽(附电流计算表)
  • 不只是AX211:一份给联想游戏本装Ubuntu的无线网卡驱动兼容性清单(Y7000P/R7000P等机型实测)
  • 从无人机到自动驾驶:一文搞懂ROS中ENU、NED、相机光学坐标系的应用场景与转换
  • 避开这些坑!SAP EWM两步拣配配置详解与常见报错排查指南
  • 从‘File exists’报错聊起:图解Linux文件系统中的硬链接与软链接到底有啥区别?
  • 保姆级教程:手把手教你用vsomeip实现一个简单的服务发现与通信(附完整代码)
  • [智能体-225]:智能体大模型体系 VS 冯诺依曼计算机硬件类比详解
  • 【Tilelang入门】Tilelang Puzzles 08
  • 【AI监控融合实战指南】:20年运维专家亲授5大落地陷阱与避坑清单
  • 保姆级教程:在Windows/Linux上为YOLOv8s模型生成GradCAM热力图(避坑CUDA/CPU环境配置)
  • 告别GPIO模拟时序:用STM32的FSMC外设高效驱动TFTLCD,性能提升实测
  • 从日常运维到脚本编写:详解Windows批处理中find与findstr的10个经典使用场景
  • 智慧电网电力设施目标检测数据集|输电线天线风机烟囱识别YOLO深度学习数据集10148期
  • 告别“狗牙”圆:Bresenham画圆算法在嵌入式屏幕(如STM32+LCD)上的C语言实战
  • [智能体-226]:大模型 ↔ 计算机硬件全套类比详解(冯・诺依曼架构对齐),智能体完整复刻冯诺依曼计算机运行范式
  • 手把手用Python复现Robbins-Monro算法:从求根到在线均值估计的完整代码示例
  • 2026年口碑好的西安新房装修/西安装修优选公司推荐 - 行业平台推荐
  • 从Kaggle竞赛入门:用随机森林搞定泰坦尼克号预测的完整避坑指南(含特征工程与调参)
  • 从Fluent面板到理论公式:一文讲透ANSYS Help文档的四种正确打开方式
  • 做了springAI项目中的三个功能总结的心得
  • 避开蓝桥杯DS1302的坑:从时间加减乱码到稳定显示的完整避坑指南
  • Ansaldo cpu684 印刷电路板
  • 别再踩LONG数据类型的坑了!从Oracle官方文档看CLOB如何优雅替代(附迁移脚本)