news 2026/5/12 12:40:51

网络层IP协议的初步认识

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
网络层IP协议的初步认识

IP协议

IP 协议(Internet Protocol,互联网协议)是TCP/IP 协议栈网络层的核心协议,也是互联网互联互通的基础。它的核心作用是为数据包提供跨网络的寻址与转发能力,简单说就是解决数据从哪里来、要到哪里去、怎么到达。

网络层对比传输层:

  • 网络层
    • 解决 跨网段的路由与寻址:把数据包从源主机送到目标主机
    • 它是通过IP到IP解决主机之间的通信
  • 传输层
    • 解决 主机内进程间的通信:把数据从源进程送到目标进程
    • 它则是通过端口号解决进程之间的通信

IP协议头格式

四位版本

  • 标识 IP 版本,IPv4 为 0100(4),IPv6 为 0110(6)

四位首部长度

  • 表示 IP 头的长度,单位是 4 字节。最小值 5(5×4=20 字节),最大值 15(15×4=60 字节)

八位服务类型

  • 3位优先权字段(已经弃⽤), 4位TOS字段, 和1位保留字段(必须置为0). 4位TOS分别表⽰: 最⼩延时, 最⼤吞吐量, 最⾼可靠性, 最⼩成本. 这四者相互冲突, 只能选择⼀个. 对于ssh/telnet这样的应⽤程序, 最⼩延时⽐较重要; 对于ftp这样的程序, 最⼤吞吐量⽐较重要.

十六位总长度

  • 整个 IP 数据包的长度(头 + 数据),最大值 65535 字节

十六位标识

  • 给每个原始数据包分配唯一编号,用于分片重组,相同数据包分片标识编号相同。

三位标志

  • 第⼀位保留(保留的意思是现在不⽤, 但是还没想好说不定以后要⽤到).
  • 第⼆位置为1表⽰禁⽌分⽚, 这时候如果报⽂⻓度超过MTU, IP模块就会丢弃报⽂.
  • 第三位表⽰"更多分⽚", 如果分⽚了的话, 最后⼀个分⽚置为0, 其他是1. 类似于⼀个结束标记.

十三位片偏移

  • 表示分片数据在原始数据包中的位置,单位是 8 字节,其实就是在表⽰当前分⽚在原报⽂中处在哪个位置. 实际偏移的字节数是这个值除以 8 得到的. 因此, 除了最后⼀个报⽂之外, 其他报⽂的⻓度必须是8的整数倍。(重组时按照片偏移升序排序就好了)

八位生存时间

  • 防止数据包无限循环,数据报到达⽬的地的最⼤报⽂跳数. ⼀般是64,每经过一个路由器 TTL 减 1,TTL=0 则丢弃并返回 ICMP 错误

八位协议

  • 标识上层协议,如 TCP=6、UDP=17、ICMP=1

十六位首部校验和

  • 仅校验 IP 头的完整性,数据部分的校验由上层协议负责

三十二位源/目的IP地址

  • 发送方和接收方主机的 IP 地址

分片和重组

每种数据链路的最大传输单元( MTU )不同,网络层的 IP 是数据链路的上一层, IP 通过分片屏蔽数据链路的差异,实现不同数据链路互通。

当遇到 IP 数据包大于数据链路 MTU 时,往往无法直接发送出去,主机或路由器就会对 IP 数据包进行分片处理。

经过分片后的 IP 数据,只会在目标主机上进行重组,中途经过路由器时不会进行重组。

分片

  • 原始 IP 包:总长度 2000 字节(IP 头 20 字节,数据部分 1980 字节)
  • 路由器转发的链路 MTU=1500 字节 → 每个分片的总长度不能超过 1500 字节

每个分片的 IP 头占 20 字节 → 数据部分最大长度 = 1500 - 20 = 1480 字节。又因为片偏移单位是 8 字节,所以数据长度必须是 8 的整数倍 → 1480 刚好满足(1480 ÷ 8 = 185)

  • 分片 1
    • 数据部分:原始数据的前 1480 字节
    • IP 头:标识 = X,MF=1(表示后面还有分片),片偏移 = 0(从原始数据第 0 字节开始)
    • 总长度:20 + 1480 = 1500 字节
  • 分片 2
    • 数据部分:原始数据的剩余 500 字节(1980-1480=500)
    • IP 头:标识 = X,MF=0(这是最后一个分片),片偏移 = 185(1480 ÷ 8 = 185)
    • 总长度:20 + 500 = 520 字节

重组

完整性校验

  • 遍历收到的分片,找到MF=0的分片(最后一个分片)。
  • 根据最后一个分片的片偏移 + 数据长度,计算出原始包的总数据长度:185×8 + 500 = 1480 + 500 = 1980字节,和原始数据长度一致。
  • 检查是否有分片缺失。
  • 启动超时机制:如果超时未收到所有分片,直接丢弃已收到的分片,不向上层交付。

