# 2. IP 数据报

## 1. IP 数据报格式

### 1.1 TCP/IP 协议栈

![](/files/-MDpIDzET1fwiUzJNnLc)

### 1.2 IP 数据报格式

![](/files/-MDpImMlPOD64FjjWvHP)

#### 首部细节

![](/files/-MDpKEAybbVOq3EFiV_0)

**版本：**&#x5360; 4 位，指 IP 协议的版本。（IPv4/IPv6）

**首部长度：**&#x5360; 4 位，**单位是 4B**，最小为 5（因为首部固定部分 20B，5 \* 4B = 20B），最大为 15（15 \* 4B = 60B）

**区分服务：**&#x5360; 8 位，用来获取更好的服务（如：优先级），但实际上一直没有用过

**总长度：**&#x5360; 16 位，首部 + 数据部分的总长度，**单位是 1B**，因此数据报的总长度为 $$2^{16} - 1 = 65535 B$$&#x20;

**生存时间（TTL）：**&#x5360; 8 位，IP 分组的保质期，经过一个路由器就 -1，变为 0 则丢弃

**协议：**&#x5360; 8 位，数据部分的协议，即传输层使用的是什么协议

| 协议名 | ICMP | IGMP |  TCP  | EGP | IGP |   UDP  | IPv6 | ESP | OSPF |
| :-: | :--: | :--: | :---: | :-: | :-: | :----: | :--: | :-: | :--: |
| 字段值 |   1  |   2  | **6** |  8  |  9  | **17** |  41  |  50 |  89  |

**首部检验和：**&#x5360; 16 位，只检验数据报的首部，但不包含数据部分。每经过一个路由器，都会重新计算一下首部检验和。

**源地址：**&#x5360; 32 位

**目的地址：**&#x5360; 32 位

**可选字段：**&#x5360; 0 \~ 40 位，用来支持排错、测量以及安全措施

**填充：**&#x5168; 0，把首部长度补成 4B 的整数倍

### 1.3 IP 数据报分片

**最大传输单元MTU：**&#x6570;据链路层帧可封装数据的上限，以太网的MTU是1500字节。

![](/files/-MDsWlURDI4p0DCsXPXL)

![](/files/-MDsXH_Z5NOFV0P44c4n)

**标识：**&#x5360; 16 位，同一数据报的分片使用同一标识

**标志：**&#x5360; 3 位，只有两位有意义 x \_ \_

* 中间位 DF（Don't Fragment）
  * DF = 1，禁止分片
  * DF = 0，允许分片
* 最低位 MF（More Fragment）
  * MF = 1，后面还有分片
  * MF = 0，代表最后一片 / 没分片

**片偏移：**&#x6307;出较长分组分片后，某片在原分组中的相对位置。**（以 8B 为单位）**

* 除了最后一片，每个分片长度一定是 **8B 的整数倍**

![](/files/-MDsZE8p5btcat1u50Is)

## 2. IPv4 地址

IP 地址是唯一标识一个计算机的地址

### 2.1 IP 编址的历史阶段

1. 分类的 IP 地址
2. 子网的划分
3. 构成超网（无分类编址方式）

### 2.2 分类的 IP 地址

IP 地址：全世界唯一的 **32 为 / 4 字节** 标识符，标识路由器主机的接口

IP 地址 ::= {<网络号>，<主机号>}

![](/files/-MDuQPGjY6WYF1ORLOHv)

### 2.3 互联网中的 IP 地址

![](/files/-MDuREny5vaY-oAMDVdS)

### 2.4 IP 地址的分类

![](/files/-MDuRrDwf_2gKTnEQHqZ)

### 2.5 特殊 IP 地址

![](/files/-MDuSAUxNMqbdZ4Hr258)

### 2.6 私有 IP 地址

![](/files/-MDuSImBub4uc5sLIFbF)

### 2.7 IP 地址的范围

![](/files/-MDuSR9veGsk1TImOEJ1)

对于 A 类地址，0.0.0.0 和 127.0.0.0 不能用作网络号

对于 B 类地址，128.0.0.0 不能作为网络号

对于 C 类地址，192.0.0.0 不能作为网络号

## 3. 网络地址转换（NAT）

对于私有IP地址是不能在网络上传输的，需要通过 NAT技术来实现私网IP和公网通信的功能。

网络地址转换 NAT（Network Address Translation）：在专用网连接到因特网的路由器上安装 NAT 软件，安装了 NAT 软件的路由器交**NAT路由器**，它至少有一个有效的**外部全球 IP地址**。

![](/files/-MDuVOFJTGCFA3waZGlu)

## 4. 子网划分 & 子网掩码

### 4.1 分类 IP 地址的弱点

1. IP 地址空间的利用率有时很低
2. 两级 IP 地址不够灵活

### 4.2 子网划分

**子网划分就是把一部分用来表示主机号的位数来表示网络号，用子网掩码区分。**

![](/files/-MDyAKjk25fEh5FzondI)

### 4.3 子网掩码

![](/files/-MDyAciHjzJGkAQM1t33)

### 4.4 使用子网时分组的转发

![](/files/-MDyAXWRrDHW6IBdd5LS)

**路由表中存储的信息：**

1. 目的网络地址
2. 目的网络子网掩码
3. 下一跳网址

**路由器转发分组的算法：**

1. 提取目的 IP地址
2. 是否直接交付
3. 特定主机交付
4. 检测路由表中有无路径
5. 默认路由 0.0.0.0
6. 丢弃，报告转发分组出错（TTL 为 0）

## 5. 无分类编址 CIDR

1. **消除了传统他的 A 类、B 类和 C 类地址以及划分子网的概念**

   <img src="/files/-MDyMGjFBv4dGLMwIaLj" alt="" data-size="original">&#x20;

   CIDR 记法：IP 地址后加上 /，然后写上网络前缀（可以是任意长度）的位数。e.g. 128.14.32.&#x30;**/20**
2. &#x20;**融合子网地址与子网掩码，方便子网划分**

   CIDR 把**网络前缀都相同**的连续的 IP 地址组成一个 CIDR地址块

### 5.1 构成超网

将多个子网聚合成一个较大的子网，叫做构成超网，或路由聚合

**方法：**&#x5C06;网络前缀缩短（所有网络地址取交集）

![](/files/-MDyNtgZVuUGKt6gJjBn)

### 5.2 最长前缀匹配

使用 CIDR时，查找路由表可能得到几个匹配结果（**跟网络掩码按位相与**），应选择具有最长网络前缀的路由。前缀越长，地址块越小，路由越具体。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lfool.gitbook.io/computer-network/di-si-zhang-wang-luo-ceng/2.-ip-shu-ju-bao.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
