前言

本文基于王道考研课程湖科大计算机网络课程教学内容,以及计算机网络(第八版)系统梳理核心知识记忆点和框架,既为个人复习沉淀思考,亦希望能与同行者互助共进。

往期内容

408 计算机网络 知识点记忆(1)

408 计算机网络 知识点记忆(2)

408 计算机网络 知识点记忆(3)

408 计算机网络 知识点记忆(4)

408 计算机网络 知识点记忆(5)

核心知识记忆点+理解性说明

第四章 网络层

1.网络层的功能

A.异构网络互连

物理层中继系统: 转发器 集线器
数据链路层中继系统: 网桥 交换机
网络层中继系统:路由器
网络层以上:网关

互联网可以由多种异构网络互连组成。

在这里插入图片描述

B.路由与转发

路由选择处理机 根据 路由选择协议 构建 转发表 进而进一步路由转发

与协议IP配套使用的还有三个协议:
● 地址解析协议 ARP(Address Resolution Protocol)
● 网际控制报文协议ICMP(Internet Control Message Protocol)
● 网际组管理协议 IGMP(Internet Group Management Protocol)

从一般的概念来讲,将网络互相连接起来要使用一些中间设备。根据中间设备所在的层次,可以有以下四种不同的中间设备:
(1)物理层使用的中间设备叫作转发器(repeater)。
(2)数据链路层使用的中间设备叫作网桥或桥接器(bridge),以及交换机(switch)。
(3)网络层使用的中间设备叫作路由器(router)。
(4)在网络层以上使用的中间设备叫作网关(gateway)。用网关连接两个不兼容的系统需要在高层进行协议的转换。

在路由器之间传送的信息有以下两大类:
第一类是转发源主机和目的主机之间所传送的数据,把源主机所发送的分组,像接力赛跑那样从一个路由器转发到下一个路由器,最后把分组传送到目的主机。
第二类则是传送路由信息,是根据路由选择协议所使用的路由算法,彼此不断地交换路由信息分组,目的是为了在路由器中创建路由表,并由此导出为转发分组而用的转发表。这一类信息的传送是为第一类数据的传送服务的。
可以把网络层抽象地划分为数据层面(或转发层面)和控制层面。

路由器在转发分组时,是独立地根据本路由器的转发表转发分组的,但控制层面就比较复杂,因为路由器要创建路由表,就必须依靠许多路由器协同动作。

互联网中的源主机H1要把一个IP数据报发送给目的主机H2。根据分组交换的存储转发概念,主机H1先要查找自己的转发表,看目的主机H2是否就在本网络上。如是,则不需要经过任何路由器而是直接交付,任务就完成了。如不是,则必须把IP 数据报发送给某个路由器(例如R1)。R1在查找了自己的转发表后,知道应当把数据报转发给 R2进行间接交付。

分组在互联网上传送和转发是基于分组首部中的目的地址的,因此这种转发方式称为基于终点的转发。

当路由器收到一个待转发的分组,在从转发表得出下一跳路由器的IP地址后,不是把这个地址填入分组首部,而是送交数据链路层的网络接口软件。网络接口软件负责把下一跳路由器的IP地址转换成 MAC 地址(必须使用 ARP),并将此MAC 地址放在链路层的MAC 帧的首部,然后利用这个MAC地址传送到下一跳路由器的链路层,再取出MAC帧的数据部分,交给网络层。由此可见,当发送一连串的分组时,上述的这种查找转发表、调用ARP解析出MAC地址、把MAC地址写入MAC帧的首部等过程,都是必须做的(当然都是由机器自动完成的)。

主机H1先把要发送的分组的目的地址和本网络N1的子网掩码按位进行AND运算,得出运算结果。如果运算结果等于本网络 N1的前缀,就表明目的主机连接在本网络上;否则,就必须把分组发送到路由器R1,由路由器R1完成后续的任务。

主机路由(host route)又叫作特定主机路由,这是对特定目的主机的IP地址专门指明的一个路由。主机路由在转发表中都放在最前面。

