计算机网络——4.网络层

网络层(Important)

1.网络层提供的两种服务

  • 在计算机领域,网络层应该向运输层提供怎样的服务("面向连接虚电路服务"还是"无连接数据报服务")曾引起了长期的讨论。讨论的实质就是:在计算机网络中,可靠交付应该由谁来负责?网络还是端系统
    让网络负责可靠交付

虚电路表示这只是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发的方式传送,而不是真正建立一条物理连接

网络提供数据报服务

如今互连网的模式就是:可靠交付由端系统来负责

虚电路服务和数据报服务对比

2.网际协议IP

  • 网际协议IP是TCP/IP体系中两个最主要的协议之一。
  • 网络层不仅仅只有IP协议,与IP协议配套使用的还有三个协议:地址解析协议ARP网际控制报文协议ICMP网际组管理协议IGMP
    网际层的IP协议及配套协议
1.虚拟互连网络

将网络互连并能够互相通信,会遇到许多问题,例如:不同的寻址方案(不同的网络可能地址的表示位数不同),不同的最大分组长度(最大帧长),不同的网络接入机制,不同的超时控制,不同的差错恢复方法......

如何将异构的网络互相连接起来:使用一些中间设备(中间系统)(中继系统)

  • 物理层中继系统:转发器
  • 数据链路层中继系统:网桥或桥接器(二层交换机)
  • 网络层中继系统:路由器
  • 网桥和路由器的混合物桥路器(三层交换机)(就是同时具有数据链路层和网络层的设备功能)
  • 网络层以上的中继系统:网关

注意,当中继系统是转发器或者网桥时,一般不称为网络互连,因为这仅仅是把一个网络扩大了(以太网的扩展),而这仍然是一个网络。网络互连都是指用路由器进行网络互连和路由选择

互连网络与虚拟互连网络

如上图,所谓虚拟互连网络也就是逻辑互连网络,它的意思就是互连起来的各种物理网络的异构性本来是客观存在的(异构性包括物理层和数据链路层),但是在网络层我们采用了IP协议就可以使这些性能各异的网络从用户看起来好像是一个统一的网络(虚拟互连网络)(其实就相当于屏蔽了物理层和数据链路层的不同)
使用IP协议的虚拟互连网络可以简称为IP网。使用虚拟互连网络的好处是:当互连网上的主机进行通信时,就好像在一个网络上通信一样,而看不见互连的各具体的网络异构细节。

2.分类的IP地址

1.IP地址及其表示方法
IP地址就是给每个连接在互联网上的主机(或路由器)分配一个在全世界范围内是唯一的32位的标识符。IP地址由互联网名字和数字分配机构(ICANN)进行分配。分配给ISP,然后用户再通过ISP申请到一个IP地址。
2.IP地址的编址方式

  • 分类的IP地址。这是最基本的编址方法,在1981年就通过了相应的标准协议。
  • 子网的划分。这是对最基本的编址方法的改进,其标准[RFC950]在1985年通过。
  • 构成超网。这是比较新的无分类编址方法。1993年提出后很快就得到推广应用。

后续还有NATIPv6这些方法

分类IP地址:
1.将IP地址划分为若干个固定类
2.每一类地址都由两个固定长度的字段组成,其中一个字段是网络号 net-id,它标志主机(或路由器)所连接到的网络,而另一个字段则是主机号 host-id,它标志该主机(或路由器)。
3.主机号在它前面的网络号所指明的网络范围内必须是唯一的。由此可见,一个IP地址在整个互联网范围内是唯一的

分类IP地址

各类IP地址的网络号字段和主机号字段

正常使用ABC三类,DE两类用作科研或者其他一般不开放使用。D类地址还是多播地址


常用的三种类别的IP地址

A类地址:

在上图中,最大可指派网络数是根据00000000-011111111(0-127)共128个但是首尾网络号不用,因此最大数就是182-2=126个。例如A类地址的主机号有24位,因此可以有2的24次方台主机,当然24位全0和全1的这两个不能用(全0的表示的是网络地址不能分配给主机,全1的表示广播地址)。A类网络数量少,总共只有126个网络,但是网络规模大,每一个主机能够连接16777214台主机。但是A类网络地址容易造成极大的浪费,比如我分配给一个公司一个A类网络地址,这个公司有400万台主机(目前地球上还没有规模这么大的公司),但是一个A类网络地址可以连接16777214(1600多万台主机),所以就相当于只用了1/4,存在极大的浪费。

B类地址:

B类地址的网络号16位前两位固定10,能够变化的其实只有14位(变化范围:14位全0-14位全1),14位全0(128.0)不使用。B类网络的主机号16位,最多有2的16次方个地址(同A类网络一样,16位全0和全1的地址是不能使用的)。B类网络地址同样会存在浪费,例如一所学校3万台主机,假设给这所学校分配一个网路地址,那么利用率大概为50%(30000/65534),同样也有一半的网络资源会被浪费。

C类地址:

C类地址的网络号24位前三位固定110,能够变化的其实只有21位(变化范围:21位全0-21位全1),21位全0(192.0.0)不使用。C类网络的主机号8位,最多有2的8次方个地址(同A类网络一样,8位全0和全1的地址是不能使用的)。C类网络的特点就是网络数量多(209万),但是网络规模小(每个网络地址连接的主机数少)

另外因为32位的二进制IP地址不方便记忆和我们使用,所以通常采用点分十进制记法来提高可读性。例如,有一个IP地址为10000000000010110000001100011111,将这个32位地址分成4段,每段8位,段与段之间用.分隔,所以得到10000000.00001011.00000011.00011111 然后将这四段分别转换成对应的十进制数。即可得到128.11.3.31。
那么怎么判断一个网络地址是属于A类,B类还是C类的呢?例如现在有一个网络地址为10.11.12.13,根据点分十进制记法,10处于1-126之间,很明显属于A类地址。又例如130.131.132.133属于B类地址,因为130处于128-191之间。注意,200.300.400.500它不是一个合法地址,因为8位为一段,最大值是8个1(255),所以地址表示是数字的最大值只能到255,不可能出现300,400。

3.特殊IP地址

一般不使用的特殊的IP地址

主机号全为0的是网络地址,不能分配给主机;主机号全1的是广播地址,也不能分配给主机。

4.IP地址的一些重要特点

  • IP地址是一种分等级的地址结构(把32位的IP地址分为16位的网络号net-id和16位的主机号host-id)。分等级的两个好处是:第一,IP地址的管理机构在分配IP地址时只需要分配前16位的网络号,而主机号则由得到网络号的单位自行分配,这样方便管理。第二,路由器仅根据目的主机所连接的网络号来转发分组,而不考虑主机号,这样可以使路由表中的项目大大减少,减小存储空间。
  • 实际上IP地址是标志一个主机(或路由器)和一条链路的接口。当一个主机同时连接到两个网络上时,该主机必须具有两个相对应的IP地址它们的网络号必须是不同的,这样的主机称为多归属主机。另外,由于一个路由器至少应该连接两个网络,因此一个路由器至少应该有两个不同的IP地址
  • 利用转发器或者网桥连接起来的若干个局域网仍然是一个网络(局域网的扩展),因此这些局域网都具有相同的网络号net-id。
  • 所有分配到网络号net-id的网络,无论是范围很小的局域网还是覆盖面很大的广域网,都是平等的。
    5.互联网中的IP地址
  • 在同一个局域网上的主机或路由器的IP地址中的网络号必须是一样的,图中的网络号就是IP地址中的net-id。
  • 路由器总是具有两个或两个以上的IP地址,它的每一个接口都有一个不同网络号的IP地址
  • 两个路由器直接相连的接口处,可以指明也可以不指明IP地址。如果指明,那么这一段连线就构成了一种只包含一段线路的特殊"网络"。现在常不指明地址。
互联网中的IP地址

