文章目录
- 1.网络层
- 2.IP协议
-
- [2.1 IP协议头](#2.1 IP协议头)
- [2.2 IP分片和组装](#2.2 IP分片和组装)
- 3.网段划分
- 4.私有IP和公网IP
- 5.路由表
- 希望读者们多多三连支持
- 小编会继续更新
- 你们的鼓励就是我前进的动力!
1.网络层

应用层和传输层主要负责定内容(发什么数据,业务逻辑)和定应用(哪个应用发 / 收,端口 + 可靠 / 快速),接下来就是要准备发数据了,网络层 就是负责选择跨网络的传输路径
网络是由多个局域网组成的,各个局域网之间依靠路由器进行转发,IP 就是用于标识转发身份的,IP=目标网络+目标主机
2.IP协议
2.1 IP协议头

-
4位版本: 指定 IP 协议的版本
-
4位首部长度 : 告诉接收方首部有多长。因为底下的"选项"字段长度可变,所以这个字段是必须的。注意:单位是
4字节。标准的20字节首部,这里的数值是5 (5 * 4 = 20)。 -
8位服务类型: 用于标记数据包的优先级(例如语音通话需要低延迟,文件下载可以容忍延迟)
-
16位总长度 (Total Length) : 整个
IP数据报的长度(首部 + 数据)
第二行放到后面讲
-
8位生存时间(TTL): 防止路由死循环的关键,不是按时间计算,而是路由转发次数
- 数据包每经过一个路由器,
TTL减1 - 当
TTL变为0时,路由器会丢弃该包并发送ICMP超时消息给源地址
- 数据包每经过一个路由器,
-
8位协议 : 告诉
IP层数据是谁的- 6 : 代表
TCP - 17 : 代表
UDP - 1 : 代表
ICMP(Ping命令用的)
- 6 : 代表
-
16位首部检验和 : 确保
IP首部在传输过程中没有损坏。路由器每转发一次都要重新计算(因为TTL变了) -
32位源 IP 地址 : 发送端的
IP(例如客户端的IP) -
32位目的 IP 地址 : 接收端的
IP(例如你服务器绑定的IP) -
选项: 可变长,很少使用。可用于安全、源路由选择等高级功能
-
数据 : 这里装的就是
TCP段,上一层的有效载荷+报文,就是下一层的有效载荷
2.2 IP分片和组装

IP 协议头的第二行非常关键。如果数据包太大(超过了链路层的 MTU,例如以太网通常是 1500 字节),IP 层会将数据包切碎(分片),这一行就是用来记录如何把碎片拼回去的。
-
16位标识 : 给数据包打个
ID。同一个原始包切出来的所有碎片,ID都是一样的 -
3位标志 (Flags):
- 第一位 : 保留位,必须是
0 - 第二位 : 如果设为
1,意思是不许被切开。如果网络一定要切分才能通过,路由器就会直接丢弃这个包,并报错;如果设为0,意思是允许切分 - 第三位 : 后面还有。如果置
1,说明这不是最后一个碎片
- 第一位 : 保留位,必须是
-
13位片偏移: 当前这个碎片在原始数据中的位置。接收方根据这个把乱序到达的碎片拼回原来的顺序
🤯举个例子:
假设你要发一个 4000 字节的大数据包,但是中间的网线限制一次只能过 1500 字节(MTU)
为了方便计算,我们假设 IP 头部长 20 字节,所以数据部分实际上是:
- 原始数据总长 :
3980字节(数据) +20字节(IP头) =4000字节 - MTU限制 :
1500字节(其中数据最多装1480字节,头部20字节)
路由器会把这个大包切成 3 片,假设原始包的标识(ID)是 666
- 第一片 (Fragment 1)
这是开头部分。
- 16位标识 :
666(跟原始包一样) - 3位标志 (MF) :
1(设为1,表示"后面还有") - 13位片偏移 :
0(这是开头,偏移量是0) - 携带数据 :第
0 ~ 1479字节 (共1480字节)
- 第二片 (Fragment 2)
这是中间部分。
- 16位标识 :
666(我是属于ID 666的一份子) - 3位标志 (MF) :
1(设为1,表示"后面还有") - 13位片偏移 :
185,前面发了1480字节。偏移量单位是8字节,所以1480 / 8 = 185 - 携带数据 :第
1480 ~ 2959字节 (共1480字节)
- 第三片 (Fragment 3)
这是最后剩下的部分。
- 16位标识 :
666(我也是ID 666的一份子) - 3位标志 (MF) :
0(注意!这里设为0,表示最后一个了) - 13位片偏移 :
370,前面两片总共发了1480 + 1480 = 2960字节,2960 / 8 = 370 - 携带数据 :第
2960 ~ 3979字节 (剩下的1020字节)
当目的主机的 IP 层接收到这些分片后,会根据标识字段将属于同一个数据报的所有分片挑选出来。利用片偏移字段,IP 层会对属于同⼀个数据报的分片进行排序,当所有的分片都到达并正确排序后,IP 层会将这些分片重新组装成一个完整的 IP 数据报,传递给上层的协议进行处理
3.网段划分

- 网络号: 保证相互连接的两个网段具有不同的标识
- 主机号: 同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号
路由器本质也是个子网的主机,也需要配置 IP,路由器一般连接至少两个子网,是子网里的第一台设备,路由器就是用来在各个子网之间转发用的,子网内新增的主机由路由器分配 IP
IP 地址本身看不出哪部分代表 "所属的网络",哪部分代表 "网络里的自己",把子网掩码和IP进行按位与计算来区分网络号和主机号
例子1:同一路由器下,手机和电脑互传文件(同局域网)
- 电脑IP:
192.168.1.100,子网掩码:255.255.255.0 - 手机IP:
192.168.1.105,子网掩码:255.255.255.0
子网掩码的作用:
- 分家 :掩码
255.255.255.0规定前3段是网络号,最后1段是主机号
→ 电脑/手机的网络号都是192.168.1 ,主机号分别是100和105; - 判邻居 :两者网络号完全相同,判定为同一局域网。
✅ 结果:不用走任何路由器,手机和电脑能直接互传文件、投屏,路由器只负责连外网,不插手内网通信。
例子2:你家电脑连朋友家的打印机(跨局域网)
- 你家电脑IP:
192.168.1.100,掩码:255.255.255.0→ 网络号:192.168.1 - 朋友家打印机IP:
192.168.2.88,掩码:255.255.255.0→ 网络号:192.168.2
子网掩码的作用:
- 分家:同样按前3段划网络号,两者网络号明显不同;
- 判邻居 :网络号不一样,判定为不同局域网。
✅ 结果:你家电脑不能直接连朋友家打印机,必须通过路由器/宽带网络转发数据,才能实现跨网访问。
例子3:子网掩码帮你避免"IP混乱"(简单划小网)
假设一个小公司有 3 个部门,各 20 台电脑,路由器给的大网段是192.168.1.0(掩码255.255.255.0,能连 254 台设备)。
如果所有电脑都用这个掩码,会混在一个网里,数据传输乱、还不安全。
用子网掩码微调(比如 255.255.255.192),把大网段拆成 3 个小子网:
- 行政部:
192.168.1.1~62(网络号192.168.1.0) - 技术部:
192.168.1.65~126(网络号192.168.1.64) - 市场部:
192.168.1.129~190(网络号192.168.1.128)
4.私有IP和公网IP

- 一个路由器可以配置两个
IP地址,一个是WAN口IP,一个是LAN口IP(子网IP) - 路由器
LAN口连接的主机,都从属于当前这个路由器的子网中 - 不同的路由器,子网
IP其实都是一样的(通常都是192.168.1.1)。子网内的主机IP地址不能重复,但是子网之间的IP地址就可以重复了
每一个家用路由器,其实又作为运营商路由器的子网中的一个节点。这样的运营商路由器可能会有很多级,最外层的运营商路由器,WAN 口 IP 就是一个公网 IP 了。子网内的主机需要和外网进行通信时,路由器将 IP 首部中的 IP 地址进行替换(替换成 WAN 口 IP),这样逐级替换,最终数据包中的 IP 地址成为一个公网 IP。这种技术称为 NAT 映射技术
5.路由表
路由表就是路由器(或主机)内部的一张核心导航清单。它的唯一作用是:告诉数据包「下一步该发给谁」,才能最快到达目的地
当一个 IP 数据包到达路由器(或主机)时,设备只知道目标 IP,但不知道怎么走。路由表就是用来做决策的:
- 直连:如果目标在本地局域网,直接发过去
- 转发:如果目标在互联网,发给网关(下一跳路由器),让它继续送
一句话总结 :路由表 = 目的IP + 走哪条路(下一跳) + 用哪个网卡(出口)
| 目标网络 (Destination) | 子网掩码 (Genmask) | 网关 (Gateway) | 标志 | 网卡 (Iface) | 含义 |
|---|---|---|---|---|---|
0.0.0.0 |
0.0.0.0 |
192.168.1.1 |
UG | eth0 |
默认路由:找不到路时,全发给192.168.1.1 |
192.168.1.0 |
255.255.255.0 |
0.0.0.0 |
U | eth0 |
直连路由:去192.168.1网段,直接在本地发 |
127.0.0.0 |
255.0.0.0 |
0.0.0.0 |
U | lo |
本机路由:发给自己的,走回环接口 |
- 目标网络 :数据包要去哪里。
0.0.0.0代表"所有其他地方"。 - 网关 :下一跳(Next Hop) 。
- 如果是
0.0.0.0(或onlink),说明是直连 ,不用经过路由器,直接通过ARP找MAC地址发; - 如果是具体
IP(如192.168.1.1),说明要把包发给这个路由器。
- 如果是
- 网卡 :从本机的哪个网口(
eth0/wlan0)把包发出去。
希望读者们多多三连支持
小编会继续更新
你们的鼓励就是我前进的动力!
