计算机网络之网络互连与IP

网络互连的意义

总线形以太网交换式以太网无线局域网无线局域网接入过程这几篇文章中,主要介绍了在局域网内部进行通信的一些原理和方法,而互联网可以让处于不同网络的终端之间进行通信,所以我们还必须有相关的机制来完成这一个通信过程,但是要实现两个不同网络终端之间的通信还面临着一些问题需要去解决

以以太网和PSTN为例

如图所示,我们要使终端A和终端B能进行通信,由于在以太网和PSTN中数据传输的格式和方式都不一样,所以即便是这两个网络之间存在物理链路,他们之间也不能直接进行通信。所以我们必须借助具备某一些功能的设备,它可以将不同网络之间的数据进行互转,而且可以完成数据在不同网络之间的链路选择,这个设备就是工作在网络层的路由器。路由器可以可以实现不同类型网络的互连,因此他需要有以下的功能:

  • 路由器需要多个连接不同类型网络的接口
  • 路由器在不同网络类型的接口应该有所处网络的标识,如在以太网中有接口应该有MAC地址
  • 终端与路由器接口之间通信由不同传输网络实现,如以太网
  • 路由器实现传输路径的选择和两种不同帧格式之间的转换

因此终端A和终端B的通信过程就为:终端A通过以太网向路由器传输数据,路由器将MAC帧转换成PPP帧通过PSTN网络将数据传输给终端B,我们把终端和路由器称为,比如终端A的下一跳为路由器,路由器的下一跳为终端B

网络互连机制

信件投递过程启示

如果我们要从南京给芝加哥寄一封信,因为从南京没有直达芝加哥的方式,因此我们需要通过上海进行中转,在信封上,有收件人和寄件人,在从南京到上海的时候,需要将这个信件打包在南京到上海的一个铁路包裹中,然后到达上海以后,需要拆开包裹,根据收件人的地址,再将它装入到从上海到芝加哥的航空包裹中,最后在芝加哥打开包裹将信件送到收件人手中。在这一个过程中:

  • 不同的传输系统有不同封装信件方式
  • 不同的传输有标识始站和终站的方式
  • 任何运算系统中,寄件人和收件人是不变的
  • 信件本身不会改变,每一站根据收件人确定下一站
  • 由实际的运输系统提供当前站至下一站的运输服务

综上所述,我们的网络也可以借鉴这种方式进行数据的传输,因此首先必须有一种标识,这个标识可以让我们的数据在网络中到达各个结点时可以根据这个标识来确认下一站,这个标识就是网际协议IP中的IP分组,在IP分组传输的过程中,IP分组本身不发送变化,每一跳根据IP分组上的目的地址确定下一跳。而在不同的网络中,只需要将IP分组封装为适合在该网络中的帧格式即可。在我们的网络分层体系结构中,由网络层将数据封装为IP分组,也由网络层来识别IP分组的信息

IP

在IP分组中,有两个重要的信息就是源地址和目标地址,这两个地址就是IP地址,在网际协议中IP有两个版本,IPv4和IPv6,IPv4用32位二进制标识一个IP,而IPv6用一个128位二进制标识一个IP,由于IPv6还没有被广泛使用,因此这里只对IPv4进行详细介绍。为了更直观,我们将一个32位的IP地址分成4个八位的二进制然后将每八个二进制转换成10进制来表示一个IP:

为了让IP地址更有意义,需要对不同的网络、不同网络中的终端进行区分,因此我们在IP中用一定位数来表示网络号,一定位数来表示主机号,这就是IP的分层编址,如何确认一个IP地址是怎样进行分层的呢?有以下两种方式:

分类IP地址

在分类编址中,将IP分成了不同的类,每一类的分层又不一样

  1. A类地址:分类号为0,网络号为7位,主机号为24位
  2. B类地址:分类号为10,网络号为14位,主机号为16位
  3. C类地址:分类号为110,网络号为21位,主机号为8位
  4. D类地址:分类号为1110,然后后面为组播地址
  5. E类地址:分类号为11110、后面为保留地址

A、B、C类地址是单播地址,单播地址中的主机号全为0是不能分配给某一个主机的,用主机号全为零来标识某一个网络,比如对于一个IP地址192.1.1.0,它的后八位全为零,因此它是一个网络地址。主机号全为1也不能分配给某一个终端,它的作用是表示一个受限的广播地址,限于发送终端所在网络。关于分类IP中IP地址的范围我们不需要死记,只需要记住每个分类IP分类号即可,比如对于C类地址,它的分类号为110,因此它能表示的IP地址范围就为11000000 00000000 00000000 0000000011011111 11111111 11111111 11111111,即为192.0.0.0~223.255.255.255

IP分类原因

将IP分类的原因主要是为了适用于不同规模的网络,对于C类地址,它的主机号为8位,因此它适用于2^8-2个终端的网络中,而A类地址适用于终端设备大于2^16-2但是小于或等于2^24-2的网络中

