---
typora-copy-images-to: image\网络层
---
# 网络层服务
## 网络层概述
- 从发送主机向接收主机传送数据段(segment)
- 发送主机:将数据段封装到数据报(datagram)中
- 接收主机:向传输层交付数据段(segment)
- **每个主机**和路由器都需要运行网络层协议
- 路由器检验所有穿越它的IP数据报的头部域
### 网络层核心功能-转发与路由
- 转发(forwarding):将分组从路由器的输入端口转移到合适的输出端口,每一个路由器需要维护一个转发表,转发表确定在本路由器如何转发分组

- 路由(routing):确定分组从源到目的经过的路径,使用路由协议或路由算法,记录在转发表中,路由器根据传入的数据报,进行解析检索转发表,获取最终的转发地址

- 网络层核心功能-连接建立
- 数据分组传输之前两端主机需要首先建立虚拟/逻辑连接,网络设备(如路由器)参与连接的建立
- 网络层连接与传输层连接的对比
- 网络层连接:两个**主机**之间(路径上的路由器等网络设备参与其中)
- 传输层连接:两个**应用**进程之间(对中间网络设备透明),是端到端的连接
### 网络层服务模型
**网络层为发送端(主机)到接收端(主机)的数据报传送通道(channel)提供了什么服务模型?**

Internet提供的服务模型是尽力服务,其实就是什么都不保障,靠传输层进行保障,也不进行拥塞控制等.
作为ATM网络,提供了四种服务模型,CBR(固定比特率),VBR(可变比特率),ABR(可用比特率),UBR(不保证比特率)
- CBR,固定比特率,类似两个主机间建立了一个虚拟的电路,所以带宽,丢包,排序,超时等机制都可以获得保障
- ABR,可用比特率,当网络可用的时候,是尽力使用带宽,如果是网络较为拥塞,则带宽降低
#### 网络模型的分类
##### 无连接服务(数据报网络)
- 不事先为系列分组的传输确定传输路径
- 每个分组都独立确定传输路径
- 不同分组可能传输路径不同,导致到达顺序不一致
- 称为**数据报网络**
##### 连接服务(虚电路网络)
- 首先为系列分组的传输确定从源到目的经过的路径(建立连接)
- 然后沿该路径(连接)传输系列分组
- 系列分组传输路径相同
- 传输结束后需要拆除连接
- 代表性的网络:**虚电路网络**
### 虚电路网络
- 数据报网络与虚电路网络是典型两类分组交换网络
- 数据报网络提供网络层无连接服务
- 虚电路网络提供网络层服务
- 类似于传输层的无连接服务(UDP)和面向连接服务(TCP),但是网络层的服务是:**主机到主机**的服务,**网络核心**实现
#### 虚电路网络介绍
**虚电路**:从源主机到目的主机确定一条路径,建立起一条类似于电路的路径(逻辑连接)
- 分组交换
- 每个分组的传输利用链路的**全部带宽**(电路的交换利用多路复用技术只会占用**部分带宽**)
- 源到目的路径经过的网络层设备共同完成虚电路功能
虚电路网络的通信过程:
- 呼叫建立(call setup)->数据传输->拆除呼叫
**作为一个虚电路建立完成之后,怎样保证后续的分组使用这条虚电路?**
为这条虚电路分配一个标识ID,我们成为VCID,每个分组携带虚电路的标识(VCID),而不是目的主机地址
虚电路经过的每个网络设备(如路由器),维护每条经过它的虚电路连接状态
链路.网络设备资源(如带宽,缓存等)可以面向虚电路进行预分配,可以达到一些预期的性能服务
#### 虚电路的具体实现
**每条虚电路包括**:
1. 从源主机到目的主机的一条路径
2. 虚电路号(VCID),**沿路每段链路一个编号**,每条链路可以建立的虚电路数量是不同的,反映了支持连接能力,因此每一段链路的虚电路号可能是不同的
3. 沿路的每个网络设备(如路由器),**利用转发表记录经过的每条虚电路**
沿某条虚电路传输的分组,携带对应**虚电路的VCID**,而不是目的地址,网络设备根据VCID**检索转发表**,找到对应的链路,同一条虚电路,在每段链路上的VCID通常不同

