计算机网络(五)网络层
计算机网络(五)网络层
1 网络层概述
-
网络层的主要任务是实现网络互连,进而实现数据包在网络之间的传输
-
实现网络层任务,需要解决的问题:
-
网络层需要向上层运输层提供可靠的还是不可靠的服务(即是否能够解决网络包传输过程的误码、乱序、丢失问题)
-
网络寻址问题,即寻找同一网络的网络接口
-
路由选择问题,即数据包从源站发往目的站的路径选择问题,有两种解决办法:
- 一种是由用户或者网络管理员进行人工配置,只适用于规模较小且网络拓扑结构不改变的小型互联网
- 另一种是实现各种
路由选择协议
,由路由器执行路由选择协议所规定的路由选择算法,而自动得出路由表中的路由记录,适用于规模较大且网络拓扑结构经常改变的大型互联网
路由器转发数据包的时候,根据数据包的目的地址和路由器中的路由表确定下一跳路由器,即数据包应该从哪一个路由器接口转发
-
-
因特网是目前用户最多的互联网,它使用的TCP/IP协议栈的网络层使用网际协议IP,是整个协议栈的核心,因此TCP/IP协议栈的网络层也被称作网际层。TCP/IP协议栈分为四层:
2 网络层提供的两种服务
2.1 面向连接的虚电路服务
- 可靠服务由网络层本层保证
- 通信必须建立网络层的连接——虚电路VC(Virtual Circuit),然后通信双方沿着已经建立的虚电路发送数据分组
- 目的主机的地址只在连接建立阶段使用,之后每个分组的首部只携带一条虚电路的编号(构成虚电路的每一段链路都有一个虚电路编号)
- 这种通信方式如果再使用可靠传输的网络协议,就可以使所发送的分组正确到达接收方(无差错按序到达、不丢失、不重复)
- 通信结束后,需要释放所建立的虚电路
- 很多广域分组交换网都使用面向连接的虚电路服务

2.2 无连接的数据报服务
因特网的设计者最终采用了无连接的数据报服务:
- 可靠通信由用户主机保证,通信的时候不需要建立网络层的连接
- 每个数据分组可以走不通的路径,分组的首部必须携带目的主机的完整地址
- 这种通信方式所传输的分组可能会出现误码、丢失、重复和失序
- 由于网络本身不提供端到端的可靠通信,因此将复杂的网络处理功能置于因特网的边缘(用户主机和其内部的传输层),而将相对简单的尽最大努力的分组交付功能置于因特网的核心,也正因为这样网络层的路由器可以做得比较简单、价格相对低廉
3 IPv4
- IPv4就是给因特网上的每一台主机(或路由器)的每一个接口分配的在全世界范围内唯一的32位比特的标识符
- 为了方便阅读记录,IPv4采用
点分十进制
的方式方便用户使用:即每8比特分为一组,将每组以十进制数表示并用.隔开 - IPv4的编址方式经历了如下的三个历史阶段:
3.1 分类编址的IP地址

- 只有A、B、C类地址可以分配给网络中的主机或者路由器的各接口使用
- 主机号全为0的地址是网络地址,不能分配给网络中的主机或者路由器的各接口使用
- 主机号全为1的地址是广播地址,不能分配给网络中的主机或者路由器的各接口使用
A类地址
- 最小网络号0保留不指派
- 第一个可以指派的网络号为1,网络地址为1.0.0.0
- 最大网络号为127(01111111),作为本地回环测试地址,不做指派
- 因此最小的本地回环测试地址为127.0.0.1,最大为127.255.255.254
- 最后一个可以指派的网络号为:126
- 可以指派的A类网络的数量为:2^7 - 2 = 126
- 整个A类网络可以分配的IP地址的数量为:(2^24 - 2) * 126