排序拼接

  • 片偏移从小到大升序排序(分片 1 偏移 0 → 分片 2 偏移 185)。
  • 去掉每个分片的 IP 头,只保留数据部分,按顺序拼接:1480 字节 + 500 字节 = 1980 字节,还原原始数据。
  • 第一个分片的 IP 头,加上拼接好的 1980 字节数据,重组出原始的 2000 字节 IP 包。

⽹段划分

网段划分是将一个大的 IP 地址块,按照需求切割成多个小的、独立的子网的技术,核心目的是提高 IP 地址利用率、控制广播域、增强网络管理和安全性

IP地址分为两个部分, ⽹络号和主机号

  • ⽹络号: 保证相互连接的两个⽹段具有不同的标识;
  • 主机号: 同⼀⽹段内, 主机之间具有相同的⽹络号, 但是必须有不同的主机号;

有类划分

早期 A/B/C 类地址的网段划分是固定的,没有子网号,直接按类别划分:

  • A类 0.0.0.0到127.255.255.255 ,最大主机数:2^24-2,主机数太多,广播域过大,地址浪费严重
  • B类 128.0.0.0到191.255.255.255,最大主机数:2^16-2,对中小型网络来说,主机数还是过多
  • C类 192.0.0.0到223.255.255.255,最大主机数:2^8-2,主机数固定 254,无法灵活调整
  • D类 224.0.0.0到239.255.255.255,用于IP 组播(Multicast) 通信。
  • E类 240.0.0.0到247.255.255.255,仅用于科研、实验和未来扩展,不用于任何商用网络场景。

注意:主机数 - 2是因为要排除网络地址(主机号全 0)和广播地址(主机号全 1)。

无类划分(CIDR 划分)

随着Internet的⻜速发展,这种划分⽅案的局限性很快显现出来,⼤多数组织都申请B类⽹络地址, 导致B类地址很快就分配完了, ⽽A类却浪费了⼤量地址;例如, 申请了⼀个B类地址, 理论上⼀个⼦⽹内能允许6万5千多个主机. A类地址的⼦⽹内的主机数更多.然⽽实际⽹络架设中, 不会存在⼀个⼦⽹内有这么多的情况. 因此⼤量的IP地址都被浪费掉了.

针对这种情况提出了新的划分⽅案, 称为CIDR(Classless Interdomain Routing)(⽆类别域间路由):核心是 用 IP/前缀长度 灵活定义网络部分长度,彻底摆脱 A/B/C 类的限制。

  • 引⼊⼀个额外的⼦⽹掩码(subnet mask)来区分⽹络号和主机号;
  • ⼦⽹掩码也是⼀个32位的正整数. 通常⽤⼀串 "0" 来结尾;
  • 将IP地址和⼦⽹掩码进⾏ "按位与" 操作, 得到的结果就是⽹络号;
  • ⽹络号和主机号的划分与这个IP地址是A类、B类还是C类⽆关;

比如在某一子网中将IP地址的前25位作为网络号,那么该网络对应的子网掩码的32个比特位中的前25位就为1,剩下的7个比特位为0,将其用点分十机制表示就是255.255.255.168。

假设该子网当中有一台主机对应的IP地址是192.168.128.10,那么将这个IP地址与该网络对应的子网掩码进行“按位与”操作后得到的就是192.168.128.0,这就是这个子网对应的网络号。

可⻅,IP地址与⼦⽹掩码做与运算可以得到⽹络号, 主机号从全0到全1就是⼦⽹的地址范围;

IP地址和⼦⽹掩码还有⼀种更简洁的表⽰⽅法,例如140.252.20.68/24,表⽰IP地址为140.252.20.68, ⼦⽹掩码的⾼24位是1,也就是255.255.255.0

特殊IP地址

网络地址

  • 特征:子网内主机号全为0。
  • 示例:192.168.1.0/24是该子网的网络地址,代表整个192.168.1.x网段。

直接广播地址

  • 特征:子网内主机号全为1
  • 192.168.1.255/24是该子网的广播地址,发往这个地址的包会被192.168.1.0网段内所有主机接收。