虚电路的转发表记录
| 输入接口 | 输入VCID | 输出接口 | 输出VCID |
| -------- | -------- | -------- | -------- |
| 1 | 12 | 3 | 22 |
所以,**虚电路路径上每个路由器都需要维护VC连接的状态信息!**
#### 虚电路信令协议
传输用户数据之前,需要建立一条虚电路,所以需要特殊的协议,用于虚电路的建立,维护,拆除,这种协议称为**虚电路信令协议**
- 用于虚电路的建立,维护与拆除,确定**路径选择**
- 应用于大部分的虚电路网络中,例如:ATM协议
- Internet是**使用的数据报网络,并未使用虚电路信令协议**
##### 虚电路的连接建立与拆除过程
1. 初始呼叫
2. 目的主机同意呼叫的话,会逆向原有路径,确认呼叫
3. 虚电路连接建立成功
4. 数据流开始传输
5. 数据传输完成后,使用信令协议拆除对应连接

### 数据报网络
- 网络层是无连接的
- 每个分组需要携带目的主机网络地址
- 路由器根据分组的目的地址转发分组(基于路由协议/算法构建支持数据报协议的转发表)
- 路由器检索转发表将分组数据报传输到目的主机
- 每个分组独立选路

每个分组走的路径有可能是不一样的,路由器在传输过程中,转发表更新了,就有可能不同的分组网络走的路径不一致
IPV4是一个32位的2进制的数,大概有40多个亿的IP地址,如果转发表要记录这么多的IP地址,那么转发表非常巨大,此种方案基本是不可行的,**如何提高转发效率**?
所以转发表记录由记录每一个地址改为针对地址范围进行记录,相当于把转发表的IP地址进行聚合

| 目的地址范围 | 链路接口 |
| ------------ | -------- |
| | |
| | |
| | |
| | |

但是现在路由器不一定有这么完美的设置方法,所以也会采用其他方式
#### 最长前缀匹配优先

才去最长的前缀进行匹配,当记录表里都匹配不上的时候,网络路径会走默认(缺省)路由,**在检索转发表时,匹配到多条路口时,优先选择与分组目的地址匹配前缀最长的入口**
### 数据报网络 VS 虚电路网络
#### Internet(数据报网络)
- 计算机之间的数据交换,对网络的要求比较弹性化,没有严格的时间需求
- 链路类型众多
- 特性,性能各异
- 统一一种服务困难
- 端系统(计算机)之间是较为智能的,可以自适应,性能控制,差错回复
- Internet的核心是**简化网络,复杂边缘**
#### ATM(虚电路网络)
- ATM是由电话网络演化而来
- 核心业务是实时对话,严格的时间,可靠性的需求
- 需要有严格保障的服务
- 主机对比是较不智能的,例如:电话机,传真机
- 虚电路网络的核心是:**简化边缘,复杂网络**
## IPV4协议
Internet网络层的主要功能

**路由协议**
- 路径选择
- RIP,OSPF,BGP协议
**IP协议**
- 寻址归约
- 数据报(分组)格式
- 分组处理归约
**ICMP协议**
可以说是IP协议的伴生协议,实现了IP协议就需要ICMP协议,可以对传输过程中错误进行差错报告
- 差错报告
- 路由器"信令"
### IP数据报(分组)格式

IP数据报包含IP的首部信息和传输层包装后的数据

