- 网络互连与互联网(第2版)
- 刘化君等
- 6471字
- 2025-02-22 19:45:35
第四节 IP网络
IP是TCP/IP协议体系中的网络层协议。TCP/IP是国际通用的网络标准,是广泛用于为众多厂商的设备提供连接的网络技术。IP为工作站之间提供无连接的包(数据报)传输服务,其中每个包带有完整的目的地址,在网络中的路由独立于所有其他包;在传输过程中不建立连接或虚电路;鉴于技术或管理的原因,需要规划、建立子网,即将一个网络分成多个不同的网络,然后通过路由器将这些独立的网络连接起来。
IP软件模块驻留在连入Internet的每个主机和路由器上。这些模块共享相同的地址解析和Internet包处理规则,通过从一台主机的IP进程将包传输到另一台主机的IP进程直至终点来提供Internet通信。根据其IP头部的Internet地址,数据包被从一台主机路由到另一台主机。在到达最终目的地之前,数据包可能经过几个网络。
学习目标
▶熟悉建立子网的基本原则,掌握IP地址的子网掩码的使用及子网划分方法;
▶熟悉IP路由操作的基本模型,能够解释数据包如何通过IP网络从一台主机传输到另一台主机;
▶掌握TCP/IP网络的联网方法和网络应用技术。
关键知识点
▶子网是某个网络的分支部分;
▶Internet是通过IP路由器相互连接在一起的主机和网络的集合。
TCP/IP网络互连
在TCP/IP网络环境下,任何连接到网络上的最终用户计算机系统都称为IP主机。IP主机既可以是个人计算机、终端服务器上的端口、UNIX工作站,也可以是超级计算机。
IP地址又称逻辑地址,它和MAC地址一样,也是独一无二的。每台网络设备用IP地址来唯一地标识。一些设备(如路由器)具有到多个网络的物理连接,每个网络接口分配一个地址。偶尔通过拨号连到Internet的计算机由提供拨号服务的Internet服务提供商(ISP)分配一个临时的IP地址。
由于IP地址由32个二进制位组成,理论上可以有232个IP地址可以使用,即大约43亿个可用IP地址。在互联网上,如果每台3层网络设备(如路由器)为了彼此通信而储存每个结点的IP地址,可以想象路由器会有一张多么大的路由表,这对路由器来说是不可能的。
为了减少路由器的路由表条目数,更加有效地进行路由,清晰地区分各个网段,需要对IP地址采用结构化的分层方案。IP地址的结构化分层方案将IP地址分为网络部分和主机部分,区分网络部分和主机部分需要借助地址掩码(Mask)。网络部分位于IP地址掩码前面的连续二进制“1”位,主机部分位于后面的连续二进制“0”位。在子网连接中,IP地址的主机部分被分为以下两部分:
▶左边部分用于识别子网编号;
▶右边分用于识别该子网上的主机。
主机或路由器用IP地址的引导位确定其地址类别。一旦确定了地址的类别,主机就可以很容易地区分用于识别地址网络编号部分的位和用于识别地址主机部分的位。主机或路由器可通过设置一个32位子网掩码,从地址的本地主机部分中确定哪些位用于定义子网编号。
图1.6所示通过一个B类IP地址建立了2个子网。它使用IP地址的第3个字节识别网络135.15.0.0的2个子网。路由器可接收网络135.15.0.0的所有业务,并根据地址的第3字节(子网标识符)选择正确的接口。

图1.6 子网寻址
子网掩码和IP地址中的位一一对应。如果检查地址的设备将IP地址中的对应位看作原来网络编号的一部分或子网编号的一部分,就将子网掩码中的位设置成1;如果将对应位看作子网主机编号的一部分,则将掩码中的位设置成0。换句话说,IP地址类别确定之后,任何在子网掩码中设置了对应位的原主机编号的所有位均被用来识别子网编号。
建议子网位应当连续,并设置成本地主机地址的最重要的位。图1.7示出了用于网络编号的2个字节。其中,一个字节用于子网编号,另一个字节用于主机编号。

