概述
运输层依赖于网络层的主机到主机的通信服务,提供各种形式的进程到进程的通信,与运输层和应用层不同的是,在网络中的每一台主机和路由器中都有一个网络层部分
转发和路由选择
网络层的作用从表面上看极为简单,即 将分组从一台发送主机移动到另一台接收主机,为此,需要两种重要的网络层功能:
- 转发:当一个分组到达路由器的一条输入链路时,路由器必须将该分组移动到适当的输出链路。是将分组从一个输入链路接口转移到输出链路接口的路由器本地动作
- 路由选择:当分组从发送方流向接收方时,网络层必须决定这些分组所采用的路由或路径,计算这些路径的算法被称为 路由选择算法
每台路由器有一张转发表,路由器通过检查到达分组首部字段的值来转发分组,然后使用该值在转发表中索引查询
路由选择算法决定了插入路由器的转发表中的值。考虑这样一种情况,所有的转发表由人类网络操作员直接配置而在路由器中物理地存在,这种情况下就不需要任何的路由选择协议,但随着互联网应用越来越广泛,路由器的数目数不胜数,人工配置的话需要莫大的人力成本;而且 人类操作员之间需要彼此交互,确保该转发表配置得能使分组到达它们想要到达的目的地,且 人工配置容易出错,对于网络拓扑的变化,响应起来比路由选择协议慢。因此,网络需要转发跟路由选择这两种功能
虚电路和数据报网络
与传输层类似,网络层也能在两台主机之间提供无连接服务或者连接服务,但两者存在以下差异:
- 在网络层中,这些服务是由网络层向运输层提供的主机到主机的服务;在运输层,这些服务则是运输层向应用层提供的进程到进程的服务
- 在主要的计算机网络体系结构中 (因特网,ATM 等),网络层或者提供了主机到主机的无连接服务,或者提供了主机到主机的连接服务,而不同时提供这两种服务。即在同一个网络体系中,对于网络层其只提供两种中的一种服务。仅在网络层提供 连接 服务的计算机网络称为 虚电路网络 ( V i r t u a l − C i r c u i t Virtual-Circuit Virtual−Circuit,VC);仅在网络层提供 无连接 服务的计算机网络称为 数据报网络 ( d a t a g r a m n e t w o r k datagram\ network datagram network)
- 运输层面向连接服务是在位于网络边缘的端系统 (如个人 PC) 中实现的;而网络层连接服务除了在端系统中,也在位于网络核心的路由器中实现
虚电路网络
因特网是一个数据报网络,许多其它网络体系结构却是虚电路网络。虚电路网络在网络层的连接被称为虚电路,下面考虑虚电路服务是如何实现的
一个虚电路的组成如下:
- 源和目的主机之间的路径,即一系列链路和路由器。给定源和目的地址之间的所有分组将采用相同路径;
- VC 号,沿着该路径的 每段链路 的一个号码
- 沿着该路径的每台路由器中的转发表表项
属于虚电路的分组将在它的首部携带一个 VC 号,因为一条虚电路在整个路径的每一条链路上可能具有不同的 VC 号,所以每台中间路由器必须用一个新的 VC 号替代每一个传输分组的 VC 号,该 VC 号从转发表中获得
为何一个分组沿着其路由在每条链路上不简单地保持相同的 VC 号?
- 逐链路代替该号码减少了在分组首部中 VC 字段的长度。如果一个分组在其整个路径中都必须对应同一个 VC 号,那么在流量巨大的情况下,网络中存在着大量的虚电路,每条虚电路都需要一个独特的 VC 号的话,VC 号的范围就必须要很大,那么存放 VC 号的字段长度自然也需要很大
- 通过允许沿着该虚电路路径的每条链路有一个不同的 VC 号,大大简化了虚电路的建立。在具有多个 VC 号的路径,其上的每条链路能够独立于沿着该路径的其他链路所选的号码选择一个 VC 号。如果沿着某路径的所有链路要求一个共同的 VC 号的话,路由器将不得不交换并处理大量的报文以约定一个共同的 VC 号用于一次连接
虚电路中存在 3 个阶段:
-
虚电路建立。在建立阶段,发送方运输层与网络层联系,指定接收方地址,等待网络建立虚电路
网络层决定发送方与接收方之间的路径,即该虚电路的所有分组要通过的一系列链路与路由器,也为每段链路决定一个 VC 号;最后,在沿着的路径的每台路由器的转发表中增加一个表项
-
数据传送。创建了虚电路后分组就可以开始沿着虚电路流动了
-
虚电路拆除。当发送方或接收方通知网络层它希望终止该虚电路时就启动这个阶段,然后网络层通常将通知网络另一端的端系统结束呼叫,并更新路径上的每台路由器中的转发表以表明该虚电路已经不存在
端系统向网络发送只是虚电路启动与终止的报文以及路由器之间传递的用于建立虚电路 (即修改路由器表中的连接状态) 的报文,称为 信令报文,用来交换这些报文的协议常称为 信令协议
数据报网络
在数据报网络中,每当一个端系统要发送分组,它就为该分组加上目的端系统的地址,然后就将分组推进网络中。无需建立任何虚电路,路由器也不维护任何虚电路的状态信息。网络中的路由器将有一个将目的地址映射到链路接口的转发表,当分组到达路由器时,路由器使用该分组的目的地址在转发表中查找适当的输出链路接口,然后将分组向该输出链路接口转发
假定所有的目的地地址均为 32 比特,那么将会有超过 40 亿个可能的地址,所以不可能采用在转发表中设置所有目的地址的对应表项的方式来实现转发表。有一种风格是,转发表中用分组的目的地址的 前缀 来与输出接口进行匹配;当有多个匹配时,使用 最长前缀匹配规则,即选择表中最长的匹配项对应的输出接口作为最终的转发接口
数据报网络中的路由器虽然不维持连接状态信息,但它们维持了转发状态信息。其中的转发表是通过路由选择算法进行修改的,通常 1~5 分钟左右就会更新一次转发表;而虚电路网络中,无论何时通过路由器建立一条新的连接,或无论何时通过路由器拆除一条现有的连接,路由器中的转发表就被更新
因为在数据报网络中,转发表能够在任何时候被修改,所以从一个端系统到另一个端系统发送一系列分组可能在通过网络时 走不同的路径,而且 可能无序到达
路由器工作原理
输入端口
输入端口的 线路端接 功能与 链路层处理 实现了用于各个输入链路的物理层和链路层。在这个地方路由器使用转发表来查找输出端口,使得到达的分组将能经过交换结构转发到其输出端口
转发表是由路由选择处理器计算和更新的,但转发表的一份影子副本通常会被存放在每个输入端口,其从路由选择处理器经过独立总线复制到线路卡,借助影子副本,转发决策能在每个输入端口本地做出,无须调用中央路由处理器,避免了集中式处理的瓶颈。缺点就在于输入端口数目多的话,副本数目也多,占用过多空间
对于转发表的查找动作,从概念上讲是很简单的,但这个动作却要求在纳秒级执行完成。在硬件层面上,三态内容可寻址存储器 (TCAM) 也经常被用于查找,TCAM 可以在基本常数时间内返回对一个 32 比特 IP 地址的转发表项的内容
尽管查找在输入端口处理中可以说是最为重要的动作,但必须采取许多其他动作:必须出现物理层和链路层处理;必须检查分组的版本号,检验和以及寿命字段,并且重写后两个字段;必须更新用于网络管理的计数器
交换结构
交换结构位于一台路由器的核心部位,其将分组实际地从一个输入端口交换到一个输出端口。交换可以由以下几种方式完成:
-
经内存交换:在输入端口与输出端口之间的交换是在 CPU (即路由选择处理器) 的直接控制下完成的。
一个分组到达一个输入端口时,该端口会先通过中断方式向路由选择处理器发出信号,于是该分组从输入端口处被复制到处理器内存中;
路由选择处理器则从其首部中提取目的地址,在转发表中找出适当的输出端口,并将该分组复制到输出端口的缓存中
许多现代路由器通过内存进行交换,不过与早期路由器的一个主要差别是,目的地址的查找和将分组存储到释放的内存存储位置是由输入线路卡处理的
-
经总线交换:输入端口经一根共享总线将分组直接传送到输出端口,不需要路由选择处理器的干预。
让输入端口为分组预先计划一个交换机内部标签 (首部),指示本地输出端口,使分组在总线上传送和传输到输出端口;
该分组能被所有输出端口收到,但只有与该标签匹配的端口才能保存该分组,然后标签在输出端口被去除,因为其仅用于交换机内部来跨越总线
如果多个分组同时到达路由器,每个位于不同的输出端口,除了一个分组外所有其他分组必须等待,因为一次只有一个分组能够跨越总线。因为每个分组必须跨过单一总线,故路由器的交换带宽受总线速率的限制
-
经互联网络交换:克服单一,共享式总线带宽限制的一种方法,是使用一个更复杂的互联网络。
纵横式交换机就是一种由 2N 条总线组成的互联网络,它连接 N 个输入端口与 N 个输出端口
每条垂直的总线在交叉点与每条水平的总线交叉,交叉点通过交换结构控制器能够在任何时候开启和闭合
纵横式网络能够并行转发多个分组,只要这些分组使用不同的输入和输出总线;如果来自两个不同输入端口的两个分组其目的地为相同的输出端口,则一个分组必须在输入端等待,因为在某个时刻经给定总线仅有一个分组能够发送
输出端口
输出端口处理取出存放在输出端口内存中的分组并将其发送到输出链路上,其中包括选择和取出排队的分组进行传输,执行所需的链路层和物理层传输功能