From f1b0c4cdfffaa9359f5b6691a16dd9c5b65c051d Mon Sep 17 00:00:00 2001 From: 2293736867 <2293736867@qq.com> Date: Wed, 26 May 2021 17:56:47 +0800 Subject: [PATCH] Computer network chapter4 --- ComputerNetwork/Chapter4/README.md | 477 +++++++++++++++++++++++++++++ ComputerNetwork/README.md | 1 + 2 files changed, 478 insertions(+) create mode 100644 ComputerNetwork/Chapter4/README.md diff --git a/ComputerNetwork/Chapter4/README.md b/ComputerNetwork/Chapter4/README.md new file mode 100644 index 0000000..e68c94f --- /dev/null +++ b/ComputerNetwork/Chapter4/README.md @@ -0,0 +1,477 @@ +# Table of Contents + +* [1 网络层概述](#1-网络层概述) +* [2 网络层提供的两种服务](#2-网络层提供的两种服务) + * [2.1 面向连接的虚电路服务](#21-面向连接的虚电路服务) + * [2.2 无连接的数据报服务](#22-无连接的数据报服务) +* [3 `IPv4`地址](#3-ipv4地址) + * [3.1 分类编址的`IPv4`](#31-分类编址的ipv4) + * [3.2 划分子网的`IPv4`](#32-划分子网的ipv4) + * [3.3 无分类编址的`IPv4`](#33-无分类编址的ipv4) +* [4 `IP`数据报的发送和转发过程](#4-ip数据报的发送和转发过程) + * [4.1 间接交付和直接交付](#41-间接交付和直接交付) + * [4.2 `IP`数据报发送流程](#42-ip数据报发送流程) +* [5 静态路由配置](#5-静态路由配置) + * [5.1 定义](#51-定义) + * [5.2 配置错误导致的环路问题](#52-配置错误导致的环路问题) + * [5.3 聚合路由产生的环路问题](#53-聚合路由产生的环路问题) + * [5.4 网络故障导致的环路问题](#54-网络故障导致的环路问题) +* [6 路由选择协议](#6-路由选择协议) + * [6.1 概述](#61-概述) + * [6.2 因特网路由选择协议特点](#62-因特网路由选择协议特点) + * [6.3 分层次路由选择协议](#63-分层次路由选择协议) + * [6.4 常见的路由选择协议](#64-常见的路由选择协议) + * [6.4.1 `IGP`](#641-igp) + * [6.4.2 `EGP`](#642-egp) + * [6.5 路由器基本结构](#65-路由器基本结构) + * [6.6 `RIP`](#66-rip) + * [6.6.1 简介](#661-简介) + * [6.6.2 好路由](#662-好路由) + * [6.6.3 基本工作原理](#663-基本工作原理) + * [6.7 `OSPF`](#67-ospf) + * [6.7.1 简介](#671-简介) + * [6.7.2 基本工作原理](#672-基本工作原理) + * [6.7.3 `DR`与`BDR`](#673-dr与bdr) + * [6.7.4 区域](#674-区域) + * [6.8 `BGP`](#68-bgp) + * [6.8.1 简介](#681-简介) + * [6.8.2 基本工作原理](#682-基本工作原理) +* [7 `IP`数据报首部格式](#7-ip数据报首部格式) +* [8 `ICMP`](#8-icmp) + * [8.1 简介](#81-简介) + * [8.2 `ICMP`差错报告报文](#82-icmp差错报告报文) + * [8.3 `ICMP`询问报文](#83-icmp询问报文) + * [8.3.1 回送请求和回答报文](#831-回送请求和回答报文) + * [8.3.2 时间戳请求和回答报文](#832-时间戳请求和回答报文) + * [8.4 `ICMP`应用](#84-icmp应用) + * [8.4.1 `PING`](#841-ping) + * [8.4.2 跟踪路由](#842-跟踪路由) +* [9 `VPN`、`NAT`与`NAPT`](#9-vpnnat与napt) + * [9.1 `VPN`](#91-vpn) + * [9.2 `NAT`](#92-nat) + * [9.3 `NAPT`](#93-napt) + + + +# 1 网络层概述 +网络层的主要任务是实现网络互连,进而实现数据包在各网络之间的传输。 + +网络层主要解决如下问题: + +- 向运输层提供可靠/不可靠的服务 +- 寻址问题 +- 路由选择问题 + +# 2 网络层提供的两种服务 +分别是: + +- 面向连接的虚电路服务 +- 无连接的数据报服务 + +## 2.1 面向连接的虚电路服务 +- 可靠通信由网络保证 +- 必须建立网络层的连接,也就是虚电路 +- 通信双方沿着已经建立的虚电路发送分组 +- 目的主机地址仅在连接阶段使用,之后每个分组只需携带一条虚电路编号 +- 通信结束后需要释放建立的虚电路 + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210518175212292.png) + +## 2.2 无连接的数据报服务 +- 可靠通信应当由用户主机来保证 +- 不需要建立网络层连接 +- 每个分组可以走不同的路径 +- 每个分组的首部必须携带目的主机的完整地址 +- 网络本身不提供端到端的可靠传输服务,这样路由器可以做得比较简单 + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210518175611375.png) + +# 3 `IPv4`地址 +`IPv4`地址就是给因特网上的每一台主机或路由器的每一个接口分配一个在全世界范围内唯一的`32`比特的标识符,发展经过如下阶段: + +- 分类编址 +- 划分子网 +- 无分类编址 + +## 3.1 分类编址的`IPv4` +分为两类: + +- A类:网络号8位,0开头 +- B类:网络号16位,10开头 +- C类:网络号24位,110开头 +- D类:多播地址,1110开头 +- E类:保留 + +只有A、B、C类地址可以分配给网络中的主机或路由器的各个接口,主机号全0的地址是网络地址,不能分配给主机或路由器的各个接口。而主机号全1的表示是广播地址,不能分配给主机或路由器的各个接口。 + +## 3.2 划分子网的`IPv4` +划分子网是为了更好的利用多余的`IP`地址,从主机号借用一部分作为子网号,由此引申出了子网掩码的概念,就是可以表明主机号部分被借用了多少个比特作为子网号,只需要将子网掩码与划分子网的`IPv4`相与,就可以得到网络号: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210518182156164.png) + +各类地址的默认子网掩码: + +- A类:`255.0.0.0` +- B类:`255.255.0.0` +- C类:`255.255.255.0` + +## 3.3 无分类编址的`IPv4` +无分类域间路由选择`CIDR`,消除了A、B、C类地址以及划分子网的概念: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210518183120237.png) + +采用斜线记法,后面加上斜线,斜线后面写上网络前缀所占的比特数量。 + + +# 4 `IP`数据报的发送和转发过程 +包含以下两个部分: + +- 主机发送`IP`数据报 +- 路由器转发`IP`数据报 + +## 4.1 间接交付和直接交付 +直接交付就是发送数据报给与自己同一个网络下的主机,而间接交付就是发送数据报给与自己不同一个网络下的主机: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210524014447711.png) + +判断是否同一个网络可以通过将`IP`与子网掩码相与判断: + +- 将自己的`IP`地址与自己的子网掩码相与 +- 将对方的`IP`地址与自己的子网掩码相与 + +若相同,就是同一个网络,可以直接交付,若不同就是不同的网络,需要通过路由器间接交付。 + +## 4.2 `IP`数据报发送流程 +比如下图中的A向D发送数据报: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210524014845382.png) + +首先A会将数据报将该数据报传输给默认网关: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210524014952457.png) + +路由器收到后,会首先检查`IP`数据报有没有出错,若出错会直接丢弃并告知源主机,然后根据目的地址在路由表中查找匹配的条目,若找到则转发到路由表中指定的下一跳,若没找到则丢弃数据报并通告源主机。 + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210524015240357.png) + +路由表匹配过程如下: + +- 首先从`IP`数据报得到目的`IP` +- 将目的`IP`与路由表中的记录的子网掩码逐行相与 +- 若与目的网络不相同则跳过 +- 若与目的网络相同,则转发给下一跳 + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210524015452665.png) + +# 5 静态路由配置 +## 5.1 定义 +静态路由配置是指用户或网络管理员使用路由器相关命令给路由器人工配置路由表,这种配置方式简单,开销小,但不能及时适应网络状态的变化,一般只在小规模的网络中采用。另外,会导致如下路由环路错误: + +- 配置错误 +- 聚合了不存在的网络 +- 网络故障 + +## 5.2 配置错误导致的环路问题 +比如R2的路由表中,`192.168.1.0/24`的下一条应该是R1的1接口,也就是`10.0.0.1`,但是如果配置成了R3的0接口,也就是`10.0.1.2`: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210524124607219.png) + +R2在查表的时候,把本来应该转发给R1的数据报转发到了R3,然后R3查表,下一条是R2的1接口,也就是`10.0.1.1`,这样R3就会把数据报转发给R2: + + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210524124729795.png) + +R2收到后,根据路由表会再次转发给R3: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/2021052412475985.png) + +这样环路就出现了。 + +为了防止环路的出现,`IP`数据报中设置有`TTL`生存字段,`IP`数据报进入路由器后,`TTL`字段会减1,若`TTL`的值不为0,会被路由器转发,否则被丢弃。 + +## 5.3 聚合路由产生的环路问题 +如图所示,R2需要发送数据报到`192.168.2.0/24`中: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210524125159762.png) + +由于`192.168.1.0/24`与`192.168.2.0/24`有共同的网络前缀`192.168.0.0/22`,因此直接在R2中配置了一条静态路由`192.168.0.0/22`,下一跳是`10.0.0.1`,这样数据可以正常发送,但是,如果发送到一个不存在的网络,比如`192.168.3.0/24`: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210524125400357.png) + +R2会根据`192.168.0.0/22`的目的网络转发到下一跳`10.0.0.1`,也就是R1的1接口,R1收到后,根据路由表,只有默认路由符合要求,因此把数据报又转发到R2的0接口,R2收到后,又转发到R1的1接口,这样环路就出现了。 + +解决这种环路的方法,可以添加黑洞路由: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210524125542511.png) + +这样,如果R2想再次发送数据报到`192.168.3.0/24`中,先查路由表,发现有两条记录匹配,再根据最长前缀匹配原则,匹配到黑洞路由,效果相当于直接丢弃数据报,这样就不会出现环路了。 + +## 5.4 网络故障导致的环路问题 +假设`192.168.1.0/24`与R1的0接口出现了连接问题: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210524125840225.png) + +这样会导致R1中的路由表会删除关于`192.168.1.0/24`的记录: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210524125858677.png) + +当R2想要发送数据报到`192.168.1.0/24`的时候: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210524130002472.png) + +根据路由表配置就转发到下一跳,也就是R1的1接口,而R1的路由表中并没有关于`192.168.1.0/24`的记录,因此会转发到默认路由的下一跳,也就是R2的0接口,R2收到后再次转发给R1,这样环路就出现了。 + +解决的问题是添加一条对有故障网络的黑洞路由: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210524130147367.png) + +当网络恢复的时候,恢复原来的下一跳直连记录,并且删除黑洞路由。 + +# 6 路由选择协议 +## 6.1 概述 +路由选择协议可以分为两种: + +- 静态路由选择 +- 动态路由选择 + +静态路由选择是人工配置的网络路由、默认路由、特定主机路由、黑洞路由等,这种方式配置简单,开销小,但是不能及时适应网络状态的变化,一般只在小规模网络中采用。 + +而动态路由通过路由选择协议自动获取路由信息,比较复杂,开销比较大,能较好地适应网络状态的变化,适用于大规模网络。 + +## 6.2 因特网路由选择协议特点 +因特网所采用的路由选择协议特点如下: + +- 自适应:动态路由选择能较好地适应网络状态的变化 +- 分布式:路由器之间交换路由信息 +- 分层次:将整个因特网划分成许多较小的自治系统`AS` + +## 6.3 分层次路由选择协议 +![在这里插入图片描述](https://img-blog.csdnimg.cn/2021052413243674.png) + +- 一个自制系统内的路由选择可以简称为域内路由选择,使用内部网关协议(`IGP`)作为路由选择协议 +- 自制系统之间的路由选择可以简称为域间路由选择,使用外部网关协议(`EGP`)作为路由选择协议 + +需要注意的是`IGP`与`EGP`只是一个分类的名称,并不是具体的路由选择协议。 + +## 6.4 常见的路由选择协议 +可以分为两大类: + +- 内部网关协议 +- 外部网关协议 + +### 6.4.1 `IGP` +内部网关协议(新文档中也叫内部路由协议,`IRP`),包括: + +- 路由选择协议`RIP` +- 内部网关路由协议`IGRP` +- 增强型内部网关路由协议`EIGRP` +- 开放式最短路径优先`OSPF` +- 中间系统到中间系统`IS-IS` + +### 6.4.2 `EGP` +外部网关协议(新文档中也叫外部路由协议,`ERP`),最常见的只有边界网关协议`BGP`。 + +## 6.5 路由器基本结构 +路由器是一种具有多个输入和输出端口的专用计算机,结构如图所示: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210524140021275.png) + +任务是转发分组,整个结构可以分为路由选择部分和分组转发部分。 + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210524140133231.png) + +路由选择部分的核心部件是路由选择处理机,任务是根据路由选择协议周期性和其他路由器进行交互来更新路由表。 + +分组部分由三部分组成: + +- 交换部分 +- 一组输入端口 +- 一组输出端口 + +当信号从某个端口进入路由器,物理层将信号转化为比特流,数据链路层从比特流中识别出帧,去掉帧头帧尾交由网络层处理,网络层会判断是普通的待转发的分组还是交换路由信息的路由报文: + +- 如果是待转发的分组,直接查转发表进行转发,如果找不到,会丢弃分组,否则转发分组,在输出端口中的网络层,会更新数据分组首部中某些字段的值,比如`TTL`减1,然后送交数据链路层封装,送到物理层后变换成电信号发送 +- 如果是路由选择报文,会送交到路由选择处理机处理,会根据路由报文的内容更新自己的路由表 + +关于路由表和转发表,区别如下: + +- 路由表一般仅包含从目的网络到下一跳的映射,需要对网络拓补变化的计算最优化 +- 转发表是从路由表得出的,转发表的结构应当使查找过程最优化 + +另一方面,路由器的端口一般都同时具有输入和输出的功能,还有输入缓冲区和输出缓冲区。 + +## 6.6 `RIP` +### 6.6.1 简介 +`RIP`路由信息协议,是`IGP`中最先得到广泛应用的协议之一,要求自制系统内的每一个路由器都要维护自己到`AS`内其他每一个网络的距离记录,称为距离向量。 + +`RIP`使用跳数作为度量来衡量到达目的网络的距离,当距离超过16时表示不可达: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210524141641450.png) + +### 6.6.2 好路由 +`RIP`认为的好路由就是距离短的路由,也就是通过路由器数量最少的路由,与带宽无关,比如: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210524141809813.png) + +而如果有多条距离相等的路由,可以进行等价负载均衡。 + +### 6.6.3 基本工作原理 +- 刚开始工作时,路由器只知道自己到直连网络的距离为1 +- 第二步是每个路由器仅和相邻路由器周期性地交换并更新路由信息 +- 若干次交换和更新后,每个路由器都知道到达本`AS`内各网络的最短距离和下一跳地址,称为收敛 + +## 6.7 `OSPF` +### 6.7.1 简介 +`OSPF`,也就是开放最短路径优先,是克服`RIP`的缺点提出的,基于最短路径算法`SPF`,基于链路状态,从算法上保证了不会产生路由环路的问题。 + +`OSPF`也不限制网络规模,更新效率高,收敛速度快。`OSPF`的链路状态是指与哪些路由器相邻,以及相应链路的代价,比如距离、费用等。 + +### 6.7.2 基本工作原理 +- `OSPF`相邻的路由器通过交互问候分组建立和维护邻居关系 +- `OSPF`每个路由器都会产生链路状态通告`LSA`,`LSA`包含直连网络的链路状态信息和邻居路由器的链路状态信息,`LSA`被封装在链路状态更新分组`LSU`中,采用洪泛法发送 +- `OSPF`的每一个路由器都会有一个链路状态数据库`LSDB`,通过洪泛发送的`LSU`分组,各路由器的`LSDB`会最终到达一致 +- 通过`LSDB`可以构建出带权有向图,权就是代价,通过对该图应用迪杰斯特拉最短路径算法,就可以得出以该图为根的最短路径,也就是以自身到其他各个路由器的最短路径 + +### 6.7.3 `DR`与`BDR` +`DR`就是指定路由器,`BDR`就是备用的指定路由器,出现`DR`与`BDR`是为了减少发送分组的数量,使得其他非`DR`/`BDR`路由器只与`DR`/`BDR`进行交互: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210524151312157.png) + +### 6.7.4 区域 +为了使`OSPF`能够用于规模很大的网络,`OSPF`会将一个`AS`再划分为若干个更小的范围,叫做区域: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210524151428601.png) + +主干区域的标识符为0,其他区域不为0,划分区域可以将利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个`AS`。 + +## 6.8 `BGP` +### 6.8.1 简介 +`BGP`就是边界网关协议,由于各个`AS`之间的度量不同,因此没办法选择一条最优的路由,只能力求寻找一条能够到达目的网络且不会兜圈子的路由。 + +### 6.8.2 基本工作原理 +- 配置`BGP`的时候,需要每个`AS`选择一个路由器作为`BGP`发言人 +- 不同`AS`要交换路由信息,需要先建立`TCP`连接,端口号`179`,在此`TCP`连接上交换`BGP`报文以建立`BGP`会话,利用`BGP`会话可以交换路由信息 +- `BGP`发言人交换路由信息后,根据采用的策略从收到的路由信息中找到各`AS`的较好路由,构造出树形结构,不存在回路的自治系统连通图 + + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210524152022865.png) + +# 7 `IP`数据报首部格式 +`IP`数据报首部格式由`20字节`的固定部分和`40字节`的可变部分组成: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210526130824759.png) + +字段解释如下: + +- 版本:`4bit`,表示`IP`协议的版本 +- 首部长度:`4bit`,`IP`数据报首部长度,字段取值以`4字节`为单位,取值`5-15` +- 区分服务:`8bit`,利用该字段的不同数值可以提供不同等级的服务质量,一般情况下不使用 +- 总长度:`16bit`,表示总长度,以字节为单位,表示首部+数据载荷的总长度 +- 标识、标志、片偏移:三者用于分片时使用,因为数据链路层的`MTU`规定了最大数据字节,因此超过该字节大小的数据就需要进行分片。标识相当于单向递增的计数器,标志是3个比特,除最后一个比特保留之外,前两个比特具有表示允许/不允许分片、是否最后一个分片的作用,而片偏移指出分片数据报的数据载荷部分偏移其在原数据报的位置有多少个单位,以8个字节为单位 +- 生存时间:也叫`TTL`,以跳数为单位,路由器转发`IP`数据报的时候,将`IP`数据报首部中的该字段值减去1,若不为0就转发,否则丢弃。该字段可以防止`IP`数据报在网络中永久兜圈 +- 协议:表示数据部分是何种数据协议单元,比如取值为1表示`ICMP`报文 +- 首部检验和:用来检测首部在传输过程中是否出现差错(`IPv6`中路由器不再计算首部校验和) +- 可选字段:长度`1字节-40字节`,用来支持排错、安全测量等措施 +- 填充字段:全0,填充使得成为4字节的整数倍 + +分片示例如下:![在这里插入图片描述](https://img-blog.csdnimg.cn/20210526132420798.png) + +- 标识与原数据报相同 +- `MF`取值为1表示不是最后一个分片,取值为0表示最后一个分片 +- `DF`取值为0表示可以再次被分片 +- 片偏移是数据部分相对于原来数据长度的偏移值,注意以8字节为单位 + + +# 8 `ICMP` +## 8.1 简介 +`ICMP`就是网际控制报文协议(`Internet Control Message Protocol`),主机或路由器使用`ICMP`发送差错报文或询问报文,并封装在`IP`数据报中发送。 + +## 8.2 `ICMP`差错报告报文 +一共有五种类型: + +- 终点不可达:路由器或主机不能交付数据报的时候,就向源点发送终点不可达报文 +- 源点抑制:路由器或主机由于拥塞而丢弃数据报的时候,就向源点发送抑制报文,使源点知道应当把数据报发送速率减慢 +- 时间超过:`TTL`为0后需要向源点发送时间超过报文 +- 参数问题:路由器或主机收到`IP`数据报后,发现首部中的校验和字段出现误码,会丢弃数据报并向源点发送参数 问题报文 +- 改变路由(重定向):路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器 + + +终点不可达图示(R1路由表没有对应的下一跳): + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210526134739890.png) + +源点抑制图示: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210526134820533.png) + +时间超过图示: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210526134843420.png) + +参数问题图示: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/202105261349099.png) + +改变路由图示: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210526134641892.png) + +## 8.3 `ICMP`询问报文 +一共两种: + +- 回送请求和回答报文 +- 时间戳请求和回答报文 + +### 8.3.1 回送请求和回答报文 +由主机或路由器向一个特定的目的主机发出的询问,收到此报文的主机必须给源主机或路由器发送`ICMP`回送回答报文,用来测试目的站是否可达以及了解其有关状态。 + +### 8.3.2 时间戳请求和回答报文 +请求某个主机或路由器回答当前的日期和时间,用来进行时钟同步和测量时间。 + + +## 8.4 `ICMP`应用 +### 8.4.1 `PING` +`PING`全称为`Packet InterNet Groper`,分组网间探测,用来测试主机或路由器的连通性,应用层直接使用网际层的`ICMP`,使用的报文是`ICMP`回送请求和回答报文。 + +### 8.4.2 跟踪路由 +用来测试`IP`数据报从源主机到达目的主机需要经过哪些路由器。在不同平台的实现不一样: + +- `Windows`:命令为`tracert`,应用层直接使用`ICMP`,使用的报文为`ICMP`回送请求和回答报文、差错报告报文 +- `Unix`:命令为`traceroute`,运输层使用`UDP`协议,仅仅使用`ICMP`差错报告报文 + + +# 9 `VPN`、`NAT`与`NAPT` +## 9.1 `VPN` +`VPN`就是虚拟专用网(`Virtual Private Network`),利用公用的因特网作为本机构各专用网之间的通信载体。 + +比如`10.1.0.3`向`10.2.0.3`发送数据报: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210526172233639.png) + +路由器R1处理`10.1.0.3`的数据报的时候,发现需要通过因特网才能到达,此时会将数据报进行加密,变为新的`IP`数据报的数据载荷部分: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210526172413302.png) + +加密后的数据报经过多个路由器转发后到达R2,R2会将其进行解密: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210526172456421.png) + +## 9.2 `NAT` +`NAT`也就是网络地址转换(`Network Address Translation`),就是一种在路由器上将内网地址和公网地址进行转换的过程。如图所示: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210526173029884.png) + +`192.168.0.2`向外网主机`218.75.230.30`发送数据报,经过`NAT`路由器转换后,会将数据报的源`IP`地址临时修改为路由器中的全球`IP`地址中可用的一个,记录在`NAT`转换表中然后再发送出去: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210526173236262.png) + +收到来自目标主机的响应后,路由器会查找`NAT`转换表,将对应的目的地址改为原来的内网地址: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210526173339499.png) + +`NAT`存在的一个问题就是如果一个`NAT`路由器具有`N`个全球`IP`地址,那么至多只能有`N`个内网主机能够同时和因特网上的主机通信。 + +## 9.3 `NAPT` +因为大多数的网络应用都是采用`UDP`/`TCP`传送数据,因此可以利用运输层的端口号和`IP`地址一起进行转换,这样用一个全球`IP`地址就可以使多个拥有本地地址的主机和因特网上的主机进行通信,这种技术叫`NAPT`(`Network Address and Port Translation`,网络地址和端口号转换)。 + + diff --git a/ComputerNetwork/README.md b/ComputerNetwork/README.md index ed75e63..0011e45 100644 --- a/ComputerNetwork/README.md +++ b/ComputerNetwork/README.md @@ -3,3 +3,4 @@ - [第一章:计算机网络概述](https://github.com/2293736867/CSBookNotes/blob/main/ComputerNetwork/Chapter1/README.md) - [第二章:物理层](https://github.com/2293736867/CSBookNotes/blob/main/ComputerNetwork/Chapter2/README.md) - [第三章:数据链路层](https://github.com/2293736867/CSBookNotes/blob/main/ComputerNetwork/Chapter3/README.md) +- [第四章:网络层](https://github.com/2293736867/CSBookNotes/blob/main/ComputerNetwork/Chapter4/README.md) -- GitLab