图1.7 子网掩码
IP地址采用分层设计。这样,每台第3层网络设备就不必储存每台主机的IP地址,而只需储存每个网段的网络地址(网络地址代表了该网段内的所有主机),因此大大减少了路由表条目数,增加了路由的灵活性。
子网规划与建立
无子网编址是指使用自然掩码,不对网段进行细分。例如,B类网段172.16.0.0,采用255.255.0.0作为掩码。对于没有子网的IP地址机构,外部将该机构看作单一网络,不需要知道内部结构。例如,所有到地址172.16.x.x的路由被认为同一方向,不考虑地址的第3个和第4个8位分组,这种方案的好处是可以减少路由表的条目数。但这种方案没法区分一个大的网络内不同的子网网段,使网络内所有主机都能收到在该大网络内的广播,因此会降低网络的性能,另外也不利于管理。例如,一个B类网可在网络内容纳65000台主机,但没有任何一个机构能够同时管理这么多台主机。这就需要一种方法将这种网络分为不同的网段,然后就可以按照各个子网段进行管理。
从地址分配的角度看,子网是网段地址的扩充。网络管理员根据本机构发展的需要决定子网的大小。网络设备使用子网掩码决定IP地址中哪部分为网络部分,哪部分为主机部分。下面给出一些示例,说明如何在不同的网络寻址情况下实现子网组网。
【例1-1】在InterNIC分配了一个B类IP地址128.1.0.0的情况下,需要建立254个子网,每个子网最多能够支持254台主机。这是一个最简单的子网组网形式。IP地址的第1个和第2个字节用于识别网络,第3个字节用于识别子网,而第4个字节用于识别子网中的主机。
【解析】用二进制格式表示InterNIC分配的地址:

其中,下面画线的二进制位表示InterNIC分配的IP地址的网络部分。
定义254个子网需要8个二进制数字位。子网编号应当从1到254。全“0”和全“1”的子网字段值不能分配给实际的(物理)子网,如表1.1所示。
表1.1 用十进制和二进制表示的子网编号

选择IP地址主机部分最重要的8位定义子网,下面用黑体显示这些位:

定义一个子网掩码,将网络和未来子网字段的所有位设置成1,将未来的主机字段的所有位设置成0:

在每台主机上都要设置此子网掩码,在每台路由器上都要定义此子网掩码。共享相同IP地址的整个物理网络使用相同的掩码。
254个子网将具有以下地址:

可以分配给子网1的地址范围是:

注意:IP地址的主机部分不能全部都是“1”或者全部都是“0”。
可以分配给子网35的地址范围是:

可以分配给子网129的地址范围是:

【例1-2】在InterNIC分配了1个B类Internet地址128.001.000.000的情况下,需要建立2个子网,每个子网最多能够支持16381台主机。

【解析】用二进制格式表示InterNIC分配的地址:
其中,下面画线的二进制位表示InterNIC分配的IP地址的网络部分。定义2个子网需要2个二进制位。子网编号应当是1和2。全“0”和全“1”的子网字段值不能分配给实际的(物理)子网,如表1.2所示。
表1.2 值1和值2的子网编号

选择IP地址主机部分最重要的2位定义子网,下面用黑体显示这些位:

定义一个子网掩码,将网络和未来子网字段的所有位设置成1,将未来主机字段的所有位设置成0,即

在每台主机上都要设置此子网掩码,在每台路由器上都要定义此子网掩码。共享相同IP地址的整个物理网络使用相同的掩码。
两个子网将具有以下地址:

可以分配给子网1的地址范围是:

注意:IP地址的主机部分不能全部都是“1”或者全部都是“0”。
可以分配给子网2的地址范围是:

【例1-3】在InterNIC分配了一个B类IP地址128.001.000.000的情况下,需要建立6个子网,每个子网最多能够支持8190台主机。
【解析】用二进制格式表示InterNIC分配的地址:

其中,下面画线的二进制位表示InterNIC分配的IP地址的网络部分。
定义6个子网需要3个二进制位。子网编号应当从1到6。全“0”和全“1”的子网字段值不能分配给实际的(物理)子网,如表1.3所示。
选择IP地址主机部分最重要的3位定义子网,下面用黑体显示这些位:

定义一个子网掩码,将网络和未来子网字段的所有位设置成1,将未来的主机字段的所有位设置成0,即

表1.3 值1~6的子网编号

在每台主机上都要设置此子网掩码,在每台路由器上都要定义此子网掩码。共享相同IP地址的整个物理网络使用相同的掩码。
6个子网将具有以下地址:

可以分配给子网3的地址范围是:

注意:IP地址的主机部分不能全部都是“1”或者全部都是“0”。
可以分配给子网5的地址范围是:

IP网络路由
Internet可以看成由IP路由器互相连接的主机和网络的集合。如图1.8所示,主机A能直接与主机B通信,因为它们都连在同一个物理网络上。然而,如果主机A想与主机C通信,它就必须将包传递给最近的路由器;然后由这个路由器将包投入到连接Internet的路由器系统中;该包从一个路由器转移到另一个路由器,直到与主机C的物理网络相连接的那台路由器。

