【Linux网络】网络层协议 IP(1)理解报头、网段划分

hello~ 很高兴见到大家! 这次带来的是Linux网络中关于传输层协议TCP这部分的一些知识点,如果对你有所帮助的话,可否留下你宝贵的三连呢?

个 人 主 页 : 默|笙


文章目录

  • [一、IP 协议](#一、IP 协议)
    • [1.1 网络层与IP协议](#1.1 网络层与IP协议)
    • [1.2 IP协议头理解](#1.2 IP协议头理解)
    • [1.3 网段划分/子网划分](#1.3 网段划分/子网划分)
      • [1. 什么是网段划分?](#1. 什么是网段划分?)
      • [2. 为什么要进行网段划分?](#2. 为什么要进行网段划分?)

一、IP 协议

1.1 网络层与IP协议

  1. 传输层之下就是网络层,网络层同样位于操作系统内部的协议栈中。网络层最核心、最有名的协议是 IP 协议,此外还包括 ICMP、路由协议等,ARP 常被视为网络层与链路层边界上的协议。接下来我们来了解 IP 协议。
  1. 传输层解决的是端到端通信中的"策略"问题,例如是否可靠传输、丢包后是否重传、是否进行流量控制和拥塞控制等 :TCP 提供可靠传输、丢包重传、按序交付;UDP 则不保证可靠。网络层要解决的是:IP数据报如何从源主机经过多个路由器、跨越多个网络,逐跳转发到目的主机。如图,要把一个报文从主机 B 发送到主机 C,中间要经过多个路由器、经过多次子网转发,那么主机或路由器如何知道下一步该把报文交给哪一个路由器?又如何判断目的主机是否就在本子网内、是否需要直接交付?这些正是网络层要解决的问题。

子网是网络层的逻辑划分,而局域网偏链路层和物理范围。IP 数据报在同一局域网内直接交付,跨局域网时由路由器逐跳转发。直接相连的两个路由器,其相连接口通常配置在同一 IP 子网中。路由器往往有多个 IP 地址,因为它有多个接口,每个接口连接一个网络并配置一个 IP 地址,这是路由器能够进行跨局域网进行传输的原因。

  1. IP 的作用是:通过 IPv4 地址进行编址和寻址,使 IP 分组能够被路由到目标网络和目标主机,从而支持路径选择与逐跳转发。IPv4 地址是 4 字节、32 位,通常写成 4 个十进制数。为什么一个 4 字节地址能够用于找到目标主机?可以类比学号:学号通常由年级、院系、班级、序号等组成,具有层次性,看到学号就能定位到某个学生;IP 地址同样采用层次化编址思想,可理解为 网络号 + 主机号。IP 能够完成寻址与转发,关键在于它所在的网络环境使 IP 地址能够发挥作用。就像学号的有效性依赖学校这套管理体系,IP 地址的有效性也依赖网络中的编址、子网掩码、路由表、默认网关、ARP、路由协议等协同机制。IP 协议的核心在于围绕 IP 建立起来的一整套使 IP 能够生效的环境;学习 IP 协议,本质上也是在学习这套协同工作的环境。
  2. 简单了解一下主机、路由器和节点:

主机 :配有 IP 地址的终端设备,通常配置默认网关,能判断目的地址是同一子网还是需要交给网关;复杂路径选择主要由路由器完成。

路由器 :具有多个网络接口、专门依据路由表转发 IP 分组的网络设备,可以理解为一种专注于转发的特殊节点。

节点:主机和路由器的统称。

  1. IP 协议提供的是尽力而为的分组交付能力:它可以将报文从一台主机经过路径选择、路由转发送达另一台主机,但不保证一定送达,也不保证有序、不重复。可能出现丢包、乱序、重复等问题;可靠性通常由 TCP 等上层协议负责。IP 的价值在于:在现有网络环境中尽可能高效地把分组转发到目标。

关于封装过程数据单元有不同的名称:

应用层产生"报文"(message),比如一条 HTTP 请求、一段聊天消息。

交给传输层:TCP 把它封装成"报文段"(segment),UDP 封装成"用户数据报"。

交给网络层:再加上 IP 首部,形成 IP 分组 / IP 数据报。

交给链路层:再加帧头帧尾,形成"帧"(frame),在链路上传输。

1.2 IP协议头理解

  1. 4 位版本:指定 IP 协议版本。IPv4 该字段为 4,IPv6 为 6。两个版本协议不兼容,后续再讲。

  2. 如何分离有效载荷?IPv4 首部中有 4 位首部长度和 16 位总长度。首部长度的单位是 4 字节,因此字段值乘以 4 才是首部字节数;无选项时首部为 20 字节,取值范围是 20~60 字节。16 位总长度表示整个 IP 数据报的总长度。知道首部长度和总长度后,用"总长度 − 首部长度"即可得到有效载荷长度,从而分离有效载荷。

  3. 8 位协议:用于标识 IP 数据报携带的上层协议,例如 TCP、UDP、ICMP。发送方 IP 层根据上层协议设置该字段;接收方 IP 层根据该字段把有效载荷交给对应的上层协议。TCP 与 TCP 通信,UDP 与 UDP 通信,端到端使用同一种传输层协议。

  4. 有效载荷交给谁?由 IP 首部中的 8 位协议字段决定交给哪个上层协议,例如 TCP、UDP、ICMP 等。

  5. 8 位服务类型 TOS:由 3 位优先权字段(已弃用)、4 位 TOS 字段和 1 位保留字段(置 0)组成。4 位 TOS 分别表示最小延时、最大吞吐量、最高可靠性和最小成本 。例如报文从主机 B 发往主机 C 可能有多条路径,不同路径上的路由器性能、开销和时延不同,TOS 可用于表达转发偏好。

  1. 8 位生存时间 TTL:表示 IP 数据报允许经过的最大跳数,常设为 64,8 位字段取值范围为 0~255。每经过一个路由器,TTL 减 1;TTL 减为 0 时,路由器丢弃该数据报,并通常返回 ICMP 超时消息。TTL 主要用于应对路由环路或错误路由:当网络中存在环形路径时,数据报会不断绕行,导致沿途路由器的缓存和带宽资源持续被占用,严重时可能影响通信。TTL 通过限制最大跳数,使这类数据报在有限跳数后被丢弃,从而保护网络资源。IPv6 中对应字段称为"跳数限制"(Hop Limit)。

1.3 网段划分/子网划分

1. 什么是网段划分?

  1. 传统分类或子网划分语境下:IP 地址 = 网络号 + 主机号。更一般地说,在 CIDR 中可理解为:网络前缀 + 主机号。
  2. 位于同一个子网中的主机,其网络号相同,主机号各不相同。向该子网添加主机时,新主机沿用同一网络号,并分配一个本子网内未使用的主机号。
  3. 路由器有一个很重要的作用就是连接并划分子网,IP 地址常由路由器通过 DHCP 分配,它不是固定不变的。实际部署中,路由器接口常作为该子网的第一个可用地址,也就是常说的"一号主机"。
  4. 不同子网对应不同网段,区分网段主要依据网络前缀(网络号)。同一网络前缀下的地址属于同一子网/网段;不同网络前缀对应不同子网。

2. 为什么要进行网段划分?

  1. 网段划分的目的,是为了让IP 地址的查找更快 。查找的本质,其实是一种不断"淘汰"候选对象的过程:顺序(遍历)查找一次只能淘汰一个元素,所以速度自然慢;二分查找一次能淘汰一半元素,速度自然快。而进行网段划分之后,如果目的 IP 不属于某个子网,那么整个子网内的所有主机都可以被一次性淘汰 。接下来我们通过一个例子来更好地理解:

  2. 假如计算机学院的学生张三捡到一张学生卡,他不知道这张卡是谁的,但他知道不是本院的,因为他们院的学号都以 01 开头,而这张学生卡上的学号以 05 开头。于是他把卡交给本院的学生会主席,由主席把这张卡转发出去。学校有一个群,每个院的学生会主席都在这个群里,计算机学院学生会主席便可以通过这个群(公网)联系纺织学院主席,因为纺织学院的学号以 05 开头;之后再由纺织学院学生会主席把卡交给李四,也就是目的主机。

  3. 网段划分就像上述把学校分成一个一个院,它的查找一次就淘汰一个院,因此能够很大程度提升效率。


今天的分享就到此结束啦,如果对读者朋友们有所帮助的话,可否留下宝贵的三连呢~~

让我们共同努力, 一起走下去!

相关推荐
修己xj4 小时前
nslookup 使用指南:两种模式与常用查询技巧
linux
唠玖馆6 小时前
文件系统详解
linux·文件系统·ext2
GeW6 小时前
当Linux内核开始“确定性”,制造高端化才有了底层语法
linux
星恒随风7 小时前
MySQL 从零入门(三):表的约束详解
linux·服务器·数据库·笔记·mysql
梦到啥说啥8 小时前
Linux网络编程:TCP网络协议
网络·网络协议·tcp/ip
StarsGreen9 小时前
libva在intel平台上的前端流程简介
linux
Shanks.11 小时前
2026 远程控制软件实测:ToDesk / 向日葵 / RustDesk / TeamViewer 在跨城与弱网下的真实差距
网络·远程工作·软件需求
Jeremy_WW11 小时前
802.3协议解读 06:117章节 RS 和 200GMII / 400GMII I
网络·网络协议·信息与通信·光模块·802.3协议
坤坤子吖12 小时前
Linux网络编程:自定义应用层协议与 JSON 序列化
linux·服务器·网络·c++·笔记·json