B类地址
- 最小的网络号也是第一个可以指派的网络号是128.0,网络地址为128.0.0.0
- 最大的网络号为:191.255,网络地址为191.255.0.0
- 可以指派的网络数量为:2^(16-2) (开头固定10)
- 每个网络可以分配的IP地址的数量为:2^16 - 2 (减去广播地址和网络地址)

C类地址
- 最小的网络号也是第一个可以指派的网络号是192.0.0,网络地址是192.0.0.0
- 最大网络号223.255.255,网络地址为223.255.255.0
- 可指派的网络数量为:2^(21)
- 每个网络可以分配的IP地址的数量为:2^(8) - 2

3.2 划分子网的IP地址与子网掩码
为什么要划分子网?
如果不划分子网,则想要增加子网就需要申请新的网络号
- 需要等待时间和花费更多的费用
- 会增加其他路由器中表记录的数量
- 浪费原有网络剩余的大量IP地址
因此可以借用IP的主机号的一部分作为子网号:
- 使用32比特的子网掩码可以表名分类IP地址的主机号部分被借用了多少个比特作为了子网号
- 子网掩码使用连续的比特1来对应网络号和子网号
- 使用连续的比特0来对应主机号
- 因此将划分子网的IP地址与子网掩码进行逻辑与运算即可得到IPv4地址对应的网络号

3.3 无分类编址的IPv4地址
划分子网在一定程度上缓解了因特网在发展中遇到的困难,但是数量巨大的C类网络因为其地址空间太小并没有得到充分利用,而因特网的IP地址仍在加速消耗,整个IPv4地址空间面了全部耗尽的威胁
因此一方面提出了采用无分类编址
的方法来解决IP地址紧张的问题,同时还成立IPv6
工作组研究新版本IP以彻底解决IP地址耗尽的问题
无分类域间路由选择CIDR
(Classless Inter-Domain Routing)
-
消除了传统的A类、B类和C类地址以及划分子网的概念
-
可以更加有效地分配IPv4的地址空间,并且可以在新的IPv6使用之前允许因特网的规模继续增长
-
采用
斜线记法
,即在IPv4地址后面加上“/",然后在斜线后面写上网络前缀所占的比特数量CIDR实际上是将网络前缀都相同的连续的IP地址组成一个
CIDR地址块
,只要只要地址块中的任何一个地址,就可以知道该地址块的全部细节:- 最小地址:128.14.32.0
- 最大地址:128.14.47.255
- 地址数量:2^(32 - 20)
- 聚合C类网络的数量:2^(32-20) / 2^8 即这些地址总共多少C类网络
- 地址掩码:11111111 11111111 11110000 00000000
3.4 路由聚合(构造超网)
当一个路由器的路由表记录另一个路由器连接的网络信息的时候,一般是需要全部记录后者的所有网络,这时候就可以使用路由聚合,找出网络的共同前缀,以减少网络记录对路由表的占用:
- 如下面的几条记录可以路由聚合为一条:172.1.4.0/22
- 网络前缀越长,地址块越小,路由越具体
- 若路由器查表转发分组时发现有多条路由可选,则选择网络前缀最长的那条,这称为最长前缀匹配,因为这样路由更具体

3.5 IPv4地址的应用规划
-
定长的子网掩码
FLSM,即按照相同的子网掩码划分子网,n个借用主机号的网络号可以划分为2^n个子网,每个子网的IP地址数量是相同的,容易造成IP地址的浪费 -
变长的子网掩码
VLSM,按照不同的子网掩码划分子网,为每个网络分配子块的时候,分配的原则是“每个子块的起点位置不能任意选取,只能选取块大小整数倍的地址作为起点”
,因此应先给大的子块分配,并且分配的最小地址作为子网的网络地址
,最大地址作为子网的广播地址
3.6 IPv4数据报的首部格式

