网络层的作用:实现主机到主机的通信服务,将分组从一台发送主机移动到一台接收主机。
网络层重要的两大概念:转发和路由选择
1、转发涉及分组在单一的路由器中从一条入链路到一条出链路的传送。
2、路由选择涉及一个网络的所有路由器,它们经路由选择协议共同交互,以决定分组从源到目的地结点所采用的路径。计算这些路径的算法称为路由选择算法。
每台路由器都有一张转发表,路由器通过检查到达分组首部字段的值来转发分组,然后使用该值在该路由器的转发表中索引查找。路由选择算法决定了插入路由器转发表中的值。
路由选择算法可能是集中式的,或者是分布式的。但在这两种情况下,都是路由器接收路由选择协议报文,该信息被用于配置其转发表。
网络层也能在两台主机之间提供无连接服务或连接服务。同在运输层的面向连接服务和无连接服务类似,连接服务需要握手步骤,无连接服务不需要握手。但它们之间也有差异:
1、 在网络层中,这些服务是由网络层向运输层提供的主机到主机的服务。在运输层中,这些服务则是运输层向应用层提供的进程到进程的服务。
2、 在网络层提供无连接服务的计算机网络称为数据报网络;在网络层提供连接服务的计算机网络称为虚电路网络。
3、 在运输层实现面向连接的服务与在网络层实现连接服务是根本不同的。运输层面向连接服务是在位于网络边缘的端系统中实现的;网络层连接服务除了在端系统中,也在位于网络核心的路由器中实现。(原因很简单:端系统和路由器都有网络层)
虚电路网络和数据报网络是计算机网络的两种基本类型。在作出转发决定时,它们使用了非常不同的信息。
最长前缀匹配规则
IP地址有32比特,如果路由器转发表采用“蛮力实现”将对每个可能的目的地址有一个表项。因为有超过40亿个可能的地址,这种选择完全不可能(即使用二分查找也十分慢)。
我们转发表的表项可以设计为几个表项,每个表项匹配一定范围的目的地址,比如有四个表项
- 第一个表项匹配:
11001000 00010111 00010000 00000000到
11001000 00010111 00010111 11111111 - 第二个表项匹配:
11001000 00010111 00011000 00000000到
11001000 00010111 00011000 11111111 - 第三个表项匹配:
11001000 00010111 00011001 00000000到
11001000 00010111 00011111 11111111 - 第四个表项匹配:
除以上三种情况外的地址
(你可能也会考虑到,IP地址有32比特,如果每个路由器设计为只有2个表项,那么也只需要有32个路由器就可以唯一确定这40亿个地址中的一个。)
最长前缀匹配规则,是在转发表中寻找最长的匹配项,并向与最长前缀匹配相关联的链路接口转发分组。这种规则是为了与因特网的编址规则相适应。
路由器体系结构
1、输入端口
“使用转发表查找输出端口”是输入端口最重要的操作(当然还有其他一些操作)。输入端口执行完这些所需的操作后,就把该分组发送进入交换结构。如果来自其他输入端口的分组当前正在使用交换结构,一个分组可能会在进入交换结构时被暂时阻塞,在输入端口处排队,并等待稍后被及时调度以通过交换结构。
2、交换结构
交换结构的三种实现方式
- 经内存交换
- 经总线交换
- 经互联网络交换
3、输出端口
分组调度程序处理在输出端口中排队的分组
4、路由选择处理器
</br>
因特网网络层的内部视图
</br>
IP协议
IP协议版本4,简称为IPv4;IP协议版本6,简称为IPv6。
如上图所示,网络层有三个主要的组件
1、IP协议
2、路由选择协议
3、ICMP协议 (Internet Control Message Protocol, 因特网控制报文协议)
数据报格式
- 版本(4bits):区分IPv4和IPv6
- 首部长度(4bits):因为含有可变数量的选项,所以首部长度也是可变的。大多数IP数据报都不包含选项,所以一般IP数据报具有20字节的首部。
- 服务类型(8bits):如一些特别要求低延时、高吞吐量或可靠性的数据报
- 数据报长度(16bits):IP数据报总长度(首部加上数据),以字节计。理论最长长度为65,535字节,但实际上数据报很少超过1,500字节。
- 标识、标志、片偏移(共32bits):这三个字段与IP分片有关
- 寿命(8bits):(Time-To-Live, TTL),用来确保数据报不会永远(由于长时间的路由选择环路)在网络中循环。每当数据报由一台路由器处理时,该字段的值减1。若TTL字段减为0,则该数据报必须丢弃。
- 协议(8bits):该字段仅在一个IP数据报到达其最终目的地才会有用(即一个端系统),因为上层协议即运输层只有在端系统才有。这个字段指示了IP数据报的数据部分应交给哪个特定的运输层协议。如,值为6表明数据部分要交给TCP;值为17则交给UDP。
- 首部检验和(16bits):用于差错检查,在运输层部分已经有说明。为什么TCP/IP在运输层和网络层都执行差错检查呢?这种重复检查有几种原因。(1)在IP层只对IP首部计算了检验和,而TCP/UDP检验和是对整个TCP/UDP报文段进行的。(2)TCP/UDP与IP不一定都必须属于同一个协议栈。原则上TCP能运行在一个不同的协议(如ATM)上,而IP能够携带不一定要传递给TCP/UDP的数据。
- 源和目的IP地址(共64bits)
- 选项(可变)
- 数据:有效载荷,数据报存在的首要理由。在大多数情况下,IP数据报中的数据字段包含要交付给目的地的运输层报文段(TCP或UDP)。然而,该数据字段也可承载其他类型的数据,如ICMP报文。
</br>
IP数据报分片
不是所有链路层协议都能承载相同长度的网络层分组。有的协议能承载大数据报,而有的协议只能承载小分组。例如,以太网帧能够承载不超过1500字节的数据,而某些广域网链路的帧可承载不超过576字节的数据。
一个链路层帧能承载的最大数据量叫做最大传送单元(Maximun Transmission Unit, MTU)
所以链路层协议的MTU严格限制着IP数据报的长度。这也还不是主要的问题,问题在于发送方与目的地路径上的每段链路可能使用不同的链路层协议,且每种协议可能具有不同的MTU。
举个例子:假定从某条链路收到一个IP数据报,通过检查转发表确定出链路,并且该出链路的MTU比该IP数据报的长度要小。那么如何将这个过大的IP分组压缩进链路层帧的有效载荷字段呢?
解决办法是,将IP数据报中的数据分片成两个或更多个较小的IP数据报,用单独的链路层帧封装这些较小的IP数据报;然后向输出链路上发送这些帧。每个这些较小的数据报都被称为片(fragment)。
路由器完成分片任务。同时,为了使得网络内核保持简单,IPv4设计者把数据报的重组工作放到端系统中,而非放到网络路由器中。
IP数据报分片的例子
前提:一个4000字节的数据报(20字节IP首部加上3980字节IP有效载荷)到达一台路由器,且必须被转发到一条MTU为1500字节的链路上。假定初始数据报贴上的标识号为777。
这意味着初始数据报中3980字节数据必须被分配到3个独立的片(其中的每个片也是一个IP数据报)
IP分片:
IPv4编址
IP地址有32比特,分为网络号和主机号。
IP地址的网络部分(即网络号)被限制为长度为8、16或24比特,这是一种称为分类编址的编址方案。具有8、16和24比特子网地址的子网分别被称为A、B和C类网络。
但是它在支持数量迅速增加的具有小规模或中等规模子网的组织方面出现了问题。一个C类(/24)子网仅能容纳多大2^8 - 2 = 254台主机(2^8 = 256, 其中的两个地址预留用于特殊用途),这对许多组织来说太小了。然而一个B类(/16)子网可支持多达65534台主机,又太大了。这导致B类地址空间的迅速损耗以及所分配的地址空间的利用率低。
广播地址255.255.255.255。当一台主机发出一个目的地址为255.255.255.255的数据报时,该报文会交付给同一个网络中的所有主机。
动态主机配置协议
某组织一旦获得了一块地址,它就可以为本组织内的主机与路由器接口逐个分配IP地址。既可手工配置IP地址,也可以使用动态主机配置协议(Dynamic Host Configuration Protocol, DHCP)自动配置。DHCP还允许一台主机得知其他信息,如它的子网掩码、它的第一跳路由器地址(常称为默认网关)与它的本地DNS服务器的地址。
由于DHCP具有能将主机连接进一个网络相关方面的自动能力,它又被称为即插即用协议。
DHCP是客户-服务器协议。客户通常是新达到的主机,它要活的包括自身使用的IP地址在内的网络配置信息。在最简单的场合下,每个子网将具有一台DHCP服务器。如果在某子网中没有服务器,则需要一个DHCP中继代理(通常是一台路由器),这个代理知道用于该网络的DHCP服务器的地址。
DHCP协议工作的4个步骤:
- DHCP服务器发现(到达的客户-->DHCP服务器)
- DHCP服务器提供(DHCP服务器-->到达的客户)
- DHCP请求(到达的客户-->DHCP服务器)
- DHCP ACK(DHCP服务器-->到达的客户)
网络地址转换(Network Address Translation, NAT)
因特网控制报文协议ICMP
ICMP通常被认为是IP的一部分,但从体系结构上将它是位于IP之上的,因为ICMP报文是承载在IP分组中的。即ICMP报文是作为IP有效载荷承载的,就像TCP与UDP报文段作为IP有效载荷被承载那样。
众所周知的ping程序发送一个ICMP类型8编码0的报文到指定主机。看到该回显请求,目的主机发回一个类型0编码0的ICMP回显回答。大多数TCP/IP实现直接在操作系统中支持ping服务器,即该服务器不是一个进程。
IPv6数据报格式
- 版本(4bits)
- 流量类型(8bits):与IPv4的服务类型类似
- 流标签(20bits)
- 有效载荷长度(16bits)
- 下一个首部(8bits):与IPv4的上层协议类似
- 跳限制(8bits):与IPv4的寿命类似
- 源地址和目的地址
- 数据
新型IPv6系统可做成向后兼容,即能发送、路由和接收IPv4数据报,要使得已部署的IPv4系统能够处理IPv6数据报,最直接的方式是采用一种双栈方法。
路由选择算法
1、链路状态(Link State, LS)算法:属于全局式路由选择算法,这种算法必须知道网络中每条链路的费用。费用可理解为链路的物理长度、链路速度,或与该链路相关的金融上的费用。链路状态算法采用的是Dijkstra算法。
2、距离向量(Distance-Vector, DV)算法:属于迭代的、异步的和分布式的路由选择算法。
“迭代的”,是因为此过程一直要持续到邻居之间无更多信息要交换为止。
“异步的”,是因为它不要求所有结点相互之间步伐一致地操作。
“分布式的”,是因为每个结点都要从一个或多个直接相连邻居接收某些信息,执行计算,然后将其计算结果分发给邻居。
DV算法的方程:
其中,dx(y)表示从结点x到结点y的最低费用路径的费用,c(x, v)是结点x到结点v的费用,结点v指的是所有x的相连结点,所以x的所有相连结点都会用minv方程计算。
LS与DV路由选择算法的比较
(N是结点(路由器)的集合,E是边(链路)的集合)
- 报文复杂性:LS算法要求每个结点都知道网络中每条链路的费用,这就要求要发送O(|N||E|)个报文。而且无论何时一条链路的费用改变时,必须向所有结点发送新的链路费用。DV算法要求在每次迭代时,在两个直接相连邻居之间交换报文。当链路费用改变时,DV算法仅当在新的链路费用导致与该链路相连结点的最低费用路径发生改变时,才传播已改变的链路费用。
- 收敛速度:LS算法是一个要求O(|N||E|)个报文的O(|N^2|)算法。DV算法收敛较慢,且在收敛时会遇到路由选择环路。DV算法还会遭遇无穷计数的问题。
- 健壮性:如果一台路由器发生故障、行为错乱或受到破坏时,LS算法的路由器能够向其连接的一条链路广播不正确费用(但是没有其他链路)。一个LS结点仅计算自己的转发表,这意味着LS算法下,路由计算在某种程度上是分离的,提供了一定程度的健壮性。DV算法下,一个结点可向任意或所有目的结点通告其不正确的最低费用路径。我们注意到在每次迭代时,DV算法中一个结点的计算会传递给它的邻居,然后在下次迭代时再间接地传递给邻居的邻居。在此情况下,DV算法中一个 不正确的结点计算值会扩散到整个网络。
自治系统(Autonomous System, AS)
为了减少公共因特网的路由选择计算的复杂性以及方便企业管理网络,我们将路由器组织进自治系统。
在相同AS中的路由器全都运行同样的路由选择算法,且拥有彼此的信息。在一个自治系统内运行的路由选择算法叫做自治系统内部路由选择协议。
当然,将AS彼此互联是必需的,因此在一个AS内的一台或多台路由器将有另外的任务,即负责向在本AS之外的目的地转发分组。这些路由器被称为网关路由器。
因特网中的路由选择
分为自治系统内部的路由选择和自治系统间的路由选择
1、因特网中自治系统内部的路由选择:路由选择信息协议(Routing Information Protocol, RIP)
2、因特网中自治系统内部的路由选择:开放最短路优先(Open Shortest Path First, OSPF)
3、自治系统间的路由选择:边界网关协议(Broder Gateway Protocol, BGP)
为什么要使用不同的AS间和AS内部路由选择协议?
- 策略。在AS间,策略问题起主导作用。在一个AS内部,一切都是在相同的管理控制名义下进行的,因此策略问题在AS内部选择路由中起着微不足道的作用。
- 规模。扩展一个路由选择算法及其数据结构以处理大量网络或大量网络之间的路由选择的能力,是AS间路由选择的一个关键问题。在一个AS内,可扩展性不是关注的焦点。
- 性能。由于AS间路由选择是面向策略的,因此所用路由的质量(如性能)通常是次要关心的问题。(即一条更长或费用更高但能满足某些策略条件的路由也许被采用了,而更短但不满足那些条件的路由却不会被采用)。
广播路由选择算法
实现广播的方法
1、无控制洪泛。该方法要求源结点向它的所有邻居发送分组的副本。当某结点接收了一个广播分组时,它复制该分组并向它的所有邻居(除了从其接收该分组的那个邻居)转发之。
致命缺点:广播风暴,如果图具有圈,那么每个广播分组的一个或多个分组副本将无休止地循环。
2、受控洪泛。用于避免广播风暴,关键在于正确选择何时洪泛分组,何时不洪泛分组。受控洪泛有两种方法:序号控制洪泛、反向路径转发(Reverse Path Forwarding, RPF)
3、生成树广播。虽然序号控制洪泛和RPF能避免广播风暴,但是它们不能完全避免冗余广播分组的传输。
多播
多播:将分组从一个或多个发送方交付到一组接收方
每台主机有一个唯一的IP单播地址,该单播地址完全独立于它所参与的多播组的地址。
因特网网络层多播由两个互补组件组成:因特网组管理协议(Internet Group Management Protocol, IGMP)和多播路由选择协议
IGMP只有三种报文类型:membership_query报文,membership_report报文,leave_group报文。
与ICMP类似,IGMP报文也是承载在一个IP数据报中。
因特网中使用的多播路由选择
1、距离向量多播路由选择协议
2、协议无关的多播路由选择协议