# 网络层概述

网络层的主要任务是实现网络互连,进而实现数据包在各网络之间的传输

要实现网络层任务,需要解决以下主要问题:

  • 网络层向运输层提供怎样的服务 (“可靠传输” 还是 “不可靠传输)
  • 网络层寻址问题
  • 路由选择问题

因特网 (Internet) 是目前全世界用户数量最多的互联网,它使用 TCP/IP 协议栈。

由于 TCP/IP 协议栈的网络层使用网际协议 IP,它是整个协议栈的核心协议,因此在 TCP/IP 协议栈中网络层常称为网际层。

# 网络层提供的两种服务

# 面向连接的虚电路服务

可靠通信由网络来保证

必须建立网络层的连接一虚电路 VC (Virtual Circuit)

通信双方沿着已建立的虚电路发送分组

目的主机的地址仅在连接建立阶段使用,之后每个分组的首部只需携带一条虚电路的编号 (构成虚电路的每一段链路都有一个虚电路编号)

这种通信方式如果再使用可靠传输的网络协议,就可使所发送的分组最终正确到达接收方 (无差错按序到达、不丢失、不重复)。

通信结束后,需要释放之前所建立的虚电路。

很多广域分组交换网都使用面向连接的虚电路服务。例如,曾经的 X.25 和逐渐过时的帧中继 FR、异步传输模式 ATM 等。

# 无连接的数据报服务

可靠通信应当由用户主机来保证

不需要建立网络层连接

每个分组可走不同的路径

每个分组的首部必须携带目的主机的完整地址

这种通信方式所传送的分组可能误码、丢失、重复和失序

由于网络本身不提供端到端的可靠传输服务,这就使网络中的路由器可以做得比较简单,而且价格低廉 (与电信网的交换机相比较)。

因特网采用了这种设计思想,也就是将复杂的网络处理功能置于因特网的边缘 (用户主机和其内部的运输层),而将相对简单的尽最大努力的分组交付功能置于因特网核心。

# 虚电路服务与数据报服务的比较

对比方面 虚电路服务 数据报服务
思路 可靠通信应当由网络来保证 可靠通信应当由用户主机来保证
连接的建立 必须建立网络层连接 不需要建立网络层连接
终点地址 仅在连接建立阶段使用,每个分组使用短的虚电路号 每个分组都有终点的完整地址
分组的转发 属于同一条虚电路的分组均按照同一路由进行转发 每个分组可走不同的路由
当结点出故障时 所有通过出故障的结点的虚电路均不能工作 出故障的结点可能会丢失分组,一些路由可能会发生变化
分组的顺序 总是按发送顺序到达终点 到达终点时不一定按发送顺序
服务质量保证 可以将通信资源提前分配给每一个虚电路,容易实现 很难实现

# IPv4 地址

# IPv4 地址概述

IPv4 地址就是给因特网 (Internet) 上的每一台主机 (或路由器) 的每一个接口分配一个在全世界范围内是唯一的 32 比特的标识符

IP 地址由因特网名字和数字分配机构 ICANN (Internet Corporation for Assigned Names and Numbers) 进行分配。

  • 我国用户可向亚太网络信息中心 APNIC (Asia Pacific Network Information Center) 申请 IP 地址,需要缴费。
  • 2011 年 2 月 3 日,互联网号码分配管理局 IANA (由 ICANN 行使职能) 宣布,IPv4 地址已经分配完毕。
  • 我国在 2014 至 2015 年也逐步停止了向新用户和应用分配 IPv4 地址。同时全面开展商用部署 IPv6。

IPv4 地址的编址方法经历了如下三个历史阶段:

  • 1981:分类编址
  • 1985:划分子网
  • 1993:无分类编址

32 比特的 IPv4 地址不方便阅读、记录以及输入等,因此 IPv4 地址采用点分十进制表示方法以方便用户使用。

# 分类编址的 IPv4 地址