还有一种特殊路由是默认路由(default route)。这就是不管分组的最终目的网络在哪里,都由指定的路由器R 来处理。这在网络只有很少的对外连接时非常有用。在实际的转发表中,用一个特殊前缀0.0.0.0/0来表示默认路由。这个前缀的掩码是全0(/0表示网络前缀是0位,因此掩码是32个0)。用全0的掩码和任何目的地址进行按位AND运算,结果一定是全0,即必然是和转发表中的0.0.0.0/0相匹配的。这时就按照转发表的指示,把分组送交下一跳路由器R来处理(即间接交付)。

分组转发算法如下(假定转发表按照前缀的长短排列,把前缀长的放在前面):
(1)从收到的分组的首部提取目的主机的IP地址D(即目的地址)。
(2)若查找到有特定主机路由(目的地址为D),就按照这条路由的下一跳转发分组;否则从转发表中下一行(也就是前缀最长的一行)开始检查,执行(3)。
(3)把这一行的子网掩码与目的地址D按位进行AND运算。若运算结果与本行的前缀匹配,则查找结束,按照“下一跳”所指出的进行处理(或直接交付本网络上的目的主机,或通过指定接口发送到下一跳路由器)。否则,若转发表还有下一行,则对下一行进行检查,重新执行(3)。否则,执行(4)。
(4)若转发表中有一个默认路由,则按照指明的接口,把分组传送到指明的默认路由器;否则,报告转发分组出错。

为了进行更加有效的查找,通常是把无分类编址的转发表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里最常用的就是二叉线索(binary trie)。
为了提高二叉线索的查找速度,广泛使用了各种压缩技术。最后两个地址,其最前面的4位都是1011。因此,只要一个地址的前4位是1011,就可以跳过前面4位(即压缩了4个层次)而直接从第5位开始比较。

面向连接的虚电路服务 ( 呼叫请求 呼叫应答)区别于电路交换的电话通信(物理上实际连接) “虚”:这条电路不是专用的

C.SDN基本概念

SDN核心思想:把网络控制、数据层面分离 让控制层面利用软件控制数据层面设备

远程控制器(物理上可由不同地点的多个服务器组成):掌握网络状态 计算最佳路由 生成转发表 (直接访问控制物理设备)

before after SDN
路由算法 控制层面 逻辑上集中的远程控制器 路由选择 负载均衡 接入控制etc
控制 ↓        ↓ 北向API
路由表 控制 ↓        ↓ SDN控制器(网络操作系统)
Openflow协议 ↓        ↓
转发表 数据层面 转发表   转发表 南向API 分组交换机

远程控制器(物理上可由不同地点的多个服务器组成):掌握网络状态 计算最佳路由 生成转发表 (直接访问控制物理设备)

流表(取代转发表,流是分组序列,共享分组首部某些字段):”匹配“+”动作“
SDN广义转发:
”匹配“ 对网络体系各层首部字段匹配, ”动作” 转发分组 负载均衡 重写IP首部(类似NAT) 阻挡或丢弃一些分组(类似防火墙)

让控制层面利用软件来控制数据层面中的许多设备。可以把协议OpenFlow 看成是在 SDN体系结构中控制层面和数据层面之间的通信接口,它使得控制层面的控制器可以对数据层面中的物理设备或虚拟设备,进行直接访问和操纵。这种控制在逻辑上是集中式的,是基于流的控制。