如上图,图中一共有三个局域网LAN1LAN2LAN3,三个路由器R1R2R3。例如,在LAN1中的三台主机的网络号都是222.1.1。例如路由器R1,共有三个接口,分别连接了LAN1,R2和R3,这三个接口的网络号分别是222.1.1,222.1.5和222.1.6各不相同。另外,两个局域网之间通过转发器或者网桥连接起来之后仍然属于同一个网络,各主机的网络号一定是相同的,如上面的网桥B连接起来的两个局域网。

3.IP地址与硬件地址

IP地址与硬件地址是不同的地址

  • 从层次角度看
    硬件地址(物理地址)数据链路层和物理层使用的地址,而IP地址是网络层及以上各层使用的地址,是一种逻辑地址(因为IP地址是用软件实现的)
    IP地址与硬件地址的区别

    一般来说,一台连接在互联网上的主机有3个地址,分别是域名,IP地址,MAC地址。在我们浏览网页时,在地址端输入的是域名,系统会自动把域名转换为对应的IP地址(正向解析,反过来就是逆向解析),这一步转换由域名解析系统DNS来完成,用户要根据IP地址来找到MAC地址,这一过程需要用ARP协议来完成,当然这一步也是系统自己完成的。反过程用的就是RARP协议。
4.地址解析协议ARP

通信时使用的两个地址:

  • IP地址(网络层地址)
  • MAC地址(数据链路层地址)

每个接口都有两个地址,网络层及以上的使用IP地址,数据链路层和物理层使用MAC地址(物理地址)
1.地址解析协议ARP的作用

地址解析协议ARP的作用

2.地址解析协议ARP的要点

  • 不管网络层使用的是什么协议,在实际网络的链路上传送帧时,最终都必须使用硬件地址。
  • 每一个主机都设有一个ARP高速缓存,里面有所在在局域网上的各主机和路由器的IP地址到硬件地址的映射

3.ARP分组的传输

image.png

ARP分组的传输

如上图,当主机A想要给主机B发送一个IP数据报时,先在自己的ARP高速缓存中查看是否有主机B的IP地址,如果有就直接写入MAC帧进行发送;如果没有,此时主机A就会(本地)广播发送一个ARP请求分组(路由器不转发ARP请求),这个ARP请求分组里面包含了源IP地址,源硬件地址,目标IP地址,发送出去的目的就是找到目的的硬件地址,当其他全部主机接收到这个请求后就会将请求中的目的IP地址与自己的IP地址比对,如果相同就说明我是被找的那台主机B,B就会发送一个ARP响应,A在发送之后会收到一个ARP响应(注意发送响应是单播,而不是广播),里面包含了发送方的IP地址和硬件地址,目的方的IP地址和硬件地址,接收到目的的硬件地址之后就写入自己的ARP高速缓存中,然后再发送数据。

4.ARP高速缓存的作用

  • 存放最近获得的IP地址到MAC地址的映射,以减少ARP广播的数量(不可能每次发送数据报都要经历一次广播)
  • 为了减少网络上的通信量,主机A在发送其ARP请求分组时,就将自己的IP地址到硬件地址的映射写入ARP请求分组
  • 同时,在主机A发送ARP请求时主机B也会纪录A的IP地址和硬件地址,并存储在自己的高速缓存中,等到下次B要发送数据给A就不用再发送ARP请求。其实缓存是非常高效并且互相的。

5.ARP欺骗
网络上的任意一台主机,在没有接收到ARP请求的情况下,可以主动发送ARP响应

例如在上述例子中,A要发送数据给B,但是如果Z主动发送了一个ARP响应给A,并且把B的IP地址和硬件地址告诉A,那么A就会误以为Z就是我要找的B,就会导致数据发送出错。这就好比我要找的人是小徐,结果小红跑出来跟我说他是小徐,那我就跟着小红走了,这就会出错(三十六计之瞒天过海,无中生有)。

6.应当注意的问题

  • ARP是解决同一个局域网上的主机或路由器的IP地址和硬件地址的映射问题。
  • 如果出现跨局域网的发送情况,就需要通过ARP找到一个位于本局域网的某个路由器的硬件地址,然后把分组转发给这个路由器,让这个路由器把分组转发到另一个网络,剩下的工作由另一个网络来做。
  • 从IP地址到硬件地址的解析式自动进行的,系统用户对此过程是不知道的。
  • 只要开始进行通信,那么ARP协议就会自动将IP地址转化为链路层需要的硬件地址

7.使用ARP的四种典型情况

  1. 发送方是主机,要把IP数据报发送到本网络上的另一个主机。这时用ARP找到目的主机的硬件地址。
  2. 发送方是主机,要把IP数据报发送到另一个网络上的个主机。这时用ARP找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。
  3. 发送方是路由器,要把IP数据报转发到本网络上的一个主机。这时用ARP找到目的主机的硬件地址。
  4. 发送方是路由器,要把IP数据报转发到另一个网络上的一个主机。这时用ARP找到本网络上另一个路由器的硬件地址。剩下的工作由这个路由器来完成
    使用ARP的四种典型情况

    通信过程

如上图:当主机H1发送数据给主机H2,这就是第一种情况;当主机H1发送数据给主机H4,这就是第二种情况,具体过程为:主机H1发送ARP请求给路由器R1,但是因为路由器不能转发ARP请求,所以路由器R1会把自己的一个端口的IP地址和硬件地址(HA3)包装成ARP响应发送给H1,然后主机H1把数据报发送给路由器R1,剩下的工作由R1来完成。接着就是R1发送给主机H4,属于第四种情况,在这之前R1还需要跟之前相同的步骤把数据报发送给R2,当路由器R1发送数据给R2时,源MAC地址就变成了HA4,目的MAC地址就变成了HA5,以此类推,通过端口不停地往后传送,知道最后R2再发送给主机H4,这就属于第三种情况,此时源MAC地址就是HA6,目的MAC地址就是HA2。注意,在整个过程中,IP数据报内的全部信息都没有变(源地址始终是IP1,目的地址始终是IP2),在中间传输的过程只不过是将IP数据报封装成帧了而已,并没有对它产生任何改变。

通信过程中使用的IP地址和硬件地址

这里还有一种最坏的情况就是主机H1和路由器R1R2的ARP高速缓存中都没有存放任何信息,因此在整个过程中每发送一次数据报都要先发送ARP请求来获得目的的IP地址和硬件地址。

5.IP数据报的格式
  • IP数据报由首部数据两部分组成。
  • 首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。
  • 在首部的固定部分后面还有一些可选字段,其长度是可变的。
IP数据报

IP数据报首部的固定部分中的各个字段:
版本号——4位;
首部长度——4位,可表示的最大数值为1111(15),一个单位为4个字节,因此最大为60字节;
区分服务——8位,用来获得更好地服务;
总长度——16位,指的是首部和数据之和的长度,利用总长度字段可以在接收方接收数据的时候判断是否进行过填充,填充了多少字节(用目前长度-总长度字段就是填充的数据长度)。当IP数据报的长度(总长度16最大可达65535)大于了在以太网上的最大数据长度MTU(1500)时,就要对数据进行切片。如果要进行切片,接收方必须解决三个问题:1.划分为若干个分组后是否知道得到的具体是哪几个分片;2.接收方怎么判断是否已经全部接收到分片,没有遗漏;3.将分片重新组成时各分片的位置怎么确定。
生存时间——8位,记为TTL,指示数据报在网络中可通过的路由器数的最大值;
协议——8位,指出数据报携带的数据使用的是哪种协议;
首部检验和——16位,只检验数据报的首部,不检验数据部分,这里不采用CRC检验码而采用简单的计算方法;

16位二进制反码求和算法

源地址和目的地址——各占四个字节