IP分层原因

根据终端IP地址确定终端连接的网络

分类IP中,如果某个终端的IP地址是192.168.1.100,那么我们可以确定这个终端所在的网络网络号为192.168.1.0(C类地址,主机号为全0)

减少路由项

因为192.168.1.0可以表示192.1.1.0~192.1.1.255,因此在路由器的转发项中,我们可以用一个网络地址来表示一个路由项,而不需要每一个终端占用一个路由项

IP地址配置的原则

  • 每一个网络都有一个网络号
  • 连接在同一网络的终端必须配置具有相同的网络号,不同的主机号
  • 路由器的每一个端口配置连接该端口连接的网络号加路由器的主机号(IP不是路由器的标识符,而是路由器接口的标识符)

IP分类的缺陷

IP地址浪费严重

假设为一个连接4000个终端的以太网分配IP地址,由于2^8-2<终端数量≤2^16-2,因此我们需要给它分配一个B类地址,而B类地址,共有2^16-2个有效IP地址,但只用了4000个,浪费了90%多的IP地址。而原因就是单播地址固定了网络号和主机号

不能有效的减少路由项

在路由器中,有两个转发项,下一跳和输出接口都是相同的,但是我们观察一下目的网络的网络号192.1.0.0和192.1.1.0
可以发现:

它们的前23位是一样的,后9位我们可以认为是主机号,但是在分类地址中没有主机号为9位的IP地址,因此我们不能用同一个网络号来同时表示这两个网络,分类IP编址无法这样识别IP

C类地址使用率低

C类IP地址中网络号的位数是21位,使得C类网络地址数量最多,但是能够连接的终端只有2^8 - 2,但是大多数网络里的终端都超过254个,因此不会选择C类地址

无分类IP地址

由于分类IP的网络号和主机号固定,导致了它有一些缺陷,因此如果IP地址的网络号和主机号可以根据需求来确定,那么分类IP的缺陷就可以避免了,而无分类IP地址就是一种允许随意改变IP地址中网络号和主机号位数的编址方式。在分类IP中,我们可以通过分类来确认网络号和主机号的位数,那么在无分类编址中我们怎么确认一个IP地址的网络号和主机号位数呢?那就要借助子网掩码了,子网掩码和IP地址一样,都是用32位二进制表示,我们用子网掩码中值为1的二进制数对应IP地址中位作为网络号的二进制数,如5.1.1.2/255.0.0.0,子网掩码255.0.0.0的高8位全为1,因此5.1.1.2的高八位表示网络号,后面的24位都是主机号,还可以写成5.1.1.2/8或者5/8

解决分类地址浪费

在分类IP中,我们给一个4000终端的网络需要分配一个B类地址,但是在无分类网络中,我们可以用一个IP地址的高20位作为网络号,低12位为主机号,因此它能提供给终端使用的IP地址就有2^12 - 2 = 4094个,有效的降低了IP地址的浪费,同样也解决了C类地址使用率不高的问题

CIDR地址块:聚合路由项

CIDR表示无类别域间路由(Classless Inter-Domain Routing)

在上面的分类地址中,我们面临这样一个无法解决的问题:无法有效的减少路由项,但是在无分类地址,我们可以用CIDR地址块表示同一网络中的终端,也可以用它表示不同网络中的终端。我们可以用192.1.0.0/23来表示192.1.0.0192.1.1.0这两个网络地址,于是路由表中的路由项可以相应的较少:

CIDR地址块的用途

CIDR地址块分配给IPv多个子网

对于某一个CIDR地址块可以将它分配给多个网络地址

我们从终端数最多的子网开始划分,最多终端的子网终端数为45,因此我们可以从CIDR地址块中8位主机号分6位出来表示构成45个终端子网的主机号,前26位为该子网的网络号,以此类推:

CIDR地址块分配给单个子网

同样我们也可以将CIDR地址块分配给单个网络,分配给单个网络时,直接用该CIDR地址块的主机号全为0作为该网络的网络地址,这个网的网络号和主机号和CIDR地址块的网络号和主机号位数是一致的

最长前缀匹配

在图中,R1路由器中有两项路由项,这两项路由项都可以指向IP地址192.1.2.150,但是路由器R1在转发时,会选择接口2进行转发,这就是最长前缀匹配,也就是选择路由项中满足匹配该IP地址的CIDR地址块中网络号最长的来作为路由

默认路由项

对于路由器R2的端口4,在R1中可能有很多的网络,如果对R2中端口4每一个R1中的网络都配置一个路由项,那么路由表中的路由项就会非常的多,因此,我们可以为R2的端口4配置一个默认的路由项,它的下一跳都是路由器R1,于是当我们有一个IP地址为192.1.6.150的数据经过R2时,由于它和端口1、2、3的路由项都不匹配,因此我们就通过4端口进行转发