回环地址

  • 固定地址段:127.0.0.0/8(从127.0.0.1127.255.255.254
  • 用于本机进程间通信或测试网络协议栈,数据不会经过物理网卡。

私网IP地址和公网IP地址

私有 IP 地址和公网 IP 地址是 IPv4 地址体系的两大分类,核心区别是是否能在互联网上直接路由,二者通过NAT(网络地址转换)技术实现协同,解决了 IPv4 地址耗尽的问题。

如果一个组织内部组建局域网,IP地址只用于局域网内的通信,而不直接连到Internet上,理论上 使用任意的IP地址都可以,但是RFC 1918规定了用于组建局域网的私有IP地址

  • 10.*,前8位是网络号,共16,777,216个地址
  • 172.16.到172.31.,前12位是网络号,共1,048,576个地址
  • 192.168.*,前16位是网络号,共65,536个地址
  • 包含在这个范围中的, 都称为私有IP, 其余的则称为全局IP(或公网IP);

  • 一个路由器可以配置两个IP地址, 一个是WAN口IP(路由器的外网地址), 一个是LAN口IP(内网网关地址).
  • 路由器LAN口连接的主机, 都从属于当前这个路由器的子网中.
  • 不同的路由器, 子网IP其实都是一样的(通常都是192.168.1.1,网段第一个子网通常分配给路由器). 子网内的主机IP地址不能重复. 但是各个子网之间的IP地址就可以重复了,这样就解决了我们的IP数量不够用的难题
  • 每一个家用路由器, 其实又作为运营商路由器的子网中的一个节点. 这样的运营商路由器可能会有很多级, 最外层的运营商路由器, WAN口IP就是一个公网IP了.(也别称为出入口路由器)。
  • 子网内的主机需要和外网进行通信时, 比如拿到源头IP地址和目的IP地址,路由器将IP首部中的IP地址进行替换(替换成WAN口IP)(替换的是源IP,保证私有IP不出现在公网中), 这样逐级替换, 最终数据包中的IP地址成为一个公网IP. 这种技术称为NAT(Network AddressTranslation,网络地址转换).
  • 如果希望我们自己实现的服务器程序, 能够在公网上被访问到, 就需要把程序部署在一台具有外网IP的服务器上. 这样的服务器可以在阿里云/腾讯云上进行购买.

路由

路由的过程, 就是这样⼀跳⼀跳(Hop by Hop) "问路" 的过程.

所谓 "⼀跳" 就是数据链路层中的⼀个区间. 具体在以太⽹中指从源MAC地址到⽬的MAC地址之间的帧传输区间.

IP数据包的传输过程也和问路⼀样.

  • 当IP数据包, 到达路由器时, 路由器会先查看⽬的IP;
  • 路由器决定这个数据包是能直接发送给⽬标主机, 还是需要发送给下⼀个路由器;
  • 依次反复, ⼀直到达⽬标IP地址;

那么如何判定当前这个数据包该发送到哪⾥呢? 这个就依靠每个节点内部维护⼀个路由表;

目标网段(Destination)网关(Gateway)子网掩码(Genmask)标志(Flags)跃点(Metric)引用(Ref)使用(Use)出口网卡(Iface)。

当IP报文到达路由器时,路由器就会用该报文的目的IP地址,依次与路由表中的子网掩码 Genmask进行“按位与”操作,然后将结果与子网掩码对应的目的网络地址Destination进行比对,如果相同则说明该报文下一跳就应该跳去这个子网,此时就会将该报文通过对应的发送接口Iface发出。

如果将该报文的目的IP地址与子网掩码进行“按位与”后,没有找到匹配的目的网络地址,此时路由器就会将这个报文发送到默认路由,也就是路由表中目标网络地址中的default。可以看到默认路由对应的Flags是UG,实际就是将该数据转给了另一台路由器,让该数据在另一台路由器继续进行路由。

总结:IP 协议是 “主机到主机” 通信的基石,负责把数据送到目标主机门口;而传输层(TCP/UDP)则负责把数据递到主机内的目标进程手上,二者配合实现端到端通信。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/5 17:00:48

电商客服实战:用通义千问3-14B快速搭建智能问答系统

电商客服实战:用通义千问3-14B快速搭建智能问答系统 1. 引言:电商客服智能化的现实挑战 在当前电商平台竞争日益激烈的背景下,客户服务已成为影响用户留存与转化的关键环节。传统人工客服面临响应延迟、服务时间受限、人力成本高等问题&…

作者头像 李华
网站建设 2026/5/8 23:43:12

手把手教程:基于电感的低通滤波器设计

手把手教程:基于电感的低通滤波器设计 从一个“嗡嗡声”说起 你有没有遇到过这样的情况? 精心设计的音频放大电路,接上耳机后却传来一阵低频“嗡嗡”声;或者在高精度ADC采样时,明明信号源很干净,读出的数据…

作者头像 李华
网站建设 2026/5/10 17:24:34

FinBERT金融情感分析:从零到精通的完整指南

FinBERT金融情感分析:从零到精通的完整指南 【免费下载链接】finbert 项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/finbert 在当今信息爆炸的金融世界,如何从海量文本中精准捕捉市场情绪?FinBERT作为专为金融领域打造的…

作者头像 李华
网站建设 2026/5/7 23:13:45

终极分子编辑器 Avogadro 2:快速掌握专业分子建模技巧

终极分子编辑器 Avogadro 2:快速掌握专业分子建模技巧 【免费下载链接】avogadroapp Avogadro is an advanced molecular editor designed for cross-platform use in computational chemistry, molecular modeling, bioinformatics, materials science, and relate…

作者头像 李华
网站建设 2026/5/9 19:20:21

YimMenu终极指南:5步轻松实现GTA5游戏菜单完美注入

YimMenu终极指南:5步轻松实现GTA5游戏菜单完美注入 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMenu…

作者头像 李华
网站建设 2026/5/11 5:32:11

NotaGen应用开发:集成到DAW工作流案例

NotaGen应用开发:集成到DAW工作流案例 1. 引言 1.1 业务场景描述 在现代音乐创作流程中,数字音频工作站(Digital Audio Workstation, DAW)已成为作曲家、编曲人和制作人的核心工具。然而,从零开始创作高质量的古典风…

作者头像 李华