IP数据报首部的可变部分:IP数据报的可变部分是一个选项字段,内容丰富多样,长度从1个字节到40个字节不等,增加可变部分的目的是增加IP数据报的功能,但实际上这些选项很少使用。

IP数据报切片的解决方法:在IP数据报中还有一个标识字段——16位,分片如果是来自同一个数据报,那么它们的标识字段一定相同标志字段——3位,目前只有前两位有意义,标志字段的最低位是MF(More Fragment),MF=1表示后面还有分片,MF=0表示最后一个分片。标志字段中间的一位是DF(Don' t Fragment),只有当DF=0时才允许分片;片偏移——13位,指出每个分片在原分组的相对位置,以8个字节为偏移单位(8个字节的整数倍),因此分片时各片的长度不能任意

IP数据报分片

如上图,将上述分片完成后得到:
IP数据报分片结果

6.IP层转发分组的流程

假设现在有四个A类网络通过三个路由器连接在一起,而每个网络上都有成千上万台主机,如果按照目的主机的主机号来制作路由表,那么一个路由表就有成千上万行,这样路由表的内存会过于庞大,因此我们按照目的主机所在网络地址来制作路由表,相当于归类纪录,这样的话每个路由表只需要几行就可以,会大大简化。如下图:

路由表

图中以R2的路由表为例,其中网络2和网络3直接与R2路由器相连,被叫做直连网络,直连网络可以直接交付(就是说数据从路由器R2到网络2直接通过接口0就可以了),并且在路由器初始化的时候,如果接口都配置正确,那么直连网络会自动地出现在路由表中。如果路由器R2要转发到网络1,那么就需要先转发到路由器R1,再由R1进行直接交付,其实就相当于间接交付。再比如,以路由器R1为例,网络1要转发数据给网络3中的主机,因此两者不是直连关系,因此需要先通过路由器R2的转发,所以下一跳地址为路由器R2的0接口,也就是20.0.0.9;如果网络1要转发数据给网络4中的主机,同样的还是需要先经过R2的转发再经过R3的转发,因此下一跳地址还是20.0.0.9.对于网络4向网络2,1发送数据同理。默认网关的概念:现在网络1中的某台主机要转发分组给网络4中的某台主机,默认情况下,分组会被转发到路由器R1,因为它们是直连的关系,对于所有在网路1上的主机,它们的默认网关都是路由器R1的接口0,也就是10.0.0.4。所以,数据报在传输的过程中可能会经过多次的间接交付,等到达最后一个路由器时再进行直接交付到达目的主机

2.特定主机路由:虽然互联网所有的分组转发都是基于目的主机所在的网络,但是在大多数情况下,都允许有一个特例,即指定某个网络中的某一台主机填入路由表,采用特定主机路由可以使网络管理人员更方便地控制网络和测试网络,同时也考虑到某种安全问题
3.默认路由:假如现在有一个分组的地址为1.2.3.4那么它的网络地址就是1.0.0.0,但是在路由表中没有记录,那么路由器就不知道该转发给谁,怎么转发,就会将这个分组丢弃,为了避免这种情况,有了默认路由,一旦出现找不到目的地址的分组,就由默认路由转发(或者说默认路由能够匹配所有的地址)。但同时默认路由的优先级是最小的,也就是只有在找不到的情况下才会使用,找到了的话就不会用默认路由。采用默认路由可以减少路由表所占用的空间和搜索路由表所用的时间,如果主机连接在一个小网络上,并且这个网络只用一个路由器与互联网连接,那么这种情况非常适合使用默认路由。例如下图:

默认路由举例

4.路由器分组转发算法

路由器分组转发算法

转发方式的优先级关系为:直连网络(直接交付)——特定主机路由——间接交付——默认路由
5.关于路由表
路由表并没有给分组指明到某个网络的完整路径,路由表指出的是到某个网络应该先到某个路由器(下一跳路由器),到达下一步路由器之后再查询路由表才知道接下去跳转到哪。分组并不是从源地址直接到达目的地址,而是经过一步一步跳转的。

3.划分子网和构造假网

1.划分子网

1.从两级IP地址到三级IP地址
早期IP地址的不合理设计:IP地址浪费极大,因此对分类的IP地址做了一个改进,划分子网:在IP地址中增加一个"子网号字段",使原本的两级地址(网络号,主机号)变成三级地址(网络号,主机号,子网号),如下图所示:

划分子网的基本思路

实际上就是从主机号分出几位作为子网号
2.划分子网的基本思路

  • 从其他网络发给本单位的某个主机的IP数据报,仍然根据IP数据报的目的网络号,找到连接在本单位上的路由器
  • 然后这个路由器再根据目的网络号,目的子网号找到对应的子网
  • 最后将IP数据报直接交付给目的主机。

例如:


一个未划分子网的B类网络

一个划分子网的B类网站

如上图,路由器R1就是本单位的路由器,而在路由器R2和R3中的路由表中都记录这145.13.0.0——>R1这样的数据,也就是说我要发送数据报到145.13.0.0网络的某台主机,必须经过路由器R1。在路由器R1中也记录着145.13.0.0——>-,-表示直接交付。假设现在路由器接收到一个分组,目的地址为145.13.7.56,首先R2将分组转发给R1,接着R1直接交付。145.13.0.0网络被划分为三个子网:145.13.3.0,145.13.7.0和145.13.21.0,并给它们分别编号012,但是对外仍然是一个网络145.13.0.0,划分子网仅仅是在内部进行。因此,在路由器R1的路由表中也有到三个子网的路由表145.13.3.0——>接口0145.13.3.7.0——>接口1145.13.3.21——>接口3。划分子网后,前面步骤没有变化,R1在接收到这个分组之后根据网络号145.13.7.0和子网号来查询路由表,得知需要通过接口1才能到达,最终传递给目的主机。

3.子网掩码

  • 从一个IP数据报的首部无法判断源主机或目的主机所连接的网络是否进行了子网划分。
  • 使用子网掩码可以找出IP地址中的子网部分。

规则:

  • 子网掩码的长度=32位,和IP地址的长度相同
  • 某位=1,IP地址中的对应位为网络号和子网号
  • 某位=0,IP地址中的对应位为主机号

IP地址各字段和子网掩码

如上图,从16位的主机号中挑8位作为子网号,三级IP地址的子网掩码中16位的网络号全部取1,8位的子网号也取1,8位主机号取0。将上图中的三级IP地址三级IP地址的子网掩码逐位进行与运算,就得到子网的网络地址,也就是上面讲到的145.13.7.0 145.13.3.0 145.13.21.0。和1相与保持不变,和0相与为0。先看一下默认的子网掩码
默认子网掩码

子网掩码是一个重要属性

原来的路由表只有目的网络地址下一跳这两个属性,现在要增加一个网络子网掩码这个属性。
4.子网划分方法

  • 固定长度子网
  • 变长子网

采用固定长度子网时,所划分的所有子网的子网掩码都是相同的(每个子网的子网号长度是一定的)。采用变长子网时,每个子网的子网号长度是不一定的。注意,子网号不能为全0或全1。子网号全0时,如果主机号也全0,那么这与之前说的16位主机号不能全0冲突,并且也无法区分出这到底是没有划分子网的地址还是划分了子网之后的地址;子网号全1的情况类似。例如:

B类地址子网划分选择

在上图中,如果子网位数为3位,即从16位的主机号中取出3位当做子网号,那么剩下16位就是主机号,因此子网数=23-2=6个(因为子网全0和全1不能使用),而每个子网的主机数=213-2=8190(主机号全0和全1也不能使用)。

2.使用子网时分组的转发

  • 在不划分子网的两级IP地址(网络号和主机号)下,得出网络地址是个很简单的事。
  • 但是在划分子网的情况下,从IP地址不能得出唯一的网络地址,因为网络地址取决于子网掩码,但数据报的首部并没有提供子网掩码的信息,因此分组转发的算法必须做出相应的改动。
在划分子网的情况下路由器转发分组的算法

(6).报告转发分组出错

划分子网下的路由器转发算法

如上图,共有三个子网,并且路由器R1的路由表也增加了一项目的网络地址的子网掩码,现在主机H1要向主机H2发送分组。路由器R1的接口0与子网1相连,接口1与子网2相连,。开始H1并不知道H2连接在哪一个网络上,仅仅知道的是H2的IP地址为128.30.33.138,主机H1首先将本子网(子网1)的子网掩码和目的IP地址进行逐位相与运算,得到一个网络地址,如果得到的网络地址与子网1的网络地址128.30.33.0相同,那么就说明主机H2也连接在子网1上,那么进行直接交付。在这里子网掩码255.255.255.128与目的IP地址128.30.33.138相与后得到128.30.33.128与子网1的网络地址128.30.33.0不一致,说明主机H2没有连接在子网1上,接着用路由表的第二行进行对比,再进行同样的操作。最后可以得到主机H2在子网2上。因此,查看路由表可以知道下一跳为接口1,接着分组就从路由器R1的接口1被转发出去到子网2。如果,目的主机在其他的子网上,再根据特定路由或者默认路由转发到下一个路由器上,再进行分组判断。

3.无分类编址CIDR(构造超网)

1.网络前缀
划分子网虽然在一定程度上解决了困难,但是并没有从根本上解决,仍然有几个问题:

  • B类地址1994年3月已经被分配完了
  • 互联网主干网上的路由表中的项目数急剧增长(几万个)
  • 整个IPv4的地址空间最终将被全部耗尽

2.CIDR的特点
CIDR是在变长子网掩码(VLSM)的基础上进一步提出的,它的全称为无分类域间选择(CIDR)
主要特点:

  • CIDR消除了传统A类,B类,C类地址以及划分子网的概念,因此可以更加有效地分配IPv4的地址空间。
  • CIDR使用各种长度的"网络前缀"来代替分类地址中的网络号和子网号。相当于又从三级地址(使用子网掩码)变回了两级地址(网络前缀和主机号)。

无分类的两级编址

如上图,CIDR和之前最开始讲的二级地址(网络号和主机号)其实是等价的。8位的网络前缀就对应于A类地址中8位网络号,同样的16位,24位的网络前缀对应于B类和C类地址。图中的220.78.168.0/24并不是指一个IP地址,而是一群IP地址,我们把它叫做地址块。如下图:
CIDR地址块

被称为地址块有两个前提:网络前缀必须相同;IP地址必须是连续的。地址块中的地址数实际上就是主机数。例如128.14.32.0/20,一共有212个地址,而C类地址的主机号有8位,那么**这样的一个地址块**就相当于2(12/8)=16个C类地址。由128.14.32.0/20可得128.14这16位是网络前缀,但是因为网络前缀有20位,所以32.0这16位中前4位属于网络前缀,即0010 0000 0000 0000前4位0010属于网络前缀,不属于主机号。所以最小地址就是后面12位全0的地址128.14.32.0,最大地址就是后面12位全1的地址128.14.47.255。之前说这样的一个地址块相当于16个C类地址,其实就是128.14.32.0-128.14.32.255128.14.33.0-128.14.33.255,....一直到128.14.47.0-128.14.47.255。47-32+1=16。其实最小地址就是网络地址,最大地址就是广播地址。

3.路由聚合

路由聚合

原本在路由表中需要存放16个C类网络地址,现在可以用一个148.14.32.0/20来代替,这样可以大大减少路由表的存储空间,同时也能缩短检索路由表的时间。CIDR地址块也有掩码(不叫子网掩码)网络前缀部分对应全1,主机号对应全0

4.CIDR记法的其它形式

CIDR记法的其它形式

常用的CIDR地址块

表中的点分十进制实际上就是掩码。由表中数据可以得出,CIDR前缀长度越长,包含的二级网络地址数越少。/24刚好包含1个C类地址。即CIDR前缀长度不超过23位的都包含了多个C类地址,这些C类地址合起来就构成了超网。并且,CIDR地址块中的地址数一定是2的整数次幂,因此可以得出:CIDR也存在着IP地址的浪费,只不过浪费的程度稍微好一点而已。例如某个单位需要50个IP地址,25<50<26,所以还是要分配2的6次,也有一小部分的浪费。

5.CIDR地址块划分

CIDR地址块划分举例

如上图,一个ISP向互联网申请了一个地址块206.0.64.0/18,某个大学又向ISP申请了一个地址块206.0.68.0/22,在这个大学里面有4个系,一系400台主机,二系200台主机,三系和四系各100台主机。一般按照地址数递减的顺序分配IP地址,即地址数较少的放在后面分配。206.0.38.0/22相当于4个C类地址,206.0.68.0/24-206.0.68.255/24206.0.69.0/24-206.0.69.0/24,......70,71。首先看一系,28<400<29,所以至少要给一系分配2^9=512个地址,也就是9位主机号,即23位网络前缀,所以我们把206.0.68.0/24-206.0.68.255/24206.0.69.0/24-206.0.69.255/24这两个C类地址分配给一系。同时此时也存在着IP地址的浪费,因为毕竟512>400(在碰到其他主机数时记得考虑有两个IP地址不能用)。同样的,给二系分配的地址,主机号至少8位,即24位网络前缀,所以我们把206.0.70.0/24-206.0.70.255/24分配给二系。同理,把206.0.71.0/25-206.0.71.127/25这128个地址分配给三系,把206.0.71.128/25-206.0.71.255/25分配给四系。
再假设一系二系三系四系各100台主机。因为26<100<27,即主机号7位,网络前缀25位。一共需要4块100个地址,所以把206.0.68.0/24分为206.0.68.0/25-206.0.68.127/25206.0.68.128/25-206.0.68.255/25这两个。把206.0.69.0/24分为206.0.69.0/25-206.0.69.127/25206.0.69.128/25-206.0.69.255/25这两个。一共4个128位的地址分别给四个系的主机。

6.最长前缀匹配

  • 使用CIDR时,路由表中的每个项目由网络前缀下一跳地址组成,在查找路由表的时候可能得到不止一个结果。
  • 应该从匹配结果中选择具有最长网络前缀的路由,因为网络前缀越长,其地址块也就是主机号越少,路由就越具体。
  • 最长前缀匹配又叫最长匹配最佳匹配

最长前缀匹配举例1

最长前缀匹配举例2

最长前缀匹配结果

其实这就跟送快递一样,地址填的越详细,快递到达的就更准确不会出错。在之前讲到的特定主机路由,它的优先级最高,因为它的前缀(255.255.255.255)是最长的(它的送货地址时最详细的)。

7.使用二叉线索查找路由
在上面讲到的最长匹配结果,我们在匹配的时候为了全面不遗漏,只能采用穷举的方法来一个一个的匹配看是否有多个匹配结果以及最长匹配结果是哪个,这样耗费的时间会很长。

  • 当路由表项目数很大时,怎么样设法减小路由表的查找时间就成为一个非常重要的问题。
  • 为了进行更加有效的查找,通常将路由表存放在一种有层次的数据结构中,然后自上而下地进行查找。最常用的就是二叉线索

用5个前缀构成的二叉线索

唯一前缀不需要等长,但是必须要区分每一个不同的IP地址,不能存在相同的唯一前缀

4.网际控制报文协议ICMP

1.ICMP报文的种类

  • 在网络层已经有IP协议的基础之上,为了更有效地转发IP数据报提高交付成功的机会(因为网络层的数据报服务不提供可靠交付,只提供尽最大努力的交付),在网络层使用了网际控制报文协议ICMP
  • ICMP是互联网的标准协议
  • ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告,但是这个报告只能向源主机报告
  • ICMP不是高层协议,因为它是装在IP数据报中,作为其中的数据部分的。是IP层的协议。

1.ICMP报文的格式

ICMP报文

前4个字节(类型,代码,检验和)每个ICMP报文都是一样的类型字段指出ICMP报文是什么类型的报文,ICMP报告差错是什么类型的差错(目的不可达...)代码字段指出出现差错的具体原因(链路断开,路由器故障,路由器缓存超出)或者可以说类型字段指出大类别代码字段指出具体小类别

2.ICMP报文的种类

  • ICMP报文的种类有两种,即ICMP差错报告报文ICMP询问报文

ICMP差错报告报文有四种:

  • 终点不可达(3)
  • 时间超过(11):IP数据报首部的TTL字段减为零
  • 参数问题(12):分组首部的字段取值有差错
  • 改变路由(重定向)(Redirect)(5)

3.改变路由(重定向)(Redirect)
在非特定的情况下,当路由器检测到一台机器使用非优化路由时,也就是没有使用推荐的最佳路由。当路由器接收到经非优化路由传输过来的分组时,它会做两件事,第一它会发送一个ICMP重定向报文给源主机,请求主机改变路由。第二它会把分组转发给目的地。

非优化路由

如上图,主机H1向主机H2发送分组,因为H1的默认网关为路由器R1的接口,因此在发送过程中的路径为:H1-R1-R2-R4-H2这就是一条非优化路由,因为一开始进入路由器R1到出来,都是同一个接口,相当于在这里走了"回头路",而另外一条路径H1-R2-R4-H2才是优化路由。所以,当路由器R1接收到主机H1发送过来的分组之后,就会和上面说的一样它会发送一个ICMP重定向报文给源主机H1,告诉H1你刚才发送的这条不是优化路由,真正的优化路由应该是直接发送给路由器R2。同时,它还会把分组转发给路由器R2。主机H1收到ICMP报文之后会修改对应的路由,那么经过这一次发送之后,下一次的发送就会直接使用优化路由。这就是重定向。
如何判断非优化路由:1.源主机发送数据给路由器的入端口和出端口相同(即上图中的情况)。2.数据报的源IP和转发的下一跳的IP属于同一个网络(在上图中,路由器R1接收到数据报时,源IP即为主机H1的IP10.1.1.3,对R1来说下一跳是R2,IP为10.1.1.2它们属于同一个网络,即说明可以直接一步转发)。

4.ICMP报文的数据部分

ICMP报文的数据部分

5.不发送ICMP差错报告的几种情况

  • 对lCMP差错报告报文不再发送CMP差错报告报文。
  • 对第一个分片的数据报片的所有后续数据报片都不发送LCMP差错报告报文
  • 对具有多播地址的数据报都不发送ICMP差错报告报文。
  • 对具有特殊地址(如127.0.0.0或000.0)的数据报不发送ICMP差错报告报文。

6.ICMP询问报文
ICMP询问报文有两种:(请求和回答报文配合使用)

  • 回送请求和回答报文
  • 时间戳请求和回答报文

2.ICMP的应用举例

1.PING

  • PING用来测试两个主机之间的连通性(主机与路由器,路由器之间)
  • PING使用了ICMP会送请求与回送回答报文。

2.Traceroute

  • 操作命令是tracert,用来跟踪一个分组从源点到终点的路径
  • 他利用IP数据报中的TTL字段ICMP时间超过差错报告实现对路径的跟踪。

例如现在有这样一个线路:H1-R1-R2-R3-H2,现在要想知道发送过程中经过的第一个路由器R1的地址,可以由主机H1向主机H2发送一个分组,且分组的IP数据报的TTL字段为1,当发送到R1时,TTL-1=0,因此R1会发送一个时间超过差错报告给H1,这样H1就能够知道R1的IP地址了。然后,再次设置TTL字段为2,同理就可以知道R2的IP地址了。

5.互联网的路由选择协议

1.有关路由选择协议的几个基本概念

1.理想的路由算法

  • 算法必须是正确的,完整的。
  • 算法在计算上应该简单
  • 算法能适应通信量和网络拓扑的变化,也就是要有自适应性
  • 算法应该具有稳定性
  • 算法应该是公平的。

2.最佳路由

  • 不存在一种绝对的最佳路由算法,所谓的最佳就是相对于某一种特定的要求*下比较合理的选择。
  • 实际的路由选择算法,应该尽可能的接近理想算法
  • 路由选择是一个非常复杂的问题,它必须要考虑到网络中的所有结点,它是网络中所有结点共同协调工作的结果。而且,路由选择的环境往往是不断变化的

3.从路由算法的自适应性考虑

  • 静态路由选择策略——即非自适应路由选择,简单开销小,不能及时适应网络变化。
  • 动态路由选择策略——即自适应路由选择,实现复杂开销大,能很好地适应网络变化。

4.分层次的路由选择协议
互联网采用的是分层次的路由选择协议。这是因为互联网的规模非常大,如果让每个路由器都知道所有网络的下一跳地址,那么这个路由表就会非常大。处理时间会很长,彼此交换路由信息时带宽也会很大。另外,许多单位不想透露自己单位的网络布局,安全性不够。

5.自治系统AS
所谓的自治系统AS,就是一组路由器,这组的路由器都采用相同的路由选择协议和路由选择的依据

自治系统AS

如上图,如果路由选择协议是在自治系统内部使用的,那么就叫做内部网关协议,如果是在自治系统之间使用的,那就叫做外部网关协议。因此,互联网有两大类路由选择协议:内部网关协议IGP(使用最多,如RIP和OSPF)外部网关协议EGP(使用最多的是BGP-4)不同的自治系统可以使用不同的内部网关协议

内部和外部网关协议

2.内部网关协议RIP

1.工作原理

  • 路由信息协议RIP是内部网关协议IGP最先得到广泛使用的协议。
  • RIP是一种分布式的,基于距离向量的路由选择协议。分布式就是说路由选择不是由一个路由器进行选择,而是自治系统中的全部路由器协调选择的结果。这里的距离就是之前说到的路由选择的依据

2."距离"的定义

  • 从一个路由器到直连网络的距离定义为1
  • 从一个路由器到非直连网络的距离定义为所经过的路由器数+1
  • RIP协议中,"距离"也称为"跳数",因为每经过一个路由器,跳数就加1。RIP认为一个好的路由就是它通过的路由器数目最少,即距离短
  • RIP允许一条路径最多只能包含15个路由器,也就是说距离的最大值为16时相当于不可达,因此RIP只适合小型网络
  • RIP不能在两个网络之间同时使用多条路由。即当两条路径的距离相同时,不能同时使用,只能选择其中的一条(通常选IP地址小的路径)。RIP会选择一个具有最少路由器的路由(即最短),哪怕还存在另一条高速(低时延)但路由器较多的路由。也就是说简单粗暴RIP只看距离不看带宽等其它因素RIP选择的路由不一定是最优的,但一定是距离最短的

例如现在有这样一条线路:N1-R1-N2-R2-N3-R3-N4,路由器R1到网络N1和N2的距离均为1,因为是直连网络;而路由器R1到网络N3的距离就是2。

3.RIP协议的三个特点

  1. 仅仅和相邻的路由器交换信息。Who
  2. 交换信息是当前本路由所知道的全部信息,即自己的信息表。What
  3. 按照固定的时间间隔交换路由信息,例如默认的时间间隔为30s。当网路拓扑发生变化的时候,路由器会及时地向相邻的路由器通告拓扑变化后的信息(触发更新)。When

例如现在有这样一条线路:H1-N1-R1-N2-R2-N3-R3-N4-H2,那么相邻的路由器怎么判断:如果有两个路由器各有一个接口连接在同一个网络上,那么这两个路由器就是相邻的。例如上面例子中R1与R2是相邻的路由器,R2与R3也是相邻的路由器,R1与R3就不是相邻的路由器。交换全部信息就等于交换自己的路由表。把路由表封装成RIP报文,以RIP报文的形式交换。

4.路由表的建立

路由表的建立

5.距离向量算法

距离向量算法

如上图所示,假设现在有这样一条线路,N1-R1-N2-R2-N3-R3-N4。现在路由器R2把自己的路由表以RIP报文的形式发送给R1,其中发送的报文(路由表)有三项数据,目的,下一跳,距离。在R1接收到这个报文之后,进行上图中的操作。操作完之后,将修改后的R2的路由表与R1自己的路由表进行对比。首先比较的是目的网络,如果目的网络不在路由表当中了,那么新增一项。如果已经在路由表当中了,那么开始比较下一跳字段,如果下一跳地址相同那么就将收到的项目替换掉原来路由表中的项目(更新路由表)。如果下一跳地址不同,那么就比较距离,如果收到的项目的距离小于路由表中的距离,那么进行更新。否则,什么也不做。概括的来说,距离向量算法就是:1.接收RIP报文并修改;2.RIP报文每一项和路由表中的每一项进行比较;根据不同的比较结果做出不同的操作。例如:

距离向量算法举例

路由表更新

注意:在上图路由表更新图中,当碰到下一跳地址不同并且距离相同时,如Net8,通常不进行改变。另外,在更新路由的时候,直连路由基本上不会变,因为它们的距离一定是最短的

6.RIP报文的格式

RIP报文的格式

命令字段用来指出RIP报文的性质,1代表请求更新报文;版本字段代表RIP报文的版本。"必为0"其实就是填充字段(采用的是零比特填充)。路由部分就是"路由表信息",可以最多包含25条路由,当路由数超过25条路由时,就需要分多个RIP报文。RIP报文的最大长度为25×20+4=504字节。封装过程为:将整个RIP报文作为UDP用户数据报的数据部分封装到UDP用户数据报中,再将UDP用户数据报整个作为IP数据报的数据部分封装到IP数据报中。RIP1版本不支持子网掩码,而RIP2版本支持子网掩码。另外,RIP2还具有简单的鉴别功能。就是说原本两个路由器R1R2通过网络N1连接在一起R1-N1-R2,结果现在有人把另一个路由器R3连在了网络N1上,那么R3就能够与R1R2交换路由信息结果就可能导致安全问题。因此,鉴别功能就能够判断别的路由器是否有不正常的行为信息等。最常用的鉴别手段就是口令密码

RIP2的鉴别功能

7.RIP协议的特点

RIP协议的优缺点

好消息传播得快,坏消息传播得慢(路由环路)。RIP存在一个问题,当网络出现故障的时候,要经过比较长的时间(例如数分钟)才能将信息传送到所有的路由器。
好消息传播得快,坏消息传播得慢

如上图,当网络1出现故障时,R1就会认为网络1不可达即距离为16,因此在R1中的路由信息变为N1 16 -,但是R2并不知道网络1的故障还是认为我要到达网络1通过R1就行,如果此时R2的更新周期到了,R2就会把自己的路由信息与R1进行交换,原本在R2中存储的路由信息:N1 2 R1在被R1接收到并修改为N1 3 R2之后与自己内部的信息N1 16 -进行对比,对比完了之后R1就会更新为N1 3 R2,R2仍是N1 2 R1,这样会导致信息在路由器R1R2之间不停的转发(路由环路)。接着R1的更新周期到了,如此往复循环,距离的值逐渐变大直到变为16,R1R2才知道原来网络N1不可达了。整个过程需要15个更新周期需要花费好几分钟。当然如果还有其他的路由器那么这个时间会更长。又如果此时R1的更新周期先到,那么R2就能第一时间接收到网络N1不可达的信息,就不会出现路由环路的问题了。

为了避免上述的问题,可以采用水平分割:水平分割是一个规则,用来防止路由环路的产生。它的规则是:从一个接口上学习到的路由信息,不再从这个接口中发送出去

3.内部网关协议OSPF

开放最短路径优先OSPF协议是为了克服RIP的缺点在1989年开发出来的。它的原理很简单,但是实现起来很复杂。
1.OSPF协议的基本特点

  • 开放:公开发表
  • 最短路径优先
  • 采用分布式的链路状态协议

2.OSPF协议的三个要点(和谁发送信息,怎么发送,什么时候发送)

OSPF协议的三个要点

3.链路状态数据库
链路状态数据库

例如,现在有这样的一个网络拓扑结构:

网络拓扑结构

对于路由器A来说,它只知道:B与我相邻,距离是1;C与我相邻,距离是2。同样的对于B来说,它只知道:A与我相邻,距离是1;C与我相邻,距离是5。路由器C...路由器D...
也就是说每个路由器初始化时候的链路状态数据库只记录直连路由器的链路状态。假设现在路由器C向其它三个相邻的路由器发送自己的链路状态信息,当路由器RA接收到路由器C发来的信息之后,会将收到的链路状态数据和自己的链路状态数据库进行对比,将自己库中没有的添加进来,最终路由器A自己的链路状态数据库会变成:A—B—1A—C—2C—B—5C—D—3,这样路由器A就把整个网络拓扑中的链路状态全部包含了,同样的B也把整个网络拓扑中的链路状态都学习到了。对于其它路由器的学习情况也是类似的,不一一举例了。再到下一次,路由器A将自己的信息告诉路由器B,C并通过C告诉D,此时,因为B已经包含了全部的链路状态,它的链路状态数据库不会再变化。而C和D就会继续学习新的链路信息,最终它们四个路由器的链路状态数据库都会是一模一样的。另外,根据其中任意一个路由器的链路状态数据库都能够得到对应的网络拓扑结构。

4.最短路径优先算法SPF

  • OSPF确保同一区域所有的路由器的链路状态数据库保持一致
  • OSPF路由器根据链路状态数据库,使用SPF算法计算出最短路径生成树,再由最短路径树得出路由表
  • 每台路由器都有独立的拓扑视图,因为它们在得出最短路径生成树时都把自己作为根结点
  • SPF根据一种开销度量在确定最佳路径,也就是开销最小的路径。链路的带宽越高,开销越低
  • 开销(cost)=100000000/链路带宽(bit/s)。

5.SPF算法思想——三个步骤

  • 建立链路状态通告报文(建立自己的链路状态数据库)。
  • 将链路状态通告报文泛洪给邻居(也就是把自己的链路状态告诉其它的路由器,达到链路状态数据库的同步)。
  • 构建路由表

6.OSPF的区域

  • 为了使OSPF能够用于规模很大的网络,OSPF将一个自治系统再划分为若干个更小的范围,叫做区域
  • 每一个区域都有一个32位的区域标识符(用点分十进制来表示)
  • 区域不能太大,在一个区域内的路由器最好不要超过200个。


    划分区域

例如:OSPF划分为两种不同的区域:

OSPF划分区域

主干区域的标识符固定的为:0.0.0.0。主干区域的特殊之处在于它是该自治系统用来连通到其它自治系统的。只有在同一区域内的路由器才进行链路状态信息交换,不同区域的路由器不交换,这样大大减少了链路状态交换的量,但是这样的做法最终形成的链路状态数据库仅仅是某个区域内部的链路状态数据库。位于主干区域内部的路由器叫做主干路由器,例如图中的R3-7都是主干路由器,其中的R3,R4,R7又比较特殊,例如在除了主干区域的其它三个区域内的路由器R1R2R8R9,它们的两个或是三个接口都连接在同一个区域内,而对于R3R4R7来说,它们的两个或三个接口并不是连接在同一个区域内,这样的路由器叫做区域边界路由器。在主干区域中还有一个路由器更加特殊R6,因为它的一个接口连接着其它自治系统,这样的路由器叫做自治系统边界路由器

7.OSPF直接用IP数据报发送

  • OSPF不用UDP而是直接用IP数据报传送(区别于RIP协议通过UDP,IP两层封装来传输,即OSPF分组直接将自己作为IP分组的数据部分传输)。
  • OSPF构成的数据报很短,这样做可以减少路由信息的通信量
  • 数据报很短的另一好处是可以不必将唱的数据报分片发送

8.OSPF的其它特点

OSPF的其它特点

OSPF的其它特点

9.OSPF分组

OSPF分组

版本字段:目前版本2;类型字段:指出OSPF分组的数据部分携带的是哪种类型的OSPF;分组长度:指出整个OSPF分组的长度;路由器标识符字段:指出发送OSPF分组的路由器接口的IP地址;区域标识符子段:指出OSPF分组所在的区域的标识符;检验和字段:用来进行差错检测;鉴别类型字段:0-不鉴别,1-口令鉴别,口令放在最后的8个字节中。

10.OSPF的五种分组类型

OSPF的五种分组类型

Hello分组用来确认彼此是否正常工作,是否可达。它还用来确认两个路由器之间谁是主路由器谁是副路由器(也就是谁先发送数据谁后发送)。数据库描述分组用来告诉其他路由器自己包含的全部链路状态信息有哪些,但是它就相当于是一本书的目录,要想知道详细的信息还需要再次发送请求分组。这五种类型的分组是相互合作工作的,来达到数据库链路状态信息同步的目的。

OSPF的基本操作

具体过程还是拿这个中的路由器A和B来举例两个路由器之间怎么实现链路状态的更新
网络拓扑结构

初始化时,路由器A,B的链路状态信息表中都只有两个相邻路由器的链路信息,首先它们通过Hello分组建立联系确保对方是可达的,接着双方互相发送链路状态数据库描述分组,B接收到A发送来的分组之后,将它与自己的信息进行对比,结果发现路由器A与C的链路状态信息自己是没有的于是B又向A发送一个链路状态请求分组,告诉路由器A,你把A与C的链路信息发给我,然后A向全网发送一个链路状态更新分组,把A与C的具体链路信息告诉B,B收到并学习到新的链路状态之后还需要发送一个链路状态确认分组,以此来保证可靠性。

11.OSPF使用可靠的洪泛法发送更新分组

洪泛法

12.指定路由器
指定的路由器

例如在一个区域内有5台路由器,彼此相互交换的话需要10次,当路由器数量一多交换次数就会变得很大,为了避免这种情况,在区域内通过一些复杂的算法选举出一个代表,让它与其它的每个路由器进行信息交换,从而大大减少了交换次数。

4.外部网关协议BGP

BGP是不同自治系统的路由器之间交换路由信息的协议。
1.BGP使用环境不同

BGP使用环境不同

每个自治系统内部有可能采用不同的协议,那么在A自治系统中的某条路由有可能到了B就会变成一条不可用路由或者性能差的路由。不同的自治系统就好比不同的部落,比方说你一个很高的人到了A部落会被当做神人,因为它们族人普遍矮子,但是当你到了B部落之后,发现他们把高的人当做敌人,那你就惨了。所谓的交换可达性信息,就是某个自治系统告诉另一个自治系统,你发送的信息通过我可以达到某个网络。为了避免兜圈子,在一条路由中同一个自治系统不能出现两次

2.BGP发言人

BGP发言人

3.BGP交换路由信息
BGP交换路由信息

4.BGP发言人和自治系统AS的关系
BGP发言人和自治系统AS的关系

BGP发言人一般是自治系统边界路由器,但也有可能不是。并且,在一个自治系统中BGP发言人不一定只有一个,例如上图中的AS1,AS3都有两个BGP发言人。另外,假设在自治系统AS2中有一个网络N1,那么当AS2与AS1进行路由信息交换时,AS2的BGP发言人就会告诉AS1的BGP发言人,你如果要想到达网络N1,你可以通过我AS2,同样的自治系统AS3也会收到这样的信息。但同时,AS1的BGP发言人在接收到信息后还会转发信息给AS3,当然信息内容就会变成:你如果要想到达网络N1,你可以通过我AS1再通过AS2到达网络N1。这样一来,自治系统AS3的BGP发言人一共收到两条路由信息,然后它再根据自身内部使用的协议选择一条最适合的路由。BGP所交换的网路可达性信息就是要到达某个网络所要经过的一系列AS

5.BGP发言人交换路径向量

BGP发言人交换路径向量

与上面的过程类似,当自治系统AS2给主干网发送完消息之后,主干网还会把这个信息再次发送给AS2和AS3。

6.BGP协议的特点

  • BGP协议交换路由信息的结点数量是自治系统级的,也就是说一个自治系统中它的BGP发言人的数量是有限的,要比这些自治系统中的网络数少很多
  • 每一个自治系统中BGP发言人(或边界路由器)的数目是很少的,这样使得自治系统之间的路由选择不会太复杂
  • BGP支持CIDR,因此BGP的路由表也就应当包括目的网络前缀下一跳路由器,以及到达该目的网络所要经过的各个自治系统的序列
  • 在BGP刚刚运行时,BGP的邻站是交换整个BGP路由表。但是以后只需要在发生变化的时候更新有变化的部分。这样做对节省网络带宽和减少路由器的处理开销都有好处。

7.BGP-4共使用四种报文

BGP的四种报文

open报文仅仅是一方发送给另一方请求建立关系,但是另一方也有可能不接受(有可能自身已经负载过多)。如果另一方接受了请求,它就要发送一个响应报文(keepalive报文)给发送方,这个响应报文有两种作用,第一是确认同意响应;第二就是这两个站要定期地互相发送keepalive报文确保对方是正常工作的。当路由表发生更新之后,就会发送更新报文,注意一个更新报文只能新增一条路由,但是能够撤销多条路由。

8.BGP报文的封装形式

BGP报文的封装形式

BGP报文的通用首部中,共19个字节,前16个字节是标记字段,用来鉴别BGP报文,如果不需要鉴别全部取1就行了;长度字段用来指出整个BGP报文的长度(19-4096字节),也就是说BGP报文可以没有主体部分,其中keepalive报文就是没有主体部分的报文;类型字段用来指出BGP报文的类型。

5.路由器的构成

  • 路由器是一种典型的网络层设备
  • 路由器时互联网中的关键设备。
  • 路由器的主要作用是:互连网络路由选择

1.路由器的结构

路由器的结构

2.典型的路由器的结构
整个路由器结构可划分为两大部分:

  • 路由选择部分(控制部分)
  • 分组转发部分

路由选择部分的核心构件是路由选择处理机。路由选择机的任务就是根据路由选择协议构造路由表交换路由信息不断地更新和维护路由表
分组转发部分由三部分组成:交换结构(交换组织);输入端口;输出端口。交换结构的作用就是根据转发表对分组进行处理。
3.转发和路由选择的区别

  • 转发就是路由器根据转发表将用户的IP数据报从适合的端口转发出去。
  • 路由选择则是按照分布式算法(需要网络上全部的路由器共同参与,相互协作),根据从各相邻路由器得到的关于网络拓扑的变化情况,动态地改变所选择的路由。
  • 路由表是根据路由算法得出的,而转发表是根据本路由表得出的。

6.IPv6

  • IP是互联网的核心协议
  • 到2011.2,IPv4的32位地址已经耗尽
  • ISP已经不能再申请到新的IP地址块了。
  • 解决IP地址耗尽的根本措施就是采用具有更大地址空间的新版本IP,即IPv6

另外:

  • IPv6仍支持无连接的传送,但将协议数据单元PDU称为分组。
  • IPv6所引进的变化主要有:
    更大的地址空间:IPv6将地址从32位增加到了128位。
    扩展的地址层次结构
    灵活的首部格式:IPv6定义了许多可选的扩展首部。
    改进的选项:IPv6允许数据报中包含有选项的控制信息,其选项放在有效载荷中。
    允许协议继续扩充
    支持即插即用(即自动配置),因此IPv6不需要使用DHCP。
    支持资源的预分配:IPv6支持实时视像等要求,保证一定的带宽和时延的应用。
    IPv6首部改为8字节对齐,首部长度必须是8字节的整数倍。原来的IPv4首部是4字节对齐。

IPv6数据报的一般形式:

  • IPv6数据报由两大部分组成:
    基本首部
    有效载荷。有效载荷也被称为净负荷,有效载荷允许有零个或多个扩展首部,再后面是数据部分。
具有多个可选扩展首部的IPv6数据报的一般格式

1.IPv6的基本首部

IPv6数据报的基本首部

IPv6的基本首部

版本字段:4位,指明了协议的版本,对于IPv6来说总是6;通信量类字段:8位,为了区分不同的IPv6数据报的类别或优先级;流标号:20位,所有属于同一个数据流的流标号都相同;有效载荷长度:16位,它指明IPv6数据报除基本首部外以外的字节数(所有的扩展首部包含在里面),最大值为64KB;下一个首部字段:8位,相当于IPv4的协议字段或可选字段;跳数限制字段:8位,相当于TTL字段;

IPv6的扩展首部
IPv6把原来IPv4首部中选项的功能都放在了扩展首部中,并将扩展首部留给路径两端的源站和目的站的主机来处理。途中经过的路由器都不处理这些扩展首部(只有一个逐跳选项扩展首部除外),这样就大大提高了路由器的处理效率。(逐跳选项扩展首部严格规定了传输途中经过的一系列路由器的顺序)。另外,扩展首部是按照下面的次序来进行排列的

六种扩展首部

分片
当IP分组长度太长时,需要对IP分组进行分片,这里的分片和之前说过的类似,要解决三个问题:怎么判断来自于同一个分组的切片;怎么判是否是最后一个切片;怎么判断切片在原分组中的位置。并且也有偏移量,标识符和M这三个字段,用来将各切片重新恢复成原来的分组。

2.IPv6的地址

IPv6的地址

1.结点与接口
结点与接口

2.冒号十六进制记法
冒号十六进制记法

3.为了更加方便,还引入了零压缩
零压缩

4.点分十进制记法的后缀
点分十进制记法的后缀

5.IPv6地址分类
IPv6地址分类

  • 未指明地址:16字节全地址,直接缩写为::,这类地址只能为还没有配置到一个标准IP地址的主机当做源地址使用。这类地址仅此一个
  • 环回地址:即0:0:0:0:0:0:0:1(记为::1),作用和IPv4的环回地址一样,也是仅此一个
  • 多播地址:功能和IPv4的一样,这类地址占IPv6地址总数的1/256。
  • 本地链路单播地址:用于一个单位内部的通信无法与互联网上的其它主机进行通信。在互联网上如果发现目的地址是本地链路单播地址,一律不转发。
  • 全球单播地址
    全球单播地址

3.从IPv4向IPv6过渡

从IPv4向IPv6过渡

1.双协议栈
双协议栈

2.隧道技术(封装技术)
隧道技术

4.ICMPv6

IPv6也不保证数据报的可靠交付,因为互联网中的路由器可能会丢弃数据报。因此IPv6也需要使用ICMP来反馈一些差错信息。新的版本称为ICMPv6

ICMPv6

ICMPv6报文

7.IP 多播。

8.虚拟专用网VPN和网络地址转换NAT

1.虚拟专用网VPN

虚拟专用网VPN

1.本地地址与全球地址

  • 本地地址——仅在机构内部使用的IP地址,可以由本机构自行分配,不需要向互联网的管理机构申请。
  • 全球地址——全球唯一的IP地址,必须向互联网的管理机构申请。

但是这样存在一个问题就是在内部使用的地址可能和互联网中的某个IP地址重合,这样就会出现地址的二义性问题
解决办法就是:RFC 1918指明了一些专用地址专用地址只能作为本地地址而不能作为全球地址。在互联网中的所有路由器,对目的地址是专用地址的数据报一律不进行转发
RFC 1918指明的专用地址

RFC 1918指明的专用地址

2.专用网
采用这样的专用IP地址的互连网络称为专用互联网本地互联网,或者就叫做专用网。另外,在不同的网络中,专用地址是可以重用的,因此也叫做可重用地址
3.虚拟专用网VPN
虚拟专用网VPN

虚拟专用网VPN的构建

4.用隧道技术实现虚拟专用网
用隧道技术实现虚拟专用网

如上图,部门A与部门B属于同一个机构,X和Y分别是两个部门中的一台主机,X和Y的IP地址均是专用地址,因此X给Y发送的数据报是无法通过互联网进行转发的(互联网对目的地址是专用地址的数据报一律不进行转发),同样的Y要给X发送消息也是不行的。要想传输就要将专用地址(本地地址)转化为全球地址,每个部门和互联网都连接有一个路由器,如上图的R1R2,这两个路由器的两个接口一个连接着本地网络(该接口使用本地地址),一个连接着互联网(该接口使用全球地址)。将本地地址转化为全球地址就是在原来数据报的基础上重新进行封装,再加上新的一个数据报首部,在这个数据报首部中,将源地址和目的地址都转化成全球地址(在上图中国就是将源地址本地地址10.1.0.1转化成125.1.2.3,目的地址从10.2.0.3转化成194.4.5.6)。另外,为了保证安全性,还要对数据报进行加密。

5.内联网和外联网

内联网和外联网

6.远程接入VPN
这其实就是在家里登录上校园网中的教务管理系统。
远程接入VPN

2.网络地址转换NAT

1.网络地址转换的过程

网络地址转换的过程

现在以主机A向主机B发送分组为例,由于主机A的地址是专用地址,并且A是源地址,因此主机A向主机B发送的数据能够顺利地通过互联网到达B。如果反过来,主机B向主机A发送分组,因为这个数据的目的地址为A,属于专用地址,因此互联网不会转发分组。这样的单向通信是毫无意义的,因此需要将A的专用地址转化成全球地址。这时候就需要在路由器上运行NAT软件,来将本地专用地址转化成全球地址。路由器连接互联网的一端有一个全球地址。当主机A向主机B发送分组时,NAT软件就会对分组中的源IP地址(主机A的地址)进行转换,因为当B返回一个响应时,源IP地址就会变成目的IP地址。当主机B返回的响应到达路由器是,路由器收到的是全球IP地址,需要将它转变成本地地址再发送给目的主机A。综上所述,对路由器来说,"出(本地—互联网)"的时候转化的是源IP地址并且是将本地地址转化成全球地址,"入(互联网—本地)"的时候转化的是目的IP地址并且是将全球地址转化成本地地址。如下图:

NAT路由器上的两次地址转换

2.网络地址与端口号转换NAPT
当NAT路由器具有n个全球IP地址时,专用网最多可以同时又n台主机接入到互联网,如果主机数过多,采用轮流使用全球IP地址的方式。但是这样的方式在实际中显然不够好,因此提出了是否可以将一个全球IP地址给全部主机使用?有!方法就是网络地址与端口号转换NAPT

网络地址与端口号转换NAPT

还是拿这张图来举例:
网络地址转换的过程

假如现在在主机A的网络中还有若干台主机,它们的IP地址分别是192.168.0.4192.168.0.5192.168.0.6,...这些主机都能够用同一个全球IP地址172.38.1.5,但是这样又会带来一个新的问题,那就是当B返回一个相应时,到达NAT路由器之后不知道该将全球地址转化成哪个本地地址,到底是192.168.0.3192.168.0.4192.168.0.5还是192.168.0.6,因此就需要在网络地址转换的基础上再加一个端口转换。通过端口号来区别到底是发送给哪台主机的分组,如下图:

NAPT地址转换表

9.多协议标记交换MPLS

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335