图1.8 互联网组成结构
为了判断目的主机是否在某个直接相连的网络上,源主机检查目的主机Internet地址的网络标识,并将目的主机的网络号与直接连接该主机的网络的网络号相比较。
如果网络号相同,源主机将包封装在目的地址为目标硬件地址的帧中直接发送给目的主机。如果网络号不同,源主机必须将包发送给路由器来传输,然后将包封装在目的地址为路由器的硬件地址的帧中;路由器收到此帧以后,抽取出包,然后将包投入Internet路由器系统。
通常,网络管理员会为网上的每一台主机配置一个默认路由器,即“默认网关”。默认路由器提供了到达远端网络上所有主机的访问。
路由表
IP路由器根据自己路由表中的信息决定是否转发包。路由表包括每个目的网络的IP地址,而不是每个目的主机的地址。这样减小了路由表的大小,因为路由表中的信息数量直接与构成Internet的网络数量(而不是主机数量)成正比。
当一个路由器接收到包时,它检查该包的目的IP地址,在其路由表中搜索匹配目标。如果目标在远端网络,路由器就将该包发送到距最终目标更近的另一个路由器;如果目标在与路由器某个端口直接相连的网络上,路由器则将该包发送到这个端口上。
在巨大的Internet上维护所有路由器上的路由表是很困难的。在多数情况下,对路由表的维护是动态的,以反映当前Internet系统的拓扑结构,并且允许数据包绕过失效的连接进行路由。路由器一般通过与其他路由器一起分担路由来实现这样的功能。TCP/IP环境下常用的路由协议包括:
▶路由信息协议(RIP);
▶开放最短路径优先(OSPF)协议;
▶边界网关协议(BGP)。
图1.9所示是一个典型的用RIP建立的路由表示例。路由表中的每一行是一个单独的条目,其中包括如下信息:

图1.9 路由表示例
▶Destination(目的地址)——目的网络的IP地址。路由器搜索包头部中的目的IP地址与这个域的值匹配。
▶Next Router(下一个路由器)——距离最终目标更近的邻接路由器的IP地址。要到达目的地址,本地路由器必须把包传送给这个路由器。这个域中的“连接”值表示网络直接和本地路由器的某个端口直接相连。
▶Hops(跳步)——路由器和目的网络之间的跳步数。包必须经过的每一个中间路由器算作一个跳步。
▶Time(时间)——本条目从上次更新到现在的时间。路由器每次接收到某个路由的更新信息,都抛弃该路由旧的条目,然后重新初始化时间。
▶Source(源地址)——为本条目提供信息的路由协议名称。
IP包的路由和转发
下面的例子描述了IP包在Internet上是如何从一台主机路由到另一台主机的。图1.10示出了其拓扑结构,其中包括源主机(主机A)、目的主机(主机B)、3个中间路由器和4个不同的物理网络。

图1.10 缩微Internet拓扑结构
假设,在网络128.1.0.0上的主机A希望采用Telnet协议连接网络128.4.0.0上的主机B。Telnet是一个远程终端访问协议,它允许一台主机与另一台主机上的程序通信。
1.网络128.1.0.0上主机A的包
由于主机A和主机B在不同的网络上,网络A必须使用IP路由器的服务把包传输给主机B。根据初始设置,主机A知道它自己的默认网关是路由器A,IP地址为128.1.0.2。因此,主机A知道所有到主机B的包都必须送到路由器A。
如果主机A的地址解析协议(ARP)缓存中没有路由器A的硬件地址,它就发出ARP请求并等待路由器A的响应。当地址映射存在后,主机A将所要传送给主机B的包封装到目的MAC地址为080002001231(路由器A的端口1)、源MAC地址为080002001111(主机A)和类型域为0800(IP)的以太网帧中,如图1.11所示。

图1.11 网络128.1.0.0上的包
注意:在本例中,由主机A定义的IP包头一直保持不变。在数据包向其最终目的前进的过程中,变化的地址仅仅是源以太网地址和目的以太网地址。
类型域在功能上就像一个“包装卡”,告诉路由器A以太网帧中的数据域包含IP包。路由器A用这个信息来决定使用何种协议来处理以太网帧中的内容。
2.网络128.2.0.0上的包
当接收到来自主机A的包时,路由器A删除以太网报头,检查类型域,然后将包传送给IP模块(软件进程)。IP模块检查IP包报头中的目的网络号并且在其路由表(如表1.4所示)中定位于128.4.0.0的路由上。
表1.4 路由表1

由表1.4可知,路由器A知道目标网络有2个跳步的距离,它必须将包转发给路由器B,IP地址为128.2.0.3。如果路由器A的ARP缓存中没有路由器B的硬件地址,它会发出一个ARP请求并且等待路由器B响应。在得到地址之后,路由器A将包封装在以太网帧中,目的MAC地址为080002001233(路由器B的端口1),源MAC地址为080002001232(路由器A的端口2),类型域为0800(IP),如图1.12所示。然后,路由器A将帧发送到端口2。