传统意义上的数据层面的任务就是根据转发表来转发分组。可以再把“转发”细分一下。实际上这里有两个步骤。第一个步骤是“匹配”,即查找转发表中的网络前缀,进行最长前缀匹配。第二个步骤是“动作”,即把分组从指明的接口转发出去。这种“匹配+动作”的转发方式在 SDN 中得到了扩充,增加了新的内容,变成了广义的转发。这种广义的转发使得“匹配+动作”有了新的内容。
在 SDN 的广义转发中,“匹配”能够对不同层次(链路层、网络层、运输层)的首部中的字段进行匹配,而“动作”则不仅是转发分组,而且可以把具有同样目的地址的分组从不同的接口转发出去(为了负载均衡)。还可以重写IP首部(如同在NAT路由器中的地址转换),或者可以人为地阻挡或丢弃一些分组。
这样,在SDN的广义转发中,这种完成“匹配+动作”的设备,就不应当称为路由器了,而是叫作“分组交换机”或“OpenFlow 交换机”,或更简单些就称为“交换机”。这种交换机并不局限在网络层工作(例如,可使用L2/L3交换机)。在SDN中,取代传统转发表的是“流表”(flow table)。因此,流表就是“匹配+动作”的转发表。
OpenFlow交换机中的流表是由远程控制器来管理的,而远程控制器通过一个安全信道,使用OpenFlow协议来管理OpenFlow 交换机中的流表。这样,OpenFlow 就有了双重意义。一方面,OpenFlow是SDN远程控制器与网络设备之间的通信协议;另一方面,OpenFlow 又是网络交换功能的逻辑结构的规约。

其实从OpenFlow 交换机的角度来看,一个流就是穿过网络的一种分组序列,而在此序列中的分组都共享分组首部某些字段的值。例如,某个流可以是具有相同源IP地址和目的IP地址的所有分组。

每一个流表可以包括很多行,即多个流表项(flow entry),它包括三个字段,即首部字段值(又称为匹配字段)、计数器和动作。
首部字段值:这是一组字段,用来使入分组(incoming packet)的对应首部与之相匹配,因此又称为匹配字段。匹配不上的分组就被丢弃,或发送到远程控制器做更多的处理。在OpenFlow 交换机中,既可以处理链路层的帧,也可以处理网络层的IP分组和运输层的报文。
计数器:这是一组计数器,可包括已经与该表项匹配的分组数量,以及从该表项上次更新到现在经历的时间。
动作:这是一组动作,例如,当分组匹配某个流表项时把分组转发到指明的端口,或丢弃该分组,或把分组进行复制后再从多个端口转发出去,或重写分组的首部字段(第二、三和四层的首部字段)。

(1)基于流的转发。SDN 控制的交换机分布在数据层面中,而分组的转发可以基于网络层、运输层和链路层协议数据单元中的首部字段值进行。这和传统的路由器仅仅根据IP 分组的目的地址进行转发,有着很大的区别。SDN 的转发规则都精确规定在交换机中的流表中。所有交换机中的流表项,都是由SDN控制器进行计算、管理和安装的。
(2)数据层面与控制层面分离。在许多英语文献中常使用“decouple”一词,相应的中文就是“去耦”。在传统的转发设备路由器中,其数据层面与控制层面都处在同一个设备中,因此二者耦合得非常紧密。但在 SDN中,则把这两个层面去耦合,使二者不在同一个设备中。数据层面有许多相对简单但快速的网络交换机。这些交换机在其流表中执行“匹配+动作”的规则。而控制层面则由若干服务器和相应的软件组成,这些服务器和软件决定并管理这些交换机中的流表。
(3)位于数据层面交换机之外的网络控制功能。SDN 中的控制层面是用软件实现的,而且软件是处在不同的机器上,并且可能还远离这些网络交换机。SDN控制层面包含两个构件,一个是SDN控制器(也就是网络操作系统),另一个由若干个网络控制应用程序组成。SDN 控制器维护准确的网络状态信息(例如,远程链路、交换机和主机的状态),把这些信息提供给运行在控制层面的各种控制应用程序,以及提供一些方法,使得这些应用程序能够对底层的许多网络设备进行监视、编程和控制。实际上,在控制层面中总是使用多个分散的服务器协调地工作,以便实现可扩展性和高可用性。
(4)可编程的网络。通过在控制层面的一些网络控制应用程序,使整个网络成为可编程的。这些应用程序相当于 SDN 控制层面中的“大脑”, SDN控制器使用这些应用程序,在这些网络设备中指明和控制数据层面。例如,路由选择网络控制应用程序能够确定在源点和终点之间的端到端路径(这需要执行某种算法,也需要使用由SDN控制器维护的节点状态和链路状态信息)。网络应用程序还可以进行接入控制,即决定哪些分组在进入某个交换机时就必须被阻挡住。此外,网络应用程序在转发分组时还可以执行负载均衡的措施。