IP分组

如果不同网络中的两个终端需要通信,我们必须生成相应的IP分组,IP分组是通过网络层将上层中的数据加上一个IP首部来组成IP分组,因此IP分组就包括IP首部和上层的数据:

IP首部主要由固定部分和可变部分组成,固定部分为固定的20个字节

版本

表示IP协议的版本,比如IPv4就为0100,而IPv6就为0110

首部长度

由于首部是固定20个字节和可变长度两部分组成,因此首部长度用于表示具体首部的长度,它的最小单位为32位,因此它的最小取值为5(5个32位:20字节)

服务类型

8位,用于指定IP分组的优先级、延迟、吞吐率和可靠性要求及各种要求的组合

其中三位表示优先级,优先级从0到7,数字越大优先级越高,优先级高优先提供服务。3位分别表示延迟、吞吐率、可靠性,D等于1表示要求延迟的时间比价短,T等于1等于表示吞吐率比较高,R等于1表示可靠性要求比价高。最后2位保留

总长度

由于首部和数据的长度都是可变的,因此总长度是不固定的,它的最小单位为字节,用32位表示,因此最大的长度值为65535B

标识

在以太网的网络层下一层,网络接口层中,我们的数据格式为MAC帧,但是MAC帧的数据段长度最长为1500个字节,我们把网络当中链路层净荷字段允许的最大长度称为最大传输单元,简称为MTU(Maximum Transfer Unit)。因此如果IP分组过长,到网络接口层中就需要分片,标识为了IP分组被分片以后能识别某一个分片为哪一个IP分组

标志

标志位一个3位,第一位为DF,为1时,表示不能被分片。第二位为MF,当MF等于0时,表示该分片为最后一个分片,其他该IP分组分片的MF为1,最后一位保留

片偏移

片偏移是用13位二进制表示,主要表示这个数据在原片中IP分组的相对位置,它是以8个字节为单位给出当前数据片在原始IP分组当中的相对位置,就是最大的片偏移可以为(2^13 - 1) * 8B

生存时间

用8位表示,目前该值为最大跳数,每跳一次减一,这个字段的设置主要是为了解决IP分组在网络当中长期漂游的情况,当计数器减为0的时候,就丢弃这个IP分组并且给发送端发送一个信息

协议

8位,用于表示数据所属的高层协议类型,告诉网络层把该IP分组送给哪一个进程处理

首部检验和

16位,对首部用检验和算法计算出的检错码,用于检测首部传输过程中发生的错误(注意这里只是对首部进行校验,而非首部加数据,后续会解释为什么),每经过一个路由器计算机一次(因为首部会发生变化,其中的生存时间会减一)

源地址

32位,发送端的IP地址

目的地址

32位,接收端的IP地址

可选部分

可选部分用于研究及特殊的用途,可选部分有很强的侦察网络拓扑结构的能力,一般的路由器都屏蔽这些选项

数据分片方法

IP分组的传输过程

  1. 确认目的IP地址是否和当前终端属于同一网络(根据子网掩码确认),如果不是发给默认网关(路由器)
  2. 路由器根据目的IP地址和路由表确定下一跳IP地址和输出端口
  3. 逐跳转发
  4. 直到到达目的IP地址的网关

路由表的建立

直连路由项

在完成路由器接口IP地址和子网掩码配置后路由器自动生成。例如一个连接以太网的路由器接口配置了IP地址和子网掩码,那么他就确定了连接到该接口上的以太网的网络地址

静态路由项

静态路由项需要手动配置,确定某个接口指向下一跳的地址和目的网络

动态路由项

通过人工配置静态路由项只适合在规模比较小的网络中适用,而且静态路由项无法根据网络规模改变动态改变,因此我们需要路由器自动生成路由项,这就是路由信息协议(RIP)

  • 路由信息:(V,D)表,V表示网络,D表示距离,直连网络D为0
  • 相邻路由器之间通过交换路由信息动态构建路由表
  • 根据相邻路由器的路由信息生成到达子网的最短传输路径,得到下一跳地址

具体步骤如下:

  • 每一个路由器建立和其直接相连的子网的路由项(根据端口IP地址和子网掩码确定)。
  • 相邻路由器交换各自的路由项,如果相邻路由器路由项中存在通往某个子网的路径,意味着通过该相邻路由器可以找到通往该子网的路径。
  • 经过周期性地反复交换路由项,最终建立到达网络中所有子网的路由项(适应网络的动态改变)

其中224.0.0.9是一个固定的组播地址,该过程是R1将自己的路由表信息发送给相邻的路由器R2,同样也会发送给R3,R3和R2也会将它们的路由表信息发送给R1。同时会根据目标地址和距离来判断是非需要增加相应的路由项。路由器需要支持RIP协议才会动态生成路由项

坚持原创分享,您的支持将鼓励我不断前行!