转发和选路
网络层实现主机到主机的通信服务,需要两个重要的网络层功能:
- 转发。当一个分组到达某路由器的一条输入链路的时候,该路由器必须将该分组移动到适合的输出链路。
- 选路。当分组从发送方流向接收方时,网络层必须决定这些分组转发的路径。
每个路由器具有一个转发表(forwarding table)。路由器通过检查到达分组首部中某个字段值,然后根据该值在转发表中查找输出链路。
选路算法决定了该转发表<首部值,输出链路>的值。选路算法可能是集中式的(例如,该算法在某个中心点执行,并向每台路由器下载选路信息),也可能是分布式的(例如,分布式选路算法的各部分运行在每台路由器上)。关于选路算法,后续会详细介绍。
虚电路和数据报网络
运输层能够提供面向连接和无连接的服务,为此,网络层也需要对应的提供连接和无连接的服务。
为此,仅在网络层中提供无连接服务的计算机网络被称为数据报网络(datagram network)。仅在网络层提供连接服务的计算机网络称为虚电路(Virtual-Circuit,VC)。
虚电路网络
一条虚电路由如下组成:源和目的主机之间的路径(一系列链路和路由器)、VC(virtual circuit)号,沿着该路径的每段链路的号码、以及该路径上每台路由器中的转发表。
在虚电路中有3个明显不同的阶段:
- 虚电路建立。在建立阶段,运输层和网络层联系,指定接收方地址,等待该网络建立虚电路。网络层决定发送方与接收方的路径,即该虚电路的所有分组要通过的一系列链路与路由器。
- 数据传送。一旦创建了虚电路,分组就可以在该虚电路上流动了。
- 虚电路拆除。当发送方(或者接收方)通知网络层它想终止该虚电路时,就启动这个阶段。网络层通常将通知网络另一侧的端系统结束呼叫,并更新路径上每台路由器中的转发表以表明该虚电路不存在了。
虚电路的建立与TCP三次握手建立有一个细微但是很重要的区别:运输层TCP三次握手建立仅仅涉及到了两个端系统,而虚电路不仅仅涉及了端系统,还涉及到了链路上的路由器。
数据报网络
当端系统要发送分组时,数据报网络为该分组加上目的地端系统的地址。路由器是通过该分组的目的地址来转发的,通过查找目的地地址在转发表中对应的链路。
虚电路的概念来源于电话界,由于呼叫建立以及每次呼叫的状态要在网络中的路由器上维持,因此面向虚电路的网络要相对复杂得多。
而数据报网络是由互联计算机需求发展而来的,由于端系统设备相对复杂,所以因特网设计者将网络层服务模型设计得相对简单。
因特网中的转发和编址
网络层有三个主要的组件:
- IP协议。
- 选路组件。决定数据报从源到目的地所流经的路径。
- ICMP(互联网控制报文协议)。用于网络层差错和信息报告。
数据报格式和编址
也就是IP地址的格式,分为IPv4和IPv6。
格式不做赘述。
其编址和格式可以参考IPv4地址。不做赘述。
IP地址分为五类,A类保留给政府机构,B类分配给中等规模的公司,C类分配给任何需要的人,D类用于组播,E类用于实验,各类可容纳的地址数目不同。
特征
A: 0XXX***XXX
B: 10XX***XXX
C: 110X***XXX
D: 1110***XXX
E: 11110**XXX
IPv6格式编址也不做赘述。
CIDR
无类别域间路由(Classless Inter-Domain Routing、CIDR)是一个用于给用户分配IP地址以及在互联网上有效地路由IP数据包的对IP地址进行归类的方法。
一个IP地址包含两部分:标识网络的前缀和紧接着的在这个网络内的主机地址。在之前的分类网络中,IP地址的分配把IP地址的32位按每8位为一段分开。这使得前缀必须为8,16或者24位。因此,可分配的最小的地址块有256(24位前缀,8位主机地址, 2 8 2^8 28=256)个地址,而这对大多数企业来说太少了。大一点的地址块包含65536(16位前缀,16位主机, 2 16 2^{16} 216=65536)个地址,而这对大公司来说都太多了。这导致不能充分使用IP地址和在路由上的不便,因为大量的需要单独路由的小型网络(C类网络)因在地域上分得很开而很难进行聚合路由,于是给路由设备增加了很多负担。
CIDR技术用子网掩码中连续的1部份表示网络ID,连续的0部份表示主机ID。比如,网络中包含2000台计算机,只需要用11位表示 主机ID,用21位表网络ID,则子网掩码表示为11111111.11111111.11100000.00000000,转换为十进制则为 255.255.224.0。此时,该网络将包含2046台计算机,既不会造成IP地址的浪费,也不会利用路由器连接网络,增加额外的管理维护量。
CIDR 还使用“斜线记法”,它又称为CIDR记法,即在IP地址后面加上一个斜线“/”,然后写上网络前缀所占的比特数(这个数值对应于三级编址中子网掩码中比特1的个数)。
CIDR表示方法:IP地址/网络ID的位数,比如192.168.23.35/21,其中用21位表示网络ID。
将多个连续的前缀聚合成超网,以及,在互联网中,只要有可能,就显示为一个聚合的网络,因此在总体上可以减少路由表的表项数目。
NAT
NAT英文全称是“Network Address Translation”,中文意思是“网络地址转换”,它允许一个整体机构以一个公用IP(Internet Protocol)地址出现在Internet上。顾名思义,它是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术。
NAT就是在局域网内部网络中使用内部地址,而当内部节点要与外部网络进行通讯时,就在网关处将内部地址替换成公用地址,从而在外部公网(internet)上正常使用,NAT可以使多台计算机共享Internet连接,这一功能很好地解决了公共 IP地址紧缺的问题。
选路算法
根据选路算法是全局的还是局部的,选路算法可以分为:
- 全局选路算法:用完整的,全局性的网络信息来计算从源到目的的最低费用路径。这种算法通常称为链路状态算法即LS算法,因为该算法必须知道网络中每条链路的费用。
- 分布式选路算法:以迭代的、分布式的方式计算出最低费用路径。没有节点拥有关于所有网络链路费用的完整信息,而每个节点仅有与其直接相连链路的费用信息即可开始工作。然后通过迭代计算过程并与相邻节点交换信息,一个节点逐渐计算出到达目的节点或者一组目的节点的最低费用路径。
还可以根据算法是静态的还是动态的来分类:
- 静态选路算法:随着时间的推移,路由的变化非常缓慢,同时是在人的干预下进行调整。
- 动态选路算法:能够在网络流量负载或者拓扑发生变化时改变选路路径。动态选路算法可以周期性的运行或者在拓扑或链路费用发生变化时直接运行。
链路状态选路算法 LS
在链路状态算法中,通过让每个节点向所有其他路由器广播链路状态分组,每个链路状态分组包含它所连接的链路的特征和费用,从而网络中每个节点都建立了关于整个网络的拓扑。
Dijkstra 算法计算从源节点到网络中所有其他节点的最低费用路径即可。
LS算法需要注意选路振荡问题(通常该算法的链路费用依赖于该链路上承载的负载)。
另外还有距离矢量选路算法 DV。不做赘述。
选路协议在此也不做赘述。