SDN控制器和下面数据层面的受控设备的通信接口,即南向API,以及SDN控制器和上面网络控制应用程序的接口,即北向API。

在这里插入图片描述

D.拥塞控制

2.路由算法(详见408 计算机网络 知识点记忆(8))

3.IPv4

A.IPv4分组

IPV4分组 首部前一部分长度固定20B

这里A类(n=8)、B类(n=16)和C类(n=24)地址都是单播地址(一对一通信),是最常用的。D类是多播地址,而E类是保留地址。

CIDR地址中还有三个特殊地址块,即:
(1)前缀n=32,即32位IP地址都是前缀,没有主机号。这其实就是一个IP地址。这个特殊地址用于主机路由。
(2)前缀n=31,这个地址块中只有两个IP地址,其主机号分别为0和1。这个地址块用于点对点链路。
(3)前缀n=0同时IP地址也是全0,即0.0.0.0/0。这用于默认路由。

IP特点:
(1)每一个 IP 地址都由网络前缀和主机号两部分组成。从这个意义上说,IP地址是一种分等级的地址结构。分两个等级的好处是:第一,IP地址管理机构在分配IP地址时只分配网络前缀(第一级),而剩下的主机号(第二级)则由得到该网络前缀的单位自行分配。这样就方便了IP地址的管理;第二,路由器根据目的主机所连接的网络前缀(即地址块)来转发分组(而不考虑目的主机号),这样就可以使转发表中的项目数大幅度减少,从而减少转发表所占的存储空间,缩短查找转发表的时间。
(2)实际上IP地址是标志一台主机(或路由器)和一条链路的接口。当一台主机同时连接到两个网络上时,该主机就必须同时具有两个相应的IP地址,其网络前缀必须是不同的。这种主机称为多归属主机(multihomed host)。由于一个路由器至少应当连接到两个网络,因此一个路由器至少应当有两个不同的IP地址。
(3)按照互联网的观点,一个网络(或子网)是指具有相同网络前缀的主机的集合,因此,用转发器或交换机连接起来的若干个局域网仍为一个网络,因为这些局域网都具有同样的网络前缀。具有不同网络前缀的局域网必须使用路由器进行互连。
(4)在IP地址中,所有分配到网络前缀的网络(不管是范围很小的局域网,还是可能覆盖很大地理范围的广域网)都是平等的。所谓平等,是指互联网同等对待每一个IP地址。

以太网交换机连线上画出的小圆圈,是主机或路由器的IP地址,并不是以太网交换机的IP地址。以太网交换机是链路层设备,只有MAC地址。
路由器总是具有两个或两个以上的IP地址。即路由器每个接口的IP地址的网络前缀都不同。
当两个路由器直接相连时(例如通过一条租用线路),在连线两端的接口处,可以分配也可以不分配IP地址。如分配了IP地址,则这一段连线就构成了一种只包含一段线路的特殊“网络”。之所以叫作“网络”,是因为它有IP地址。这种网络仅需两个IP地址,因此这里就使用了/31地址块。这种地址块专门为点对点链路的两端使用,主机号(只有1位)可以是0或1。但为了节省IP地址资源,对于点对点链路构成的特殊“网络”,现在也常常不分配IP地址。通常把这样的特殊网络叫作无编号网络(unnumbered network)或匿名网络(anonymous network).

在这里插入图片描述

在这里插入图片描述

若把 TTL 的初始值设置为1,就表示这个数据报只能在本局域网中传送。因为这个数据报一传送到局域网上的某个路由器,在被转发之前TTL值就减小到零,所以会被这个路由器丢弃。

