《计算机网络-第7版-谢希仁》学习笔记:网络层
二、网络层
1、网络层提供的两种服务
网络层向传输层提供虚电路服务和数据报服务
虚电路服务:
虚电路表示这只是一条逻辑上的连接,H1发送给H2的所有分组都沿着同一条虚电路传送
数据报服务:
H1发送给H2的分组可能沿着不同路径传送
虚电路与数据报服务比较:
2、网际协议IP
与IP协议配套使用的还有三个协议:地址解析协议ARP、网际控制报文协议ICMP、网际组管理协议IGMP
ARP画在最下面,因为IP经常要使用这个协议。ICMP和IGMP画在这一层的上部,因为它们要使用IP协议
1)、虚拟互联网络
网络互连的设备:
- 物理层中继系统:转发器
- 数据链路层中继系统:网桥或桥接器
- 网络层中继系统:路由器
- 网络层以上的中继系统:网关
2)、IP地址
层次化IP地址将32位的IP地址分为网络号和主机号
- A类、B类和C类地址的网络号字段分别为1个、2个和3个字节长,而在网络号字段的最前面有1-3位的类别位,其数值分别规定为0、10和110
- A类、B类和C类地址的主机号字段分别为3个、2个和1个字节长
- D类地址用于多播
- E类地址保留为以后用
上图中画出了三个局域网(、和)通过三个路由器(、和)互连起来所构成的一个互联网。其中局域网是由两个网段通过网桥B互连的
1)在同一个局域网上的主机或路由器的IP地址中的网络号必须是一样的
2)用网桥互连的网段仍然是一个局域网,只能有一个网络号
3)路由器总是具有两个或两个以上的IP地址。即路由器的每一个接口都有一个不同网络号的IP地址
3)、IP地址与硬件地址
IP地址与MAC地址的区别:
主机H1和主机H2通信过程:
1)在IP层抽象的互联网上只能看到IP数据报。虽然IP数据报要经过路由器R1和R2的两次转发,但在它的首部中的源地址和目的地址始终分为是和
2)虽然在IP数据报首部有源站IP地址,但路由器只根据目的站的IP地址的网络号进行路由选择
3)在局域网的链路层,只能看见MAC帧。IP数据报被封装在MAC帧中,MAC帧在不同网络上传送时,其MAC帧首部中的源地址和目的地址要发生变化
4)MAC地址决定了数据帧下一跳哪个设备接收,而IP地址决定了数据包的起点和重点
4)、地址解析协议ARP
- ARP协议是为了从网络层使用的IP地址,解析出在数据链路层使用的硬件地址
- RARP协议的作用是将局域网中某个主机的物理地址转换为IP地址
每一台主机都设有一个ARP高速缓存,里面有本局域网上的各主机和路由器的IP地址到硬件地址的映射表
当主机A要向本局域网上的某台主机B发送IP数据报时,就先在其ARP高速缓存中查看有无主机B的IP地址。如果有,就在ARP高速缓存中查出其对应的硬件地址,再把这个硬件地址写入MAC帧,然后通过局域网把该MAC帧发往此硬件地址
如果查不到主机B的IP地址,按照如下步骤找出主机B的硬件地址:
1)ARP进程在本局域网上发送一个ARP请求分组,主要内容是:“我的IP地址是209.0.0.5,硬件地址是00-00-C0-15-AD-18。我想知道IP地址为209.0.0.6的硬件地址”
2)在本局域网上的所有主机上运行的ARP进程都收到此ARP请求分组
3)主机B的IP地址与ARP请求分组中要查询的IP地址一致,就收下这个ARP请求分组,并向主机A发送ARP响应分组,同时在这个ARP响应分组中写入自己的硬件地址。由于其他的所有主机的IP地址都与ARP请求分组中要查询的IP地址不一致,因此都不理睬这个ARP请求分组。ARP响应分组的主要内容是:“我的IP地址是209.0.0.6,我的硬件地址是08-00-2B-00-EE-0A”。ARP请求分组是广播发送的,ARP响应分组是普通的单播,即从一个源地址发送到一个目的地址
4)主机A收到主机B的ARP响应分组后,就在其ARP高速缓存中写入主机B的IP地址到硬件地址的映射
5)、IP数据报的格式
一个IP数据报由首部和数据两部分组成
- 首部的前一部分是固定长度,共20字节,是所有IP数据报必须有的
- 在首部的固定部分的后面是一些可选字段,其长度是可变的
首部各字段含义:
1)版本:占4位,说明该IP数据报使用的IP协议的版本,通信双方必须使用同一个IP协议版本
2)首部长度:占4位,可表示的最大十进制数值是15,首部长度字段所表示数的单位是4字节,所以IP数据报首部长度为20-60字节;因为IPv4中首部存在可变部分,所以需要指出首部的长度以划分首部与数据部分,以4字节为单位,不是4的整倍数时要填充至整倍数
3)区分服务:占8位,只在区分服务时才起作用,一般不
4)总长度:占16位,说明该IP数据报的总长度(首部+数据)。IP数据报封装为MAC帧时受限于MAC帧的长度上限,所以IP数据报还存在分片操作,即将IP数据报分为多片,封装进多个MAC帧。因此IP数据报最大长度字节
5)标识:占16位,IP数据报若存在分片,则接收方需要将各分片组合出原IP数据报,相同标识号的IP数据报就说明它们其实是同一个源IP数据报
6)标志:占3位,目前只有前两位有意义,最低位为MF(More Fragment),若MF=1则说明该数据报后面还有分片。中间一位为DF(Don’t Fragment),若DF=1则不能分片,只有DF=0才可以分片
7)片偏移:占13位,用于说明该IP数据报(已分片)在源IP数据报中的相对位置(相对于数据字段的起点),单位是8字节,每个分片一定是8字节的整倍数
一个数据报的总长度为3820字节,其数据部分为3800字节长,需要分片为长度不能超过1400字节。于是分为3个数据报片,其数据部分的长度分别为1400,1400和1000字节
8)生存时间:IP分组在网络中传递时有可能出现兜圈子的情况,所以需要对IP数据报进行一定的限制,生存时间的单位是跳数,最大值为255,每经过一个路由器,路由器便将IP数据报的生存时间-1,当IP数据报中的生存时间为0时,路由器丢弃该分组
9)协议:说明该IP数据报的上层协议类型,如IP对应4,TCP对应6,UDP对应17
10)首部校验和:验证首部是否存在传输错误,只检验首部,不包括数据部分,数据报每经过一个路由器,路由器都要重新计算一下首部校验和
在发送方,先把IP数据报首部划分为许多16位字的序列,并把校验和字段置为零。用反码算术运算把所有16位字相加后,将得到的和的反码写入校验和字段。接收方收到数据报后,将首部的所有16位字再使用反码算术运算相加一次。将得到的和取反码,即得出接收方校验和的计算结果。若首部未发生任何变化,则此结果必为0,于是就保留这个数据报。否则即认为出差错,并将此数据报丢弃
反码算数运算:从低位到高位逐列进行计算。0和0相加是0,0和1相加是1,1和1相加是0,但要产生一个进位1,加到下一列。如果最高位相加后产生进位,则最后得到的结果要加1
1)反码运算时,其符号位与数值一起参加运算
2)反码的符号位相加后,如果有进位出现,则要把它送回到最低位去相加(循环进位)
3)用反码运算,其运算结果亦为反码。在转换为真值时,若符号位为0,数位不变;若符号位为1,应将结果求反才是其真值
这里的反码和有符号反码不一样,这里不分正负数,直接每个为都取反
11.源地址
12)目的地址
13)可变部分:长度为1-40字节,IP地址中的可变部分可用于支持很多操作,但很多情况都用不上,而且会增加路由器处理分组的开销,所以IPv6中的数据报首部做成了固定长度
6)、IP层转发分组的流程
在路由表中,对每一条路由最主要的是以下两个信息:目的网络地址、下一跳地址
1)IP数据报最终一定可以找到目的主机所在目的网络上的路由器(可能要通过多次的间接交付)
2)只有到达最后一个路由器时,才试图向目的主机进行直接交付
分组转发算法如下:
1)从数据报的首部提取目的主机的IP地址D,得出目的网络地址N
2)若N就是与此路由器直接相连的某个网络地址,则进行直接交付,不需要再经过其他的路由器,直接把数据报交付目的主机(这里包括把目的主机地址D转换为具体的硬件地址,把数据报封装为MAC帧,再发送此帧);否则就是间接交付,执行3)
3)若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则执行4)
4)若路由表中有到达网络N的路由,则把数据报传送给路由表中所指明的下一跳路由器;否则执行5)
5)若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则执行6)
6)报告转发分组出错
3、划分子网和构成超网
1)、划分子网
划分子网的基本思路:
1)一个拥有许多物理网络的单位,可将所属的物理网络划分成若干个子网。划分子网纯属一个单位内部的事情,这个单位对外仍然表现为一个网络
2)划分子网的方法时从网络的主机号借用若干位作为子网号,当然主机号也就相应减少了同样的位数
3)凡是从其他网络发送给本单位某台主机的IP数据报,仍然是根据IP数据报的目的网络号找到连续在本单位网络上的路由器。但此路由器在收到IP数据报后,再按目的网络号和子网号找到目的地,把IP数据报交付目的主机
上图表示某单位拥有一个B类IP地址,网络地址是145.13.0.0(网络号是145.13),但凡目的地址为145.13.x.x的数据报都被送到这个网络上的路由器R1
先把该网络划分为三个子网,假定子网号占用8位,因此在增加了子网号后,主机号就只有8位。所划分的三个字网分别是:145.13.3.0、145.13.7.0和145.13.21.0。在划分子网后,整个网络对外部仍表现为一个网络,其网络地址仍为145.13.0.0。但网络145.13.0.0上的路由器R1在收到外来的数据报后,再根据数据报的目的地址把它转发到相应的子网
划分子网只是把IP地址的主机号这部分进行再划分,而不改变IP地址原来的网络号
子网掩码:
子网掩码用来找出IP地址中的子网部分,长度为32位,原IP中网络号和子网部分置为1,主机号部分置为0
IP地址 AND 子网掩码 = 网络地址
默认子网掩码:在不进行子网划分时,也要给出子网掩码,就用默认子网掩码
使用子网时分组的转发:
子网划分后的路由表包含:目的网络地址、子网掩码、下一跳地址
1)从收到的数据报首部提取目的IP地址D
2)先判断是否为直接交付。对路由器直接相连的网络进行逐个检查:用各网络的子网掩码和D逐位相与,看结果是否和相对应的网络地址匹配。若匹配,则把分组进行直接交付,转发任务结束。否则就是间接交付,执行3)
3)若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由。否则执行4)
4)对路由表的每一行,用其中的子网掩码和D逐位相与,其结果为N。若N与该行的目的网络地址匹配,则把数据报传送给该行指明的下一跳路由器;否则执行5)
5)若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则执行6)
6)报告转发分组出错
2)、无分类编址CIDR(构造超网)
CIDR消除了传统的A类、B类和C类地址以及划分子网的概念。它把32位的IP地址划分为前后两个部分,前面部分是网络前缀,用来指明网络,后面部分则用来指明主机
CIDR还使用斜线记法,或称为CIDR记法,即在IP地址后面加上斜线/,然后写上网络前缀所占的位数
CIDR把网络前缀都相同的连续的IP地址组成一个CIDR地址块。只要知道CIDR地址块中的任何一个地址,就可以知道这个地址块的起始地址和最大地址,以及地址块中的地址数
例如,已知IP地址128.14.35.7/20是某CIDR地址块中的一个地址,其中的前20位是网络前缀,而前缀后面的12位是主机号
斜线记法中,斜线后面的数字就是地址掩码中1的个数
由于一个CIDR地址块中有很多地址,所以在路由表中就利用CIDR地址块来查找目的网络。这种地址的聚合称为路由聚合或构成超网,它使得路由表中的一个项目可以表示原来传统分类地址的很多个路由。路由聚合有利于减少路由器之间的路由选择信息的交换,从而提高了整个互联网的性能
该ISP由64个C类地址,若不采用CIDR技术,则在与该ISP的路由器交换路由信息的每一个路由器的路由表中,就需要由64个项目,采用地址聚合后,只需用路由聚合后的一个项目206.0.64.0/18就能找到该ISP
该大学需要800个IP地址,因,所以主机位应取10位,前22位作为网络前缀,由于子网全0默认不可用,故从206.0.68.0/22开始
最长前缀匹配:
用收到的目的地址与路由表中的每条掩码依次相与,取最长前缀匹配项的地址作为下一跳
因为前缀越长,其地址块就越小,因而路由就越具体
二叉线索树:
将路由表中各IP地址构成一个01字典树,也称为二叉线索树,能极大优化路由表匹配过程
4、网际控制报文协议ICMP
ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告
ICMP报文有两种:ICMP差错报告报文和ICMP询问报文
常见差错报告报文:终点不可达、时间超过、参数问题、改变路由(重定向)
把收到的需要进行差错报告的IP数据报的首部和数据字段的前8个字段提取出来,作为ICMP报文的数据字段。再加上相应的ICMP差错报告报文的前8个字节,就构成了ICMP差错报告报文
不发送ICMP差错报告报文的情况:
1)对ICMP差错报告报文,不再发送ICMP差错报告报文
2)对第一个分片的数据报片的所有后续数据报片,都不发送ICMP差错报告报文
3)对具有多播地址的数据报,都不发送ICMP差错报告报文
4)对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报,不发生ICMP差错报告报文
常用的ICMP询问报文:
1)回送请求和回答:ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问,收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文,这种询问报文用来测试目的站是否可达以及了解其状态
2)时间戳请求和回答:ICMP时间戳请求报文是请某台主机或路由器回答当前的日期和时间,再ICMP时间戳回答报文中有一个32位的字段,其中写入的整数代表从1900.1.1到当前时刻一共多少秒,用于时钟同步和时间测量
5、互联网的路由选择协议
1)、内部网关协议RIP
RIP是一种分布式的基于距离向量的路由选择协议,要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录
距离(跳数):从一路由器到直接连接的网络的距离定义为1;从一路由器到非直接连接的网络的距离定义为所经过的路由器数加1
RIP认为好的路由就是它通过的路由器的数目少,即距离短。RIP允许一条路径最多只能包含15个路由器,因此距离等于16时相当于不可达
RIP不能在两个网络之间同时使用多条路由,RIP选择一条具有最少路由器的路由(即最短路由),哪怕还存在另一条高速(低时延)但路由器较多的路由
RIP协议的特点:
1)仅和相邻路由器交换信息
2)路由器交换的信息是当前本路由器现在的路由表
3)按固定的时间间隔交换路由信息
刚开始时只知道直连网络的距离,路由表为空,以后,每个路由器只和数目有限的相邻路由器交互并更新路由信息,经过若干次更新后,所有路由器最终会知道到达本自治系统其他路由器的最短距离和下一跳地址,此时称该网络收敛
距离向量算法:
1)对地址为X的相邻路由器发来的RIP报文,先修改此报文中的所有项目:把下一跳字段中的地址都改为X,并把所有的距离字段的值加1,每一个项目都有三个关键数据:到目的网络N,距离是d,下一跳路由器是X
2)对修改后的RIP报文中的每一个项目,进行以下步骤:
若原来的路由表中没有目的网络N,则把该项目添加到路由表中
否则若下一跳路由器地址是X,则把收到的项目替换原路由表中的项目(以最新的消息为准)
否则若收到的项目中的距离d小于路由表中的距离,则进行更新
否则什么也不做
3)若3分钟还没有收到相邻路由器的更新路由表,则把相邻路由器记为不可达的路由器,即把距离置为16
4)返回
已知路由器R6有下图所示的路由表,现收到相邻路由器R4发来的路由更新信息
先把R4发来的路由更新信息中的距离都加1,并把下一跳路由器都改为R4
将修改后的表与路由表对比:
Net1:原路由表中没有,故加入
Net2:原表中有,且下一跳相同,替换原有
Net3:原表中有,但下一跳不同,比较距离,选择较小的
RIP协议的报文格式:
RIP协议的缺点:
RIP存在的一个问题是当网络出现故障时,要经过比较长的时间才能将此信息传送到所有的路由器
如上图所示,设三个网络通过两个路由器互连起来,并且都已建立了各自的路由表。路由器R1中的1,1,直接表示到网1的距离是1,直接交付;路由器R2中的1,2,R1表示到网1的距离是2,下一跳经过R1
现在假定路由器R1到网1的链路出了故障,R1无法到达网1。于是路由器R1把到网1的距离改为16(表示网1不可达),因而在R1的路由表中的相应项目变为1,16,直接。但是,很可能要经过30秒钟后R1才把更新信息发送给R2。然而R2可能已经先把自己的路由表发送给了R1,其中有1,2,R1这一项
R1收到R2的更新报文后,误认为可经过R2到达网1,于是把收到的路由信息1,2,R1修改为1,3,R2,表明到网1的距离是3,下一跳经过R2,并把更新后的信息发送给R2
同理,R2接着又更新自己的路由表为1,4,R1,这样的更新一直继续下去,直到R1和R2到网1的局地都增大到16时,R1和R2才知道原来网1是不可达的。RIP协议的这一特点叫做:好消息传播得快,而坏消息传播得慢
RIP协议最大的优点是实现简单,开销较小;缺点是限制了网络的规模,出故障时传播时间较长
2)、内部网关协议OSPF
OSPF使用分布式的链路状态协议,而不是像RIP那样的距离向量协议
OSPF协议的特点:
1)向本自治系统中所有路由器发送消息。使用的是洪泛法,路由器通过所有输出端口向所有相邻的路由器发送消息,而每一个相邻路由器又再将此消息发往其所有的相邻路由器(但不再发送给刚刚发来消息的那个路由器)
2)发送信息就是与本路由器相邻的所有路由器的链路状态,说明与哪些路由相邻,以及该链路的度量(费用、距离、时延、带宽等)
3)只有当链路状态发生变化时,才使用洪泛法发生信息
由于各路由器之间频繁地交换链路状态信息,因此所有的路由器最终都能建立一个链路状态数据库,这个数据库实际上就是全网的拓扑结构图。这个拓扑结构图在全网范围内是一致的(这称为链路状态数据库的同步)。因此,每一个路由器都知道全网共有多少个路由器,以及哪些路由器是相连的,其代价是多少等等。每一个路由器使用链路状态数据库中的数据构造出自己的路由表
为使OSPF能够用于规模很大的网络,OSPF将一个自治系统再划分为若干各更小的范围,叫做区域;必须要有一个主干区域,其它区域一般都和主干区域直接相连;每个区域都有一个32位的区域标识符;区域不能太大,一个区域路由器数量不超过200个
OSPF协议的报文格式:
3)、外部网关协议BGP
边界网关协议BGP寻找一条能够到达目的网络且比较好的路由,不一定是最佳路由,采用路径向量路由选择协议
6、虚拟专用网v*n和网络地址转换NAT
1)、虚拟专用网v*n
专用地址只能用于一个机构的内部通信,而不能用于和互联网上的主机通信。在互联中的所有路由器,对目的地址是专用地址的数据报一律不进行转发
专用地址块:
- 10.0.0.0到10.255.255.255
- 172.16.0.0到172.31.255.255
- 192.168.0.0到192.168.255.255
所有通过互联网传送的数据都必须加密,要构建v*n必须为它的每一个场所配置专门的硬件和软件,使每一个场所的v*n系统都知道其他场所的地址
使用IP隧道技术实现虚拟专用网:
假定某个机构在两个相隔较远的场所建立了专用网A和B,其网络地址分别为专用地址10.1.0.0和10.2.0.0。现在这两个场所需要通过公用的互联网构成一个v*n。如上图所示,路由器R1和R2在专用网内部网络的接口是专用网的本地地址,和互联网的接口地址必须是合法的全球IP地址
在每一个场所A或B内部的通信都不经过互联网。但如果场所A的主机X要和另一个场所B的主机Y通信,那么就必须经过路由器R1和R2。主机X向主机Y发送的IP数据报的源地址是10.1.0.1,而目的地址是10.2.0.3。这个数据报先作为本机构的内部数据报为X发送到与互联网连接的路由器R1。路由器R1收到内部数据报后,发现其目的网络必须通过互联网才能到达,就把整个的内部数据报进行加密,然后重新加上数据报的首部,封装成为在互联网上发送的外部数据报,其源地址是路由器R1的全球地址125.1.2.3,而目的地址是路由器R2的全球地址194.4.5.6。路由器R2收到数据报后将其数据部分去除进行解密,恢复出原来的内部数据报(目的地址是10.2.0.3),交付主机Y
2)、网络地址转换NAT
在专用网连接到互联网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和互联网连接
NAT路由器收到从专用网内部的主机A发往互联网上主机B的IP数据报:源IP地址是192.168.0.3,而目的IP地址是213.18.2.4。NAT路由器把IP数据报的源IP地址192.168.0.3,转换为新的源IP地址172.38.1.5,然后转发出去。因此,主机B收到这个IP数据报时,以为A的IP地址是172.38.1.5。当B给A发送应答时,IP数据报的目的IP地址是NAT路由器的IP地址172.38.1.5。B并不知道A的专用地址192.168.0.3,即使知道了也不能使用,因为互联网上的路由器都不转发没有地地址是专用网本地IP地址的IP数据报
当NAT收到互联网上的主机B发来的IP数据报时,还要进行一次IP地址的转换。通过NAT地址转换表,就可把IP数据报上的旧的目的IP地址172.38.1.5,转换为新的目的IP地址192.168.0.3
使用端口号的NAT也叫做网络地址与端口号转换NAPT
NAPT把专用网内不同的源IP地址,都转换为同样的全球IP地址,但对源主机所采用的TCP端口号,则转换为不同的新的端口号,因此,当NAPT路由器收到从互联网发来的应答时,就可以从IP数据报的数据部分找出运输层的端口号,然后根据不同的目的端口号,从NAPT转换表中找到正确的目的主机
推荐学习资料:
韩老师讲高校《计算机网络原理》:https://www.bilibili.com/video/BV1Tb411x7CE?p=1