地址类型 网络号
A 类地址 0
B 类地址 10
C 类地址 110
D 类地址 1110(多播)
E 类地址 1111 (保留)

只有 A 类、B 类和 C 类地址可分配给网络中的主机或路由器的各接口

主机号为 “全 0” 的地址是网络地址,不能分配给主机或路由器的各接口

主机号为 “全 1" 的地址是广播地址,不能分配给主机或路由器的各接口

# A 类地址

最小网络号 0, 保留不指派

第一个可指派的网络号为 1 , 网络地址为 1.0.0.0

最大网络号 127,作为本地环回测试地址,不指派

最小的本地环回测试地址为 127.0.0.1

最大的本地环回测试地址为 127.255.255.254

最后一个可指派的网络号为 126,网络地址为 126.0.0.0

可指派的网络数量为2812^{8-1} - 2 = 126 (减 2 的原因是除去最小网络号 0 和最大网络号 127)

每个网络中可分配的 IP 地址数量为2242^{24} - 2 = 16777214 (减 2 的原因是除去主机号为全 0 的网络地址和全 1 的广播地址)

# B 类地址

最小网络号也是第一个可指派的网络号 128.0

网络地址为 128.0.0.0

最大网络号也是最后一个可指派的网络号 191.255

网络地址为 191.255.0.0

可指派的网络数量为2(162)2^{(16-2)} = 16384

每个网络中可分配的 IP 地址数量为2162^{16}- 2 = 65534 (减 2 的原因是除去主机号为全 0 的网络地址和全 1 的广播地址)

注意:有些教材中指出 128.0 是保留网络号,B 类第一个可指派的网络号为 128.1。
但根据 2002 年 9 月发表的 RFC3330 文档,128.0 网络号已经可以分配了。

# C 类地址

最小网络号也是第一个可指派的网络号 192.0.0

网络地址为 192.0.0.0

最大网络号也是最后一个可指派的网络号 223.255.255

网络地址为 223.255.255.0

可指派的网络数量为2(243)2^{(24-3)}= 2097152

注意:有些教材中指出 192.0.0 是保留网络号,C 类第一个可指派的网络号为 192.0.1。
但根据 2002 年 9 月发表的 RFC3330 文档,192.0.0 网络号已经可以分配了。只不过目前还没有分配出去。

# 划分子网的 IPv4 地址

32 比特的子网掩码可以表明分类 IP 地址的主机号部分被借用了几个比特作为子网号

  • 子网掩码使用连续的比特 1 来对应网络号和子网号
  • 子网掩码使用连续的比特 0 来对应主机号
  • 将划分子网的 IPv4 地址与其相应的子网掩码进行逻辑与运算就可得到 IPv4 地址所在子网的网络地址

示例:已知某个网络的地址为 218.75.230.0, 使用子网掩码 255.255.255.128 对其进行子网划分,

地址与子网掩码 网络号 主机号 对齐
C 类网络地址 218.75.230. 0
子网掩码 255.255.255. 1 0000000

10000000 为 128 的二进制

划分出的子网数量212^1 = 2

每个子网可分配的地址数量2(81)2^{(8-1)}- 2= 126
(减 2 是要去掉主机号为 “全 0” 的网络地址和 “全 1” 的广播地址)

网络号 子网号 主机号 描述
218.75.230. 0 0000000 子网 0 的网络地址 218.75.230.0
218.75.230. 0 0000001 可分配最小地址 218.75.230.1
218.75.230. 0 1111110 可分配最大地址 218.75.230.126
218.75.230. 0 1111111 子网 0 的广播地址 218.75.230.127
子网划分 ------- ------ ------ ----------------------
218.75.230. 1 0000000 子网 1 的网络地址 218.75.230.128
218.75.230. 1 0000001 可分配最小地址 218.75.230.129
218.75.230. 1 1111110 可分配最大地址 218.75.230.254
218.75.230. 1 1111111 子网 1 的广播地址 218.75.230.255