在这里插入图片描述

在发送方,先把IP数据报首部划分为许多16位字的序列,并把检验和字段置零。用反码算术运算把所有16位字相加后,将得到的和的反码写入检验和字段。接收方收到数据报后,把首部的所有16位字再使用反码算术运算相加一次。将得到的和取反码,即得出接收方检验和的计算结果。若首部未发生任何变化,则此结果必为0,于是就保留这个数据报;否则即认为出差错,并将此数据报丢弃。

在这里插入图片描述

数据载荷长度=总长度-首部长度*4

以太网MTU=1500B
广域网MTU=576B

在这里插入图片描述
主机号全0表示本网络
主机号全1表示广播地址 /直接广播地址
127.x.x.x 环回测试
0.0.0.0 表示本网络上本主机(eg DHCP)
255.255.255.255 受限广播地址 只在本网络上广播
IP地址需求:主机地址+路由器接口地址+网络地址+广播地址

B.IPv4地址与NAT

网络地址转换NAT
私有IP地址块 专用地址
10.0.0.0-10.255.255.255 相当于一个A类网络
172.16.0.0-172.31.255.255 相当于16个B类网络
192.168.0.0-192.168.255.255 相当于256个C类网络

为了更加有效地利用NAT路由器上的全球IP地址,现在常用的NAT转换表把运输层的端口号也利用上。这样,就可以使多个拥有本地地址的主机,共用NAT 路由器上的一个全球IP地址,因而可以同时和互联网上的不同主机进行通信。
使用端口号的 NAT 也叫作网络地址与端口号转换 NAPT(Network Address and Port Translation),而不使用端口号的NAT就叫作传统的NAT(traditional NAT)。但在许多文献中并没有这样区分,而是不加区分地都使用NAT这个更加简洁的缩写词。

普通路由器在转发分组时是工作在网络层的。但NAPT 路由器还要查看和转换运输层的端口号,而这本来应当属于运输层的范畴。

NAT转换表 {本地IP地址:端口}----{全球IP地址:端口}

C.子网划分与子网掩码、CIDR、路由聚合、ARP、DHCP与ICMP(最后三个内容见408 计算机网络 知识点记忆(7))

划分子网与路由聚合 网络号 子网号 主机号

子网掩码 判定目的主机是否也在子网中
默认网关 指定的路由器转发
默认子网掩码 为划分子网下使用的子网掩码(A、B、C、D类网络)

无分类编址 CIDR 网络前缀 主机号 斜线记法(CIDR记法)

路由聚合(构造超网) 最长前缀匹配(最佳匹配) 共同前缀
CIDR查找路由表存在在一种层次性的数据结构(通常采用二叉线索),自上而下按层次查找

一个大的CIDR地址块中往往包含很多小地址块,所以在路由器的转发表中就利用较大的一个CIDR地址块来代替许多较小的地址块。这种方法称为路由聚合(route aggregation),它使得转发表中只用一个项目就可以表示原来传统分类地址的很多个(例如上千个)路由项目,因而大大压缩了转发表所占的空间,减少了查找转发表所需的时间。

IP首部数据报中的目的IP地址:若找到匹配的路由条目,则按指示转发,否则丢弃 并向源主机报告差错

转发表 (目的网络地址 下一跳地址)

路由表两种特殊的路由: 特定主机路由 默认路由

总结 (之前的版本)

物理层中继系统: 转发器 集线器
数据链路层中继系统: 网桥 交换机
网络层中继系统:路由器
网络层以上:网关

路由选择处理机 根据 路由选择协议 构建 转发表 进而进一步路由转发

面向连接的虚电路服务 ( 呼叫请求 呼叫应答)区别于电路交换的电话通信(物理上实际连接) “虚”:这条电路不是专用的

数据报 无连接

路由器功能:转发+路由选择
路由器之间传送的消息:主机间的分组+路由信息

SDN核心思想:把网络控制、数据层面分离 让控制层面利用软件控制数据层面设备

