文章目录[隐藏]
网络层
1. 概述
- 网络层的主要任务是实现网络互连,进而实现数据包在各网络之间的传输
- 要实现网络层任务,需要解决以下主要问题:
- 网络层向运输层提供怎样的服务(可靠还是不可靠)
网络层对分组丢失、分组失序、分组重复等传输错误采取措施,使得接收方能正确接受发送方发送的数据,就是可靠传输;反之,如果什么措施也不采取,则是不可靠传输
- 网络寻址问题
- 路由选择问题
- 路由器收到数据后,是依据什么来决定将数据包从自己的哪个接口转发出去?
- 依据数据包的目的地址和路由器中的路由表
- 但在实际当中,路由器是怎样知道这些路由记录?
- 由用户或网络管理员进行人工配置,这种方法只适用于规模较小且网络拓扑不改变的小型互联网
- 另一种是实现各种路由选择协议,由路由器执行路由选择协议中所规定的路由选择算法,而自动得出路由表中的路由记录,这种方法更适合规模较大且网络拓扑经常改变的大型互联网
- 因特网(Internet)是目前全世界用户数量最多的互联网,它使用TCP/IP协议栈
- 由于TCP/IP协议栈的网络层使用网际协议IP,它是整个协议栈的核心协议,因此在TCP/IP协议栈中网络层常称为网际层
网络层(网际层)除了IP协议外,还有之前介绍过的地址解析协议ARP,还有网际控制报文协议ICMP,网际组管理协议IGMP
2. 两种服务
2.1 面向连接的虚电路服务
- 可靠通信由网络来保证
- 必须建立网络层的连接一虚电路VC(Virtual Circuit)
- 通信双方沿着已建立的虚电路发送分组
- 目的主机的地址仅在连接建立阶段使用,之后每个分组的首部只需携带一条虚电路的编号(构成虚电路的每一段链路都有一个虚电路编号)
- 这种通信方式如果再使用可靠传输的网络协议,就可使所发送的分组最终正确到达接收方(无差错按序到达、不丢失、不重复)
- 通信结束后,需要释放之前所建立的虚电路
- 发送方发送给接收方的所有分组都沿着同一条虚电路传送
- 很多广域分组交换网都使用面向连接的虚电路服务例如,曾经的X.25和逐渐过时的帧中继FR、异步传输模式ATM等
- 虚电路表示这只是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式传送,而并不是真正建立了一条物理连接
- 电路交换的电话通信是先建立了一条真正的连接,因此分组交换的虚连接和电路交换的连接只是类似,但并不完全一样
2.2 无连接的数据报服务
- 可靠通信应当由用户主机来保证
- 不需要建立网络层连接
- 每个分组可走不同的路径
- 每个分组的首部必须携带目的主机的完整地址
- 这种通信方式所传送的分组可能误码、丢失、重复和失序
- 由于网络本身不提供端到端的可靠传输服务,这就使网络中的路由器可以做得比较简单,而且价格低廉(与电信网的交换机相比较)
- 因特网采用了这种设计思想,也就是将复杂的网络处理功能置于因特网的边缘(用户主机和其内部的运输层),而将相对简单的尽最大努力的分组交付功能置于因特网核心
尽最大努力交付
- 如果主机(即端系统)中的进程之间的通信需要是可靠的,那么就由网络的主机中的运输层负责可靠交付(包括差错处理、流量控制等)
- 采用这种设计思路的好处是:网络的造价大大降低,运行方式灵活,能够适应多种应用
3. 对比
对比的方面 | 虚电路服务 | 数据报服务 |
---|---|---|
思路 | 可靠通信应当由网络来保证 | 可靠通信应当由用户主机来保证 |
连接的建立 | 必须有 | 不需要 |
终点地址 | 仅在连接建立阶段使用,每个分组使用虚电路编号 | 每个分组都有终点的完整地址 |
分组的转发 | 属于同一条虚电路的分组均按照同一路由进行转发 | 每个分组独立选择路由进行转发 |
当结点出故障时 | 所有通过出故障的结点的虚电路均不能工作 | 出故障的结点可能会丢失分组,一些路由可能会发生变化 |
分组的顺序 | 总是按发送顺序到达终点 | 到达终点时不一定按发送顺序 |
端到端的差错处理和流量控制 | 可以由网络负责,也可以由用户主机负责 | 由用户主机负责 |
3. IPv4
3.1 基本概念
3.2 分类编址
(1)简介
每一类地址都由两个固定长度的字段组成:
- 网络号 net-id:标志主机(或路由器)所连接到的网络
- 主机号 host-id:标志该主机(或路由器)
一个 IP 地址在整个互联网范围内是唯一的
(2)A类地址
(3)B类地址
(4)C类地址
练习
(5)总结
IP 地址的指派范围
一般不使用的特殊的 IP 地址
IP 地址的一些重要特点
(1) IP 地址是一种分等级的地址结构。分等级的两个好处是:
- 第一,IP 地址管理机构在分配 IP 地址时只分配网络号,而剩下的主机号则由得到该网络号的单位自行分配。这样就方便了 IP 地址的管理
- 第二,路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间
(2) 实际上 IP 地址是标志一个主机(或路由器)和一条链路的接口
- 当一个主机同时连接到两个网络上时,该主机就必须同时具有两个相应的 IP 地址,其网络号 net-id 必须是不同的。这种主机称为多归属主机 (multihomed host)
- 由于一个路由器至少应当连接到两个网络(这样它才能将 IP 数据报从一个网络转发到另一个网络),因此一个路由器至少应当有两个不同的 IP 地址
(3) 用转发器或网桥连接起来的若干个局域网仍为一个网络,因此这些局域网都具有同样的网络号 net-id。
(4) 所有分配到网络号 net-id 的网络,无论是范围很小的局域网,还是可能覆盖很大地理范围的广域网,都是平等的
3.3 划分子网
(1)原因
在 ARPANET 的早期,IP 地址的设计不够合理:
- IP 地址空间的利用率不高
- 给每一个物理网络分配一个网络号会使路由表变得太大因而使网络性能变坏
- 两级的 IP 地址不够灵活
如果想要将原来的网络划分成三个独立的网路
所以是否可以从主机号部分借用一部分作为子网号
但是如果未在图中标记子网号部分,那么我们和计算机又如何知道分类地址中主机号有多少比特被用作子网号了呢?
所以就有了划分子网的工具:子网掩码
- 从 1985 年起在 IP 地址中又增加了一个“子网号字段”,使两级的 IP 地址变成为三级的 IP 地址,这种做法叫做划分子网 (subnetting)
- 划分子网已成为互联网的正式标准协议
(2)使用
基本思路
- 划分子网纯属一个单位内部的事情。单位对外仍然表现为没有划分子网的网络
- 从主机号借用若干个位作为子网号 subnet-id,而主机号 host-id 也就相应减少了若干个位
- 凡是从其他网络发送给本单位某个主机的 IP 数据报,仍然是根据 IP 数据报的目的网络号 net-id,先找到连接在本单位网络上的路由器
- 然后此路由器在收到 IP 数据报后,再按目的网络号 net-id 和子网号 subnet-id 找到目的子网
- 最后就将 IP 数据报直接交付目的主机
划分为三个子网后对外仍是一个网络
- 优点
- 减少了 IP 地址的浪费
- 使网络的组织更加灵活
- 更便于维护和管理
- 划分子网纯属一个单位内部的事情,对外部网络透明,对外仍然表现为没有划分子网的一个网络
(3)子网掩码
默认子网掩码
- 子网掩码是一个网络或一个子网的重要属性
- 路由器在和相邻路由器交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉相邻路由器
- 路由器的路由表中的每一个项目,除了要给出目的网络地址外,还必须同时给出该网络的子网掩码
- 若一个路由器连接在两个子网上,就拥有两个网络地址和两个子网掩码
例1
例2
3.4 无分类编址
(1)原因
无分类域间路由选择 CIDR (Classless Inter-Domain Routing)
CIDR 最主要的特点
- CIDR使用各种长度的“网络前缀”(network-prefix)来代替分类地址中的网络号和子网号
- IP 地址从三级编址(使用子网掩码)又回到了两级编址
(2)使用
举例
(3)路由聚合(构造超网)
3.5 应用规划
给定一个IPv4地址块,如何将其划分成几个更小的地址块,并将这些地址块分配给互联网中不同网络,进而可以给各网络中的主机和路由器接口分配IPv4地址
(1)定长的子网掩码
划分子网的IPv4就是定长的子网掩码
举例
通过上面步骤分析,就可以从子网1~8中任选5个分配给左图中的N1~N5
采用定长的子网掩码划分,只能划分出2^n个子网,其中n是从主机号部分借用的用来作为子网号的比特数量,每个子网所分配的IP地址数量相同
但是也因为每个子网所分配的IP地址数量相同,不够灵活,容易造成IP地址的浪费
(2)变长的子网掩码
无分类编址的IPv4就是变长的子网掩码
举例
4. IP数据报的发送和转发过程
举例
源主机如何知道目的主机是否与自己在同一个网络中,是直接交付,还是间接交付?
可以通过目的地址IP和源地址的子网掩码进行逻辑与运算得到目的网络地址
- 如果目的网络地址和源网络地址 相同,就是在同一个网络中,属于直接交付
- 如果目的网络地址和源网络地址 不相同,就不在同一个网络中,属于间接交付,传输给主机所在网络的默认网关(路由器——下图会讲解),由默认网关帮忙转发
主机C如何知道路由器R的存在?
用户为了让本网络中的主机能和其他网络中的主机进行通信,就必须给其指定本网络的一个路由器的接口,由该路由器帮忙进行转发,所指定的路由器,也被称为默认网关
例如。路由器的接口0的IP地址192.168.0.128做为左边网络的默认网关
主机A会将该IP数据报传输给自己的默认网关,也就是图中所示的路由器接口0
路由器收到IP数据报后如何转发?
- 检查IP数据报首部是否出错:
- 若出错,则直接丢弃该IP数据报并通告源主机
- 若没有出错,则进行转发
- 根据IP数据报的目的地址在路由表中查找匹配的条目:
- 若找到匹配的条目,则转发给条目中指示的下一跳
- 若找不到,则丢弃该数据报并通告源主机
假设IP数据报首部没有出错,路由器取出IP数据报首部各地址字段的值
接下来路由器对该IP数据报进行查表转发
逐条检查路由条目,将目的地址与路由条目中的地址掩码进行逻辑与运算得到目的网络地址,然后与路由条目中的目的网络进行比较,如果相同,则这条路由条目就是匹配的路由条目,按照它的下一条指示,图中所示的也就是接口1转发该IP数据报
路由器是隔离广播域的
5. 静态路由和路由环路问题
5.1 基本概念
5.2 分类
(1)静态路由
(2)默认路由
默认路由可以被所有网络匹配,但路由匹配有优先级,默认路由是优先级最低的
(3)特定主机路由
有时候,我们可以给路由器添加针对某个主机的特定主机路由条目,一般用于网络管理人员对网络的管理和测试
5.3 路由环路原因
(1)静态路由配置错误
假设将R2的路由表中第三条目录配置错了下一跳,这导致R2和R3之间产生了路由环路
(2)聚合了不存在的网络
正常情况
错误情况
解决方法
黑洞路由的下一跳为null0,这是路由器内部的虚拟接口,IP数据报进入它后就被丢弃
(3)网络故障
解决方法
添加故障的网络为黑洞路由
假设,一段时间后网络故障恢复了,R1又自动地得出了其接口0的直连网络的路由条目,针对该网络的黑洞网络会自动失效
如果又故障,则生效该网络的黑洞网络
6. 路由选择协议
6.1 基本概念
静态路由选择:
- 由人工配置的网络路由、默认路由、特定主机路由、黑洞路由等都属于静态路由
- 这种人工配置方式简单、开销小。但不能及时适应网络状态(流量、拓扑等)的变化
- 一般只在小规模网络中采用
动态路由选择:
- 路由器通过路由选择协议自动获取路由信息
- 比较复杂、开销比较大。能较好地适应网络状态的变化
- 适用于大规模网络
主要特点:
- 自适应:动态路由选择,能较好地适应网络状态的变化
- 分布式:路由器之间交换路由信息
- 分层次:将整个因特网划分为许多较小的自治系统 AS(Autonomous System)
分层次的路由选择协议
- 自治系统 AS:在单一的技术管理下的一组路由器,而这些路由器使用一种 AS 内部的路由选择协议和共同的度量以确定分组在该 AS 内的路由,同时还使用一种 AS 之间的路由选择协议用以确定分组在 AS之间的路由
- 域间路由选择:自治系统之间的路由选择
- 域内路由选择:自治系统内部的路由选择
域间路由选择使用外部网关协议 EGP
域内路由选择使用内部网关协议 IGP
网关协议的名称可称为路由协议
常见的路由选择协议
路由器的基本结构
- 路由器是一种具有多个输入端口和输出端口的专用计算机,其任务是转发分组
路由器结构可划分为两大部分:
-
分组转发部分
由三部分构成
-
交换结构
-
一组输入端口:
(1)信号从某个输入端口进入路由器
(2)物理层将信号转换成比特流,送交数据链路层处理
(3)数据链路层从比特流中识别出帧,去掉帧头和帧尾后,送交网络层处理
(4)如果送交网络层的分组是普通待转发的数据分组
(5)则根据分组首部中的目的地址进行查表转发
- 若找到,则按照匹配条目中所指示的端口进行转发
- 若找不到匹配的转发条目,则丢弃该分组
-
-
一组输出端口:
(1)网络层更新数据分组首部中某些字段的值,例如将数据分组的生存时间减 1,然后送交数据链路层进行封装
(2)数据链路层将数据分组封装成帧,交给物理层处理
(3)物理层将帧看成比特流将其变换成相应的电信号进行发送
路由器的各端口还会有输入缓冲区和输出缓冲区
输入缓冲区用来暂存新进入路由器但还来不及处理的分组
输出缓冲区用来暂存已经处理完毕但还来不及发送的分组
路由器的端口一般都具有输入和输出功能,这些实例分出了输入端口和输出端口是更好演示路由基本工作过程
- 路由选择部分
-
路由选择部分的核心构件是路由选择处理机。它的任务是根据所使用的路由选择协议,周期性地与其他路由器进行路由信息的交互,来更新路由表。
如果送交给输入端口的网络层的分组是路由器之间交换路由信息的路由报文,则把这种分组送交给路由选择处理机
-
路由选择处理机根据分组的内容来更新自己的路由表
-
路由选择处理机还会周期性地给其他路由器发送自己所知道的路由信息
6.2 路由信息协议 RIP
(1)基本概念
-
路由信息协议 RIP(Routing Information Protocol)是内部网关协议 IGP 中最先得到广泛使用的协议之一,其相关标准文档为RFC1058
-
RIP 要求自治系统 A S内的每一个路由器都要维护从它自己到 AS 内其他每一个网络的距离记录。这是一组距离,称为“距离向量D-V(Distance-Vector)”
-
RIP 使用跳数(Hop Count))作为度量(Metric)来衡量到达目的网络的距离
-
路由器到直连网络的距离定义为 1
-
路由器到非直连网络的距离定义为所经过的路由器数加 1
-
允许一条路径最多只能包含 15 个路由器。“距离”等于 16 时相当于不可达
因此,RIP 只适用于小型互联网
-
-
RIP 认为好的路由就是“距离短”的路由,也就是所通过路由器数量最少的路由
-
当到达同一目的网络有多条“距离相等”的路由时,可以进行等价负载均衡
-
RIP 包含以下三个要点:
- 和谁交换信息 仅和相邻路由器交换信息
- 交换什么信息 自己的路由表
- 何时交换信息 周期性交换(例如每30秒)
(2)RIP 的基本工作过程
举例
(3)RIP 的路由条目的更新规则
举例1
路由器 C 的表到达各目的网络的下一条都记为问号,可以理解为路由器 D 并不需要关心路由器 C 的这些内容
假设路由器 C 的 RIP 更新报文发送周期到了,则路由器 C 将自己路由表中的相关路由信息封装到 RIP 更新报文中发送给路由器 D
路由器 C 能到达这些网络,说明路由器 C 的相邻路由器也能到达,只是比路由器 C 的距离大 1,于是根据距离的对比,路由器 D 更新自己的路由表
举例2
(4)RIP 存在“坏消息传播得慢”的问题
解决方法:
但是,这些方法也不能完全解决“坏消息传播得慢”的问题,这是距离向量的本质决定
RIP 协议的优缺点
优点:
- 实现简单,开销较小
缺点:
RIP 限制了网络的规模,它能使用的最大距离为 15(16 表示不可达)
路由器之间交换的路由信息是路由器中的完整路由表,因而随着网络规模的扩大,开销也就增加
“坏消息传播得慢”,使更新过程的收敛时间过长
6.3 开放最短路径优先 OSPF
(1)基本概念
-
开放最短路径优先 OSPF(Open Shortest Path First),是为克服 RIP 的缺点在 1989 年开发出来的
- “开放”表明 OSPF 协议不是受某一家厂商控制,而是公开发表的
- “最短路径优先”是因为使用了 Dijkstra 提出的最短路径算法 SPF
-
OSPF 是基于链路状态的,而不像 RIP 那样是基于距离向量的
-
OSPF 采用 SPF 算法计算路由,从算法上保证了不会产生路由环路
-
OSPF 不限制网络规模,更新效率高,收敛速度快
-
链路状态是指本路由器都和哪些路由器相邻,以及相应链路的“代价”(cost)
- “代价”用来表示费用、距离、时延、带宽等等。这些都由网络管理人员来决定
(2)问候(Hello)分组
IP 数据报首部中协议号字段的取值应为 89,来表明 IP 数据报的数据载荷为 OSPF 分组
(3)发送链路状态通告 LSA
洪泛法有点类似于广播,就是从一个接口进来,从其他剩余所有接口出去
(4)链路状态数据库同步
使用 SPF 算法计算出各自路由器到达其他路由器的最短路径
(5)OSPF 五种分组类型
-
OSPF 有以下五种分组类型类型:
- 类型1,问候(Hello)分组
用来发现和维护邻居路由器的可达性
- 类型2,数据库描述(Database Description)分组
向邻居路由器给出自己的链路状态数据库中的所有链路状态项目的摘要信息
- 类型3,链路状态请求(Link State Request)分组
向邻居路由器请求发送某些链路状态项目的详细信息
- 类型4,链路状态更新(Link State Update)分组
路由器使用这种分组将其链路状态进行洪泛发送,即用洪泛法对全网更新链路状态
- 类型5,链路状态确认(Link State Acknowledgment)分组
这是对链路状态更新分组的确认分组
(6)OSPF 的基本工作过程
OSPF 在多点接入网络中路由器邻居关系建立
如果不采用其他机制,将会产生大量的多播分组
若 DR 出现问题,则由 BDR 顶替 DR
为了使 OSPF 能够用于规模很大的网络,OSPF 把一个自治系统再划分为若干个更小的范围,叫做区域(Area)
-
在该自治系统内,所有路由器都使用 OSPF 协议,OSPF 将该自治系统再划分成 4 个更小的区域
-
每个区域都有一个 32 比特的区域标识符
-
主干区域的区域标识符必须为 0,主干区域用于连通其他区域
-
其他区域的区域标识符不能为 0 且不相同
-
每个区域一般不应包含路由器超过 200 个
-
划分区域的好处就是,利用洪泛法交换链路状态信息局限于每一个区域而不是自治系统,这样减少整个网络上的通信量
6.4 边界网关协议 BGP
BGP(Border Gateway Protocol)是不同自治系统的路由器之间交换路由信息的协议
7. IPv4数据报的首部格式
- 一个 IP 数据报由首部和数据两部分组成
- 首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的
- 在首部的固定部分的后面是一些可选字段,其长度是可变的
图中的每一行都由 32 个比特(也就是 4 个字节)构成,每个小格子称为字段或者域,每个字段或某些字段的组合用来表达 IP 协议的相关功能
(1)版本
- 占 4 比特,表示 IP 协议的版本
- 通信双方使用的 IP 协议的版本必须一致。目前广泛使用的IP协议版本号为 4(即IPV4)
(2)首部长度
- 占 4 比特,表示 IP 数据报首部的长度。该字段的取值以 4 字节为单位
- 最小十进制取值为 5,表示 IP 数据报首部只有 20 字节固定部分
- 最大十进制取值为 15,表示 IP 数据报首部包含 20 字节固定部分和最大 40 字节可变部分
(3)可选字段
- 长度从 1 个字节到 40 个字节不等。用来支持排错、测量及安全等措施
- 可选字段增加了 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的。这就增加了每一个路由器处理 IP 数据报的开销。实际上可选字段很少被使用
(4)填充字段
- 确保首部长度为 4 字节的整数倍
- 使用全 0 进行填充
IP数据报的首部长度一定是 4 字节的整数倍
因为首部中的可选字段的长度从 1 个字节到 40 个字节不等,那么,当 20 字节的固定部分加上 1 到 40 个字节长度不等的可变部分,会造成首部长度不是 4 字节整数倍时,就用取值为全 0 的填充字段填充相应个字节,以确保IP数据报的首部长度是 4 字节的整数倍
(5)区分服务
- 占 8 比特,用来获得更好的服务
- 该字段在旧标准中叫作服务类型,但实际上一直没有被使用过
- 1998年,因特网工程任务组IETF把这个字段改名为区分服务
- 利用该字段的不同数值可提供不同等级的服务质量
- 只有在使用区分服务时,该字段才起作用。一般情况下都不使用该字段
(6)总长度
- 占 16 比特,表示 IP 数据报的总长度(首部 + 数据载荷)
- 最大取值为十进制的 65535,以字节为单位
举例
(7)标识
- 占 16 比特,属于同一个数据报的各分片数据报应该具有相同的标识
- IP 软件维持一个计数器,每产生一个数据报,计数器值加 1,并将此值赋给标识字段
(8)标志
- 占 3 比特,各比特含义如下:
- DF 位:
- 1 表示不允许分片
- 0 表示允许分片
- MF位:
- 1 表示后面还有分片
- 0 表示这是最后一个分片
- 保留位:
- 必须为 0
(9)片偏移
- 占 13 比特,指出分片数据报的数据载荷部分偏移其在原数据报的位置有多少个单位
- 片偏移以 8 个字节为单位
对IPv4数据报进行分片
现在假定分片 2 的 IP 数据报经过某个网络时还需要进行分片
(10)生存时间 TTL
- 占 8 比特,最初以秒为单位,最大生存周期为 255 秒
- 路由器转发 IP 数据报时,将 IP 数据报首部中的该字段的值减去 IP 数据报在本路由器上所耗费的时间,若不为 0 就转发,否则就丢弃
- 现在以“跳数”为单位,路由器转发 IP 数据报时,将 IP 数据报首部中的该字段的值减 1,若不为 0 就转发,否则就丢弃
(11)协议
- 占 8 比特,指明 IPV4 数据报的数据部分是何种协议数据单元
- 常用的一些协议和相应的协议字段值如下:
协议名称 | ICMP | IGMP | TCP | UDP | IPV6 | OSPF |
---|---|---|---|---|---|---|
协议字段值 | 1 | 2 | 6 | 17 | 41 | 89 |
(12)首部检验和
- 占 16 比特,用来检测首部在传输过程中是否出现差错。比 CRC 检验码简单,称为因特网检验和
- IP 数据报每经过一个路由器,路由器都要重新计算首部检验和,因为某些字段(生存时间、标志、片偏移等)的取值可能发生变化
- 由于 IP 层本身并不提供可靠传输的服务,并且计算首部校验和是一项耗时的操作,因此在 IPV6 中,路由器不再计算首部校验和,从而更快转发 IP 数据报
(13)源 IP 地址和目的 IP 地址
- 各占 32 比特,用来填写发送该 IP 数据报的源主机的 IP 地址和接收该 IP 数据报的目的主机的 IP 地址
8. 网际控制报文协议 ICMP
8.1 基本概念
架构 IP 网络时需要特别注意两点:
- 确认网络是否正常工作
- 遇到异常时进行问题诊断
而 ICMP 就是解决以上问题的协议
ICMP 的主要功能包括:
- 确认 IP 包是否成功送达目标地址
- 通知在发送过程当中 IP 包被废弃的具体原因
- 改善网络设置等
有了以上功能后,就可以知道网络是否正常,设置是否有误以及设备有何异常等信息,从而便于进行网络上的问题诊断
- 为了更有效地转发 IP 数据报和提高交付成功的机会,在网际层使用了网际控制报文协议 ICMP(Internet Control Message Protocol)
- 主机或路由器使用 ICMP 来发送差错报告报文和询问报文
- ICMP 报文被封装在 IP 数据报中发送
- ICMP 差错报告报文共有以下五种:
终点不可达 | 源点抑制 | 时间超过 | 参数问题 | 改变路由(重定向) |
---|
-
常用的 ICMP 询问报文有以下两种:
- 回送请求和回答
ICMP 回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。收到此报文的主机必须给源主机或路由器发送 ICMP 回送回答报文。这种询问报文用来测试目的站是否可达及了解其有关状态
- 时间戳请求和回答
ICMP 时间戳请求报文是请某个主机或路由器回答当前的日期和时间。在 ICMP 时间戳回答报文中有一个 32 位的字段,其中写入的整数代表从 1900年1月1日 起到当前时刻一共有多少秒。这种询问报文用来进行时钟同步和测量时间
ICMP 不是高层协议(看起来好像是高层协议,因为 ICMP 报文是装在 IP 数据报中,作为其中的数据部分),而是 IP 层的协议
ICMP 报文的格式
8.2 ICMP 差错报告报文
(1)终点不可达
(2)源点抑制
(3)时间超过
(4)参数问题
(5)改变路由(重定向)
(6)不应发送 ICMP 差错报告报文情况
以下情况不应发送 ICMP 差错报告报文:
- 对 ICMP 差错报告报文,不再发送 ICMP 差错报告报文
- 对第一个分片的数据报片的所有后续数据报片都不发送 ICMP 差错报告报文
- 对具有多播地址的数据报都不发送 ICMP 差错报告报文
- 对具有特殊地址(如 127.0.0.0 或 0.0.0.0 )的数据报不发送 ICMP 差错报告报文
8.3 ICMP 应用举例
(1)分组网间探测 PING
(2)跟踪路由
tracert 命令的实现原理
9. 虚拟专用网 VPN 与网络地址转换 NAT
9.1 虚拟专用网 VPN
- 由于 IP 地址的紧缺,一个机构能够申请到的IP地址数往往远小于本机构所拥有的主机数
- 考虑到互联网并不很安全,一个机构内也并不需要把所有的主机接入到外部的互联网
- 假定在一个机构内部的计算机通信也是采用 TCP/IP 协议,那么从原则上讲,对于这些仅在机构内部使用的计算机就可以由本机构自行分配其 IP 地址
上图是因特网数字分配机构 IANA 官网查看 IPv4 地址空间中特殊地址的分配方案
用粉红色标出来的地址就是无需申请的、可自由分配的专用地址,或称私有地址
私有地址只能用于一个机构的内部通信,而不能用于和因特网上的主机通信
私有地址只能用作本地地址而不能用作全球地址
因特网中所有路由器对目的地址是私有地址的IP数据报一律不进行转发
本地地址与全球地址
- 本地地址——仅在机构内部使用的 IP 地址,可以由本机构自行分配,而不需要向互联网的管理机构申请
- 全球地址——全球唯一的 IP 地址,必须向互联网的管理机构申请
- 问题:在内部使用的本地地址就有可能和互联网中某个 IP 地址重合,这样就会出现地址的二义性问题
所以部门 A 和部门 B 至少需要一个路由器具有合法的全球 IP 地址,这样各自的专用网才能利用公用的因特网进行通信
部门 A 向部门 B 发送数据流程
两个专用网内的主机间发送的数据报是通过了公用的因特网,但在效果上就好像是在本机构的专用网上传送一样
数据报在因特网中可能要经过多个网络和路由器,但从逻辑上看,R1 和 R2 之间好像是一条直通的点对点链路
因此也被称为 IP 隧道技术
9.2 网络地址转换 NAT
- 虽然因特网采用了无分类编址方式来减缓 IPV4 地址空间耗尽的速度,但由于因特网用户数目的激增,特别是大量小型办公室网络和家庭网络接入因特网的需求不断增加,IPV4 地址空间即将面临耗尽的危险仍然没有被解除
- 1994 年提出了一种网络地址转换 NAT 的方法再次缓解了 IPV4 地址空间即将耗尽的问题
- NAT 能使大量使用内部专用地址的专用网络用户共享少量外部全球地址来访问因特网上的主机和资源
举例
使用私有地址的主机,如何才能与因特网上使用全球 IP 地址的主机进行通信?
- 这需要在专用网络连接到因特网的路由器上安装 NAT 软件
专有 NAT 软件的路由器叫做 NAT 路由器,它至少有一个有效的外部全球 IP 地址。这样,所有使用私有地址的主机在和外界通信时,都要在 NAT路由器上将其私有地址转换为全球 IP 地址
假设,使用私有地址的主机要给因特网上使用全球 IP 地址的另一台主机发送 IP 数据报
因特网上的这台主机给源主机发回数据报
当专用网中的这两台使用私有地址的主机都要给因特网使用全球地址的另一台主机发送数据报时,在 NAT 路由器的 NAT 转换表中就会产生两条记录,分别记录两个私有地址与全球地址的对应关系
问题 1 :
解决方法:
我们现在用的很多家用路由器都是这种 NART 路由器
问题 2 :
内网主机与外网主机的通信,是否能由外网主机首先发起?
解决方法:
否定