# 无分类编址的 IPv4 地址

划分子网在一定程度上缓解了因特网在发展中遇到的困难,但是数量巨大的 C 类网因为其地址空间太小并没有得到充分使用,而因特网的 IP 地址仍在加速消耗,整个 IPv4 地址空间面临全部耗尽的威胁。

为此,因特网工程任务组 IETF 又提出了采用无分类编址的方法来解决 IP 地址紧张的问题,同时还专门成立 IPv6 工作组负责研究新版本 IP 以彻底解决 IP 地址耗尽问题。

1993 年,IETF 发布了无分类域间路由选择 CIDR (Classless Inter- Domain Routing) 的 RFC 文档: RFC 1517~1519 和 1 520。

  • CIDR 消除了传统的 A 类、 B 类和 C 类地址,以及划分子网的概念;
  • CIDR 可以更加有效地分配 IPv4 的地址空间, 并且可以在新的 IPv6 使用之前允许因特网的规模继续增长。

CIDR 使用 “斜线记法”,或称 CIDR 记法。即在 IPv4 地址后面加上斜线 "/",在斜线后面写上网络前缀所占的比特数量

CIDR 实际上是将网络前缀都相同的连续的 IP 地址组成一个 "CIDR 地址块”

我们只要知道 CIDR 地址块中的任何一个地址,就可以知道该地址块的全部细节:

  • 地址块的最小地址
  • 地址块的最大地址
  • 地址块中的地址数量
  • 地址块聚合某类网络 (A 类、B 类或 C 类) 的数量
  • 地址掩码 (也可继续称为子网掩码)

# 路由聚合

网络前缀越长,地址块越小,路由越具体;

若路由器查表转发分组时发现有多条路由可选,则选择网络前缀最长的那条,这称为最长前缀匹配,因为这样的路由更具体。

# IPv4 地址的应用规划

定长的子网掩码 FLSM (Fixed Length Subnet Mask)

  • 使用同一个子网掩码来划分子网
  • 每个子网所分配的 IP 地址数量相同,造成 IP 地址的浪费

变长的子网掩码 VLSM (Variable Length Subnet Mask)

  • 使用不同的子网掩码来划分子网
  • 每个子网所分配的 IP 地址数量可以不同,尽可能减少对 IP 地址的浪费

# IP 数据报的发送和转发过程

IP 数据报的发送和转发过程包含以下两部分:

  • 主机发送 IP 数据报
  • 路由器转发 IP 数据报

# 静态路由配置及其可能产生的路由环路问题

静态路由配置是指用户或网络管理员使用路由器的相关命令给路由器人工配置路由表。

  • 这种人工配置方式简单、开销小。但不能及时适应网络状态 (流量、拓扑等) 的变化。
  • 一般只在小规模网络中采用。

使用静态路由配置可能出现以下导致产生路由环路的错误

  • 配置错误
  • 聚合了不存在的网络
  • 网络故障

路由条目的类型

  • 直连网络
  • 静态路由 (人工配置)
  • 动态路由 (路由选择协议)

特殊的静态路由条目

  • 默认路由 (目的网络为 0.0.0.0, 地址掩码为 0.0.0.0)
  • 特定主机路由 (目的网络为特定主机的 IP 地址,地址掩码为 255.255.255.255)
  • 黑洞路由 (下一跳为 null0)

# 路由选择协议概述

# 静态路由选择

由人工配置的网络路由、默认路由、特定主机路由、黑洞路由等都属于静态路由。

这种人工配置方式简单、开销小。但不能及时适应网络状态 (流量、拓扑等) 的变化。

一般只在小规模网络中采用。

# 动态路由选择

路由器通过路由选择协议自动获取路由信息。

比较复杂、开销比较大。能较好地适应网络状态的变化。

适用于大规模网络。