-
版本
:占4比特,表示IP协议的版本,通信双方使用的IP协议的版本号必须一致,目前广泛使用的IP协议版本号为4 -
首部长度
:占4比特,表示IP数据报的长度,取值以4字节为单位如首部长度十进制为5,表示首部大小为20字节,即只有固定部分
首部长度十进制为15,表示首部大小为60字节,可变部分为40字节
-
可选字段
:长度从1字节到30字节不等,用来支持排错、测量等安全措施,很少被使用 -
填充字段
:保证首部长度为4字节的倍数,使用全0来填充 -
区分服务
:占8比特,用来获得更好的服务,不同数值表示不同等级的服务质量 -
总长度
:占16比特,表示IP数据报的总长度(首部+数据载荷),单位为字节,最大取值为65535数据报的总长度-首部长度即可得到数据部分的大小
-
标识
:占16比特,IP软件维持一个计数器,每产生一个数据报就将计数器+1并赋值给数据报的标识字段,属于同一个数据报的各分片数据报应该具有相同的标识 -
标志
:占3个比特,包括- DF位:0表示允许切片,1表示不允许
- MF位:0表示最后一个切片,1表示不是最后一个、后面还有切片
- 保留位:固定为0,起填充作用
-
片偏移
:占13个比特,指出分片数据报的数据载荷部分偏移其在原数据报的位置多少个单位,以8个字节为单位标识、标志和片偏移用于IP数据报分片,数据链路层在封装帧的时候,规定了帧长度的最大传输单元MTU,当IP数据报长度超过MTU的时候就无法封装成帧,因此需要进行分片,每个分片添加首部之后再封装成帧
-
生存时间
:占8比特,最大生存周期为255,单位最初为s后续每经过一个路由器就将该值减一,如果到达路由器的数据报不为0路由器就进行转发,否则丢弃生存时间主要是为了解决IP数据报在网络路由转发时的路由环路问题
-
协议
:占8比特,指明IPv4数据报的数据部分是何种协议数据单元- ICMP:1
- IGMP:2
- TCP:6
- UDP:17
- IPv6:41
- OSPF:89
-
首部检验和
:16比特,用于检测首部在网络传输过程中是否出现差错,每经过一个路由器都需要重新计算其首部检验和,因为首部的生存时间、标志以及片偏移部分可能会发生变化在IPv6中不再计算首部校验和了,因为IP层本身就应该提供不可靠的传输服务,以能够更快地转发IP数据报
源IP地址
和目的IP地址
:各占32位,填写发送该IP数据报的源主机的IP地址和接收该IP数据报的目的主机IP地址
4 IP数据报的发送和转发过程
-
首先路由器接口的地址指定给直连网络的各个主机作为默认网关,当一个网络中的主机和其他网络的主机进行通信的时候,就会将IP数据报传输给默认网关,由默认网关将IP数据报转发出去
同一个网络中的主机可以直接进行通信,属于
直接交付
而不同网络的主机不能够直接交付,属于
间接交付
-
路由器从接口也就是默认网关得到IP数据报之后,会首先检查数据报首部是否出错,如果出错则舍弃数据报并通告源主机
-
没有出错则进行转发,根据IP数据报的目的地址与路由表条目中的子网掩码相与,得到的网络地址如果匹配则从该条目对应的路由接口进行转发
-
而如果主机对同一个网络中的设备发送了一个广播数据报,路由器是不会对其进行转发的,因为路由器可以隔绝广播域,防止广播风暴
5 静态路由配置及其可能产生的路由环路问题
6 路由选择协议
路由选择可以分为:
静态路由选择
:- 由人工配置的网络路由、默认路由、特定主机路由、黑洞路由都属于静态路由,适用于小规模网络
- 优点:方式简单、开销小
- 缺点:不能及时适应网络状态(流量、拓扑)的变化
动态路由选择
:- 路由器通过路由选择协议自动获取的路由信息,适用于大规模网络
- 优点:能及时适应网络状态(流量、拓扑)的变化
- 缺点:比较复杂、开销大
6.1 路由选择协议概述
-
因特网所采用路由协议的主要特点:
-
自适应
:动态路由选择,能够较好地适应网络状态(流量、拓扑)的变化 -
分布式
:路由器之间通过交换路由信息,共同完成路由信息的获取和更新 -
分层次
:将整个因特网划分为许多较小的自治系统AS(Autonomous System),在自治系统内部和外部可以采用不同类别的路由选择协议分别进行路由选择-
自治系统之间的路由选择简称
域间路由选择
-
自治系统内部的路由选择简称
域内路由选择
-
-
6.2 常见的路由选择协议
路由选择协议运行在网络层的路由器上,主要包括:
-
内部网关协议
(EGP、ERP),目的是设法使分组在一个自治系统内部尽可能有效地从源网络传输到目的网络-
路由信息协议RIP
-
内部网关路由协议IGRP
-
增强型内部网关路由协议EIGRP
路由信息协议RIP和内部网关路由协议IGRP都是基于距离向量,RIP在因特网上最早使用;IGRP是思科早期私有协议,先已被EIGRP取代;EIGRP结合了距离向量和链路状态
-
开放式最短路径优先OSRF
-
中间系统到中间系统IS-IS
开放式最短路径优先OSRF和中间系统到中间系统IS-IS基于链路状态,OSRF在各种网络中广泛使用,集成化IS-IS是ISP骨干网络上最长使用的IGP协议
-
-
外部网关协议
(IGP、IRP)目的是设法使分组在自治系统间尽可能有效地从源网络传输到目的网络- 边界网关协议BGP
内部网关协议和外部网关协议只是路由选择协议的分类名称而不是具体的路由选择协议,现在一般使用路由器替换网关
6.3 路由器的基本结构