before after SDN
路由算法 控制层面 逻辑上集中的远程控制器 路由选择 负载均衡 接入控制etc
控制 ↓        ↓ 北向API
路由表 控制 ↓        ↓ SDN控制器(网络操作系统)
Openflow协议 ↓        ↓
转发表 数据层面 转发表   转发表 南向API 分组交换机

远程控制器(物理上可由不同地点的多个服务器组成):掌握网络状态 计算最佳路由 生成转发表 (直接访问控制物理设备)

流表(取代转发表,流是分组序列,共享分组首部某些字段):”匹配“+”动作“
SDN广义转发:
”匹配“ 对网络体系各层首部字段匹配,
”动作” 转发分组 负载均衡 重写IP首部(类似NAT) 阻挡或丢弃一些分组(类似防火墙)

SDN四个关键特征:
1 基于流的转发
2 数据层面与控制层面分离
3 位于数据层面分组交换机之外的网络控制功能
4 可编程的网络

IPV4分组 首部前一部分长度固定20B

0     4     8       16    19   24
版本   首部长度  区分服务   总长度
标识                标志   片偏移
生存时间 协议           首部检验和
源地址
目的地址
可变部分(40) 可选字段(长度可变) 填充(全0)

数据载荷长度=总长度-首部长度*4

以太网MTU=1500B
广域网MTU=576B

      0 1 2 3   8  16  24  32
A类 1-126   0 网络号   主机号
B类 128-191 1 0 网络号    主机号
C类 192-223 1 1 0 网络号       主机号
D类 224-239 1 1 1 0 多播地址
E类 240-255 1 1 1 1 保留今后使用

主机号全0表示本网络
主机号全1表示广播地址 /直接广播地址
127.x.x.x 环回测试
0.0.0.0 表示本网络上本主机(eg DHCP)
255.255.255.255 受限广播地址 只在本网络上广播

IP地址需求:主机地址+路由器接口地址+网络地址+广播地址

网络地址转换NAT
私有IP地址块 专用地址
10.0.0.0-10.255.255.255 相当于一个A类网络
172.16.0.0-172.31.255.255 相当于16个B类网络
192.168.0.0-192.168.255.255 相当于256个C类网络

NAT转换表 {本地IP地址:端口}----{全球IP地址:端口}

划分子网与路由聚合 网络号 子网号 主机号
子网掩码 判定目的主机是否也在子网中
默认网关 指定的路由器转发
默认子网掩码 为划分子网下使用的子网掩码(A、B、C、D类网络)
默认路由

无分类编址 CIDR 网络前缀 主机号 斜线记法(CIDR记法)

路由聚合(构造超网) 最长前缀匹配(最佳匹配) 共同前缀
CIDR查找路由表存在在一种层次性的数据结构(通常采用二叉线索),自上而下按层次查找

IP首部数据报中的目的IP地址:若找到匹配的路由条目,则按指示转发,否则丢弃 并向源主机报告差错

结语

网络层作为互联网的“导航中枢”,以路由与转发的精密协作,架起了全球互联的智能桥梁。从物理层的集线器到网络层的路由器,从传统转发表的静态规则到SDN的流表可编程,技术的每一次跃迁都在重塑数据的航向。IPv4分组的严谨结构、子网掩码的灵活划分、CIDR的高效聚合,无不彰显着“有限地址资源,无限连接可能”的设计智慧;而NAT的地址转换艺术、路由聚合的最长前缀匹配,则是应对规模扩张与资源枯竭的经典答案。

在虚电路与数据报的路径抉择中,我们领悟到“连接”与“自由”的辩证统一;在SDN控制面与数据面的分离中,我们窥见了软件定义未来的无限潜能。无论是传统路由器的逐跳决策,还是SDN控制器的全局调度,目标始终如一:让每个分组以最优路径抵达终点,让网络资源在动态负载中保持平衡。

参考资料

1.王道考研课程
2.湖科大计算机网络课程
3.计算机网络(第八版)

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