# 路由选择协议

# 内部网关协议 IGP

路由信息协议 RIP
内部网关路由协议 IGRP

基于距离向量

  • RIP 在因特网。上最早使用
  • IGRP 是思科早期私有的协议,现在已被 EIGRP 取代

增强型内部网关路由协议 EIGRP

思科私有的,用来取代 IGRP 的混合型路由协议 (结合距离向量和链路状态)


开放式最短路径优先 OSPF
中间系统到中间系统 IS-IS

基于链路状态

  • OSPF 在各种网络中广泛使用
  • 集成化 IS-IS 是 ISP 骨干网。上最长常用的 IGP 协议

# 外部网关协议 EGP

边界网关协议 BGP

# 路由器基本结构

  • 路由表一般仅包含从目的网络到下一跳的映射
  • 路由表需要对网络拓扑变化的计算最优化
  • 转发表是从路由表得出的
  • 转发表的结构应当使查找过程最优化

# 路由信息协议 RIP 的基本工作原理

路由信息协议 RIP (Routing Information Protocol) 是内部网关协议 IGP 中最先得到广泛使用的协议之一,其相关标准文档为 RFC 1058。

RIP 要求自治系统 AS 内的每一个路由器都要维护从它自己到 AS 内其他每一个网络的距离记录。这是一组距离,称为 “距离向量 D 一 V (Distance Vector)"

RIP 使用跳数 (Hop Count) 作为度量 (Metric) 来衡量到达目的网络的距离。

  • 路由器到直连网络的距离定义为 1。
  • 路由器到非直连网络的距离定义为所经过的路由器数加 1。
  • 允许一条路径最多只能包含 15 个路由器。 “距离 " 等于 16 时相当于不可达。

因此,RIP 只适用于小型互联网。

RIP 认为好的路由就是 “距离短” 的路由,也就是所通过路由器数量最少的路由。

当到达同一目的网络有多条 “距离相等” 的路由时,可以进行等价负载均衡。

RIP 包含以下三个要点:

  • 和谁交换信息 仅和相邻路由器交换信息
  • 交换什么信息 自己的路由表
  • 何时交换信息 周期性交换 (例如每 30 秒)

# 开放最短路径优先 OSPF 的基本工作原理

开放最短路径优先 OSPF (Open Shortest Path First), 是为克服 RIP 的缺点在 1989 年开发出来的。

  • “开放” 表明 OSPF 协议不是受某一家厂 商控制,而是公开发表的。
  • “最短路径优先” 是因为使用了 Dijkstra 提出的最短路径算法 SPF。

OSPF 是基于链路状态的,而不像 RIP 那样是基于距离向量的。

OSPF 采用 SPF 算法计算路由,从算法上保证了不会产生路由环路。

OSPF 不限制网络规模,更新效率高,收敛速度快。

链路状态是指本路由器都和哪些路由器相邻,以及相应链路的 " 代价”(cost) 。

  • “代价” 用来表示费用、距离、时延、带宽,等等。这些都由网络管理人员来决定。

OSPF 相邻路由器之间通过交互问候 (Hello) 分组,建立和维护邻居关系。

使用 OSPF 的每个路由器都会产生链路状态通告 LSA (Link State Advertisement)。LSA 中包含以下内容:

  • 直连网络的链路状态信息
  • 邻居路由器的链路状态信息

LSA 被封装在链路状态更新分组 LSU 中,采用洪泛法发送。

使用 OSPF 的每个路由器都有一个链路状态数据库 LSDB, 用于存储 LSA。

通过各路由器洪泛发送封装有自己 LSA 的 LSU 分组,各路由器的 LSDB 最终将达到一致。

使用 OSPF 的各路由器基于 LSDB 进行最短路径优先 SPF 计算,构建出各自到达其他各路由器的最短路径,即构建各自的路由表。