固定部分字节共20位,所有的IP协议这都是固定的
可变部分长度是可变的,可以是0
- **版本号**字段占4位,IP协议的版本号,如果是IPV4则是E.g.4->IPV4,6->IPV6
- **首部长度**字段占4位:IP分组首部长度,4位总共最大能表示15,连固定长度的20个字节都无法表示,所以IP协议规定这里每个数值是以**4字节**为单位,大部分的情况下都没有选项长度,如果是0101,10进制下是5,实际上就是标准的(5x4)个字节数
- **服务类型**(TOS)字段占8位:指示期望获得那种类型的服务,后改名为区分服务,只有在网络真正能提供区分服务时才有用,一般情况下不使用,通常IP分组的该字段(第2字节)的值为00H
- **总长度**字段占16位:IP分组的总字节数(首部+数据),最大IP分组的总长度:65535B,最小的IP分组头部长度:20B,IP分组可以封装的最大数据:65535-20=65515B
- **标识**字段占16位,标识一个分组,IP协议利用一个计数器,每产生IP分组计数器就加1,作为该分组的标识
- **标志位**字段占3位:保留+DF+MF 三个字节
- DF(Dont Fragment),当DF= 1,禁止分片,DF = 0,允许分片
- MF(More Fragment),当MF = 1,则是非最后一片,MF = 0则是代表最后一片(或未分片)
- **片偏移**字段占13位:一个IP分组分片封装原IP分组数据的相对偏移量,如果没有分片则该字段为0,也说明了是从哪一部分字段开始封装,通过片偏移量的大小,我们就知道分片的顺序,因为总长度有16个位,片便宜字段只有13位,所以片偏移字段以**8字节**为单位
- **生存时间(TTL)**字段占8位:IP分组在网络中可以通过的路由器数(或跳步数),一个IP分组在创建初始时会给TTL设置一个初始值,路由器每转发一次分组,TTL减1,当一个路由器减一导致TTL=0的时候,路由器会直接丢弃该IP分组,会向源主机发送一个**ICMP**报文
- **协议**字段占8位:指示IP分组封装的是哪个协议的数据包,实现了IP协议的复用/分解,可以让IP协议知道是TCP或者为UDP或者ICMP报文段
- **首部校验和**字段占16位:实现对IP分组首部的差错检测,计算校验和的时候,先将该字段置为全0,然后将累计数的反码再存入该字段,和的反码作为首部校验和字段,因为每次TTL都会变,所以首部校验和字段是**逐步校验,逐步更新**
- **源IP地址,目的IP地址**字段各占32位,分别标识发送分组的源主机/路由器(网络接口)和接收分组的目的主机/路由器(网络接口)的IP地址
- **选项**字段长度可变,范围在1-40B之间,携带安全,源选路径,时间戳和路由记录等内容,实际上很少被使用
- **填充**字段长度可变,范围在0-3B之间:目的是补齐整个首部,符合32位对齐,即保证首部长度是4字节的倍数
### IP分片
#### 最大传输单元(MTU)
IP分组在传输到链路层上,需要将数据封装成数据帧,网络链路存在**MTU(最大传输单元)**可封装数据的上限,像以太网最大的MTU就是1500个字节
如果一次网络请求经过两个链路,MTU1>MTU2
大IP分组向较小MTU链路转发时,**可以**被分片,可能分也可能不分,如果不分片的话,MTU2无法接收会直接将该分组丢弃,并向源主机发送ICMP报文
如果报文段允许分片,则可以将一个大的IP分组分片为多个IP分组,IP分片只有**到达目的主机**后才会进行重组,路由器不进行重组
IP首部的相关字段用于标识分片以及确定分片的相对顺序,如果目的主机在等待超时后依旧还没收到完整的分片,那么目的主机会丢弃所有分片,此时需要使用上标识,标志位,片偏移字段.
**IP分片过程**
假设原IP分组总长度为L,待转发链路的MTU为M:
1. 若L>M,且DF=0,则可以/需要分片,如果DF = 1,则直接丢弃该分组
2. 分片时每个分片的标识复制原IP分组额标识
3. 通常分片时,除了最后一个分片,其他分片均分为MTU允许的最大分片
4. 除了最后一个分片外最大分片可封装的数据应该是8的倍数,因此一个最大分片可封装的数据为:d = (m-20(通用字节数) / 8 )* 8 向下取整
5. 则需要总片数为:n = (L-20/d)
6. 每片片偏移字段取值为:F = d/8 *(i-1) 向下取整
7. 每片总长度字段为:除了最后一片为:d+20,最后一片为L-(n-1)*d
**分片示例**

### IP协议-IP编址
- IP分组:源地址(SA)-从哪来,目的地址(DA)-到哪儿去
- 接口(interface):主机/路由器与物理链路的连接
- 实现网络层功能,如果某些设备不具备网络层功能的设备,则对网络编址来说是无视的
- 路由器为了实现分组的路由和转发,通常会有多个接口
- 主机通常只有一个或两个接口(e.g.,有线的以太网接口,无线的802.11接口)
**IP地址**:32比特(IPV4),编号标识主机,路由器的**接口**,因为32位的比特比较难记,我们通常会分为4组按照10进制的数据,就是我们常见的192.168.0.1 这样的
**IP地址与每个接口关联**

