【计算机网络复习之路】网络层(谢希仁第八版)万字详解 &主打基础

专栏计算机网络复习之路

目录:

一、网络层的几个重要概念

1.1 网络层提供的两种服务

1.2 网络层的两个层面

二、网际协议 IP   

2.1 虚拟互连网络

2.2  IP地址

2.2.1 IP地址及其表示方法

 2.2.2 分类的IP地址

2.2.3 无分类编址CIDR (重点

2.2.4 构造超网和划分子网 (重点

2.2.5  IP地址的特点

 2.3 IP地址与MAC地址

2.4 地址解析协议 ARP (重点

 2.5 IP数据报的格式

 三、IP层转发分组的过程

3.1 基于终点转发

 3.2 最长前缀匹配

3.3 两种特殊的路由

3.4 分组转发算法(总结)

3.5 使用二叉线索查找转发表 ( 略 )

四、网际控制报文协议 ICMP(重点

五、IPv6

六、互联网的路由选择协议

6.1 分层次的路由选择协议

6.2 内部网关协议RIP (重点

6.2.1 距离向量算法

6.2.2 RIP 协议的缺点:坏消息传播得慢

6.3 内部网关协议 OSPF

6.4 外部网关协议 BGP

七、IP多播

八、虚拟专用网 VPN 和网络地址转换 NAT

结束语


网络层(network layer)是OSI模型的第三层。它是OSI参考模型中最复杂的一层,也是通信子网的最高层,它在下两层的基础上向资源子网提供服务。网络层的主要任务是把分组从源端传到目的端,为分组交换网上的不同主机提供通信服务【实现两个不同网络系统之间的数据透明传输】。它通过路由选择算法,为分组通过通信子网选择最适当的路径,以实现网络的互连功能。具体地说,数据链路层的数据在这一层被转换为数据包,然后通过路径选择、分段组合、流量控制拥塞控制等将信息从一台网络设备传送到另一台网络设备。网络层负责在网络中传送的数据单元是分组或包

好了,复习完了上面两章【 第一章概述 | 第二章物理层 | 第三章数据链路层】,我们接着复习网络层。(作者是一名软工学子,学校对计网的讲解也是以【谢希仁第8版】教材为基础,因此我也是基本以教材的讲解顺序进行复习讲解的~) 

 在复习之前,我们先理清楚数据链路层和我们现在要复习的网络层之间的联系。有助于我们在上一章的基础上,更好的理解网络层。

网络层是OSI参考模型中的第三层,介于传输层数据链路层之间,它在链路数据层提供的两个相邻端点之间数据帧的传送功能上,进一步管理网络中的数据通信,将数据设法从源端经过若干个中间节点传送到目的端,从而向传输层提供最基本的端到端的数据传送服务。

网络层主要是为传输层提供服务,为了向传输层提供服务,则网络层必须要使用数据链路层提供的服务。而数据链路层的主要作用是负责解决两个直接相邻节点之间的通信,但并不负责解决数据经过通信子网中多个转接节点时的通信问题,因此,为了实现两个端系统之间的数据透明传送,让源端的数据能够以最佳路径透明地通过通信子网中的多个转接节点到达目的端,使得传输层不必关心网络的拓扑构型以及所使用的通信介质和交换技术,网络层需要具备如下功能。后续会详细的逐一介绍它的具体功能~

这里我们再回忆一下上一章数据链路层讲的局域网:

我们知道如果只是同一局域网内的各个计算机之间的通信,单靠物理层和数据链路层就可以建立起主机间通信链路完成用户间的数据通信(这里强调的是信息交付到主机的应用进程前的通信过程,别以为只需要这两层就完了,它上面的三层只是在这里不明显强调而已),但要扩大应用范围,连接不同的局域子网,就需要借助网络层处理各个网络子网的协议这里值得一提的是:如果一个网络中的用户不能识别其他网络的通信协议和地址规范,那么这两个网络之间就不能进行数据通信从而进行计算机的网络互连不同网络之间进行访问不能通过属于数据链路层地址的 MAC 地址来进行寻址,这需要通过网络层对应的网络地址来进行访问

此图(找的好辛苦)也可帮助大家理解链路层和网络层的区别~


这里要注意区分【相邻节点间】和【端点间】的区别。

这里的节点:可以是运行在数据链路层协议的任何设备,包括主机、路由器、交换机、集线器等

这里的端点:不能和后面要介绍的运输层的“ 端到端的可靠通信 ”中端点含义混为一谈,这里的端点强调的是主机,运输层的端点强调的是应用进程,因为严格来讲,IP协议虽然能把分组送到目的主机,但是这个分组还停留在主机的网络层而没有交付到主机中的应用进程,后序请期待运输层更新~。


之前在第一章概述部分就谈到了节点哦:(这里截一张其中的图) 

最后更值得一提的是:网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。因此,网络层不提供服务质量的承诺,不保证分组交付的时限,所转送的分组可能出错、丢失、重复和失序。进程之间通信的可靠性由运输层负责。

一、网络层的几个重要概念

1.1 网络层提供的两种服务

在计算机网络领域,网络层应该向运输层提供怎样的服务(“面向连接”还是“无连接”)曾引起长期的争论。

而争论焦点的实质就是:在计算机通信中,可靠交付应当由谁来负责?是网络还是端系统

(1)虚电路服务

一种观点认为应当让网络负责可靠交付。当两台计算机通信时,应当先建立一条虚电路,以预留一定的网络资源;然后再使用可靠传输的网络协议,就能实现可靠交付。

虚电路只是一条 逻辑上 的连接,分组都沿着这条逻辑连接按照 存储转发 方式传送,而并不是真正建立了一条物理连接。

虚电路服务与下面要介绍的另一种观点——数据报服务 ,是相补的,对二者的选择取决于应用背景。但是目前现代网络层协议已主要使用后者了~

(2)数据报服务

另一种观点认为,网络层应尽量简单,向上只提供简单灵活的、无连接的、尽最大努力交付数据报服务 

网络在发送分组时不需要先建立连接。每一个分组(即 IP 数据报)独立发送,与其前后的分组无关(不进行编号)。
网络层不提供服务质量的 承诺 传送的分组可能出错、丢失、重复和失序(不按序到达终点),当然也不保证 分组 交付 的时限。

当然这种方式肯定有它的好处:

① 网络中的路由器可以做得比较简单,而且价格低廉。

② 如果主机(即端系统)中的进程之间需要可靠通信,那么就由主机中的运输层负责(包括差错处理、流量控制等)。

③ 网络的造价大大降低,运行方式十分灵活,能够适应多种应用。

④ 促进了互联网的发展。

 两者对比:

1.2 网络层的两个层面

路由表用来决策最佳路由 ; 转发表用来转发分组

前瞻:不同网络中的两个主机之间的通信,要经过若干个路由器转发分组来完成。路由器查找转发表,将分组指明的接口转发到下一个路由器。

转发表是从路由表得出的,而路由表又是由互联网中许多的路由器通过不断交换路由信息产生的。在路由器之间传送的信息有以下 2 大类:

(1)转发源主机和目的主机之间所传送的数据   (2)路由信息(为数据传送服务

二者的具体介绍:见 p117


可以把网络层抽象地划分为数据层面控制层面

数据层面 控制层面

● 路由器根据本路由器生成的转发表,把收到的分组从查找到的对应接口转发出去。

● 每个路由器独立工作。

● 采用硬件进行转发,速度快。

●  根据路由选择协议所用的路由算法 计算路由,  创建出本路由器的 路由表。
●   许多路由器 协同 动作。
●   采用 软件 计算,速度慢。

 图解上述两个层面:

这里我再插一脚:

路由器的路由选择和分组转发分别处于上述控制层面和数据层面之中(实际上这两种的实现都是在路由器内部完成)。

这里用 ” 控制层面和数据层面 “ 这种概念进行划分,是因为最近网络界提出的:软件定义网络SDN

上面这两张图区别在于前者每个路由器既有转发表又有路由选择软件【图中可以看出】,后者所有路由器都变得更加简单了(它的路由选择软件不存在),因此路由器之间不在交换路由信息(路由表由远程控制器生成)。当然这种集中控制的网络好处有些,但传统的前者分散控制的网络也有它所不及的优点,因此相铺相成吧。

下面对应网络层的复习,还是以传统互联网机制复习吧(但这里提出的后者新型的机制也是让你多见识一下【考试肯定不考】)。陆续我们的复习将会涉及数据层面的协议 IP ,和控制层面的各种路由选择协议。(都是重中之重【超大声~】)。

二、网际协议 IP   

网际协议 IP (Internet Protocol) TCP/IP 体系结构中两个最主要的协议之一。与 IP 协议配套使用的还有三个协议:

(1) 地址解析协议 ARP (Address Resolution Protocol)
(2) 网际控制报文协议 ICMP (Internet Control Message Protocol)
(3) 网际组管理协议 IGMP (Internet Group Management Protocol)

这里对于ICMP 、 IGMP  和 ARP 介绍 及 于 IP协议的联系后文会陆续介绍~(这里前两个协议画在上面,ARP画在下面都是有它们的理由……) 

2.1 虚拟互连网络

将网络互相连接起来需要使用一些中间设备:

(1) 在物理层使用 转发器 (repeater) 集线器 (hub)
(2) 在数据链路层使用 网桥 (bridge) 交换机 (switch)
(3) 在网络层使用 路由器 (router)
(4) 在网络层以上使用 网关 (gateway)

我们知道:中间设备是物理层或数据链路层设备时,一般并不称之为网络互连,因为这仅仅是把一个网络扩大了,在网络层看来仍然是一个网络。  而网络互连是指用路由器将不同的网络连接起来。

当参加互连的计算机网络都使用相同的网际协议 IP ,可以把互连以后的计算机网络看成一虚拟互连网络——各种物理网络的差异性被屏蔽,在网络层上看起来好像是一个统的网络。

而这种使用 IP 协议的虚拟互连网络又称为虚拟 IP 网。现在的互联网(Internet)就是这种虚拟 IP 网(上层使用TCP协议)。

2.2  IP地址

在TCP/IP体系中,IP地址是一个基本概念。一个连接在互联网上的设备,如果没有IP地址,就无法和网上的其他设备进行通信。因此这就是重点!!

2.2.1 IP地址及其表示方法

整个互联网是一个单一的、抽象的网络IP 地址就是给每个连接在互联网上的主机(或路由器)的每一个接口分配的一个在全世界范围内唯一 32 位的标识符。IP 地址由互联网名字数字分配机构 ICANN (Internet Corporation for Assigned Names and Numbers) 进行分配。

 为了便于人的书写和记忆,我们常采用点分十进制记法表示:


IP 地址采用两级结构,由两个字段组成第一个字段是网络它标志主机(或路由器)所连接到的网络第二个字段是主机,它标志该主机(或路由器)。

IP 地址可记为:

符号“::=”表示“定义为”。从 IP 地址的结构可以看出,IP 地址指明了连接到某个网络上的一台主机(或路由器)。

IP 地址规定:n 位是主机所连接的网络号,后 (32 - n) 位是主机号。

 但是当计算机或路由器获得一个 IP 地址时,怎样知道它的网络号的数 n 是多少?

2.2.2 分类的IP地址

 在互联网发展早期采用的是分类 IP 地址:

 ⚠️⚠️⚠️:(一些特殊的不指派的IP地址)

(1)网络号 0 127(01111111) 是保留地址,不进行指派。全0 表示“本网络”,127 保留作为本地环回测试地址

(2)0 和全 1 主机号一般不指派。主机号为全 0 IP 地址表示该网络的地址;主机号为全 1 IP 地址表示该网络上的所有主机,是该网络的广播地址,用于给同一个链路中相互连接的所有主机发送数据包(此时目的地址当然就被设为了广播地址)

(3) 0.0.0.0 标识本机上的所有网卡。用与TCP服务端程序的绑定地址,相当于监听本机的所有网卡。

因此根据上面的信息也就不难理解下面这个表格了:

当然分类的 IP 地址不够灵活,会造成 IP 地址资源的浪费,于是新的无分类编址方法取代了分类的 IP 地址。

2.2.3 无分类编址CIDR (重点

无分类编址的全名是无分类域间路由选择 CIDR,它把 IP 地址划分为前后两个部分,前面部分是“网络前缀(network-prefix),用来指明网络;后面部分是主机号,用来指明主机。

在使用 CIDR 编址时,IP 地址的定义及示意图如下:

CIDR 编址,网络前缀的位数 n 不固定,可以在 0 ~ 32 之间任意选取。

CIDR 使用“斜线记法(slash notation),或称为 CIDR 记法,即在 IP 地址后面加上一个斜线“/”,斜线后面写上网络前缀所占的位数。例如:128.14.35.7/20,前 20 位是网络前缀(相当于原来的网络号),剩下 12 位是主机号。 

CIDR 网络前缀都相同的连续的 IP 地址组成一个“CIDR 地址块”(即后文的构造超网)。一个 CIDR 地址块包含的 IP 地址数目,取决于网络前缀的位数

举个栗子:

假设 128.14.35.7/20 是某 CIDR 地址块中的一个地址。则此地址块的起始地址(即最小地址)是128.14.32.0,最大地址是 128.14.47.255,此地址块可记为 128.14.32.0/20,即用地址块中的最小地址网络前缀的位数指明一个地址块。

128.14.32.0/20 表示的地址块共有 2^{12} 个地址,但主机号全 0 和全 1 地址不指派。

上述中:128.14.35.7 IP 地址,但未指明网络前缀长度,因此不知道其网络地址128.14.35.7/20 IP 地址,同时指明了网络前缀为 20 ,由此可算出网络地址128.14.32.0 /20 是包含多个 IP 地址的地址块网络地址,同时也是这个地址块中主机号为全 0 IP 地址

在不需要指明网络地址,或仅仅指出地址块的大小时,可将地址块简称为“/n 地址块”。

斜线记法可以让我们很方便知道网络前缀的数值,但计算机不理解啊,因此计算机采用地址掩码来算IP地址对应的网络地址:

● 计算机使用 32 位的地址掩码(address mask)以便从 IP 地址迅速算出网络地址。地址掩码又称为子网掩码

● 地址掩码由一连串 1 和一连串 0 组成,而 1 的个数就是网络前缀的长度。CIDR 记法中斜线后面的数字就是地址掩码中 1 的个数。   

● 对于 /20 地址块,它的地址掩码是 20 个连续的 1 12 个连续的 0。这个掩码用点分十进制表示就是 255.255.240.0。

把二进制的 IP 地址和地址掩码进行按位 AND 运算,即可得出网络地址:

就是只有双方都是1才为1,否则都为0。

栗子:

2.2.4 构造超网和划分子网 (重点

在路由器的转发表中,如果几个连续的、小的 CIDR 地址块具有相同的下一跳路由器,则可以把这几个小的地址块合并成一个大的地址块,并用一个转发表项代替原来的多个转发表项。

这种方法称为路由聚合(也称为构造超网),可以大大压缩转发表所占的空间,减少查找转发表所需的时间。

构造超网也要满足一下条件才行哦:

构造超网就是把某几个CIDR地址块合并起来,用一个更大的CIDR地址块来表示。这几个地址块可能大小不一,但只要满足以下条件就能合并:

1)  这几个地址块中的IP地址在地址空间中必须连续;

2)这几个地址块中的IP地址的总个数一定是2的n次方;

3)这几个地址块中最小的IP地址和最大的IP地址一定要位于要构成的超网的内部边界。
这样就可以用这些地址块都具有的相同的部分来作为网络前缀,其余的部分作为主机号,这个构造出来的超网就包括了主机号从全0到全1的IP地址

划分子网是构造超网的逆运算。因此这里我就只需要着重讲解子网的划分就行了(构造超网就是顺其自然的事了)。

子网划分是通过借用IP地址的若干位主机位来充当子网地址,从而将原网络划分为若干子网而实现的。

划分子网时,随着子网地址借用主机位数的增多,子网的数目随之增加,而每个子网中的可用主机数逐渐减少。以C类网络为例,原有8位主机位,2的8次方即256个主机地址,默认子网掩码255.255.255.0。借用1位主机位,产生2个子网,每个子网有126个主机地址;借用2位主机位,产生4个子网,每个子网有62个主机地址……每个子网中,第一个IP地址(即主机部分全部为0的IP)和最后一个IP(即主机部分全部为1的IP)不能分配给主机使用,所以每个子网的可用IP地址数为总IP地址数量减2;根据子网ID借用的主机位数,我们可以计算出划分的子网数、掩码、每个子网主机数。

至于划分子网为什么要向主机号字段借位,这里再给大家举一个栗子:

假设CIDR地址块为211.82.244.0/24,我现在要划分为两个等长的子网,那么第一个子网的ip地址范围就是211.82.244.00000000~211.82.244.01111111,第二个子网的ip地址范围就是211.82.244.10000000~211.82.244.11111111。而第一个子网我们观察可以发现,其ip地址的前25位相同,所以可以写成211.82.244.00000000/25的形式,也就是211.82.244.0/25,第二个子网我们经过观察也能发现,其ip地址的前25位也相同,所以可以写成211.82.244.10000000/25的形式,也就是211.82.244.128/25。这就是划分子网为何要向主机号字段借位的原因。(上面用红色标出的就是划分子网时借位的子网号:IP地址 = 网络号 + 子网号 + 主机号
划分两个等长子网,需要向主机号字段借1位(分别可设为0 和 1),划分4个等长子网,就需要向主机号字段借2位(分别可设为:00 , 01 , 10 ,11),依次类推。
其实划分子网最复杂的地方是不等长划分,不过我们可以用等长划分来实现,比如:把一个网络划分为1/2 、 1/4 、 1/8 、 1/8 的4个不等长子网(这里假设该超网的主机号数:256),可以先划分为两个等长子网(子网号分别为0和1) ,把其中的一个分给第一个网络,剩下的1/2再进行等长划分(比如把子网号1再分成:子网号10 和 子网号 11,即再借一位),把其中的一个分给第二个网络,再将剩下的1/4平分给网络三和网络四(比如把子网号11再分成:子网号110 和 子网号 111,即再借一位 )。

综合上述,这里看一道书上的例题和一道理清子网划分的例题和一道经典的考试例题:

假定某ISP已拥有地址块206.0.64.0/18(相当于64个C类网络),现在某大学需要800个IP地址。则该ISP 可将这块超网进行子网划分,即可以划分出1/16,即给该大学分配一个地址块:206 . 68 . 0 / 22(即向主机号借4位),然后接下来,就只需要再根据该大学分配到的地址块再进一步子网划分给各个系。

 注意:表中的星号 * 是一种常用的简写方式,表示星号后面的二进制主机号都省略了。

从上表可知要将该大学分配到的地址块按地址数的需要分配给这四个系的话。就需要把划分子网为:1/2 + 1/4 + 1/8 + 1/8 。要划到1/8,说明就要借3位主机号,然后按照上面我讲的方法逐一划分就欧克了。

理清子网划分例题:

 答案:

这里有些同学可能就有疑惑了,为什么网络1 需要128个 IP地址呢?

这是因为62台主机需要62个IP地址,路由器接口也需要一个IP地址,那么网络中至少需要63个可分配的IP地址才行。但是如果网络中只有64个IP地址,去掉主机号全0和全1的,就只有62个可分配的IP地址(而我们需要63个啊),所以网络中至少需要128个IP地址,这样可分配的IP地址数目就是126个。

那为什么不是65个呢,我上文不是说了嘛!!,划分出的子网一定要是2的 n 次幂,所以就是128 勒~

经典例题:(多多益善)

因为最后这三个子网合并成的该超网一定是从主机号全0到全1的,所以观察题目可知,这里就只需要考虑8位的主机位 和 7 位的主机位。

       192.168.9.10000000/26 :子网号为:10
  A 192.168.9.00000000/25  :子网号:0
  B 192.168.9.00000000/26 :子网号:00
  C 192.168.9.11000000/26:子网号:11
  D 192.168.9.11000000/27 :子网号:110

当主机位是8位时,即256个主机数,此时可划分成:0 、10 、11 【即1/2(128) + 1/4(64)+ 1/4(64)】。

所以排除:A 和 C。

当主机位是7位时,即128个主机数,此时可划分成:10 、 110 、 111【即64 + 32 + 32】。

即排除:D。

那为什么B 不行呢?

这很显然啊,要从192.168.9.00000000 ~ 192.168.9.111111111

题目已经给了一个子网:192.168.9.10000000

所以如果加上B这个子网的话:192.168.9.00000000

那么还需要01,11,因此已经四个子网了。所以选择B选项。

终于讲完这个重点内容了,一定要认真体会理解୧꒰•̀ᴗ•́꒱୨

2.2.5  IP地址的特点

IP地址具有以下一些重要的特点:
(1)IP 地址由网络前缀和主机号两部分组成,这种两级结构的好处是:

●  第一, IP 地址管理机构在分配 IP 地址 时可以只 分配 网络前缀, 而剩下的主机号则由得到该 网络前缀的 单位自行分配。这样就方便了 IP 地址的管理。
●  第二, 路由器可以根据 目的 主机的网络前缀来 转发分组(而不 考虑主机 号),这样就可以 使转发表 中的项目数大幅度减少,从而 减少转发表 所占的存储空间,缩短查找转发表的时间。

(2)IP 地址标识一主机(或路由器)和一条链路的接口

●  当一台 主机 同时连接到两个网络上时,该主机就必须同时具有两个相应的 IP 地址,且其网络前缀必须是不同的。 这种主机称为多归属主机 ( multihomed host)
●  由于一台 路由器 至少应当连接到两个网络(这样它才能将 IP 数据报从一个网络转发到另一个网络), 因此一个路由器至少应当有两个不同网络前缀的 IP 地址。

(3)一个网络(或子网)是指具有相同网络前缀的主机的集合,因此用转发器或交换机连接起来的若干个局域网仍为一个网络,因为这些局域网都具有同样的网络前缀。具有不同网络前缀的局域网必须使用路由器进行互连。

(4)所有分配到网络前缀的网络,不管是范围很小的局域网,还是可能覆盖很大地理范围的广域网,都是平等的。

这里给一张图,认真体会:


 2.3 IP地址与MAC地址

在学习局域网时,我们知道由于MAC地址已固化在网卡上的ROM中,因此常常称MAC地址为硬件地址或物理地址。而IP地址是一种逻辑地址(因为IP地址是用软件实现的)。IP地址和MAC地址  

IP 地址和 MAC 地址之间没有简单的应关系,所以必须使用 ARP 协议进行地址转换。(后文会着重讲解) ,但我们能清楚的看到MAC地址和IP地址的所处位置,和它们转换后数据部分对应的位置。

IP数据报的转发过程:

主机H1先要查找自己的转发表(实际就是查找ARP高速缓存的映射表),看目的主机是否就在本网络上。如是,则直接交付,任务完成;如不是,则必须把 IP 数据报发送给某个路由器。  

 

2.4 地址解析协议 ARP (重点

(1)每一台主机都设有一个 ARP 高速缓存 (ARP cache) ,里面有 本局域网 上的一些主机和路由器的 IP 地址到 MAC 地址的 映射表
当主机 A 欲向 本局域网 上的某台主机 B 发送 IP 数据报时,就先在其 ARP 高速缓存 中查看有无主机 B IP 地址 对应的 MAC 地址 如有,就 可将此 MAC 地址 写入 MAC 帧,然后通过局域网将该 MAC 发送出去。
(2) 若主机 A 查不到主机 B MAC 地址(比如主机 A 此前没有与主机 B 发送过信息或主机 A 刚开机其 ARP 高速缓存为空),主机 A 就自动运行 ARP 协议来找出主机 B MAC 地址, 并将主机 B IP 地址到 MAC 地址的 映射写入 ARP 高速缓存 有了主机 B MAC 地址,主机 A 就可以向主机 B 发送数据帧了。
(3) 考虑到计算机通信的双向交互特性,主机 A 在发送其 ARP 请求分组时,会将自己的 IP 地址到 MAC 地址的映射写入 ARP 请求分组。当主机 B 收到主机 A ARP 请求分组时,就将主机 A 的地址映射写入主机 B 自己的 ARP 高速缓存中。
(4)ARP 已经得到的地址映射保存 在高速缓存 ,这样就可以 直接从高速缓存中找到所需 MAC 地址(如果有的话)而 不必再用广播方式 发送 ARP 请求 分组 ARP 对保 存在高速缓存中的 个地址映射项目 都设置 生存时间 ( 例如, 10 ~ 20 分钟 ) 。凡超过生存时间的项目就从高速缓存中删除掉

ARP请求分组的报格式这里就不做探究了,你只需要理解它的作用和过程即可~ 

 将上述过程用流程图归纳:

 ARP 用来解决同一个局域网上的主机或路由器IP 地址到 MAC 地址的映射问题如果目的主机和源主机不在同一个局域网上(通过比较网络前缀即可知道),那么就无法通过 ARP 进行解析(路由器不转发广播帧),而实际上源主机也不需要知道另一个局域网上的目的主机的 MAC 地址。

但这不慌,当目的主机和源主机不在同一个局域网时,就要通过 ARP 先找到本局域网上的某个路由器的 MAC 地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个节点,依此类推,直至最终交付目的主机。

上述A - B的过程:


从IP地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。只要主机或路由器要和本网络上的另一个已知 IP 地址的主机或路由器进行通信,ARP 协议就会自动地将该 IP 地址解析为数据链路层所需要的 MAC 地址。

 最后再总结一下:使用ARP的四种典型情况

(1) 发送方是主机,要把 IP 数据报发送到同一个网络上的另一台主机。这时主机用 ARP 找到目的主机MAC 地址。

(2) 发送方是主机,要把 IP 数据报发送到另一个网络上的一台主机。这时主机用 ARP 找到本网络上的一个路由器MAC 地址。 

(3)发送方是路由器,要把 IP 数据报转发到同一个网络上的一台主机。这时路由器用 ARP 找到目的主机MAC 地址。

(4)发送方是路由器,要把 IP 数据报转发到非直连网络上的一台主机。这时路由器ARP 找到直连网络上的另一个路由器MAC 地址。


既然在网络层使用IP地址还要用ARP转成MAC地址才能在局域网中通信。那为什么不直接使用MAC地址通信呢?

(1)MAC 地址固化在网络适配器中,随主机的移动而移动,这不利于形成稳定的路由;甚至当移动主机的数量过多、移动过于频繁时,路由根本无法形成。

(2)而 IP 地址一旦分配,其在互联网中的相对位置基本不会改变,互联网中的路由信息可在相当大的范围内和相当长的时间内保持不变。而稳定的路由对于互联网通信是必不可少的。

 2.5 IP数据报的格式

这个就是纯记忆的东西,感觉把各字段的作用都写出来,有点多,就借用了其他博主的,忘了的同学,可以看一下:   IP数据报格式

这里提醒一下注意事项:

(1)注意各字段的单位(例如首部长度是以4字节为单位长度,片偏移以8字节为单位长度……)

(2) 总长度字段是以字节为单位(最大为2的16次 减1),当超过数据链路层的MTU,就要注意分片的计算过程(P137那道例题很值得一看),每一个分片的总长度,是指分片后的首部长度与该分片的数据部分长度之和。,除了最后一个分片(数据部分),其他每个分片的数据部分长度一定是8字节的整倍!。

 三、IP层转发分组的过程

3.1 基于终点转发

分组在互连网上传送和转发是基于分组首部中的目的地址的,就叫基于终点转发。

 这里补充一下:

(1)通常 转发表中的每一项指明到某一个 网络 而不是到某一台主机的 路由。 特定主机路由 默认路由 除外(后文会介绍)。
(2)路由器每收到一个分组, 就根据其首部的 目的地址 查找 转发表,找到匹配的 项目,根据 对应的接口或下一 地址 转发出去(可能是直接交付,也可能是转交给下一个路由器)。
(3)如果是转交给下一个路由器,下一个路由器进行同样的查找、转发操作。
(4) 在将分组转发到下一跳路由器的过程中,会用到 ARP 协议进行 IP 地址到 MAC 地址的转换。

使  

那它怎样判断该目的地址已经转发到目的网络呢?

 过程就如上述顺序!!!

3.2 最长前缀匹配

在使用 CIDR 时,转发表中的每个项目由“网络前缀”和“下一跳”组成。查找转发表时有时可能会得到不止一个匹配结果。应当从所有匹配结果中选择具有最长网络前缀的路由,即最长前缀匹配(longest-prefix matching)。(网络前缀越长,其地址块就越小,因而路由就越具体

不理解,这里我举个例子(其实书上P142那个栗子已经很形象了)

 ​​​

 选择两个匹配的地址中更具体的一个,即选择网络前缀最长的那个路由。

3.3 两种特殊的路由

(1)虽然互联网中几乎所有的分组转发都是基于目的主机所在的网络进行的,但在大多数情况下都允许对特定的目的主机指明一个路由,这种路由叫做特定主机路由

● 假设特定主机的 IP 地址是 a.b.c.d,那么在转发表中对应于特定主机路由的网络前缀就是 a.b.c.d/32

● 特定主机路由一般位于转发表的最前面。

(2)还有一种特殊路由叫默认路由(default route)

● 在实际的转发表中,对应于默认路由的网络前缀是 0.0.0.0/0。网络前缀长度为 0,表明地址掩码是 32 0,而任何目的地址与全 0 的掩码按位 AND 运算的结果都是 0.0.0.0,都能与默认路由匹配。

● 默认路由一般位于转发表的最后一条,只有在转发表中的其他路由都不匹配的时候才会用到默认路由。

● 在网络只有很少的对外连接时使用默认路由非常有用。

3.4 分组转发算法(总结)

(1) 从收到的分组的首部提取目的 IP 地址 D

(2) 从转发表的第一行开始,将目的地址 D 与该行的子网掩码进行按位 AND 运算,看结果与该行的前缀是否匹配。若匹配则查找结束,按照下一跳指出的路由进行处理;若不匹配则继续查找下一行。

(3) 若查找完整个转发表也没有匹配项(比如没有配置默认路由),则丢弃分组并报告转发分组出错。

 注意:转发表并没有给出到某个网络的完整路径,仅仅给出到某个网络应当先到某个路由器(即下一跳路由器)。在到达下一跳路由器后,再继续查找其转发表, 从而知道再下一步应当到哪一个路由器。就这样一步一步地查找下去,直至最后到达目的网络。

3.5 使用二叉线索查找转发表 ( 略 )

需要的朋友可以自行查阅其他博客~

四、网际控制报文协议 ICMP(重点)

主机或路由器使用网际控制报文协议 ICMP (Internet Control Message Protocol) 报告差错和异常情况。(前面IP数据报的首部字段中的 “首部检验和” 只检验数据报的首部,不包括数据部分,因此不能保证传输的ICMP报文不产生差错。这和下文ICMP报文格式中 “ 检验和 ” 使用的方法是一样的,但是它检验的范围包括icmp报头和数据部分 , 不会检验IP报头)

解释ICMP协议的出现:

我们都知道,IP 协议是一个不可靠协议,尽最大努力交付,如果 IP 包在传输过程中出现错误,比如 checksum 对不上,拥塞,超时等等,那么 IP 包是会直接被丢弃的,之后也不会有进一步的努力来修正。但高层能提供质量控制的协议毕竟在少数,所以就需要在下层有协议来辅助 IP 完成必要的网络质量管理。ICMP 协议自然就被提出来了。

ICMP提供一致易懂的出错报告信息。发送的出错报文返回到发送原数据的设备,因为只有发送设备才是出错报文的逻辑接受者。发送设备随后可根据ICMP报文确定发生错误的类型,并确定如何才能更好地重发失败的数据包。但是ICMP唯一的功能是报告问题而不是纠正错误,纠正错误的任务由发送方完成。

在网络中经常会使用到ICMP协议,比如经常使用的用于检查网络通不通的Ping命令(Linux和Windows中均有),这个“Ping”的过程实际上就是ICMP协议工作的过程。还有其他的网络命令如跟踪路由的Tracert命令也是基于ICMP协议的。

不过需要注意的是,ICMP 仅仅只能提供某些特定类型的错误信息汇报,并不能帮助 IP 协议成为可靠的协议。它能做的事还是有限,但用于基本的网络质量管理是足够了。

注意:

(1)ICMP 报文封装在 IP 数据报中,作为 IP 数据报的数据部分。但 ICMP 不是高层协议,而是 IP 层的协议。

(2)ICMP只能搭配IPv4工作,如果是IPv6(下文会介绍),需要使用ICMPv6。

(3)ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告

ICMP报文格式  ——>

解释:ICMP 报文的前 4 个字节是统一的格式,共有三个字段:类型代码检验和。接着的 4 个字节的内容与 ICMP 的类型有关。这 8 个字节构成了 ICMP 报文的首部。最后面是数据字段,其长度取决于 ICMP 的类型。 


ICMP 报文分为两类: ICMP 差错报告 报文和 ICMP 询问 报文。 一类 又细分为不同的类型
  • 一类是 查询类报文 :主要用于信息的查询和采集,比如采集传输路径上的每个路由器都是谁,本次传输的报文是否达到目的地等等 , 例如ping。
  • 另一类是 差错诊断类报文 :主要用于诊断网络故障,比如传输报文被丢弃的原因是什么等等 , 例如tracert。

书上P147上对于这几种类型的介绍都去仔细看一下,另外还有书上也举例了不应发送icmp差错报告报文的几种情况也看看,这里我就不写了QvQ 。算了,还是把后者写出来吧~

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


所有的ICMP差错报告报文的数据部分都具有同样的格式。

把收到的需要进行差错报告的 IP 数据报的首部和数据字段的前 8 个字节(这我也不太清楚作用,好像跟运输层的端口号和运输层报文的发送序号有关……)提取出来,作为 ICMP 报文的数据字段,再加上相应的 ICMP差错报告的前8个字节,就构成了ICMP差错报告报文。
ICMP报文包含在IP数据报中,IP报头在ICMP报文的最前面。一个ICMP报文包括IP报头(至少20字节)、ICMP报头(至少八字节)和ICMP报文(属于ICMP报文的数据部分)。当IP报头中的协议字段值为1时,就说明这是一个ICMP报文。(前面的IP数据报首部格式有介绍)

ICMP的应用举例:

就书上P148那两个重要应用,这里简单介绍一下:

1.测试两台主机之间连通性的ping 命令使用 ICMP 回送请求和应答报文
PING 是应用层直接使用网络层 ICMP 的例子,它没有通过运输层的 TCP UDP在网络可达性测试中使用的分组网间探测命令 ping 能产生 ICMP 回送请求和应答报文。目的主机收到 ICMP 回送请求报文后立刻回送应答报文,若源主机能收到 ICMP 回送应答报文,则说明到达该主机的网络正常。

 2.路由分析诊断程序 tracert 使用了IP 数据报中的 TTL 字段、ICMP 时间超过差错报告报文

( traceroute 是类 Linux 系统自带的工具,Windows 上类似的工具是 tracert,两者有些许不同,tracert 默认使用 ICMP 报文探测,而 traceroute 默认使用 UDP,但是也可以使用 TCP/ICMP 三种报文探测。)
tracert 命令主要用来显示数据包到达目的主机所经过的路径。通过执行一个 tracert 到对方主机的命令,返回数据包到达目的主机所经历的路径详细信息(经过路由器的IP地址),并显示每个路径所消耗的时间(到达每个路由器的往返时间)。

五、IPv6

 为了解决IP地址耗尽的问题,就有了IPv6。

IPv6 对首部的主要更改:

(1)取消了首部长度字段,因为这里是40字节固定的。 (4)把 TTL 字段改称为跳数限制字段
(2)取消了服务类型字段,因为优先级和流标号字段以实现了这个功能了 (5)取消了协议字段,改用下一个首部字段
(3)取消了总长度字段改用有效载荷长度字段 (6)取消了检验和字段
(8)首部长度改为8字节整数倍(IPv4是4字节)。 (7)取消了选项字段,而用扩展首部来实现选项功能

IPv6首部各字段的作用:

为了对比,我把IPv4也给出来: 

(1)版本(version)——4 位,它指明了协议的版本,对 IPv6 字段为 6

(2)通信量类(traffic class)—— 8 位,这是为了区分不同的 IPv6 数据报的类别或优先级。

(3)流标号(flow label)—— 20 位。“流”是互联网络上从特定源点到特定终点的一系列数据报,“流”所经过的路径上的路由器都保证指明的服务质量。所有属于同一个流的数据报都具有同样的流标号。

(4)有效载荷长度(payload length)—— 16 位,它指明 IPv6 数据报除基本首部以外的字节数(所有扩展首部都算有效载荷之内),其最大值是 64 KB(65535字节)

(5)下一个首部(next header)—— 8 位,它相当于 IPv4 的协议字段或可选字段。当 IPv6 数据报没有扩展首部时,其值指明有效载荷应交付的高层协议;若有扩展首部,其值指明后面第一个扩展首部的类型。

(6)跳数限制(hop limit)—— 8 位。源点在每个数据报发出时即设定跳数限制。路由器在转发数据报时先将跳数限制字段中的值减1。当跳数限制字段的值为零时,就要将此数据报丢弃。

(7)源地址—— 128 位,是数据报的发送端的 IP 地址。

(8)目的地址—— 128 位,是数据报的接收端的 IP 地址。


与IPv4不同的是,一IPv6 数据报的目的地址可以是以下三种基本类型地址之一:

单播 (unicast) :传统的点对点通信。
多播 (multicast) :一点对多点的通信。 IPv6 将广播 看作多播的一个特例。(就相当于IPv4的广播 + 组播
任播 ( anycast ) IPv6 增加的一种 类型。任播的终点是一组计算机,但数据报只交付其中的一个,通常是距离最近的一个。

而IPv4是:

单播

单播是指单台设备与单台设备之间的通信,源地址和目的地址都是单一的IPv4地址,单播数据包的通信可以在网络之间转发。在实际的网络通信中,大多数的通信都属于单播。

广播
广播是一台主机向网络中所有主机发送数据包,广播的目的地址不同于单播单一的地址。
广播有两类:定向广播和有限广播
1、定向广播是将数据包发送到向本网络之外的特定网络所有主机,定向广播的目的地址是定向网络的广播地址,如当前网络为192.168.0.0/24,要向192.168.1.0/24的网络发送定向广播,那么定向广播的目的地址是:192.168.1.255。可以配置路由器让其转发定向广播。
2、有限广播是将数据包发送到本地网络的所有主机,有限广播使用的目的地址是:255.255.255.255.路由器不转发此广播。


组播
单播是单台设备与单台设备之间的通信,广播是单台设备向网络中所有主机发送数据,而组播是单台主机向选定的一组主机发送数据。与单播相比,提高了发送数据包的效率,与广播相比,减少了网络流量。与广播不同的是,要实现组播需要在接受组播的客户机上安装相应的客户端程序。

冒号十六进制记法 

显然IPv6 用 IPv4 的点分十进制记法以不太可能了。因此冒号十六进制记法诞生了~

IPv6 中,每个地址占 128 位。IPv6 使用冒号十六进制记法(colon hexadecimal notation):每 16 位二进制值用 4 个十六进制值表示,各组值之间用冒号分隔,并允许把数字前面的 0 省略,例如:     68E6:8C64:FFFF:FFFF:0:1180:960A:FFFF

规定:

(1)在冒号十六进制记法中,一串连续的 0 可以被一对冒号取代,这就是压缩。例如,FF05:0:0:0:0:0:0:B3 可以FF05::B3

(2)为了不引起歧义,在 IPv6 地址中只能使用一次零压缩。

(3)冒号十六进制记法可结合使用点分十进制后缀,这种形式在 IPv4 转向 IPv6 的过渡阶段特别有用。例如:0:0:0:0:0:0:128.10.2.1再使用零压缩即可得出 ::128.10.2.1

(4)在冒号十六进制记法中,CIDR 的斜线表示法仍然可用。例如,60 位的前缀 12AB00000000CD3 可记12AB:0000:0000:CD30:0000:0000:0000:0000/60 12AB::CD30:0:0:0:0/60 12AB:0:0:CD30::/60  。


对于IPV6的常用地址分类(就简单给张图,我们学校不要求掌握,需要去掌握了解的自行查阅其他博客)

地址类型

二进制前缀或地址

CIDR风格的冒号十六进制记法

未指明地址

00…0128),仅此一个

::/128

环回地址

00…1128),仅此一个

::1/128

多播地址

111111118位),功能和 IPv4 多播地址一样

FF00::/8

本地站点单播地址

111111101110位)仅供一个单位内部使用

FEC0::/10

本地链路单播地址

111111101010启用 IPv6 时自动生成

FE80::/10

全球单播地址

除上述外,所有其他的地址(这是使用得最多的一类,其划分方法有三种

IPv4 IPv6 过渡:

IPv4 IPv6 过渡只能采用逐步演进的办法,同时还必须使 IPv6 能够向后兼容。这就要求 IPv6 必须能够接收和转发 IPv4 分组,并且能够为 IPv4 分组选择路由。

IPv4 IPv6 过渡主要有两种方法:双协议栈和隧道技术

六、互联网的路由选择协议

根据路由算法是否具有自适应性,路由选择策略分为两大类:

(1)静态 路由选择策略:用人工配置每一条路由,适用于简单的小网络;
(2)动态 路由选择策略:使用 路由选择协议 生成每一条路由,并可根据网络的通信量或 拓扑 的变化进行动态调整,适用于复杂的大网络

对于静态路由选择 我们可以自己在右图这个软件上模拟实现:(这几个实验的操作后序会上传在资源里,但我想你们老师应该都会讲的吧)

6.1 分层次的路由选择协议

由于互联网的规模非常大,如果让所有的路由器知道所有的网络应怎样到达,则路由表将会非常大,处理起来花费的时间也会很多,所以互联网采用分层次的路由选择协议:

(1) 把整个互联网划分为许多较小的 自治系统 AS 。例如,一个 ISP 就是一个自治系统;
(2) 在一个自治系统内部使用 内部网关协议 ,如 RIP OSPF等
(3) 在不同自治系统之间使用 外部网关协议 ,如 BGP-4

自治系统(AS)在单一技术管理下的许多网络、IP地址以及路由器,这些路由器使用种自治系统内部的路由选择协议和共同的度量。每一个 AS 对其他 AS 表现出的是一个单一的、一致路由选择策略。 

6.2 内部网关协议RIP (重点

RIPRouting Information Protocol)是一种分布式的基于距离向量的路由选择协议。

RIP 协议要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录,这组距离就叫做“距离向量”。

“距离”的定义:

(1) 路由器 直连网络 的距离定义 1 每经过一个路由器,距离就加 1。
(2) RIP 允许的距离的最大值为 15 ,“距离”等于 16 表示不可达 因此 RIP 只适用于小的自治系统。
(3) RIP 认为,好的路由就是它通过的路由器的数目少,即“距离短”。

RIP 路由表中最主要的信息就是某个网络距离以及应经过的下一跳地址

RIP协议的特点:

(1)每个路由器仅和相邻路由器交换信息。

(2)路由器交换的信息是当前本路由器所知道的全部信息,即自己的路由表:我到本自治系统中所有网络的(最短距离,以及到每个网络应经过的下一跳路由器。

(3)路由器按固定的时间间隔交换路由信息,然后根据收到的路由信息更新路由表。

RIP路由表的建立:

路由器在刚刚开始工作时,其路由表是空的。

(1)然后路由器就得出到几个直连网络的距离(即 1)。

(2)之后,每一个路由器和相邻路由器交换路由信息,并使用距离向量算法更新自己的路由表。更新的原则是找出到每个目的网络的最短距离

(3)经过若干次更新后最终所有路由器都会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器。

6.2.1 距离向量算法

对每一个相邻路由器发送过来RIP 报文(里面包含路由信息),进行以下操作: 

(1) 对地址X 相邻路由器发来RIP 报文,先修改此报文中的路由信息:把“下一跳”字段中的地址都改为 X,并把所有的“距离”字段的值1。修改后,每一条路由可表示为:到目的网络 N,距离是 d,下一跳路由器是 X

(2) 修改后的路由,与路由表中原来的路由进行对比:

 若原来的路由表中没有目的网络 N,则该路由添加到路由表中;

   否则(即在路由表中有目的网络 N),就再查看下一跳路由器地址,

 若下一跳路由器地址 X,则用修改后的路由更新路由表中的路由;

   否则(即这个路由是:到目的网络 N,但下一跳路由器不是 X),

 若修改后的路由中距离 d 小于路由表中的距离,则进行更新

    否则什么也不做

(3) 若 3 分钟还没有收到相邻路由器RIP 报文,则把此相邻路由器记为不可达的路由器,即把距离置为 16距离为 16 表示不可达)。


上述文字描述部分看懂了嘛? 没看懂的话,这里举个栗子,结合栗子来理解:

 步骤如 a ~ d : (1)先都将下一跳改为R4 ,然后举例都加1  (2)修改后的路由,与路由表中原来的路由进行对比:发现原来路由表的目的网络没有Net1,所有就直接添加上 ; 然后对比下一项,发现目的网络都是Net2 , 并且下一跳路由器都是R4 ,所有就用修改后的路由更新路由表中的路由;对比最后一项,发现虽然目的网络都是Net3,但是它们的下一跳路由器不同,因此就对比距离单位看哪个距离最短,发现修改后的路由表距离最短(为2),所有就更新成它。


最后对于RIP协议的报文格式(不需要掌握),想了想还是给大家看一下,可以加深对RIP报文的理解。

我们应知道RIP是基于UDP协议的, 而后文的要介绍的OSPF是基于IP,BGP是基于TCP的。它们共同用于发现和维护前往目的地的最短路。从上面我所阐述的,我们可以理解RIP 、OSPF 、BGP分别属于应用层协议 、网络层协议、应用层协议(都是废话,哈哈~)。

我们可以看出这和上面详细介绍的ICMP报文基本格式是相识的。需要详细了解各字段含义的请参考 其他博客 ~

6.2.2 RIP 协议的缺点:坏消息传播得慢

为了,证明这个坏消息,请看下述的栗子:

接着就一直更新下去~ 

 ​​​

RIP协议优缺点总结:

(1)RIP 协议最大的优点就是实现简单,开销较小。

(2)RIP 限制了网络的规模,它能使用的最大距离为 1516 表示不可达)。

(3)路由器之间交换的路由信息是路由器中的完整路由表,因而随着网络规模的扩大,开销也就增加。  

(4)坏消息传播得慢,使更新过程的时间过长。

 最后有条件的可以自己做个实验:实验4-7:配置 RIP 动态路由。

6.3 内部网关协议 OSPF

 开放最短路径优先 OSPFOpen Shortest Path First)是为了克服 RIP 缺点而开发出来的。

●  “开放”表明 OSPF 是一个公开发表的协议。
●  “最短路径优先”是因为使用了 Dijkstra 提出的 最短路径优先 SPF 算法。
OSPF最主要的特征就是使用 分布式 的链路状态协议,不是像RIP那样的距离向量协议

OSPF协议的特点:
(1)用泛法向本自治系统中所有的路由器发送信息。

(2)发送的信息是与本路由器相邻的所有路由器的链路状态,而这只是路由器所知道的部分信息

●  链路状态 指明本 路由器都和哪些路由器相邻,以及该链路的度量 (metric)。
●  链路状态的“度量”可以是距离、带宽、时延或费用等

(3)当链路状态发生变化或每隔一段时间,路由器才用洪泛法向所有路由器发送链路状态信息。

 洪泛法工作图解:

路由器R使用可靠的洪泛法(收到更新分组后要发送确认)发出链路状态更新分组给其相邻的三个路由器,这三个路由器再将收到的分组再进行转发(上游路由器除外)……

知识补充:

(1)所有的路由器都维持一链路状态数据库 (link-state database),这个数据库实际上就是全网的拓扑结构图。这个拓扑结构图在全网范围内是一致的,每个路由器都知道整个网络的拓扑结构。

(2)每个路由器根据链路状态数据库中的数据,使用 SPF 算法构造出自己的路由表。 

(3)上面所介绍的使用RIP协议的每个路由器虽然知道所有网络的距离以及吓一跳路由器,但却不知道全网的的拓扑结构(只有到了下一跳路由器,才能知道下一跳应该怎么走~)

  (4)  RIP 适用于小型互联网, OSPF 适用于大型互联网。

为了能把OSPF用于规模更大的网络,OSPF 把自治系统再划分为不同的区域(area)

书上P165对于它的介绍简单了解下就行了,反正我们学校不要求掌握,hh~ 

6.4 外部网关协议 BGP

由于不同的自治系统使用不同的内部路由选择协议并使用不同的度量,所以必须在不同的自治系统之间使用另外的路由选择协议。目前使用最多的是边界网关协议 BGP 其最新版本是 BGP-4(常简写为 BGP)。

注意:BGP 只能是力求寻找一条能够到达目的网络且比较好的路由,而并非要寻找一条最佳路由。

 我们学校介绍的极为简略,可能不会怎么考察,如果需要深入了解的,看这篇博客吧:

BGP协议总结(比较详细,好理解)_Looo~ye的博客-CSDN博客

还有书上P175对于路由器构成的介绍,都去看一下,对你有好处,我就不写了~


七、IP多播

 这里看两种情况的对比,就能清楚IP多播的好处了:

 当采用多播后:

当需要信息的主机数增大,效果更明显 。

需要我们记的知识点:

(1)IP 多播所传送的分组需要使用IP 地址,也就是 D IP 地址(224.0.0.0 —— 239.255.255.255)。

(2)多播地址只能用于目的地址,而不能用于源地址。 

(3)IP 播可以分为两种,一种是只在本局域网上进行硬件多播,另一种则是在互联网的范围进行多播。在互联网上进行多播的最后阶段,还是要把多播数据报在局域网上用硬件多播交付多播组的所有成员。

(4)多播数据报的协议字段为2,表明使用网际组管理协议IGMP。

当然还有很多知识没说明的,比如IGMP协议 和 多播路由选择协议 的介绍。由于我们学校对于非这方面专业的学生要求挺低的,所有就不讲了,需要去进一步了解的,可以自己去看书上P181那几页,或者搜博客看,相信看完一定对你有很大收获的。

八、虚拟专用网 VPN 和网络地址转换 NAT

 考虑到 IP 地址的紧缺,以及某些主机只需要和本机构内部的其他主机进行通信,互联网管理机构将一部分 IP 地址作为专用地址private address)供机构内部自行分配使用。

专用地址只能用于一个机构的内部通信,不能用于和互联网上的主机通信(互联网中的所有路由器对目的地址是专用地址的数据报一律不进行转发)。不同的机构在内部可使用相同的专用地址

与专用地址相对的是全球地址,这是互联网主机通信所必须具有的、全球唯一的 IP 地址,必须向互联网的管理机构申请才可以使用。

互联网管理机构划分的三个 IPv4 专用地址块如下:
10.0.0.0/8 ,即从 10.0.0.0 10.255.255.255
172.16.0.0/12 ,即从 172.16.0.0 172.31.255.255
192.168.0.0/16,即从 192.168.0.0 192.168.255.255

虚拟专用网 VPN

采用专用 IP 地址的互连网络称为专用网

如果一个机构有很多部门且分布在世界各地,就可以利用公用的互联网作为此机构各专用网之间的通信载体,形成一个更大的专用网,这样的专用网称为虚拟专用网 VPN (Virtual Private Network)。虚拟专用网用于一个机构内部的主机通信,而不是用于和机构外的主机通信。

这时候,你可能就有疑问了,既然要借用公用的IP地址传输,那怎么实现呢?难道不会泄密嘛? 

部门A和部门B要借助两个路由器R1和R2(它们的一个接口地址必须是合法的全球IP地址,在专有网内部网络的接口地址则是专有网的本地地址) 。假设部门A的x要和部门B的y通信 , X 先把数据报发给R1,此时R1发现数据的源地址是10.1.01,目的地址是10.2.0.3,必须要通过公有的互联网才能到达,它就先把整个内部数据报进行加密,这样就保证了安全,然后重新加上数据报的首部(就是在原来数据报的首部前在加一个新首部),其源地址是路由器R1的全球IP地址125.1.2.3,目的地址是194.4.5.6。路由器R2收到该数据报后,将其数据部分取出进行解密,恢复出原来的内部数据报(目的地址是10.2.0.3),然后交付给主机Y。

远程接入 VPN

有的公司可能没有分布在不同场所的部门,但却有很多流动员工在外地工作他们需要经常访问公司内网的服务器,远程接入 VPN 可满足这种需求。

在外地工作的员工通过拨号接入互联网,而员工个人电脑中的 VPN 软件可在员工的个人电脑和公司的主机之间建立 VPN 隧道(当然也是加密的),因而外地员工就可以使用公司内部的网络了

网络地址转换 NAT

专用网内的主机如果想要和互联网上的主机通信,使用得最多的方法是网络地址转换 NAT

这种方法需要在专用网连接到互联网的路由器上安装 NAT 软件。装有 NAT 软件的路由器叫做 NAT 路由器,它至少有一个有效的全球 IP 地址

所有使用专用地址的主机在和外界通信时都要在 NAT 路由器上将其专用地址转换成全球 IP 地址才能和互联网通信。

在看了书上P188的解释说明后,在内部主机与外部主机通信时,在 NAT 路由器上发生了两次地址转换:

离开专用网时:替换源地址, 将专用地址 替换为全球地址。
进入专用网时:替换目的地址,将全球地址替换 为专用地址
NAT 转换 表举例:

NAT 路由器具有 n 个全球 IP 地址时,专用网内最多可以同时有 n 台主机接入到互联网。可以使专用网内较多数量的主机轮流使用 NAT 路由器有限数量的全球 IP 地址

注意:通过 NAT 路由器的通信必须由专用网内的主机发起,因此专用网内部的主机不能直接充当服务器用。

网络地址与端口号转换 NAPT

从上面的介绍,不难看出NAT 并不能节省 IP 地址。为了更加有效地利用 NAT 路由器上的全球 IP 地址,现在常用NAT 转换表把运输层的端口号也利用上。这样,就可以使多个专用网主机,共NAT 路由器上的一个全球 IP 地址,同时和互联网上的不同主机进行通信。

使用端口号的 NAT 叫做网络地址与端口号转换 NAPT (Network Address and Port Translation),而不使用端口号的 NAT 就叫做传统的 NAT (traditional NAT)。

 NAPT 转换表举例:

NAPT 把专用网内不同的源 IP 地址都转换为相同的全球 IP 地址,但将 TCP 源端口号(不管是否不同)转换为不同的新的端口号。

当 NAPT 路由器收到从互联网发来的应答时,就可以从 IP 数据报的数据部分找出运输层端口号,然后根据不同的目的端口号,从 NAPT 转换表中找到正确的目的主机和端口号。

结束语

好了,到目前为止你就复习完了网络层,如果有什么建议,欢迎在评论区下方讨论,后续我还会更新运输层 ~

期待您的点赞、收藏、关注,你的支持是我最大的动力 ₍ᐢ..ᐢ₎ ♡

猜你喜欢

转载自blog.csdn.net/m0_74215326/article/details/130172308
今日推荐