OSPF 有以下五种分组类型

  • 类型 1, 问候 (Hello) 分组
    用来发现和维护邻居路由器的可达性。

  • 类型 2, 数据库描述 (Database Description) 分组
    向邻居路由器给出自己的链路状态数据库中的所有链路状态项目的摘要信息

  • 类型 3, 链路状态请求 (Link State Request) 分组
    向邻居路由器请求发送某些链路状态项目的详细信息。

  • 类型 4, 链路状态更新 (Link State Update) 分组
    路由器使用这种分组将其链路状态进行洪泛发送,即用洪泛法对全网更新链路状态。

  • 类型 5, 链路状态确认 (Link State Acknowledgment) 分组
    这是对链路状态更新分组的确认分组。

OSPF 在多点接入网络中路由器邻居关系的建立

  • 选举指定路由器 DR (designated router) 和备用的指定路由器 BDR (backup designated router)
  • 所有的非 DR/BDR 只与 DR/BDR 建立邻居关系
  • 非 DR/BDR 之间通过 DR/BDR 交换信息

# 边界网关协议 BGP 的基本工作原理

内部网关协议 IGP (例如路由信息协议 RIP 或开放最短路径优先 OSPF)

  • 设法使分组在一个自治系统内尽可能有效地从源网络传输到目的网络
  • 无需考虑自治系统外部其他方面的策略

外部网关协议 EGP (例如边界网关协议 BGP)

  • 在不同自治系统内,度量路由的 " 代价”(距离,带宽,费用等) 可能不同。因此,对于自治系统之间的路由选择,使用 “代价” 作为度量来寻找最佳路由是不行的。

外部网关协议 EGP (例如边界网关协议 BGP)

  • 在不同自治系统内,度量路由的 “代价” (距离,带宽,费用等) 可能不同。因此,对于自治系统之间的路由选择,使用 “代价” 作为度量来寻找最佳路由是不行的。
  • 自治系统之间的路由选择必须考虑相关策略 (政治,经济,安全等)
  • BGP 只能是力求寻找一条能够到达目的网络且比较好的路由 (不能兜圈子),而并非要寻找一条最佳路由

BGP 发言人交换网络可达性的信息 (要到达某个网络所要经过的一系列自治系统)

当 BGP 发言人互相交换了网络可达性的信息后,各 BGP 发言人就根据所采用的策略从收到的路由信息中找出到达各自治系统的较好的路由。也就是构造出树形结构、不存在回路的自治系统连通图。

BGP-4 有以下四种报文

  • OPEN (打开) 报文:用来与相邻的另一个 BGP 发言人建立关系,使通信初始化。
  • UPDATE (更新) 报文:用来通告某一路由的信息,以及列出要撤销的多条路由。
  • KEEPALIVE (保活) 报文:用来周期性地证实邻站的连通性。
  • NOTIFICATION (通知) 报文:用来发送检测到的差错。

# IPv4 数据报的首部格式

版本

占 4 比特,表示 IP 协议的版本。
通信双方使用的 IP 协议的版本必须一致。目前广泛使用的 IP 协议版本号为 4 (即 IPv4) 。

首部长度

占 4 比特,表示 IP 数据报首部的长度。该字段的取值以 4 字节为单位。
最小十进制取值为 5,表示 IP 数据报首部只有 20 字节固定部分;
最大十进制取值为 15, 表示 IP 数据报首部包含 20 字节固定部分和最大 40 字节可变部分。

可选字段

长度从 1 个字节到 40 个字节不等。用来支持排错、测量及安全等措施。
可选字段增加了 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的。这就增加了每一个路由器处理 IP 数据报的开销。实际上可选字段很少被使用。

填充字段

确保首部长度为 4 字节的整数倍。 使用全 0 进行填充。

区分服务

占 8 比特,用来获得更好的服务。
该字段在旧标准中叫作服务类型,但实际上一直没有被使用过。
1998 年,因特网工程任务组 IETF 把这个字段改名为区分服务。
利用该字段的不同数值可提供不同等级的服务质量。
只有在使用区分服务时,该字段才起作用。一般情况下都不使用该字段。