-
路由器是具有多个输入端口和多个输出端口的专用计算机,负责转发数据分组
-
整个路由器可以划分为两个部分:
-
一个是
路由选择部分
,核心是路由选择处理机
,负责根据路由选择协议周期性地与其他路由器进行路由信息的交互来更新路由表 -
另一个是
分组转发部分
,分组转发部分由交换结构、输入端口和输出端口三部分组成;信号从某个输入端口进入路由器物理层会将信号转变成比特流,送交数据链路层处理,数据链路层从比特流中识别出帧,去掉帧头和帧尾后送交网络层。
如果送交网络层的分组时普通待转发的数据分组,则根据分组首部中的目的地址进行查表转发,若找不到匹配的条目则丢弃该分组;否则按照匹配条目所指示的端口进行转发。然后信号在输出端口的网络层中更新数据分组首部中某些字段的值,例如将数据分组的生存时间-1,然后送交数据链路层封装成帧,再交付物理层转换为比特流变换成相应电信号进行发送
而如果分组是路由器之间交换路由信息的路由报文,则把这种分组送交路由选择处理机,路由选择处理机根据分组的内容来更新自己的路由表
-
-
分组转发部分的
路由表
一般仅包含从目的网络到下一跳的映射,并且需要对网络拓扑结构变化的计算最优化;路由表除了接收其他路由器发送的路由报文外,还会周期性地向其他路由器通过分组转发部分发送自己所了解的路由信息 -
转发表是由路由表得出的,转发表应该使查找过程最优化
-
路由器的各端口应具有输入缓冲区和输出缓冲区,输入缓冲区用来暂存新进入路由器但是还来不及处理的分组,输出缓冲区用来暂存处理完毕还来不及发送的分组
6.4 基于距离向量的路由信息协议RIP
- 路由信息协议是内部网关协议IGP中最先得到广泛使用的协议之一
- 它要求
自治系统AS
内的每一个路由器到AS其他路由器的距离记录,即距离向量
D-V(Distance Vector) - RIP使用跳数衡量到达网络的距离
- 路由器到直连网络的距离定义为1
- 路由器到非直连网络的距离定义为所经过路由器的个数+1
- RIP允许一条路径最多包含15个路由器,超过15则表示不可达,RIP只适用于小型互联网
-
RIP认为距离短的路由就是好的路由,也就是通过路由器数量最少的路由,而与链路的带宽无关
-
当到达同一目的网络有多条距离相等的路由的时候,可以进行负载均衡
-
RIP仅和相邻路由器周期交换信息,信息指的是路由器的路由表
RIP的工作原理