每个接口都会有IP地址
**怎么样为接口分配IP地址?**
如果不按照规则随机分配IP地址的话,会导致路由器的转发表十分复杂
#### IP子网
将IP地址分为两部分:
- 网络号(NetID)-高位比特
- 主机号(HostID)-低位比特
需要保证分配到某一个区域的网络地址,网络号是相同的,主机号是不同的,这样就可以有一定的规律了.

**IP子网**:
- IP地址具有相同网络号的设备接口
- 不跨越路由(第三层及以上层网络设备)就可以**彼此物理连通**的接口
这样就可以用IP子网的形式描述一个网络段
#### 有类IP地址
**有类编址**
A类地址(50%):网络号占用8个比特,主机号占用24个比特,可以编址的范围是0.0.0.0 - 127.255.255.255
B类地址(25%):网络号从10开始,占用16个比特,主机号占用16位,可以编址范围是:128.0.0.0-191.255.255.255
C类地址(12.5%):网络号从110开始,网络号占用24位,主机号占用8位,编址范围为:192.0.0.0-223.255.555.255
D类地址(6.25%):从1110开始,不区分网络号和注解号,从224.0.0.0-239.255.255.255,用于标识互联网中的一组主机,称为多播地址或者组播地址,向其发送分组数据时,该组主机都会受到该分组数据的副本
E类地址(6.25%):从1111开始,范围为240.0.0.0-255.255.255.255,留作研究使用

给一个主机或者一个路由器分配IP地址的时候,只能够分配A类B类C类地址
#### 特殊IP地址

##### 私有地址
该类地址只用于内部网络,不用于公网,这部分私有地址可以被重用

#### 子网划分和子网掩码
##### 子网划分
如何区分一个IP子网更小的范围网络(子网)?
**IP地址**
- 网络号:高位比特
- 子网号:原网络主机号部分比特
- 主机号:地位比特

例如需要将子网划分为四个子网,则需要2个比特位用于子网号,此时四个子网用路由器相连

**如何确定是否划分了子网?利用多少位划分子网?**
##### 子网掩码
子网掩码形如IP地址:也是32位地址,也是用点分十进制形式

取值有所区别:
- 网络号,子网号位全取1
- 主机号位全取0
所以:
- A网的默认子网掩码为:255.0.0.0
- B网的默认子网掩码为:255.255.0.0
- C网的默认子网掩码为:255.255.255.0
- 加入借用3比特划分子网的B网子网掩码为:255.255.224.0,因为11100000 = 224
**子网地址**+**子网掩码** 可以准确确定子网大小
**例题**

##### 子网掩码的应用
当确定了子网掩码之后,**路由器如何确定应该将IP分组转发到哪个子网?**
将IP分组的目的IP地址与对应的子网掩码按**位与**运算,提取出子网地址
**例题**

去除主机域全0和主机域全1的地址,总共可分配IP地址数为:256*2-2 = 510,在划分子网时,每个子网主机号的全0和全1都是不可用的,全0代表的子网的地址,全1代表的是子网的广播地址,划分子网时会导致IP地址的浪费,但是换来的是网络性能的提升.
#### 无类域间路由CIDR(ClassLess InterDomain Routing)
消除传统的A类,B类和C类地址界限,网络号+子网号 = 网络前缀(可以任意长度)
融合子网地址和子网掩码,方便子网划分
- 无类地址格式:a.b.c.d/x,其中x为前缀长度

