网络层提供的主要功能包括:
需要注意的是,网络层不再是一个端到端的层次,因此,在每一个主机或是网络层设备上(比如路由器上),都需要运行网络层协议,完成网络层的功能。 实际上,每个路由器都需要对经过该路由器的每一个网络层数据报进行头部域的检验,进而决定如何处理,比如如何转发网络层的数据报。
作为网络层,需要将传输层交付的数据段Segment,封装以后在整个网络中进行传输。在传输过程中,中间的路由器需要把网络层的数据报进行解析,并决定如何转发,最终送到目的主机。 目的主机的网络层再将传输层的段Segment提交给上层传输层进行进一步处理。
在网络层中,当某一个路由器收到某一数据段后,需要做的功能之一,就是确定如何将该数据段转发到另一输出端口上,从而能够正确转发到下一跳路由器。
将一个数据报从路由器的输入端口,转发到合适的输出端口,这一过程就是网络层应该完成的核心功能之一:转发。
那么这里存在的一个问题就是,对于路由器来说,如何判断接收到的数据报应该转发到哪一个合适的端口上去?
为了解决这个问题,路由器需要维护一张转发表,结构如下所示:
这个转发表里记录了对于接收的数据报,根据其地址(标识)信息,应该转发的输出端口的映射关系。
那这个转发表是怎么获取的呢?
作为路由器,我们将上述确定接收数据的输出端口的过程称之为路由:
作为网络层的设备,都会运行一些路由算法,确定从源到目的应该走什么样的路径,或是如何进行转发。这些路由算法/协议所确定的路由信息,就记录在转发表中。当路由器收到一个具体的数据报时,就可以根据数据报的地址信息,检索转发表,完成正确的转发。
不是所有的网络都需要建立连接。
数据分组传输之前两端主机需要首先建立虚拟/逻辑连接。
某些网络的重要功能:
数据分组传输之前两端主机需要首先建立虚拟/逻辑连接
网络层连接与传输层连接的对比:
网络层为发送端(主机)到接收端(主机)的数据报传输”通道(channel)“提供什么样的服务模型(Service model)?
作为网络层,使用的技术、方法的不同,为传输层提供的服务是不一样的。换句话说,不同的网络在网络层提供的服务模型是不同的。
比如Internet网络,在网络层提供的模型是best effort service(尽力服务)(传输层的UDP协议也是一个尽力服务)。尽力服务就是尽最大努力交付数据报,因此该网络模型对带宽,丢包,按序,延迟的可靠性保障都无法做到。也没有对网络拥塞控制的反馈功能。
为什么传输层的TCP协议能够保证可靠传输呢?
上一节在传输层中,我们分析过传输层如何实现可靠性传输。由于信道的传输一定是不可靠的,因此,为了实现可靠的目标,传输层实现了自己的可靠性传输算法,比如ACK机制、超时重传等。 从而向上层交付可靠数据,向下层将不可靠信道转变为可靠,以此来实现可靠传输。因此,网络的可靠传输是在传输层实现的。
但是本质上网络中的信道仍然是一个不可靠的传输,因此这里Internet网络的服务模型本质上是个不可靠传输的服务模型,类似于UDP,只尽最大可能交付数据报。
ATM网络,也叫异步传输模式网络,这个网络是在电信网络发展基础上,逐渐发展的综合业务网络。有兴趣的同学可以查阅相关资料,更深入了解下。
网络层服务模型包括以下几类:
数据报(datagram)网络与虚电路(virtual-circuit)网络是典型两类分组交换网络。
类似于传输层的无连接服务(UDP)和面向连接的服务(TCP),但是网络层服务:
虚电路:一条从源主机到目的主机,类似于电路的路径(逻辑连接),但又不是实际的电路交换,因此叫做虚电路。
虚电路与电路交换的区别:
虚电路网络跟电路交换网络,有区别也有相似之处。
虚电路网络通信过程:
每条虚电路包括:
如下图所示,左边表示源主机,右边表示目的主机,采用虚电路进行通信。R1路由器的三个端口号,用1、2、3进行标识。红色线用来标识一条虚电路。
从图上可以看出,每一段虚电路上的VCID可能都是不同的。
由于虚电路上的每个路由器都需要参与记录虚电路的连接建立,需要有一个转发表来记录这些信息。
路由器R1的VC转发表如下所示:
这样就可以实现,即使不同链路上虚电路号不同,也可以实现接续在一起,从而在源主机到目的主机之间,确定了一条虚电路。
总结:虚电路VC路径上每个路由器都需要维护VC连接的状态信息!
由于虚电路在正式数据通信前,必须先建立起一条虚电路连接。因此,在虚电路网络里,就需要一条特殊的协议来支持虚电路的建立,维护和拆除。这类协议就叫做信令协议。
数据报网络提供的是无连接服务。Internet网络就是一种数据报网络。
由于是无连接网络,因此为了实现每个分组从源主机到达目的主机,需要在每个分组中携带目的地址。
作为网络层中的设备(如路由器),需要根据分组的目的地址来实现转发功能。
在上述示意图可以看到,从源主机发往目的主机的过程中,不同分组经过的路径可能是不同的。原因就是,网络中的路由器在传输这一系列分组时,可能重新更新了转发表,这时候就可能走不同路径。
路由器的转发表示例图如下所示:
从图中可以看出,上述转发表维护了每一个输入地址对应的下一个输出链路,以此来实现转发功能。而这里的地址实际上也就是IP地址,而我们知道IP地址是一个32位的(现在也出来64位的了),那么一个IP地址所占的空间就是4Byte,而网络中的设备是海量的,很容易造成存储、检索性能的瓶颈。
改进的方式就是,改进后在路由器的转发表中,不是采用记录每一个IP地址的方式,而是记录IP地址的范围:
这里的地址范围表示:检索符合某一个地址范围的IP地址,发往对应的输出链路。
更具体的目的地址范围的格式如下所示:
根据上面的转发表,构建网络的连接形式大致如下所示:
上述图例中,路由器转发表的地址划分是在一段连续的IP地址上的,且每个端口对应的地址范围是均等的。
Q:如果地址范围划分的不是这么“完美”会怎么样?
上述目的地址的划分是不均衡的,假设现在有两个如下的IP地址:
DA1:11001000 00010111 00010110 10100001
DA2:11001000 00010111 00011000 10101010
根据上述转发表进行对比可以发现,第一个DA1符合的地址范围是第一条,对应的链路接口是0。而对于DA2不仅符合第二条地址范围,也符合第三条地址范围,此时应该选择哪一条链路接口输出?
由于在地址匹配时,匹配到的bit位越多,说明这个目的地址范围越具体,也就是对应的地址范围实际上是越少的(网络也就越小)。比如上图中的第三条,对应的目的地址范围实际上应该是多于第二条的。
因此,为了在传输时,能更精确的匹配目的地址范围,转发到更具体的下一跳网络中,路由器会采用最长前缀匹配优先原则。
最长匹配优先原则:在检索转发表时,优先选择与分组目的地址匹配前缀最长的入口(entry)
数据报网络比较有代表性的就是Internet网络,VC网络比较有代表性的就是ATM网络。下图展示了两种网络的特点总结:
在本节中,我们主要概况性的介绍了网络层提供的主要服务,与传输层的区别。在网络层中,我们重点需要掌握如何针对一个IP地址进行路由,这也是我们接下来重点介绍的部分。有兴趣的同学可以在大学生MOOC上也跟着哈工大计算机网络课程一起学习,也欢迎与我讨论。