- 路由器刚开始工作的时候,只知道自己到直连网络的距离为1
- 每个路由器仅和相邻路由器周期交换信息,信息指的是路由器的路由表
- 若干次交换和更新之后,每个路由器都知道到达本
AS自治系统
内各网络的最短距离和下一条的地址
6.5 基于链路状态的开放最短路径优先协议OSPF
-
开放最短路径优先OSPF是基于链路状态的,链路状态是指都和哪些路由器相邻,以及相应链路的代价(费用、距离、时延、带宽等等)
-
OSPF相邻路由器通过周期交互
问候分组
,建立和维护邻居关系-
邻居关系的建立,主要是通过:
-
选举
指定路由器DR
(designed router)和备用的指定路由器BDR
(backup designed router),如果DR故障则非DR成为DR -
所有的非DR和非BDR只能和DR或者BDR建立邻居关系,即非DR和非BDR路由器通过DR或者BDR交换信息
这种做法降低了邻居关系的冗余数量
-
-
问候分组封装在IP数据报内,发往组播地址224.0.0.5
-
发送周期为10s,如果40s未收到来自邻居路由器的问候分组,则认为邻居路由器不可达
-
使用OSPF的每个路由器都会产生
链路状态通告LSA
(link state advertisement),LSA被封装在链路状态更新分组LSU
中,包含以下内容:- 直连网络的链路状态信息
- 邻居路由器的链路状态信息
如下图,R4的链路状态通告就包括
-
-
使用OSPF的每个路由器都有一个
链路状态数据库LSDB
,用于存储LSA -
通过各路由器洪泛发送封装有自己LSA的LSU分组,各路由器的LSDB最终将达到一致
-
各路由器会基于LSDB进行
最短路径优先SPF计算
,构建出各自到达其他各路由器的最短路径,即构建各自的路由表 -
OSPF有以下五种分组类型
-
OSPF的基本工作过程
-
为了使OSPF能够用于规模很大的网络,OSPF把一个自治系统又划分成若干个区域,每个区域可以用32位比特或者四个点分十进制表示,其中主干区域表示为0.0.0.0
6.6 边界网关协议BGP的基本工作原理
-
在不同的自治系统中,度量路由的代价可能不同(距离、带宽、费用等),因此自治系统间进行路由选择的时候,使用代价作为度量来寻找最佳路由是不可行的
-
实际上,BGP只能是寻求一个能够达到目的网络且比较好的路由,并不是寻找一条最佳路由
-
在配置BGP的时候,每个自治系统至少选择一个路由器作为该自治系统的
BGP发言人
-
不同自制系统的
BGP发言人
想要交换路由信息的时候,都需要先建立TCP连接,端口号为179-
在此连接的基础上交换BGP报文以建立BGP对话交换
路由信息
(增加、撤销路由以及报告出错的情况)和网络可达性信息
(要到达目的网络所要经过的一系列自治系统) -
BGP报文主要包括
-
使用TCP连接的两个
BGP发言人
彼此称对方为临站或者对等站 -
交换完网络可达性信息后,BGP发言人就能够根据所采用的策略从收到的路由信息中找到到达各自治系统的较好的路由。也就是构造出树形结构、不存在回路的自治系统连通图
-
-
BGP发言人除了运行BGP外,还要运行自己所在自治系统的内部网关协议IGP,如OSPF或者RIP
7 网际控制报文协议ICMP
- IP协议不是一个可靠的服务,无法保证数据被送达,保证数据送达的工作需要由其他模块来完成,就比如ICMP(Internet Control Message Protocol)协议
- 主机或者路由器主要使用ICMP来发送
差错报告报文
和询问报文
,ICMP报文被封装在IP数据报中进行发送
7.1 ICMP差错报告报文
-
ICMP的差错报文主要有五种:
-
终点不可达
:当路由器或主机不能交付数据报的时候,就向源点发送终点不可达报文 -
源点抑制
:当路由器或者主机由于拥塞而丢弃数据报的时候,就向源点发送源点抑制报文,使源点知道把数据报的发送速率变慢 -
时间超过
:当主机或者路由器收到一个目的地址不是自己IP的数据报的时候,会将其首部的生存时间TTL-1,如果结果不为0则转发,否则除了丢弃该数据报,还要向源主机发送时间超过报文另外,当终点不能再预先时间内收到一个数据报的全部数据报分片的时候,不仅会丢弃已经收到的数据报,而且也会向源主机发送一个时间超过报文
-
参数问题
:当路由器或者目的主机在接收到IP报文后,发现首部的检验和字段在数据传输过程中出现了误码,则丢弃该分组,并且向源点发送参数问题报文 -
改变路由
(重定向):路由器将改变路由报文发送给源点,让源点主机知道下次应该将数据报发送给另外的更好的路由器
-
-
不应该发送ICMP的情形:
- 对ICMP差错报告报文不再发送ICMP差错报告报文
- 对第一个分片的数据报分片的所有后续数据报分片都不发送ICMP差错报告报文
- 对具有多播地址的数据报都不发送ICMP差错报告报文
- 对特殊地址(127.0.0.0、0.0.0.0)都不发送ICMP差错报告报文
7.2 ICMP询问报文
ICMP询问报文主要有下面两种:
回送请求和回答报文
:ICMP回送请求报文
是由主机或者路由器向一个特定的目的主机发出的询问,收到此报文的主机需要向源主机或者路由器发送ICMP回送回答报文
;这种询问报文主要是用来测试目的站是否可达及了解有关的状态时间戳请求和回答报文
:时间戳请求报文
是请求某个主机或者路由器回答当前的日期和时间,用于进行时钟同步和测量时间
7.3 网际控制报文协议ICMP应用举例及原理-Ping & Trace Route
分组网间探测(Packet InterNet Group):
- 该应用用来测试主机或者路由器间的连通性
- 它属于是应用层,并且直接使用网际层的ICMP协议而没有使用传输层的TCP或者UDP
- 详细来说,使用的是
ICMP的回送请求和回答报文
,由主机或者路由器向一个特定的目的主机发出ICMP回送请求报文
,收到此报文的主机需要向源主机或者路由器发送ICMP回送回答报文
跟踪路由(Trace Route)
-
用来测试IP数据报从源主机到达目的主机需要经过哪些路由器
-
它属于是应用层,并且直接使用网际层的ICMP协议而没有使用传输层的TCP或者UDP
-
具体命令在Windows上为
tracert
在Unix上为traceroute
-
详细来说,它是利用了
ICMP差错报告报文
中的时间超过报文
,首先源主机向目的主机发送一个首部中TTL为1的IP数据报,当到达第一个路由器的时候,TTL-1然后被路由器丢弃,路由器向源点发送时间超过报文,这样源点主机就知道经过的第一个路由器了;依次类推不断增加TTL就能知道从源主机到目的主机的所有路由器,直到IP数据报到达目的主机,目的主机向源主机发送ICMP回送回答报文
8 虚拟专用网络VPN
虚拟专用网络VPN(Virtual Private Network)
-
指利用
公用网
作为机构中各专用网
之间的通信载体,但是在效果上就好像是在同一个专用网上通信一样,这种的专用网就被称作虚拟专用网 -
在公用网上传输的数据分组需要经过许多主机或者路由器,但是从逻辑上看两个专用网就像是一条直通的点对点链路,因此也被称作
IP隧道技术
-
虚拟专用网中各主机分配的地址是机构自由分配的专用IP地址(内网地址),而不是需要申请、能够在公网使用的IP地址;网络中的路由器不会对目的地址是内网地址的IP数据报进行转发
内网地址的无分类编码的地址块有:
- 10.0.0.0~10.255.255.255(10/8地址块)
- 172.16.0.0~172.31.255.255(172.16/12地址块)
- 192.168.0.0-192.168.255.255(192.168/16地址块)
-
虚拟专用网络又可以分为
内联VPN
和外联网VPN
或者远程VNP
专用网络通信的过程:

