上海市网站建设_网站建设公司_SEO优化_seo优化
2026/1/15 3:07:15 网站建设 项目流程

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)则负责把数据递到主机内的目标进程手上,二者配合实现端到端通信。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询