总长度

占 16 比特,表示 IP 数据报的总长度 (首部 + 数据载荷)。
最大取值为十进制的 65535,以字节为单位。

标识

占 16 比特,属于同一个数据报的各分片数据报应该具有相同的标识。
IP 软件维持一个计数器,每产生一个数据报,计数器值加 1, 并将此值赋给标识字段。

标志

占 3 比特,各比特含义如下:

  • DF 位:
    1 表示不允许分片:
    0 表示允许分片

  • MF 位:
    1 表示 “后面还有分片”;
    0 表示 " 这是最后一个分片”

  • 保留位:必须为 0

片偏移

占 13 比特,指出分片数据报的数据载荷部分偏移其在原数据报的位置有多少个单位。
片偏移以 8 个字节为单位。

这三个字段共同用于 IP 数据报分片

生存时间 TTL

占 8 比特,最初以秒为单位,最大生存周期为 255 秒;路由器转发 IP 数据报时,将 IP 数据报首部中的该字段的值减去 IP 数据报在本路由器。上所耗费的时间,若不为 0 就转发,否则就丢弃。

现在以 “跳数” 为单位,路由器转发 IP 数据报时,将 IP 数据报首部中的该字段的值减 1, 若不为 0 就转发,否则就丢弃。

协议

占 8 比特,指明 IPv4 数据报的数据部分是何种协议数据单元。
常用的一些协议和相应的协议字段值如下。

协议名称 ICMP IGMP TCP UDP IPv6 OSPF
协议字段值 1 2 6 17 41 89

首部检验和

占 16 比特,用来检测首部在传输过程中是否出现差错。比 CRC 检验码简单,称为因特网检验和。

IP 数据报每经过一个路由器,路由器都要重新计算首部检验和,因为某些字段 (生存时间、标志、片偏移等) 的取值可能发生变化。

由于 IP 层本身并不提供可靠传输的服务,并且计算首部校验和是一项耗时的操作,因此在 IPv6 中,路由器不再计算首部校验和,从而更快转发 IP 数据报。

源 IP 地址和目的 IP 地址

各占 32 比特,用来填写发送该 IP 数据报的源主机的 IP 地址和接收该 IP 数据报的目的主机的 IP 地址。

# 网际控制报文协议 ICMP

为了更有效地转发 IP 数据报和提高交付成功的机会,在网际层使用了网际控制报文协议 ICMP (Internet Control Message Protocol)。

主机或路由器使用 ICMP 来发送差错报告报文和询问报文。

ICMP 报文被封装在 IP 数据报中发送。

ICMP 差错报告报文共有以下五种:

  • 终点不可达
    当路由器或主机不能交付数据报时,就向源点发送终点不可达报文。具体可再根据 ICMP 的代码字段细分为目的网络不可达、目的主机不可达、目的协议不可达、目的端口不可达、目的网络未知、目的主机未知等 13 种错误。

  • 源点抑制
    当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。

  • 时间超过
    当路由器收到一个目的 IP 地址不是自己的 IP 数据报,会将其生存时间 TTL 字段的值减 1。
    若结果不为 0,则将该 IP 数据报转发出去;若结果为 0,除丢弃该 IP 数据报外,还要向源点发送时间超过报文。
    另外,当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,也会向源点发送时间超过报文。

  • 参数问题
    当路由器或目的主机收到 IP 数据报后,根据其首部中的检验和字段发现首部在传输过程中出现了误码,就丢弃该数据报,并向源点发送参数问题报文。

  • 改变路由 (重定向)
    路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器 (可通过更好的路由)。