23就是网络前缀的长度
- 子网201.2.3.64,255.255.255.192->201.2.3.64/**26**
利用这种方式描述子网非常方便,原有的分配是按照ABCD类来分配,会导致IP地址浪费,使用CIDR技术可以**提高IPV4地址空间的分配效率**,可以提高**路由效率**,可以将多个子网聚合成一个较大的子网称为超网(super netting),对于路由器来说可以记录更大的子网,使得路由表的大小得到很大的减少,这种方法叫**路由聚合**

可以将3个子网聚合成223.1.0.0/22,路由表可以减少极大的空间

而满足这种聚合的情况下,是需要网络地址是连续的,如果某些网络号有部分地址是该部分子网网络所未拥有的,这时候需要其他对应的网络也要发布对应子网,我们此时采取**最长前缀匹配优先**,如图,如果有访问200.23.18.0/23前缀会依据最长前缀匹配优先原则,匹配对应的网络,这样就可以享有路由聚合的高效率,又可以避免路由黑洞现象.

##### 划分子网的意义所在
### 子网划分与路由聚集
**划分子网的意义是什么?如何进行子网划分?什么是定长子网划分?什么是变长子网划分?如何准确地描述一个子网?为什么要进行路由聚集?如何进行路由聚集?什么情况下可以进行路由聚集?**
1. 划分子网的意义是:提高IP地址的使用率,按照规则划分IP地址,提高IP地址的辨识度,便于IP寻址,可以对不同地区不通类型的网络进行划分
2. 按照网络号+子网号+主机号进行划分子网,其中高位比特作为网络号,连续的几位作为子网号,剩余低位比特作为主机号
3. 每个子网规模一样大的划分,此时子网掩码相同
4. 每个子网规模不一样大的划分,此时子网掩码不同
5. 使用IP地址/子网掩码 或者是IP地址/x的CIRD策略两种方式描述
6. 减少路由转发表的大小,提升路由效率
7. 取消有类地址的划分,使用网络号+子网号不限定位数的方式进行划分子网,相同的前缀可以作为一个大的子网(超网),路由的转发表合并这些子网的IP地址,减少路由的转发表大小,当有多个选择的时候,才去最长前缀匹配优先原则
8. 一个路由器同时连接多个较小规模的子网时可以进行路由聚集
### DHCP协议
作为一个主机,如何获得IP地址,如何完成IP地址的配置?
#### 如何获得IP地址?
- 硬编码,静态进行配置,每台主机需要从网络管理员中获取一个静态的IP地址,手工进行配置

- 动态主机配置协议-DHCP(Dynamic Host Configuration Protocol)
- 可以从服务器动态获取(租赁)IP地址,子网掩码,默认网关地址,DNS服务器名称与IP地址
- 即插即用,主机只要能够运行DHCP的客户端,连上网后就可以自动使用IP地址
- 允许地址重用,当主机不在进行网络通信时,可以将IP地址安排给其他主机使用,提高IP地址使用率
- 支持移动用户加入网络
- 支持在用地址续租
如果一个新主机需要一个IP地址
- 主机广播,发送一个DHCP discover(发现报文)报文
- 如果网络中有对应的DHCP服务器则DHCP服务器返回一个DHCP offer(提供报文)报文进行响应
- 注解请求IP地址:DHCP request(请求报文)
- 主机请求IP地址:DHCP ack(确认报文),为这个主机进行一个确认,并同时确认一个该IP地址的租赁期
#### DHCP工作过程
1. 一台新机器需要动态获得一个IP地址,向DHCP server 发送一个报文,src:0.0.0.0 ,68是本机,dest:255.255.255.255,67 是本网内受限广播,本网内的机器都会收到该请求,但是只有DHCP才会返回该请求
2. DHCP服务器返回一个DHCP offer报文,DHCP服务器也是对本网内进行广播并分配对应IP地址
3. 客户机此时发送一个 DHCP request报文,此时还是使用本网内的广播,因为一个网络内是会有多个DHCP服务器的,广播是为了告知其他DHCP服务器,客户机需要使用的IP地址由某台DHCP服务器提供,其他的DHCP可以快速的将预分配的IP地址收回
4. 此时DHCP服务器返回DHCP ACK的确认报文,此时并返回子网掩码,默认网关,DNS服务器,此时主机就可以利用DHCP服务器返回的报文进行绑定IP地址并使用

DHCP协议是在应用层实现的:
- 请求报文封装到UDP数据报中
- 通过IP的受限广播地址在子网内进行广播
- IP广播又映射为链路层广播(e.g.以太网广播)
### 网络地址转换(NAT)
因为IPV4地址已经消耗殆尽,所以在实际的网络通信中,一些主机使用的IP地址是一些私有地址,这些主机的IP地址是无法在互联网中出现的,此时就需要一种**网络地址转换技术**

所有离开本地网络去往Internet的数据报来源IP都需要替换为同一个IP地址和不通的端口号
**NAT出现的动机**
- 只需要从ISP中申请一个IP地址可以应对(IPV4地址消耗殆尽)
- 本地网络设备IP地址的变更,无需通告外界网络
- 变更ISP时,无需修改内部网络设备IP地址,例如原来是电信的网络修改为联通的网络,也不需要修改IP地址
- 内部网络设备对外界网络不可见,即外部网络无法直接寻址到内部网络,会有一定的安全性
##### NAT的实现
- 替换
- 利用(NAT IP地址,新端口号)替换每个外出IP数据报的(源IP地址,源端口号)
- 记录
- 将每对(NAT IP地址,新端口号)与(源IP地址,源端口号)的替换信息存储到**NAT转换表**中
- 替换
- 根据NAT转换表,利用(源IP地址,源端口号)替换每个**进入内网IP数据报**的(目的IP地址,目的端口号)
**网络地址转换过程**

端口号字段是16位的,一个NAT的服务器可以最多支持65536个并行连接.
**NAT 主要争议**
- 路由器应该只处理第3层功能,不应该把第3的数据报还拿出来并获取修改第四层的报文
- 违背端对端的通信原则,因为传输层是端对端的,但是路由器又对传输层的报文进行了修改,打破了端对端的通信原则,导致端对端通信应用(P2P应用)的开发需要考虑NAT通信
- 地址短缺问题应该有IPV6来解决
**NAT穿透问题**
客户期望连接内网地址为10.0.0.1的服务器,但是客户不能直接利用10.0.0.1直接访问服务器,对外唯一可见的地址是NAT地址.此时我们需要从NAT上穿透至内网服务器
解决方案:
1. 静态配置NAT,将特定端口的连接请求转发给特定的服务器
2. 利用UPnP(Universal Plug and Play)互联网网关设备协议(IGD-Internet Gateway Device)自动配置:
支持NAT的服务器需要支持UPnP的协议,自动的获得NAT的公共IP地址,通过这个协议,可以在NAT转换表中,增删端口映射,即可以完成转发表的映射,和手工静态配置类似
3. 中继(Skype):首先在网络中设置多个中继服务器,NAT内部的客户与中继服务器建立一个连接,外部客户也与中继服务器建立连接,终极服务器桥接两个连接的分组,从而实现两个服务器的通信

### 互联网控制报文协议(ICMP)
当Internet网络中发送的报文出错时,接收方不仅仅是直接丢弃该分组,并且要返回一个ICMP报文
ICMP支持主机或路由器:
- 差错报告
- 网络探询
可以分为两大类ICMP报文:
- 差错报告报文(5种)
- **目的不可达**,无法成功交互到目的主机或目的网络,该数据报会被丢弃,并向源主机发送目的不可达的差错报文
- **源抑制(Source Quench)**,考虑到网络拥塞时,当一个路由器发现自身缓存已满导致后续的报文段被丢弃,可以构建一个源抑制这样一个报文发送给源主机,期待源主机收到报文后,减少发送速率,现在并没有按照此种方式进行控制
- **超时/超期报文**,TTL超时,当TTL被减到0的时候,路由器会将IP数据报丢弃,并向源主机报告对应超时/超期报文
- **参数问题**,当一个路由器在转发一个IP数据报的时候,发现报文头某些字段参数有问题,可以丢弃该数据报,则向源主机发送该类报文
- **重定向**,路由器收到一个IP数据报,发现IP数据报的目的网络不应该由该路由器进行转发,应该由其他网关路由器进行转发,此时可以向源主机发送重定向报文,使源主机将该报文发送到其他路由器上
- 网络探询报文(2类)
- **回声(Echo)请求与应答报文(Reply)**,当主机想探测到某个主机之间的网络是否通畅或者可达,则可以发送回声请求,根据应答报文判断是否可达,例如:ping命令就是使用ICMP协议
- **时间戳请求与应答报文 **,通过发送时间戳的请求获取对方时间戳的响应,进行网络探询
#### ICMP报文

通过类型+编码判断是哪种类型的错误
并不是所有报错的情况下都会发送ICMP报文,有几种特种的场景不在发送ICMP报文:
1. 对ICMP差错报文不再发送ICMP差错报告报文
2. 除了第一个IP数据报分片外,对所有后续分片均不发送ICMP差错报告报文
3. 对所有多播IP数据报均不发送ICMP报告报文
4. 对具有特殊地质(127.0.0.0, 0.0.0.0)的IP数据报不发送ICMP差错报告报文
几种ICMP报文已不再使用
1. 信息请求与应答报文
2. 子网掩码请求和应答报文
3. 路由器询问和通告报文
#### ICMP报文的格式
ICMP的报文要封装到IP数据报中进行传输

ICMP差错报告报文数据封装:
需要封装为ICMP的前8个字节+完整的IP数据报首部+IP数据报的前8个字节

## IPV6地址介绍
动机介绍:
1. 32位IPv4地址空间已分配殆尽
2. 期望对IPv4首部协议进行改进,在新版本IP协议中可以支持对数据报快速处理/快速转发
3. 支持QoS,支持不同服务
**IPv6数据报格式**
- 固定长度的40字节基本首部,IPv4有个可选长度的首部字段,IPv6定义为固定的40个字节
- IPv6中路由器不在支持分片,如果IPv6中出现需要分片的话,则由源主机进行分片,目的主机进行组装


- **版本号**,4个字节来展示版本号,和IPv4一样
- 优先级(priority):标识数据报的优先级,以便IPv6来区分不通类型的数据报
- 流标签(flow Label):标识同一流中的数据报
- 载荷长度,包含扩展首部+数据,总共16个比特,理论上可达到64KB的长度
- 下一个首部(next header):如果有扩展首部的话用于标识下一个选项首部,最后一个首部存储上层协议首部(例如TCP首部,UDP首部)
- 跳步限制,对应IPv4中的TTL,数值定义了IPv6能够在网络中跳步的数量,如果跳步数减到0就不再转发,并发送ICMP报文
- IPv6地址使用128位地址
### IPv6对比 IPv4的改变
- **校验和**彻底移除,以减少每跳处理时间
- **选项**:允许,但是从基本首部移除,定义为多个选项首部,通过下一个首部字段指示
- **ICMPv6**:新版ICMP
- 附加报文类型,增加了"Packet Too Big"报文类型,因为IPv6无法分片,所以会发送ICMP报文给源主机
- 多播组管理功能,主要支持在多播时,可以增加或移除组管理成员
### IPv6地址表示形式
IPv6改用冒号分隔的16进制的地址表示形式
- **一般形式**:1080:0:FF:0:8:800:200C:417A
- **压缩形式**:可以将连续的0压缩,并用两个冒号代替,每个IPv6地址中只允许使用一次压缩,例如FF01:0:0:0:0:0:0:43,可压缩为FF01::43
- **IPv4-嵌入形式**:0:0:0:0:0:FFFF:13.1.68.3,把前80个比特全部设置为0,接下来的16个比特设置为1,剩余的32位写成32位的IPv4地址,可以写成::FFFF:13.1.68.3
- **地址前缀**:2002:43c:476b::/48,IPv6不再使用子网掩码,全部使用SIDR形式表示
- **URLs**由于地址过长,并且会有可能引起误解,所以使用url表示中用[]将地址括起来,防止歧义http://[::FFFF:13.1.68.3]:8080/
### IPv6基本地址类型
1. 单播(unicast)地址:一对一通信

2. 多播(multicase)地址:一对多通信,每次发送时该多播网络的成员都会收到对应数据报的副本

3. 任意播(anycast):一对一组之一(通常是最近一个)通信,只会对一个主机进行发送

### IPv4如何向IPv6过渡
不可能在某个时刻所有路由器同时被更新为IPv6,所以:
- 不会有**标志性的日期**
- 长时间内还是IPv4和IPv6并行
- 使用隧道(tunneling技术):IPv6数据报作为IPv4数据报的载荷进行封装,穿越IPv4网络后再将其卸载下来

网络层服务