- 两个专用网络都至少需要一个路由器具有合法的公网IP,它们各自的专用网才能利用共用的因特网进行通信,当一个专用网向另一个专用网发送数据的时候,会首先将数据封装成
内部IP数据报
发送给当前专用网的路由器,其源地址为源主机的内网IP地址,目的地址为目的主机的内网IP地址 - 然后路由器对
内部IP数据报
进行加密并重新添加首部封装成一个外部IP数据报
,其源地址为路由器的公网IP,目的地址为目的专用网路由器的公网IP - 经过互联网传输到达目的专用网路由器后,去掉其首部并对数据部分进行解密恢复成原来的IP数据报,然后根据其目的主机发送给专用网的响应主机
9 网络地址转换NAT
网络地址转换NAT(Network Address Translation)
- NAT能够使用大量内部专用地址的专用网络用户能够共享使用少量全球地址来访问因特网的主机和资源,再次缓解了IPv4空间即将耗尽的问题
- 装有NAT软件的路由器称作NAT路由器,NAT路由器包含多个全球IP地址,所有使用私有地址的主机在和外界进行通信的时候,都要在NAT路由器上将私有地址转化为全球共有IP地址

9.1 NAT路由器地址转换过程:
-
具体来说,当使用
私有地址
的主机要给因特网上使用全球IP地址
的另一台主机发送IP数据报的时候,首先会将IP数据报发送给NAT路由器
的数据报首部中源地址填写主机的私有地址,目标地址填写因特网上另一台主机的全球地址,NAT路由器在自己的全球IP地址池中分配一个临时的全球IP地址,并将IP数据报的源地址修改为该地址,将私有地址
和临时地址
的对应关系记录到NAT转换表
中,然后转发数据报这时候数据报的源地址和目标地址都是全球地址
-
NAT路由器
收到返回的IP数据报后,在NAT转换表
中进行查找,找到记录的临时的全球IP地址
对应的私有地址
,于是就将目的地址修改为私有地址,并将其发送给响应的主机
9.2 NAT网络地址转换存在的问题
- 如果NAT路由器具有N个全球IP地址,那么只能允许N台主机与因特网上的主机进行通信
- 解决方法就是使用下面的
网络地址与端口转换NAPT
(Network Address and Port Translation)方法
10 NAPT
网络地址与端口转换NAPT
(Network Address and Port Translation)
- 由于绝大多数网络应用都是使用运输层协议TCP和UDP来传送数据,因此可以利用运输层的端口号和IP地址一起进行转换,即在转换表中使用
私有地址
加运输层端口号
的方式对应一个全球IP地址
- 这样用一个
全球IP地址
就能使多个拥有本地地址的主机同时和因特网上的主机通信 - 很多家用路由器都是这种NAPT路由器

10.1 NAT与NAPT的内网穿透问题
- 内网主机与外网主机之间的通信,是不能够由外网主机首先发起的
- 这是因为当NAT或者NAPT路由器接收到外网的主机发送的IP数据报后,不能在转换表中找到全球IP地址和私有地址的映射,进而也就不能将数据报发送给内网的主机
- 因此使用私有地址的主机不能够充当因特网服务器,需要使用NAT内网穿透技术来解决问题,屏蔽内网主机地址在一定程度上提供了安全保护

举个栗子,比如下面在使用tracert
追踪路由的时候,发现有三个相同的IP:

这三个IP就对应着内网接外网的NAT或NAPT路由器
、使用私有地址的路由器
和目的主机三部分
,后两者都具有一个私有地址并且共同使用一个路由器的全球IP地址
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步