以下情况不应发送 ICMP 差错报告报文:

  • 对 ICMP 差错报告报文不再发送 ICMP 差错报告报文
  • 对第一个分片的数据报片的所有后续数据报片都不发送 ICMP 差错报告报文
  • 对具有多播地址的数据报都不发送 ICMP 差错报告报文
  • 对具有特殊地址 (如 127.0.0.0 或 0.0.0.0) 的数据报不发送 ICMP 差错报告报文

常用的 ICMP 询问报文有以下两种:

  • 回送请求和回答
    ICMP 回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。
    收到此报文的主机必须给源主机或路由器发送 ICMP 回送回答报文。
    这种询问报文用来测试目的站是否可达及了解其有关状态。

  • 时间戳请求和回答
    ICMP 时间戳请求报文是请某个主机或路由器回答当前的日期和时间。
    在 ICMP 时间戳回答报文中有一个 32 位的字段,其中写入的整数代表从
    1900 年 1 月 1 日起到当前时刻一共有多少秒。
    这种询问报文用来进行时钟同步和测量时间。

# ICMP 应用举例

分组网间探测 PING (Packet InterNet Groper)

用来测试主机或路由器间的连通性

应用层直接使用网际层的 ICMP (没有通过运输层的 TCP 或 UDP)

使用 ICMP 回送请求和回答报文

跟踪路由 traceroute

用来测试 IP 数据报从源主机到达目的主机要经过哪些路由器

Windows 版本

  • tracert 命令
  • 应用层直接使用网际层 ICMP
  • 使用了 ICMP 回送请求和回答报文以及差错报告报文

Unix 版本

  • traceroute 命令
  • 在运输层使用 UDP 协议
  • 仅使用 ICMP 差错报告报文

# 虚拟专用网 VPN 与网络地址转换 NAT

# 虚拟专用网 VPN (Virtual Private Network)

利用公用的因特网作为本机构各专用网之间的通信载体,这样的专用网又称为虚拟专用网。

由于 IPv4 地址的紧缺,一个机构能够申请到的 IPv4 地址数量往往远小于本机构所拥有的主机数量。因此,虚拟专用网中的各主机所分配的地址应该是本机构可自由分配的专用地址,而不是需要申请的、在因特网上使用的公有地址。

如下图所示,同一机构内不同部门的内部网络所构成的虚拟专用网 VPN 又称为内联网 VPN。

有时一个机构的 VPN 需要有某些外部机构 (通常就是合作伙伴) 参加进来。这样的 VPN 就称为外联网 VPN。

在外地工作的员工需要访问公司内部的专用网络时,只要在任何地点接入到因特网,运行驻留在员工 PC 中的 VPN 软件,在员工的 PC 和公司的主机之间建立 VPN 隧道,即可访问专用网络中的资源。这种 VPN 称为远程接入 VPN。

# 网络地址转换 NAT (Network Address Translation)

虽然因特网采用了无分类编址方式来减缓 IPv4 地址空间耗尽的速度,但由于因特网用户数目的激增,特别是大量小型办公室网络和家庭网络接入因特网的需求不断增加,IPv4 地址空间即将面临耗尽的危险仍然没有被解除。

1994 年提出了一种网络地址转换 NAT 的方法再次缓解了 IPv4 地址空间即将耗尽的问题

NAT 能使大量使用内部专用地址的专用网络用户共享少量外部全球地址来访问因特网上的主机和资源

由于绝大多数的网络应用都是使用运输层协议 TCP 或 UDP 来传送数据,因此可以利用运输层的端口号和 IP 地址一起进行转换

这样,用一个全球 IP 地址就可以使多个拥有本地地址的主机同时和因特网上的主机进行通信。这种将端口号和 IP 地址一起进转换的技术叫作网络地址与端口号转换 NAPT(Network Address and Port Translation).

对于一些 P2P 网络应用,需要外网主机主动与内网主机进行通信,在通过 NAT 时会遇到问题,需要网络应用自己使用一些特殊的 NAT 穿越技术来解决问题