图1.12 网络128.2.0.0上的包
3.网络128.3.0.0上的包
当接收到来自路由器A的包后,路由器B删除以太网报头,查看类型域,并且把包传送给它的IP模块。路由器的IP模块检查IP包报头中的目的网络号并且在其路由表(如表1.5所示)中定位于网络128.4.0.0的路由上。
表1.5 路由表2

根据表1.5可知,路由器B知道目的网络有1个跳步的距离,它必须将包转发给路由器C,IP地址为128.3.0.3。如果路由器B的ARP缓存中没有路由器C的硬件地址,它会发出一个ARP请求并且等待路由器C的响应。在得到硬件地址后,路由器B将包封装在以太网帧中,目的MAC地址为080002001235(路由器C的端口1),源MAC地址为080002001234(路由器B的端口2),类型域为0800(IP),如图1.13所示。然后,路由器B将帧发送到端口2。

图1.13 网络128.3.0.0上的包
4.网络128.4.0.0上的包
当收到来自路由器B的包后,路由器C删除以太网报头,检查类型域,将包传送给其IP模块。IP模块检查IP包报头中的目的网络号并且在它的路由表(如表1.6所示)中定位于网络128.4.0.0的路由上。
表1.6 路由表3

由表1.6可知,路由器C发现目的网络直接连在端口2上,它能够直接发送数据包。如果路由器C的ARP缓存中没有主机B的硬件地址,它会发出一个ARP请求,并且等待主机B的响应。在得到硬件地址后,路由器C将包封装在以太网帧中,目的MAC地址为080002002222(主机B),源MAC地址为080002001236(路由器C的端口2),类型域为0800(IP),如图1.14所示。然后,路由器C将包发送到端口2。

图1.14 网络128.4.0.0上的包
5.网络128.4.0.0上主机B的包
主机B收到此帧后,删除以太网报头,检查类型域,将包传送给它的IP模块。IP模块确认该包是发给本机的之后,删除IP包报头,将TCP消息传送给TCP模块。TCP模块检查端口号,将消息送给本地Telnet程序访问的Telnet端口。
最后,当主机B的Telnet程序做好响应主机A的准备之后,整个过程将反向进行。
Internet组成结构
Internet是由许多单个的TCP/IP网络构成的一个世界范围的网络。构成Internet的公用网络、专用网络、大学网络、军事网络和公司网络,通过地区的、美国的和国际的数据传输主干互相连接。事实上,Internet增长非常快,以至无法统计每年增加的Internet用户数。
近年来,Internet的拓扑结构随着其规模的增长而变得越来越复杂。目前,Internet不再仅仅是图1.15所示的挂在中央核心网络上的一堆简单的树结构集合,而是一个图1.16所示的多层系统。

图1.15 早期Internet的组成结构

图1.16 目前Internet的组成结构
这个分层的Internet,其组织结构从大到小依次为:
▶主干网络——为几个大型的区域网络和ISP提供服务。
▶地区网络——提供Internet接入服务,即从特定的Internet服务提供商(ISP)连接到拨号上网的单用户。
▶自治系统(AS)——一组专用的网络和路由器,使Internet的不同部分可以分开管理;不同自治系统内的路由器可以在内部使用不同的路由协议。
练习
1.虽然IP是无连接的,但是其结点之间还是建立了逻辑上的连接。判断正误。
2.当路由包通过Internet时,中间的路由器要检查其网络地址和主机地址。判断正误。
3.考虑两个连接到Internet上的相隔数千千米的结点,它们要使用IP互相通信。简要描述IP路由器是如何从一个结点向另一个结点传输信息的。
4.如果有一个路由器被用作默认网关,其一边连接一个以太局域网,另一边通过帧中继协议连接一个广域网。当路由器要转发一个来自局域网的包到使用帧中继的广域网时,简述它将怎么做。
5.简述Internet的组成结构。
6.某公司需要将1059个结点从37个地点(分散的物理网络)连接到网络中,请完成以下要求:
a.将地址如何分配给37个物理网络使用
b.这个网络能否分为子网以备增长?如果能,请描述如何操作
c.说出每个地址中可以单独分配地址的结点数目
d.给出地址的子网部分和主机部分
补充练习
使用自己的计算机对至少两个目的地址执行路由追踪操作。追踪其Internet路径,研究追踪结果,记录每个目的地址的路由经过了多少跳步(指经过的路由器)。