子网掩码
子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。
- 子网掩码是标志两个IP地址是否同属于一个子网的,也是32位二进制地址,其每一个为1代表该位是网络位,为0代表主机位。它和IP地址一样也是使用点式十进制来表示的。
- 如果两个IP地址在子网掩码的按位与的计算下所得结果相同,即表明它们共属于同一子网中。
其实就是用主机位为0与掉ip地址里1的部分,这样就证明在同一个网段。
如果一个网络不划分子网,那么该网络的子网掩码就使用默认子网掩码
带有子网掩码的分组转发算法
子网划分后,路由转发算法就得带着子网掩码进行计算了。
子网掩码、子网、主机相互计算
利用子网数来计算子网掩码
如果想把B类地址168.195.0.0划分成27个子网,则子网掩码为:
- 把数目转化为二进制:27个子网,二进制为11011
- 取得该二进制位数:5
- 将B类地址168.195.0.0的主机位前5位置1,得到255.255.248.0
利用主机数来计算子网掩码
如欲将B类IP地址168.195.0.0划分成若干子网,每个子网内有主机700台:
- 700台主机转为二进制,700 = 10 10111100
- 如果主机数小于或等于254(注意去掉保留的两个IP地址),则取得该主机的二进制位数,为N,这里肯定 N<8。如果大于254,则 N>8,这就是说主机地址将占据不止8位;占据10位二进制位
- 则子网掩码为255.255.11111100,00000000, 也就是255.255.252.0
利用掩码求主机数
把网络202.112.78.0划分为多个子网(子网掩码是255.255.255.192),则各子网中可用的主机地址总数是,因为192占用2位且是C类地址,每个子网的主机数是2^6-2 = 62,所以总的主机数是124。
构建超网
无分类域IBS路由选择CIDR ,CIDR消除了传统的A类、B类和C类地址以及划分子网的概念,CIDR把网络前缀都相同的连续的IP地址组成一个“CIDR地址块”
路由选择协议
路由选择协议也叫做内部网关协议,主要讨论路由表中的路由是怎样得出的。路由选择协议的核心就是路由算法,即需要何种算法来获得路由表中的各项目。
理想的路由算法
一个理想的路由算法应具有如下的一些特点:
- 算法必须是正确的和完整的。这里,“正确”的含义是:沿着各路由表所指引的路由,分组一定能够最终到达目的网络和目的主机。
- 算法在计算上应简单。路由选择的计算不应使网络通信量增加太多的额外开销。
- 算法应能适应通信量和网络拓扑的变化,这就是说,要有自适应性。当网络中的通信量发生变化时,算法能自适应地改变路由以均衡各链路的负载。当某个或某些结点、链路发生故障不能工作,或者修理好了再投入运行时,算法也能及时地改变路由。有时称这种自适应性为“稳健性”(robustness)。
- 算法应具有稳定性。在网络通信量和网络拓扑相对稳定的情况下,路由算法应收敛于一个可以接受的解,而不应使得出的路由不停地变化。
- 算法应是公平的。路由选择算法应对所有用户(除对少数优先级高的用户)都是平等的。例如,若仅仅使某一对用户的端到端时延为最小,但却不考虑其他的广大用户,这就明显地不符合公平性的要求。
- 算法应是最佳的。路由选择算法应当能够找出最好的路由,使得分组平均时延最小而网络的吞吐量最大。虽然我们希望得到“最佳”的算法,但这并不总是最重要的。对于某些网络,网络的可靠性有时要比最小的分组平均时延或最大吞吐量更加重要。因此,所谓“最佳”只能是相对于某一种特定要求下得出的较为合理的选择而已。
应当指出,路由选择是个非常复杂的问题,因为它是网络中的所有结点共同协调工作的结果。并且路由选择的环境往往是不断变化的,而这种变化有时无法事先知道。
从路由算法能否随网络的通信量或拓扑自适应地进行调整变化来划分,则只有两大类
- 静态路由选择,也叫做非自适应路由选择,其特点是简单和开销较小,但不能及时适应网络状态的变化.对于很简单的小网络,完全可以采用静态路由选择,用人工配置每一条路由。
- 动态路由选择,也叫做自适应路由选择,其特点是能较好地适应网络状态的变化,但实现起来较为复杂,开销也比较大。因此,动态路由选择适用于较复杂的大网络。
分层次的路由选择协议
互联网采用的路由选择协议主要是自适应的(即动态的)、分布式路由选择协议。由于以下两个原因,互联网采用分层次的路由选择协议:
- 互联网的规模非常大。如果让所有的路由器知道所有的网络应怎样到达,则这种路由表将非常大,处理起来也太花时间。而所有这些路由器之间交换路由信息所需的带宽就会使互联网的通信链路饱和。
- 许多单位不愿意外界了解自己单位网络的布局细节和本部门所采用的路由选择协议(这属于本部门内部的事情),但同时还希望连接到互联网上。
为此,可以把整个互联网划分为许多较小的自治系统(autonomous system),一般都记为AS。自治系统AS是在单一技术管理下的一组路由器,而这些路由器使用一种自治系统内部的路由选择协议和共同的度量。一个AS对其他AS表现出的是一个单一的和一致的路由选择策略[RFC 4271]。
在目前的互联网中,一个大的ISP就是一个自治系统。这样,互联网就把路由选择协议划分为两大类,即:
- 内部网关协议IGP (Interior Gateway Protocol),即在一个自治系统内部使用的路由选择协议,而这与在互联网中的其他自治系统选用什么路由选择协议无关。目前这类路由选择协议使用得最多,如RIP和OSPF协议。
- 外部网关协议EGP (External Gateway Protocol)若源主机和目的主机处在不同的自治系统中(这两个自治系统可能使用不同的内部网关协议),当数据报传到一个自治系统的边界时,就需要使用一种协议将路由选择信息传递到另一个自治系统中。这样的协议就是外部网关协议EGP.目前使用最多的外部网关协议是BGP的版本4 (BGP-4).
自治系统之间的路由选择也叫做域间路由选择(interdomain routing),而在自治系统内部的路由选择叫做域内路由选择(intradomain routing)。
每个自治系统自己决定在本自治系统内部运行哪一个内部路由选择协议(例如,可以是RIP,也可以是OSPF)。但每个自治系统都有一个或多个路由器(图中的路由器R1和R2)除运行本系统的内部路由选择协议外,还要运行自治系统间的路由选择协议(BGP-4)
内部网关协议RIP协议
RIP是一种分布式的基于距离向量的路由选择协议,是互联网的标准协议,其最大优点就是简单.RIP协议要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录(因此,这是一组距离,即**“距离向量”)。RIP协议将“距离”**定义如下:
- 从一路由器到直接连接的网络的距离定义为1。
- 从一路由器到非直接连接的网络的距离定义为所经过的路由器数加1。“加1”是因为到达目的网络后就进行直接交付,而到直接连接的网络的距离己经定义为1。
RIP协议的“距离”也称为**“跳数”(hop count),因为每经过一个路由器,跳数就加1。RIP认为好的路由就是它通过的路由器的数目少,即“距离短”。RIP允许一条路径最多只能包含15个路由器。因此,“距离”等于16时即相当于不可达。可见RIP只适用于小型互联网
RIP协议特点
RIP协议有如下几个特点:
- 仅和相邻路由器交换信息。如果两个路由器之间的通信不需要经过另一个路由器,那么这两个路由器就是相邻的。RIP协议规定,不相邻的路由器不交换信息.
- 路由器交换的信息是当前本路由器所知道的全部信息,即自己现在的路由表。也就是说,交换的信息是:“我到本自治系统中所有网络的(最短)距离,以及到每个网络应经过的下一跳路由器’,。
- 按固定的时间间隔交换路由信息,例如,每隔30秒。然后路由器根据收到的路由信息更新路由表。当网络拓扑发生变化时,路由器也及时向相邻路由器通告拓扑变化后的路由信息
路由器在刚刚开始工作时,它的路由表是空的。然后路由器就得出到直接相连的几个网络的距离(这些距离定义为1)。接着,每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息。但经过若干次的更新后,所有的路由器最终都会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器的地址。最后在自治系统中所有的结点都得到了正确的路由选择信息
RIP报文
RIP的报文如下,不展开说了:
内部网关协议OSPF
这个协议的名字是开放最短路径优先OSPF (Open Shortest Path First)。它是为克服RIP的缺点在1989年开发出来的。OSPF的原理很简单,但实现起来却较复杂。“开放”表明OSPF协议不是受某一家厂商控制,而是公开发表的。“最短路径优先”是因为使用了Dijkstra提出的最短路径算法SPF。
OSPF最主要的特征就是使用分布式的链路状态协议((link state protocol),而不是像RIP那样的距离向量协议。和RIP协议相比,OSPF的三个要点和RIP的都不一样:
- 向本自治系统中所有路由器发送信息。这里使用的方法是洪泛法((flooding),这就是路由器通过所有输出端口向所有相邻的路由器发送信息。而每一个相邻路由器又再将此信息发往其所有的相邻路由器(但不再发送给刚刚发来信息的那个路由器)。这样,最终整个区域中所有的路由器都得到了这个信息的一个副本。我们应注意,RIP协议是仅仅向自己相邻的几个路由器发送信息。
- 发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。所谓“链路状态”就是说明本路由器都和哪些路由器相邻,以及该链路的“度量”(metric). OSPF将这个“度量”用来表示费用、距离、时延、带宽,等等。这些都由网络管理人员来决定,因此较为灵活。有时为了方便就称这个度量为“代价”。我们应注意,对于RIP协议,发送的信息是:“到所有网络的距离和下一跳路由器”。
- 只有当链路状态发生变化时,路由器才向所有路由器用洪泛法发送此信息。而不像RIP那样,不管网络拓扑有无发生变化,路由器之间都要定期交换路由表的信息。
OSPF的链路状态数据库能较快地进行更新,使各个路由器能及时更新其路由表。OSPF的更新过程收敛得快是其重要优点。有如下相关的术语:
- 路由器/Router:一种三层IP包的交换设备。在早期的IP文献中被称为网关/gateway。
- 自制系统/Autonomous System:一组使用相同路由协议交换路由信息的路由器,缩写为AS。
- 内部网关协议/Interior Gateway Protocol:被一个AS内的路由器所使用的路由协议,缩写为IGP。每个AS使用单一的IGP,不同的AS会使用不同的IGP。
- 路由器标识/Router ID:一个32位的数字,用以识别每台运行OSPF协议的路由器。在一个AS中,这个数字可以唯一地表示出一台路由器。
- 网络/Network:在本备忘录中,会表示IP网络/子网/超网。一个物理网络上可能设置有多个网络/子网号,我们把它们按照独立的网络来对待。物理点对点/point-to-point网络是个例外——无论在上面设置了多少网络/子网号(如果有的话),都将其看作是一个网络。
- 网络掩码/Network mask:一个32位的数字,表示IP地址的范围来说明这是一个IP网络/子网/超网。本文以16进制来表示网络掩码。如将C类IP地址的网络掩码显示为0xffffff00,这一掩码在其他文献中经常被表示为255.255.255.0。
- 点对点网络/Point-to-point networks:仅仅连接一对路由器的网络。56k的串行线路是一个点对点网络的例子。
- 广播网络/Broadcast networks:支持多台(大于两台)路由器接入的网络,同时有能力发送一条信息就能到所有接入的路由器(广播)。网络上邻居路由器可以通过OSPF的Hello协议来动态发现。如果可能,OSPF协议将进一步使用多播。广播网络上的每一对路由器都被认为可以直接通讯。以太网/ethernet是一个广播网络的例子。
- 非广播网络/Non-broadcast networks:支持多台(大于两台)路由器接入的网络,但没有广播能力。网络上的邻居路由器通过OSPF的Hello协议来维持。但由于缺乏广播能力,需要一些配置信息的帮助来发现邻居。在非广播网络上,OSPF协议的数据通常需要被轮流发送到每一台邻居路由器上。X.25公用数据网/Public Data Network(PDN)是一个非广播网络的例子。在非广播网络上运行的OSPF有两种模式。第一种被称为非广播多路接入/non-broadcast multi-access(NBMA),模拟OSPF在广播网络上的操作;第二种被称为点对多点/Point-to-MultiPoint,将非广播网络看作是一系列点对点的连接。非广播网络被作为NBMA网络还是点对多点网络,取决于OSPF在该网络上所配置的运行模式
- 接口/Interface:是指路由器与所接入的网络之间的一个连接。接口通过下层协议和路由协议获取与其相关的状态信息。指向网络的接口只和单一的IP地址及掩码相关(除非是无编号的点对点网络)。接口有时也被称为连接/link。
- 邻居路由器/Neighboring routers:在同一网络中都有接口的两台路由器。邻居关系是由OSPF的Hello协议来维持,并通常依靠Hello协议来动态发现。
- 邻接/Adjacency:用以在所选择的邻居路由器之间交换路由信息的关系。不是每对邻居路由器都会成为邻接。
- 连接状态宣告/Link state advertisement:描述路由器或网络自身状态的数据单元。对路由器来说,这包含它的接口和邻接状态。每一项连接状态宣告都被洪泛到整个路由域中。所有路由器和网络连接状态宣告的集合形成了协议的连接状态数据库。在本备忘录中,连接状态宣告被缩写为LSA。
- Hello协议/Hello Protocol:在OSPF协议中,用于建立和维持邻居关系的部分。在广播网络中还被用于动态发现邻居路由器。
- 洪泛/Flooding:在OSPF协议中,用于OSPF路由器之间发送及同步连接状态数据库的部分。
- 指定路由器/Designated Router:在每个接入了至少两台路由器的广播和NBMA网络中都有一台作为指定路由器。指定路由器生成Network-LSA并在运行协议时完成其他特定职责。指定路由器通过Hello协议选举。(译注:本文后边将缩写为DR)
- 指定路由器的概念减少了广播和NBMA网络上所需要的邻接数量。同时也减少了路由协议所需要的流量及连接数据库的大小。
- 下层协议/Lower-level protocols:为IP及OSPF协议提供服务的下层网络接入协议。如为X.25 PDN服务的X.25 packet and frame level;以及为以太网服务的以太网数据链路层。
OSPF不用UDP而是直接用IP数据报传送(其IP数据报首部的协议字段值为89) OSPF构成的数据报很短。这样做可减少路由信息的通信量。数据报很短的另一好处是可以不必将长的数据报分片传送。分片传送的数据报只要丢失一个,就无法组装成原来的数据报,而整个数据报就必须重传
IPv6
IPv6是Internet Protocol Version 6的缩写,其中Internet Protocol译为“互联网协议”。IPv6是IETF(互联网工程任务组,Internet Engineering Task Force)设计的用于替代现行版本IP协议(IPv4)的下一代IP协议,号称可以为全世界的每一粒沙子编上一个网址。由于IPv4最大的问题在于网络地址资源有限,严重制约了互联网的应用和发展。IPv6的使用,不仅能解决网络地址资源数量的问题,而且也解决了多种接入设备连入互联网的障碍 。
基本首部
IPv6仍支持无连接的传送,但将协议数据单元PDU称为分组,而不是IPv4的数据报。为方便起见,本文仍采用数据报这一名词。IPv6所引进的主要变化如下:
- 更大的地址空间。IPv6把地址从IPv4的32位增大到4倍,即增大到128位,使地址空间增大了2^96倍。这样大的地址空间在可预见的将来是不会用完的.
- 扩展的地址层次结构。IPv6由于地址空间很大,因此可以划分为更多的层次。
- 灵活的首部格式。
- 改进的选项。IPv6允许数据报包含有选项的控制信息,因而可以包含一些新的选项。但IPv6的首部长度是固定的,其选项放在有效载荷中。我们知道,IPv4所规定的选项是固定不变的,其选项放在首部的可变部分。
- 允许协议继续扩充。这一点很重要,因为技术总是在不断地发展(如网络硬件的更新)而新的应用也还会出现。但我们知道,IPv4的功能是固定不变的。
- 支持即插即用(即自动配置)。因此IPv6不需要使用DHCP。
- 支持资源的预分配。IPv6支持实时视像等要求保证一定的带宽和时延的应用。
- IPv6首部改为8字节对齐(即首部长度必须是8字节的整数倍)。原来的IPv4首部是4字节对齐。
IPv6数据报由两大部分组成,即基本首部(base header)和后面的有效载荷(payload)。有效载荷也称为净负荷。有效载荷允许有零个或多个扩展首部(extension header),再后面是数据部分(上图)。但请注意,所有的扩展首部并不属于IPv6数据报的首部。
IPv6的地址
一般来讲,一个IPv6数据报的目的地址可以是以下三种基本类型地址之一:
- 单播,单播就是传统的点对点通信。
- **多播 ** 多播是一点对多点的通信,数据报发送到一组计算机中的每一个。IPv6没有采用广播的术语,而是将广播看作多播的一个特例。
- 任播这是IPv6增加的一种类型。任播的终点是一组计算机,但数据报只交付其中的一个,通常是距离最近的一个。
在IPv6中,每个地址占128位,例如,一个用点分十进制记法的128位的地址为:
104.230.140.100.255.255.255.255.0.0.17.128.150.10.255.255
为了使地址再稍简洁些,IPv6使用冒号十六进制记法(colon hexadecimal notation),它把每个16位的值用十六进制值表示,各值之间用冒号分隔。例如,前文值改为冒号十六进制记法,就变成了:
68E6:8C64:FFFF:FFFF:0:1180:960A:FFFF
在十六进制记法中,允许把数字前面的0省略。上面就把0000中的前三个0省略了。冒号十六进制记法还包含两个技术使它尤其有用。首先,冒号十六进制记法可以允许零压缩(zero compression),即一连串连续的零可以为一对冒号所取代,例如:
FF05:0:0:0:0:0:0:B3可压缩为FF05::B3
为了保证零压缩有一个不含混的解释,规定在任一地址中只能使用一次零压缩。该技术对己建议的分配策略特别有用,因为会有许多地址包含较长连续的零串。
其次,冒号十六进制记法可结合使用点分十进制记法的后缀。我们下面会看到这种结合在IPv4向IPv6的转换阶段特别有用。例如,下面的串是一个合法的冒号十六进制记法:
0:0:0:0:0:0:128.10.2.1,再使用零压缩,128.10.2.1
从IPv4向IPv6过渡
由于现在整个互联网的规模太大,因此,“规定一个日期,从这一天起所有的路由器一律都改用IPv6",显然是不可行的。这样,向IPv6过渡只能采用逐步演进的办法,同时,还必须使新安装的IPv6系统能够向后兼容。这就是说,IPv6系统必须能够接收和转发IPv4分组,并且能够为IPv4分组洗择路由。