计算机基础(笔记)——计算机网络(网络层)
Posted XML火柴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机基础(笔记)——计算机网络(网络层)相关的知识,希望对你有一定的参考价值。
网络层
概述
与运输层和应用层不同的是,在网络中的每一台主机和路由器中都有一个网络层部分。正因如此,网络层协议是协议栈中最具挑战性的部分。
网络层也是协议栈中最复杂的层次之一,因此我们将在这里涉及大量的知识。我们的学习从网络层的概述和它能够提供的服务开始。我们将仔细考察两种用于构造网络层分组交付的方法,即数据报模式和虚电路模式,并且理解编址在传递分组到目的主机所起的重要作用。
将对网络层的转发( forwarding)功能和路由选择( routing)功能做重要区分。转发涉及分组在单一的路由器中从一条入链路到一条出链路的传送。路由选择涉及一个网络的所有路由器,它们经路由选择协议共同交互,以决定分组从源到目的地结点所采用的路径。
为了加深对分组转发的理解,我们将“进入”路由器内部来观察它的硬件体系结构和组织。接下来我们将观察在因特网中的分组转发,以及令人称颂的网际协议(IP)。研究网络层编址和Pv4的数据报格式。然后探讨网络地址转换(NAT)、数据报分段、因特网控制报文协议(ICMP)和IPv6。
路由选择算法的任务是决定从发送方到接收方的好的路径(等价地为路由)。首先学习路由选择算法的理论,关注两种最为流行的算法类型:链路状态和距离矢量算法。因为路由选择算法的复杂性随着网络路由器数量的增加会有相当大的增长,因此会关注等级制路由选择方法。当
我们涉及因特网的自治系统内部的路由选择协议(RIP、OSPF和IS-IS)和因特网的自治系统之间的路由选择协议(BCP)时,将看到理论是如何付诸实践的。最后讨论播和多播路由选择。
路由器的主要作用是将数据报从入链路转发到出链路
转发和路由选择
网络层的作用从表面上看极为简单,即将分组从一台发送主机移动到一台接收主机。为此,需要两种重要的网络层功能:
- 转发。当一个分组到达路由器的一条输入链路时,路由器必须将该分组移动到适当的输出链路。
- 路由选择。当分组从发送方流向接收方时,网络层必须决定这些分组所采用的路由或路径。计算这些路径的算法被称为路由选择算法( routing algorithm)。
转发是指将分组从一个输入链路接口转移到适当的输出链路接口的路由器本地动作。路由选择是指网络范围的过程,以决定分组从源到目的地所采取的端到端路径。
每台路由器具有一张转发表( forwarding table)。路由器通过检查到达分组首部字段的值来转发分组,然后使用该值在该路由器的转发表中索引查询。存储在转发表项中的该首部的值指出了该分组将被转发的路由器的输出链路接口。分组首部中的该值可能是该分组的目的地址或该分组所属连接的指示,这取决于网络层协议。
路由选择算法决定了插入路由器的转发表中的值。路由选择算法可能是集中式的,或是分布式的。在任何一种情况下,都是路由器接收路由选择协议报文,该信息被用于配置其转发表。通过考虑网络中的一种假想情况(不真实的,但技术上是可行的),其中所有的转发表是由人类网络操作员直接配置而在路由器中物理地存在,转发和路由选择功能的区别和不同能被进一步说明。在这种情况下,不需要任何路由选择协议!
当然,该人类操作员将需要彼此交互,以确保该转发表配置得能使分组到达它们想要到达的目的地。也很可能出现下列现象:人工配置更容易出错,并且对于网络拓扑的变化,响应起来比路由选择协议慢。约定术语分组交换机是指一台通用分组交换设备,它根据分组首部字段中的值,从输入链路接口到输出链路接口转移分组。某些分组交换机称为链路层交换机(link- layer switches),基于链路层字段中的值做转发决定。其他分组交换机称为路由器( router),基于网络层字段中的值做转发决定。因为在本章中关注的是网络层,所以我们使用术语路由器代替分组交换机。当我们谈论虚电路网络中的分组交换机时,我们甚至将使用词汇路由器。
####连接建立
刚才说过网络层有两个重要的功能,转发和路由选择。但我们很快将看到在某些计算机网络中,实际上有第三种重要的网络功能,即连接建立( connection setup)。回想我们学习TCP时,当数据能从发送方流向接收方之前,需要三次握手。这允许发送方和接收方建立所需的状态信息(例如,序号和初始流控制窗口长度)。以类似的方式,某些网络层体系结构如ATM、帧中继、MPLS,要求从源到目的地沿着所选择的路径彼此握手,以便在给定源到目的地连接中的网络层数据分组能够开始流动之前建立起状态。在网络层,该过程被称为连接建立。
网络服务模型
网络服务模型( network service model)定义了分组在发送与接收端系统之间的端到端运输特性。
在发送主机中,当运输层向网络层传递一个分组时,能由网络层提供的特定服务包括:
- 确保交付。该服务确保分组将最终到达其目的地。
- 具有时廷上界的确保交付。该服务不仅确保分组的交付,而且在特定的主机到主机时延上界内(例如在100ms内)交付。
此外,能够为给定的源和目的地之间的分组流提供下列服务:
- 有序分组交付。该服务确保分组以它们发送的顺序到达目的地。
- 确保最小带宽。这种网络层服务模仿在发送和接收主机之间的一条特定比特率的传输链路的行为。只要发送主机以低于特定比特率的速率传输比特(作为分组的组成部分),则分组不会丢失,且每个分组会在预定的主机到主机时延内到达。
- 确保最大时延抖动。该服务确保位于发送方的两个相继分组之间的时间量等于在目的地接收到它们之间的时间量(或这种间隔的变化不超过某些特定的值)。
- 安全性服务。使用仅由源和目的主机所知晓的一个秘密会话密钥,在源主机中的网络层能够加密向目的主机发送的所有数据报负载。在目的主机中的网络层则能够负责解密该负载。使用这种服务,能够向源和目的主机之间的所有运输层报文段(TCP和UDP)提供机密性。除了机密性以外,网络层能够提供数据完整性和源鉴别服务。
因特网的网络层提供了单一的服务,称为尽力而为服务(best- effort service)。从下表看,尽力而为服务看起来是根本无服务的一种委婉说法。使用尽力而为服务,分组间的定时是不能确保被保证的,分组接收的顺序也不能保证与发送的顺序一致,传送的分组也不能保证最终交付。给出这样的定义,一个没有向目的地交付分组的网络也符合尽力而为交
付服务的定义。
网络体系结构 | 服务模型 | 带宽保证 | 无丢包保证 | 有序 | 定时 | 拥塞指示 |
---|---|---|---|---|---|---|
因特网 | 尽力而为 | 无 | 无 | 任何可能的顺序 | 不维护 | 无 |
ATM | CBR | 保证恒定速率 | 是 | 有序 | 维护 | 不出现拥塞 |
ATM | ABR | 保证最小速率 | 无 | 有序 | 不维护 | 提供拥塞指示 |
其他的网络体系结构已定义和实现了许多超过因特网的尽力而为服务的服务模型。例如,ATM网络体系结构提供了多重服务模型,意味着可以在相同的网络中为不同的连接提供不同类别的服务。两个最重要的ATM服务模型是恒定比特率和可用比特率服务:
- 恒定比特率( Constant Bit Rate,CBR)ATM网络服务。这是第一个被标准化的ATM服务模型,反映了电话公司对ATM的早期兴趣,以及CBR服务在承载实时、恒定比特率的音频和视频流量方面的适用性。CBR服务的目标从概念上讲是简单的,就是使网络连接看起来就像在发送与接收主机之间存在一条专用的、固定带宽的传输链路,以使用性质相同的虚拟管道来提供分组(ATM术语称为信元)流。使用CBR服务,ATM信元流以如下方式被承载跨越网络,即一个信元的端到端时延、信元端到端时延中的可变性(即时延抖动)及丢失或推迟交付的信元的比率都确保在特定值以下。当第一次建立CBR连接时,发送主机与ATM网络认可了这些值。
- 可用比特率( Available Bit Rate,ABR)ATM网络服务。由于因特网提供了所谓的尽力而为服务,ATM的ABR也许最好被刻画为比尽力而为服务稍好一点的服务。与因特网服务模型一样,ABR服务下的信元也许会丢失。然而与因特网不同的是,信元不能被重排序(虽然它们可能丢失),对于使用ABR服务的连接来说,最小信元传输速率(MCR)是可以得到保证的。如果在给定时间内网络有足够的空闲资源,发送方也可以用比MCR更高的速率成功地发送数据。另外, ATM ABR服务能够为发送方提供反馈信息(利用一个拥塞通知比特,或一个明确的速率发送),以便控制发送方在MCR和一个允许的峰值信元速率之间调整其速率。
虚电路和数据报网络
因特网的运输层为每个应用程序在两种服务间提供了选择:UDP,一种无连接服务;或TCP,一种面向连接服务。以类似的方式,网络层也能够在两台主机之间提供无连接服务或连接服务。网络层的连接和无连接服务在许多方面与运输层的面向连接和无连接服务类似。例如,网络层连接服务以源和目的主机间的握手开始;网络层无连接服务则没有任何握手预备步骤。
尽管网络层连接和无连接服务与运输层面向连接和无连接服务有类似之处,但也存在重大差异:
- 在网络层中,这些服务是由网络层向运输层提供的主机到主机的服务。在运输层中,这些服务则是运输层向应用层提供的进程到进程的服务。
- 在至今为止的所有主要的计算机网络体系结构中(因特网、ATM、帧中继等),网络层或者提供了主机到主机的无连接服务,或者提供了主机到主机的连接服务,而不同时提供这两种服务。仅在网络层提供连接服务的计算机网络称为虚电路( Virtual-Circuit,VC)网络;仅在网络层提供无连接服务的计算机网络称为数据报网络( datagram network)。
- 在运输层实现面向连接的服务与在网络层实现连接服务是根本不同的。运输层面向连接服务是在位于网络边缘的端系统中实现的,网络层连接服务除了在端系统中,也在位于网络核心的路由器中实现。
虚电路网络和数据报网络是计算机网络的两种基本类型。在作出转发决定时,它们使用了非常不同的信息。
虚电路网络
虽然因特网是一个数据报网络,但许多其他网络体系结构(包括ATM、帧中继的体系结构)却是虚电路网络,因此在网络层使用连接。这些网络层连接被称为虚电路。我们现在考虑在计算机网络中是如何实现虚电路服务的。
一条虚电路的组成如下:
- 源和目的主机之间的路径(即一系列链路和路由器);
- VC号,沿着该路径的每段链路的一个号码;③沿着该路径的每台路由器中的转发表表项。属于一条虚电路的分组将在它的首部携带一个VC号。因为一条虚电路在每条链路上可能具有不同的VC号,每台中间路由器必须用一个新的VC号替代每个传输分组的VC号。该新的VC号从转发表获得。
无论何时跨越一台路由器创建一条新的虚电路,转发表就增加了一个新表项。类似地,无论何时终止一条虚电路,沿着该路径每个表中的相应项将被删除。
一个分组沿着其路由在每条链路上不简单地保持相同的VC号的原因:
第一,逐链路代替该号码减少了在分组首部中VC字段的长度。
第二方面更为重要,通过允许沿着该虚电路路径每条链路有一个不同的VC号,大大简化了虚电路的建立。特别是,在具有多个VC号的路径,其上的每条链路能够独立于沿着该路径的其他链路所选的号码选择一个VC号。如果沿着某路径的所有链路要求一个共同的VC号的话,路由器将不得不交换并处理相当大量的报文,以约定一个共同的VC号(例如,个并未由这些路由器的任何其他现有虚电路使用的号码)用于一次连接。
在虛电路网络中,该网络的路由器必须为进行中的连接维持连接状态信息( connection state information)。特别是,每当跨越一台路由器创建一个新连接,必须在该路由器的转发表中增加一个新的连接项;每当释放一个连接,必须从该表中删除该项。值得注意的是,即使没有VC号转换,仍有必要维持连接状态信息,该信息将VC号与输出接口号联系起来。
在虚电路中有3个明显不同的阶段:
- 虚电路建立。在建立阶段,发送运输层与网络层联系,指定接收方地址,等待网络建立虚电路。网络层决定发送方与接收方之间的路径,即该虚电路的所有分组要通过的一系列链路与路由器。网络层也为沿着该路径的每条链路决定一个VC号。最后,网络层在沿着路径的每台路由器的转发表中增加一个表项。在虚电路建立期间,网络层还可以预留该虚电路路径上的资源(如带宽)。
- 数据传送。一旦创建了虚电路,分组就可以开始沿该虚电路流动。
- 虚电路拆除。当发送方(或接收方)通知网络层它希望终止该虚电路时,就启动这个阶段。然后网络层通常将通知网络另一侧的端系统结東呼叫,并更新路径上每台分组路由器中的转发表以表明该虚电路已不存在了。
在网络层的虚电路建立与运输层的连接建立之间有一个细微但很重要的区别。运输层的连接建立仅涉及两个端系统。在运输层的连接建立期间,两个端系统独自决定运输层连接的参数(如初始序号与流量控制窗口长度)。虽然这两个端系统已经知道该运输层连接,但网络中的路由器则对这些完全不知情。在另一方面,对于一个虚电路网络层,沿两个端系统之间路径上的路由器都要参与虚电路的建立,且每台路由器都完全知道经过它的所有虚电路。
端系统向网络发送指示虚电路启动与终止的报文,以及路由器之间传递的用于建立虚电路(即修改路由器表中的连接状态)的报文,它们被称为信令报文( signaling message),用来交换这些报文的协议常称为信令协议( signaling protocol)。
数据报网络
在数据报网络中,每当一个端系统要发送分组,它就为该分组加上目的端系统的地址,然后将分组推进网络中。如图4-5中所示,无需建立任何虚电路,路由器不维护任何虚电路的状态信息(因为没有虚电路!)。
当分组从源到目的地传输,它通过一系列路由器传递。这些路由器中的每台都使用分组的目的地址来转发该分组。特别是,每台路由器有一个将目的地址映射到链路接口的转发表;当分组到达路由器时,路由器使用该分组的目的地址在转发表中查找适当的输出链路接口。然后路由器有意将分组向该输出链路接口转发。为了进一步深入理解查找操作,我们看一个特定的例子。假定所有的目的地地址均是32比特(这恰好就是在P数据报中目的地址的长度)。转发表的蛮力实现将对每个可能的目的地址有一个表项。因为有超过40亿个可能的地址,这种选择完全是不可能的。
现在假设路由器有4条链路,编号0~3,分组以如下方式转发到链路接口:
目的地址范 | 链路接口 |
---|---|
11001000 00010111 00010000 00000000 | |
到 | 0 |
11001000 00010111 00010111 11111111 | |
11001000 00010111 00011000 00000000 | |
到 | 1 |
11001000 00010111 00011000 11111111 | |
11001000 00010111 00011001 00000000 | |
到 | 2 |
11001000 00010111 00011111 11111111 | |
其他 | 3 |
仅包括4个表项的下列转发表:
前缀匹配 | 链路接口 |
---|---|
11001000 00010111 00010 | 0 |
11001000 00010111 00011000 | 1 |
11001000 00010111 00011 | 2 |
其他 | 3 |
使用这种风格的转发表,路由器用分组的目的地址的前缀( prefix)与该表中的表项进行匹配;如果存在一个匹配项,则路由器向与该匹配项相联系的链路转发分组。例如,
假设分组的目的地址是11001000 00010111 00010110 10100001;因为该地址的21比特前缀匹配该表的第一项,所以路由器向链路接口0转发该分组。如果一个前缀不匹配前3项中的任何一项,则路由器向链路接口3转发该分组。尽管听起来足够简单,但这里还是有重要的微妙之处。注意到一个目的地址可能与不止一个表项相匹配。例如,地址11001000 00010100 01000010 10101010的前24比特与表中的第二项匹配,而该地址的前21比特与表中的第三项匹配。当有多个匹配时,该路由器使用最长前缀匹配规则( longest prefix matching rule);即在该表中寻找最长的匹配项,并向与最长前缀匹配相关联的链路接口转发分组。
虽然在数据报网络中的路由器不维持连接状态信息,但它们无论如何在其转发表中维持了转发状态信息。然而,转发状态信息表变化的时间尺度相对要慢。实际上,在数据报网络中的转发表是通过路由选择算法进行修改的,这通常每1~5分钟左右更新一次转发表。在虚电路网络中,无论何时通过路由器建立一条新的连接,或无论何时通过路由器拆除一条现有的连接,路由器中的转发表就被更新。对一台第一层主干路由器而言,这很容易以微秒的时间尺度进行更新。
因为在数据报网络中的转发表能够在任何时刻修改,从一个端系统到另一个端系统发送一系列分组可能在通过网络时走不同的路径,并可能无序到达。
虚电路和数据报网络的由来
数据报与虚电路网络的演化反映了它们的由来。作为一条重要的组织原则,虚电路的概念来源于电话界,它采用了真正的电路。由于呼叫建立及每呼叫的状态要在网络中的路由器上维持,一个面向虚电路的网络显然比数据报网络要复杂得多。这也与它的电话传统一致。电话网络在网络中必然有其复杂性,因为它们要连接哑端系统设备。
另一方面,因特网作为一种数据报网络,是由将计算机连接在一起的需求发展而来的。由于端系统设备复杂得多,因特网架构师们选择使网络层服务模型尽可能简单。
- 由于所产生的因特网服务模型使服务保证最少(没有!),它对网络层施加了最小
限度的需求。这使得互联使用各种不同链路层技术而且具有十分不同的传输速率
和丢包特性的网络变得更加容易。这些链路层技术包括卫星、以太网、光纤或无
线。 - 诸如电子邮件、Web等应用,甚至如DNS这样的网络基础设施都是在位于网络边缘的主机(服务器)上实现的。增加一个新服务只需连接台主机到网络中,并定义一个新的应用层协议(如HTP)即可,这种能力可以使如Web之类的新服务能在相当短的时间内在因特网上得以部署。
路由器工作原理
网络层的转发功能( forwarding function),即实际将分组从一台路由器的入链路传送到适当的出链路。
- 输入端口。输入端口执行几项关键功能。它要执行将一条输入的物理链路与路由器相连接的物理层功能。它还要执行需要与位于入链路远端的数据链路层交互的数据链路层功能。也许更
为重要的是,在输入端口还要完成查找功能。正是在这里,通过查询转发表决定路由器的输出端口,到达的分组通过路由器的交换结构将转发到输出端口。控制分组(如携带路由选择协议信息的分
组)从输入端口转发到路由选择处理器。 - 交换结构。交换结构将路由器的输入端口与输出端口相连接。这种交换结构完全包含在路由器中,即它是一个网络路由器中的网络!
- 输出端口。输出端口存储从交换结构接收的分组,并通过执行必要的链路层和物理层功能在输入链路上传输这些分组。当一条链路是双向的(即承载两个方向的流量)时,输出端口通常是与该链路的输入端口在同一线路卡(一个包含一个或多个输入端口的印刷电路,它与交换结构相连)上成对出现的。
- 路由选择处理器。路由选择处理器执行路由选择协议,维护路由选择表以及连接的链路状态信息,并为路由器计算转发表。它还执行网络管理功能。
对路由器的转发功能和路由选择功能加以区分。一台路由器的输入端口、输出端口和交换结构共同实现了这种转发功能,并且总是用硬件实现。这些转发功能有时总称为路由器转发平面( router forwarding plane)。为了理解为何需要硬件实现,考虑具有10Gbps带宽的输入链路和64字节的P数据报,其输人端口在另一个数据报到达前仅有51.2ns来处理数据报。如果N个端口结合在一块线路卡上(因为实践中常常这样做),数据报处理流水线必须以N倍速率运行,这远快过软件实现的速率。转发平面硬件既能够使用厂商自己的硬件设计来实现,也能够使用购买的商用硅芯片来实现。
当转发平面以纳秒时间尺度运行时,路由器的控制功能(即执行路由选择协议、对上线或下线的连接链路进行响应,以及执行管理功能),在毫秒或秒时间尺度上运行。这些路由器控制平面( router control plane)通常用软件实现并在路由选择处理器上执行(通常是一种传统的CPU)。
输入端口
输入端口的线路端接功能与链路层处理实现了用于各个输入链路的物理层和链路层。在输入端口中执行的查找对于路由器的运行是至关重要的。正是在这个地方,路由器使用转发表来查找输出端口,使得到达的分组将能经过交换结构转发到该输出端口。转发表是由路由选择处理器计算和更新的,但转发表的一份影子副本通常会被存放在每个输入端口。转发表从路由选择处理器经过独立总线(例如一个PCI总线)复制到线路卡。有了影子副本,转发决策能在每个输人端口本地做出,无须调用中央路由选择处理器,因此避免了集中式处理的瓶颈。
假定转发表已经存在,从概念上讲表查找是简单的,即我们只是搜索转发表查找最长前缀匹配,。但在吉比特速率下,这种查找必须在纳秒级执行)。因此,不仅必须要用硬件执行查找,而且需要对大型转发表使用超出简单线性搜索的技术。同时必须对内存访问时间给予特别关注,这导致用嵌入式片上DRAM和更快的SRAM(用作一种DRAM缓存)内存来设计。三态内容可寻址存储器( Tenary Content Address Memory,TCAM)也经常被用于查找。使用一个TCAM,一个32比特IP地址被放入内存,TCAM在基本常数时间内返回对该地址的转发表项的内容。 Cisco8500对每个输入端口有一个64K的CAM。
一旦通过查找确定了某分组的输出端口,则该分组就能够发送进入交换结构。在某些设计中,如果来自其他输入端口的分组当前正在使用该交换结构,一个分组可能会在进入交换结构时被暂时阻塞。因此,一个被阻塞的分组必须要在输入端口处排队,并等待稍后被及时调度以通过交换结构。尽管“査找”在输入端口处理中可以说是最为重要的动作,但必须采取许多其他动作:①必须出现物理层和链路层处理;②必须检查分组的版本号、检验和以及寿命字段,并且重写后两个字段;③必须更新用于网络管理的计数器(如接收到的IP数据报的数目)。
注意到输入端口查找IP地址然后发送该分组进入交换结构(“动作”)的步骤是一种更为一般的“匹配加动作”抽象的特定情况,这种抽象执行在许多网络设备中,而不仅在路由器中。在链路层交换机中,除了发送帧进入交换结构去往输出端口外,还要查找链路层目的地址,并采取几个动作。在防火墙中,首部匹配给定准则(例如源/目的P地址和运输层端口号的某种组合)的入分组可能被阻止转发,而防火墙是一种过滤所选择的入分组的设备。在网络地址转换(NAT)中,一个运输层端口号匹配某给定值的入分组,在转发(动作)前其端口号将被重写。因此,“匹配加动作”抽象不仅作用大,而且在网络设备中无所不在。
交换结构
交换结构位于一台路由器的核心部位。正是通过这种交换结构,分组才能实际地从
个输入端口交换(即转发)到一个输出端口中。
- 经内存交换。最简单、最早的路由器是传统的计算机,在输入端口与输出端口之间的交换是在CPU(路由选择处理器)的直接控制下完成的。输入与输出端口的功能就像在传统操作系统中I/O设备一样。一个分组到达一个输人端口时,该端口会先通过中断方式向路由选择处理器发出信号。于是,该分组从输入端口处被复制到处理器内存中。路由选择处理器则从其首部中提取目的地址,在转发表
中找出适当的输出端口,并将该分组复制到输出端口的缓存中。在这种情况下,如果内存带宽为每秒可写进内存或从内存读出B个分组,则总的转发吞吐量(分组从输入端口被传送到输出端口的总速率)必然小于B/2。也要注意到不能同时转发两个分组,即使它们有不同的端口号,因为经过共享系统总线一次仅能执行个内存读/写。
许多现代路由器通过内存进行交换。然而,与早期路由器的一个主要差别是,目的地址的查找和将分组存储(交换)进适当的内存存储位置是由输入线路卡来处理的。在某些方面,经内存交换的路由器看起来很像共享内存的多处理机,用一个线路卡上的处理将分组交换(写)进适当的输出端口的内存中。 - 经总线交換。在这种方法中,输入端口经一根共享总线将分组直接传送到输出端口,不需要路由选择处理器的干预。通常按以下方式完成该任务:让输入端口为分组预先计划一个交换机内部标签(首部),指示本地输出端口,使分组在总线上传送和传输到输出端口。该分组能由所有输出端口收到,但只有与该标签匹配的端口才能保存该分组。然后标签在输出端口被去除,因为其仅用于换机内部来跨越总线。如果多个分组同时到达路由器,每个位于不同的输出端口,除了一个分组外所有其他分组必须等待,因为一次只有一个分组能够跨越总线。因为每个分组必须跨过单一总线,故路由器的交换带宽受总线速率的限制。
- 经互联网络交換。克服单一、共享式总线带宽限制的一种方法是,使用一个更复
杂的互联网络。纵横式交换机就是一种由2N条总线组成的互联网络,它连接N个输入端口
与N个输出端口。与前面两种交换方法不同,纵横式网络能够并行转发多个分组。然而,如果来自两个不同输入端口的两个分组其目的地为相同的输出端口,则一个分组必须在输入端等待,因为在某个时刻经给定总线仅有一个分组能够发送。
更为复杂的互联网络使用多级交换元素,以使来自不同输入端口的分组通过交换结构同时朝着相同的输出端口前行。
输出端口
输出端口处理取出存放在输出端口内存中的分组并将其发送到输出链路上。这包括选择和取出排队的分组进行传输,执行所需的链路层和物理层传输功能。
何处出现排队
在输入端口和输出端口处都能够形成分组队列。排队的位置和程度(或者在输入端口排队,或者
在输出端口排队)将取决于流量负载、交换结构的相对速率和线路速率。随着这些队列的增长,路由器的缓存空间将最终会耗尽,并且当无内存可用于存储到达的分组时将会出现丢包( packet loss)。在一台路由器的这些队列中,这些分组被实际丢弃或丢失。
假定输入线路速度与输出线路速度是相同的,均为每秒Rline个分组,有N个输入端口和N个输出端口。为进一步简化讨论,假设所有分组具有相同的固定长度,分组以同步的方式到达输入端口。这就是说,在任何链路发送分组的时间等于在任何链路接收分组的时间,在这样的时间间隔内,在一个输入链路上能够到达0个或1个分组。定义交换结构传送速率Rswitch为从输入端口到输出端口能够移动分组的速率。如果Rswitch比Rline快N倍,则在输入端口处仅会出现微不足道的排队。这是因为即使在最坏情况下,所有N条输入线路都在接收分组,并且所有的分组将被转发到相同的输出端口,每批N个分组(每个输入端口一个分组)能够在下一批到达前通过交换结构处理完毕。
在输出端口处,仍然假设Rswitch比Rline快N倍。同样,到达N个输入端口的每个端口的分组都发向相同的输出端口。在这种情况下,在向输出链路发送一个分组的时间内,将有N个分组到达该输出端口。因为输出端口在一个单位时间(分组传输时间)内只能发送一个分组,这N个到达的分组必须排队(等待)传输到输出链路上。于是,又有N个分组可能在它只能发送已排队的N个分组中的一个的时间内到达。这种情况会不断持续下去。最终,排队的分组数量会增长得很快,足以耗尽输出端口的可用内存,在这样的情况下分组被丢弃。
假定需要路由器缓存来吸收流量负载的波动,一个自然而然的问题就是需要多少缓存。对缓存长度的经验方法是RFC 3439,缓存数量(B)应当等于平均往返时延(RTT,比如说250ms)乘以链路的容量©。这个结果是基于相对少量的TCP流的排队动态性分析得到的。因此,一条具有250 ms RTT的10Cbps链路将需要的缓存量等于B=RT・C=2.5Gb。当有大量的TCP流(N)流过一条链路时,缓存所需要的数量是B=RTTC/√N。对于通常有大量流经过的大型主干路由器链路,N的值可能非常大,这使得所需的缓存长度的减小相当明显。
输出端口排队的后果就是,在输出端口上的一个分组调度程序( packet scheduler)必须在这些排队的分组中选出一个来发送。这种选择可能是根据简单的原则来定,如先来先服务(FCFS)调度,或者更复杂的调度规则,如加权公平排队(WFQ)。WFQ规则是在具有排队等待传输的分组的不同端到端连接之间公平地共享输出链路。分组调度程序在提供服务质量保证( quality-of- service guarantee)方面起着关键作用。
如果没有足够的内存来缓存一个入分组,那么必须作出决定:要么丢弃到达的分组(一种称为弃尾(drop-tail) 的策略),要么删除一个或多个已排序的分组来为新到的分组腾出空间。在某些情况下,在缓存填满前便丢弃(或在首部加标记)一个分组以便向发送方提供一个拥塞信号的做法是有利的。已经提出和分析了许多分组丢弃与标记策略,这些策略统称为主动队列管理( Active Queue Management,AQM)算法。随机早期检測( Random Early Detection,RED)算法是一种得到最广泛研究和实现的AQM算法。在RED算法中,为输出队列长度维护着一个加权平均值。如果平均队列长度小于最小阈值minth,则当一个分组到达时,该分组被接纳进队列。相反,如果队列满或平均队列长度大于最大阙值maxth,则当一个分组到达时,该分组被标记或丢弃。最后,如果一个分组到达,发现平均队列长度在[minth,maxth]之间时,则该分组以某种概率被标记或丢弃,该概率一般是平均队列长度、minth和maxth的某种函数。
如果交换结构不能快得(相对于输入线路速度而言)使所有到达分组无时延地通过它传送,则在输入端口也将出现分组排队,因为到达的分组必须加入输入端口队列中,以等待通过交换结构传送到输出端口。为了举例说明这种排队的重要后果,考虑纵横式交换结构,并假定:①所有链路速度相同;②一个分组能够以一条输入链路接收一个分组所用的相同的时间量,从任意一个输入端口传送到给定的输出端口;③分组按FCFS方式,从指定输入队列移动到其要求的输出队列中。只要其输出端口不同,多个分组可以被并行传送。然而,如果位于两个输入队列前端的两个分组是发往同一输出队列的,则其中的一个分组将被阻塞,且必须在输入队列中等待,因为交换结构一次只能传送一个分组到某指定端口。
输入排队交换机中的线路前部阻塞(Head-Or-the-line,HOL),即在一个输入队列中排队的分组必须等待通过交换结构发送(即使输出端口是空闲的),因为它被位于线路前部的另一个分组所阻塞。,由于HOL阻塞,只要输入链路上的分组到达速率达到其容量的58%,在某些假设前提下,输入队列长度将无限制地增大(不严格地讲,这等同于说将出现大量的丢包)。
路由选择控制平面
假设路由选择控制平面全部驻留并运行在路由器中的路由选择处理器上。网络范围的路由选择控制平面因此是分布式的,即不同部分(例如路由选择算法)执行在不同的路由器上并且通过彼此发送控制报文进行交互。实际上,今天因特网路由器的路由选择算法正是以这种方式运行的。此外,路由器和交换机厂商将它们的硬件数据平面和软件控制平面绑在起放入封闭(但可互操作)的平台中,成为一种垂直综合的产品。
数据平面连同部分控制平面(例如,链路状态的本地测量/报告,转发表的安装和维护)在路由器中实现,部分控制平面能够在路由器外部实现(例如,在能够执行路由计算的集中式服务器中实现)。一个定义良好的API规定了这两个部分彼此交互和通信的方式。这些研究人员争辩说将软件控制平面与硬件数据平面(具有最少的路由器驻留控制平面)分离,能够以集中式路由选择计算代替分布式路由选择计算,从而简化路由选择,通过允许不同的用户定制的控制平面在快速的硬件数据平面上运行,能够进行网络创新。
##网际协议:因特网中的转发和编址到目前为止,我们有关网络层编址和转发的讨论并未提及任何特定的计算机网络。在
因特网编址和转发是网际协议(IP)的重要组件。目前有两个版本的P在使用。首先研究广泛
部署的IP协议版本4,这通常简称为IPv4[RFC7911。我们将在本节结尾研究P版本6RFC 2460,RFC4 2911,已经提议用它替代IP4。因特网的网络层有三个主要组件。第一个组件是IP协议。第二个主要组件是路由选择部分,它决定了数据报从源到目的地所流经的路径。网络层的最后一个组件是报告数据报中的差错和对某些网络层信息请求进行响应的设施。因特网的网络层差错和信息报告的协议,即互联网控制报文协议(ICMP)。
数据报格式
版本 | 首部长度 | 服务类型 | 数据包长度(字节) | ||||||||||||||||||||||||||||
16比特标识 | 标志 | 13比特片位移 | |||||||||||||||||||||||||||||
寿命 | 上层协议 | 首部检验和 | |||||||||||||||||||||||||||||
32比特源IP地址 | |||||||||||||||||||||||||||||||
32比特目的IP地址 | |||||||||||||||||||||||||||||||
选项(如果有) | |||||||||||||||||||||||||||||||
数据 |
IP4数据报中的关键字段如下:
- 版本(号)。这4比特规定了数据报的IP协议版本。通过查看版本号,路由器能够确定如何解释P数据报的剩余部分。不同的P版本使用不同的数据报格式。
- 首部长度。因为一个IP4数据报可包含一些可变数量的选项(这些选项包括在IP4数据报首部中),故需要用这4比特来确定P数据报中数据部分实际从哪里开始。大多数P数据报不包含选项,所以一般的P数据报具有20字节的首部。服务类型。服务类型(TOS)比特包含在IPv4首部中,以便使不同类型的P数据报(例如,一些特别要求低时延、高吞吐量或可靠性的数据报)能相互区别开来。
- 数据报长度。这是P数据报的总长度(首部加上数据),以字节计。因为该字段长为16比特,所以P数据报的理论最大长度为65535字节。然而,数据报很少有超过1500字节的。
- 标识、标志、片偏移。新版本的IP(即IPv6)不允许在路由器上对分组分片。
- 寿命。寿命(Time-To-Live,TTL)字段用来确保数据报不会永远(如由于长时间的路由选择环路)在网络中循环。每当数据报由一台路由器处理时,该字段的值减1。若TL字段减为0,则该数据报必须丢弃。
- 协议。该字段仅在一个P数据报到达其最终目的地才会有用。该字段值指示了IP数据报的数据部分应交给哪个特定的运输层协议。注意在P数据报中的协议号所起的作用,类似于运输层报文段中端口号字段所起的作用。协议号是将网络层与运输层绑定到一起的粘合剂,而端口号是将运输层和应用层绑定到一起的粘合剂。
- 首部检验和。首部检验和用于帮助路由器检测收到的P数据报中的比特错误。首部检验和是这样计算的:将首部中的每2个字节当作一个数,用反码运算对这些数求和。,该和的反码(被称为因特网检验和)存放在检验和字段中。路由器要对每个收到的P数据报计算其首部检验和,如果数据报首部中携带的检验和与计算得到的检验和不一致,则检测出是个差错。路由器一般会丢弃检测出错误的数据报。注意到在每台路由器上必须重新计算检验和并再次存放到原处,因为TL字段以及可能的选项字段会改变。RFC1071。重复检测有几种原因。首先,注意到在P层只对P首部计算了检验和,而 TCP/UDP检验和是对整个TCP/UDP报文段进行的。其次,TCP/UDP与P不一定都必须属于同一个协议栈。原则上TCP能运行在一个不同的协议(如ATM)上,而IP能够携带不一定要传递给TCP/UDP的数据。
- 源和目的P地址。当某源生成一个数据报时,它在源IP字段中插入它的P地址,在目的IP地址字段中插入其最终目的地的地址。通常源主机通过DNS査找来决定目的地址。
- 选项。选项字段允许P首部被扩展。首部选项意味着很少使用,因此决定对每个数据报首部不包括选项字段中的信息,这样能够节约开销。然而,选项的可能存在的确是件复杂的事,因为数据报头长度可变,故不能预先确定数据字段从何处开始。而且还因为有些数据报要求处理选项,而有些数据报则不要求,故导致台路由器处理一个IP数据报所需的时间变化很大。这些考虑对于高性能路由器和
主机上的IP处理来说特别重要。由于这样或那样的原因,在IP6首部中已去掉了IP选项。 - 数据(有效載荷)。我们来看看最后的也是最重要的字段,这是数据报存在的首要理由!在大多数情况下,IP数据报中的数据字段包含要交付给目的地的运输层报文段(TCP或UDP)。然而,该数据字段也可承载其他类型的数据,如ICMP报文。
注意到一个P数据报有总长为20字节的首部(假设无选项)。如果数据报承载一个TCP报文段,则每个(无分片的)数据报共承载了总长40字节的首部(20字节的IP首部加上20字节的TCP首部)以及应用层报文。
IP数据报分片
并不是所有链路层协议都能承载相同长度的网络层分组。有的协议能承载大数据报,而有的协议只能承载小分组。一个链路层帧能承载的最大数据量叫做最大传送单元( Maximum Transmission Unit,MTU)。因为每个IP数据报封装在链路层帧中从一台路由器传输到下一台路由器,故链路层协议的MTU严格地限制着IP数据报的长度。对IP数据报长度具有严格限制并不是主要问题。问题在于在发送方与目的地路径上的每段链路可能使用不同的链路层协议,且每种协议可能具有不同的MTU。
将较长IP数据报中的数据分片成两个或更多个较小的P数据报,用单独的链路层帧封装这些较小的P
数据报;然后向输出链路上发送这些帧。每个这些较小的数据报都称为片( fragment)。
片在其到达目的地运输层以前需要重新组装。实际上,TCP与UDP都希望从网络层收到完整的未分片的报文。P4的设计者感到在路由器中重新组装数据报会给协议带来相当大的复杂性并且影响路由器性能。为坚持网络内核保持简单的原则,IPv4的设计者决定将数据报的重新组装工作放到端系统中,而不是放到网络路由器中。
当一台目的主机从相同源收到一系列数据报时,它需要确定这些数据报中的某些是否是一些原来较大的数据报的片。如果某些数据报是片的话,则它必须进一步确定何时收到了最后一片,并且如何将这些接收到的片拼接到一起以形成初始的数据报。为了让目的主机执行这些重新组装任务,IPv4的设计者将标识、标志和片偏移字段放在IP数据报首部中。当生成一个数据报时,发送主机在为该数据报设置源和目的地址的同时再贴上标识号。发送主机通常将为它发送的每个数据报的标识号加1。当某路由器需要对一个数据报分片时,形成的每个数据报(即片)具有初始数据报的源地址、目的地址与标识号。当目的地从同一发送主机收到一系列数据报时,它能够检查数据报的标识号以确定哪些数据报实际上是同一较大数据报的片。由于IP是一种不可靠的服务,一个或多个片可能永远到达不了目的地。因为这种原因,为了让目的主机绝对地相信它已收到了初始数据报的最后一个片,最后一个片的标志比特被设为0,而所有其他片的标志比特被设为1。另外,为了让目的主机确定是否丢失了一个片(且能按正确的顺序重新组装片),使用偏移字段指定该片应放在初始IP数据报的哪个位置。
在目的地,数据报的有效载荷仅当在P层已完全重构为初始P数据报时,才被传递给目的地运输层。如果一个或多个片没有到达目的地,则该不完整的数据报被丢弃且不会交给运输层。若在运输层正使用着TCP,则TCP将通过让源以初始数据报来重传数据,以恢复这次丢包。
但是分片也是有开销的。首先,它使路由器和端系统更为复杂。其次,分片能够被用于生成致命的DoS攻击,由此攻击者发送了一系列古怪的、无法预期的片。Jolt2攻击就是一个经典的例子。
###IPv4编址
简述主机与路由器连入网络的方法。一台主机通常只有一条链路连接到网络;当主机中的IP想发送一个数据报时,它就在该链路上发送。主机与物理链路之间的边界叫做接口( interface)。现在考虑一台路由器及其接口。因为路由器的任务是从链路上接收数据报并从某些其他链路转发出去,路由器必须拥有两条或更多条链路与它连接。路由器与它的任意一条链路之间的边界也叫做接口。一台路由器因此有多个接口,每个接口有其链路。因为每台主机与路由器都能发送和接收IP数据报,IP要求每台主机和路由器接口拥有自己的IP地址。因此,一个PI地址技术上是与一个接口相关联的,而不是与包括该接口的主机或路由器相关联的。每个IP地址长度为32比特(等价为4字节),因此总共有232个可能的IP地址。这些地址一般按所谓点分十进制记法( dotted- decimal notation)书写,即地址中的每个字节用它的十进制形式书写,各字节间以句号(点)隔开。例如,考虑IP地址193.32.216.9,193是该地址第一个8比特的十进制等价数,32是该地址第二个8比特的十进制等价数,依次类推。因此,地址193.32.216.9的二进制记法是:
11000001 00100000 11011000 00001001
在全球因特网中的每台主机和路由器上的每个接口,必须有一个全球唯一的P地址(在NAT后面的接口除外)。然而,这些地址不能随意地自由选择。一个接口的IP地址的一部分需要由其连接的子网来决定。
为了确定网络区域,分开主机和路由器的每个接口,从而产生了若干个分离的网络岛,接口端连接了这些独立网络的端点。这些独立的网络岛叫做 子网(subnet)。
IP地址是以网络号和主机号来表示网络上的主机的,只有在一个网络号下的计算机之间才能“直接”互通,不同网络号的计算机要通过 网关 (Gateway)才能互通。但这样的划分在某些情况下显得并不十分灵活。为此IP网络还允许划分成更小的网络,称为 子网(Subnet)。
一个具有多个以太网段和点对点链路的组织将具有多个子网,在给定子网上的所有设备都具有相同的子网地址。原则上,不同的子网能够具有完全不同的子网地址。然而,在实践中,它们的子网地址经常有许多共同之处。
因特网的地址分配策略被称为无类别域间路由选择( Classless Interdomain Routing,CIDR)REC4632。CIDR将子网寻址的概念一般化了。因为对于子网寻址,32比特的IP地址被划分为两部分,并且也具有点分十进制数形式a.b.c.d/x,其中x指示了地址的第一部分中的比特数。
形式为a.b.c.d/x的地址的x最高比特构成了P地址的网络部分,并且经常被称为该地址的前缀( prefix)(或网络前缀)。一个组织通常被分配一块连续的地址,即具有相同前级的一段地址。在这种情况下,该组织内部的设备的P地址将共享共同的前缀。这相当大地减少了在这些路由器中转发表的长度,因为形式为a.b.c.d/x单一表项足以将数据报转发到该组织内的任何目的地。
一个地址的剩余32-x比特可认为是用于区分该组织内部设备的,其中的所有设备具有相同的网络前缀。当该组织内部的路由器转发分组时,才会考虑这些比特。这些较低阶比特可能(或可能不)具有另外的子网结构,如前面所讨论的那样。
例如,a.b.c.d24可能表示该组织内的特定子网。
在CIDR被采用之前,P地址的网络部分被限制为长度为8、16或24比特,这是一种称为分类编址( classful addressing)的编址方案,这是因为具有8、16和24比特子网地址的子网分别被称为A、B和C类网络。一个IP地址的网络部分正好为1、2或3字节的要求,已经在支持数量迅速增加的具有小规模或中等规模子网的组织方面出现了问题。一个C类(/24)子网仅能容纳多达28-2=254台主机,其中的两个地址预留用于特殊用途,这对于许多组织来说太小了。然而一个B类(/16)子网可支持多达65534台主机,又太大了。在分类编址方法下,比方说一个有2000台主机的组织通常被分给个B类(/16)地址。这就导致了B类地址空间的迅速损耗以及所分配的地址空间的利用率低。
-
获取一块地址
为了获取一块IP地址用于一个组织的子网,某网络管理员也许首先会与他的ISP联系,该ISP可能会从已分给它的更大地址块中提供一些地址。 -
获取主机地址:动态主机配置协议
某组织一旦获得了一块地址,它就可为本组织内的主机与路由器接口逐个分配IP地址。系统管理员通常手工配置路由器中的P地址(常常在远程通过网络管理工具进行配置)。主机地址也能手动配置,但是这项任务目前通常更多的是使用动态主机配置协议( Dynamic Host Configuration,DHCP)RFC2131来完成。DHCP允许主机自动获取一个IP地址。网络管理员能够配置DHCP,以使某给定主机每次与网络连接时能得到一个相同的IP地址,或者某主机将被分配一个临时的IP地址( temporary IP address),该地址在每次与网络连接时也许是不同的。除了主机P地址分配外,DHCP还允许一台主机得知其他信息,例如它的子网掩码、它的第一跳路由器地址(常称为默认网关)与它的本地DNS服务器的地址
由于DHCP具有能将主机连接进一个网络的网络相关方面的自动能力,故它又常被称为 即插即用协议(plug-and- play protocol)。DHCP还广泛地使用于住宅因特网接入网与无线局域网中,其中的主机频繁地加入和离开网络。当主机加入或离开时,DHCP服务器要更新其可用的IP地址表。每当一台主机加入时,DHCP服务器从其当前可用的地址池中分配一个任意的地址给它;每当一台主机离开时,其地址便被收回这个池中。DHCP是一个客户ー服务器协议。客户通常是新达到的主机,它要获得包括自身使用的IP地址在内的网络配置信息。在最简单场合下,每个子网将具有一台DHCP服务器。如果在某子网中没有服务器,则需要一个DHCP中继代理,这个代理知道用于该网络的DHCP服务器的地址。
对于一台新到达的主机而言,DHCP是一个4个步骤的过程:- DHCP服务器发现。一台新到的主机的首要任务是发现一个要与其交互的DHCP服务器。这可通过使用一个 DHCP发现报文( DHCP discover message)来完成。
- DHCP服务器提供。DHCP服务器收到一个DHCP发现报文时,用一个 DHCP提供报文( DHCP offer message)向客户作出响应,因为在子网中可能有几个DHCP服务器,该客户也许会发现它处于能在几个提供者之间进行选择的优越位置。每台服务器提供的报文包含有收到的发现报文的事务ID、向客户推荐的IP地址、网络掩码以及 IP地址租用期( address lease time),即IP地址有效的时间量。
- DHCP请求。新到达的客户从一个或多个服务器提供中选择一个,并向选中的服务器提供用一个 DHCP请求报文( DHCP request message)进行响应,回显配置参数。
- DHCP ACK。服务器用 DHCP ACK报文( DHCP ACK message)对DHCP请求报文进行响应,证实所要求的参数。
一旦客户收到 DHCP ACK后,交互便完成了,并且该客户能够在租用期内使用DHCP分配的P地址。因为客户可能在该租用期超时后还希望使用这个地址,所以DHCP还提供了一种机制以允许客户更新它对一个P地址的租用。从移动性角度看,DHCP确实有不足之处。因为每当结点连到一个新子网时,要从DHCP得到一个新的P地址,当一个移动结点在子网之间移动时,就不能维持与远程应用之间的TCP连接。
-
网络地址转换
每个IP使能的设备都需要一个P地址。随着子网的大量出现,这看起来意味着每当一个SOHO想安装一个LAN以互联多台机器时,需要ISP分配一组地址以供该SOHO的所有机器使用。如果该子网变大了,则需要分配块较大的地址。但如果ISP已经为SOHO网络当前地址范围分配过一块连续地址该怎么办呢?有一种简单的方法: 网络地址转换 (Network Address Translation, NAT) RFC 2663 , RFC 3022。 NAT 百度百科,NAT 维基百科 -
UPnP
NAT穿越正越来越多地由通用即插即用(UPnP)提供,UPnP是一种允许主机发现并配置邻近NAT的协议。UPnP要求主机和NAT都是UPnP兼容的。使用UPnP,在主机上运行的应用程序能够为某些请求的公共端口号请求一个NAT映射,该映射位于其(专用IP地址,专用端ロ号)和(公共IP地址,公共端ロ号)之间。如果某NAT接受该请求并生成映射,则来自外部的结点能够发起到(公共P地址,公共端口号)的TCP连接。此外,UPnP让该应用程序知道(公共P地址,公共端口号),因此该应用程序能够向外部世界通告它。
UPnP允许外部主机使用TCP或UDP向NAT化的主机发起通信会话。长期以来NAT一直对P2P应用程序十分不利;UPnP由于提供了有效和健壮的NAT穿越解决方案,可能成为了P2P应用程序的救世主。
因特网控制报文协议(ICMP)
CMP由RFC792定义,被主机和路由器用来彼此沟通网络层的信息。ICMP最典型的用途是差错报告。例如,当运行一个Telnet、FTP或HTTP会话时,你也许会遇到些诸如“目的网络不可达”之类的错误报文。这种报文就是在ICMP中产生的。在某个位
置,IP路由器不能找到一条路径,以通往Telnet、FTP或HTTP应用所指定的主机。该路由器就会向你的主机创建和发出一个类型3的ICMP报文以指示该错误。ICMP通常被认为是IP的一部分,但从体系结构上讲它是位于IP之上的,因为ICMP报文是承载在IP分组中的。这就是说,ICMP报文是作为IP有效载荷承载的,就像TCP与UDP报文段作为IP有效载荷被承载那样。类似地,当一台主机收到一个指明上层协议为ICMP的P数据报时,它分解出该数据报的内容给ICMP,就像分解出一个数据报的内
容给TCP或UDP一样。
ICMP报文有一个类型字段和一个编码字段,并且包含引起该ICMP报文首次生成的IP数据报的首部和前8字节内容(以便发送方能确定引发该差错的数据报)。在下表中显示了所选的ICMP报文类型。注意到ICMP报文并不仅是用于通知差错情况。
ICMP类型 | 编码 | 描述 |
---|---|---|
0 | 0 | 回显回答(对ping回答) |
3 | 0 | 目的网络不可达 |
3 | 1 | 目的主机不可达 |
3 | 2 | 目的协议不可达 |
3 | 3 | 目的端口不可达 |
3 | 6 | 目的网络未知 |
3 | 7 | 目的主机未知 |
4 | 0 | 源抑制(拥塞控制) |
8 | 0 | 回显请求 |
9 | 0 | 路由器通告 |
10 | 0 | 路由器发现 |
11 | 0 | TTL过期 |
12 | 0 | IP首部损坏 |
ping程序发送一个ICMP类型8编码0的报文到指定主机。看到该回显(echo)请求,目的主机发回一个类型0编码0的ICMP回显回答。大多数TCP/IP实现直接在操作系统中支持ping服务器,即该服务器不是一个进程。注意客户程序需要能够指示操作系统产生一个类型8编码0的1CMP报文。
另一个有趣的ICMP报文是源抑制报文。这种报文在实践中很少使用。其最初目的是执行拥塞控制,即使得拥塞的路由器向一台主机发送一个ICMP源抑制报文,以强制该主机减小其发送速率。TCP有自己在运输层操作的拥塞控制机制,不需要利用网络层中的反馈信息(如ICMP源抑制报文)。
IPv6
IPv6数据报格式
版本 | 流量类型 | 流标签 | |||||||||||||||||||||||||||||
有效载荷长度 | 下一个首部 | 跳限制 | |||||||||||||||||||||||||||||
128比特源IP地址 | |||||||||||||||||||||||||||||||
128比特目的IP地址 | |||||||||||||||||||||||||||||||
数据 |
- 扩大的地址容量。IPv6将P地址长度从32比特增加到128比特。这就确保全世界将不会用尽IP地址。除了单播与多播地址以外,IP6还引入了一种称为任播地址( anycast address)的新型地址,这种地址可以使数据报交付给一组主机中的任意一个。
- 简化高效的40字节首部。因而所形成的40字节定长首部允许更快地处理IP数据报。一种新的选项编码允许进行更灵活的选项处理。
- 流标签与优先级。IP6有一个难以捉摸的流(ow)定义。RFC1752与RFC2460中描述道,该字段可用于“给属于特殊流的分组加上标签,这些特殊流是发送方要求进行特殊处理的流,如一种非默认服务质量或需要实时服务的流”。在另一方面,更为传统的应用(如文件传输和电子邮件,就不可能被当作流。由高优先级用户(如某些为使其流量得到更好服务而付费的用户)承载的流量也有可能被当作一个流。然而,IP6的设计者们显然已预见到最终需要能够区分这些流,即使流的确切含义还未完全确定。IPv6首部中还有一个8比特的流量类型字段,该字段就像Pv4中的TOS字段,可用于给出一个流中某些数据报的优先级,以便指明某些应用的数据报(如ICMP分组)比其他应用的数据报(如网络新闻)有更高的优先权。
以下是IPv6中定义的字段:
- 版本。该4比特字段用于标识IP版本号。毫不奇怪,IP6将该字段值设为6。注意到将该字段值置为4并不能创建一个合法的IPv4数据报。
- 流量类型。该8比特字段与我们在IPv4中看到的TOS字段的含义相似。
- 流标签。该20比特的字段用于标识一条数据报的流。
- 有效載荷长度。该16比特值作为一个无符号整数,给出了IPv6数据报中跟在定长的40字节数据报首部后面的字节数量。
- 下一个首部。该字段标识数据报中的内容(数据字段)需要交付给哪个协议(如TCP或UDP)。该字段使用与Pv4首部中协议字段相同的值。
- 跳限制。转发数据报的每台路由器将对该字段的内容减1。如果跳限制计数到达时,则该数据报将被丢弃。
- 源地址和目的地址。IPv6128比特地址的各种格式在RFC4291中进行了描述。
- 数据。这是IPv6数据报的有效载荷部分。当数据报到达目的地时,该有效载荷就从IP数据报中移出,并交给在下一个首部字段中指定的协议处理。
注意到,在IPv4数据报中出现的几个字段在IP6数据报中已不复存在:
- 分片/重新组装。IPv6不允许在中间路由器上进行分片与重新组装。这种操作只能在源与目的地上执行。如果路由器收到的P6数据报因太大而不能转发到出链路上的话,则路由器只需丢掉该数据报,并向发送方发回一个“分组太大”的ICMP差错报文即可(见下文)。于是发送方能够使用较小长度的IP数据报重发数据。分片与重新组装是一个耗时的操作,将该功能从路由器中删除并放到端系统中,大大加快了网络中的P转发速度。
- 首部检验和。因为因特网层中的运输层(如TCP与UDP)和数据链路层(如以太网)协议执行了检
以上是关于计算机基础(笔记)——计算机网络(网络层)的主要内容,如果未能解决你的问题,请参考以下文章