1.0 MiB
网络层
基本概念
主要任务是将分组从源端发送到目的端,为分组交换网上的不同主机提供通信服务。在任意结点间进行数据报传输,但不可靠。
网络层功能
路由选择与分组转发
即选择最佳路径。
- 路由器的路由表中包含目的网络和到达该目的网络路径上的下一个路由器的$IP$地址。
- 分组传输时,源主机和中间路由器都不知道$IP$分组到达目的主机需要经过的完整路径。
SDN
网络层的主要任务是转发和路由选择。可以将网络层抽象地划分为数据层面(也称转发层面)和控制层面,转发是数据层面实现的功能,而路由选择是控制层面实现的功能。
软件定义网络$SDN$是近年流行的一种创新网络架构,它采用集中式的控制层面和分布式的数据层面,两个层面相互分离,控制层面利用控制-数据接口对数据层面上的路由器进行集中式控制,方便软件来控制网络。
在传统互联网中,每个路由器既有转发表又有路由选择软件,也就是说,既有数据层面又有控制层面。
在$SDN$中不需要路由选择软件,所以不需要路由器之间交换路由信息,而是由网络的控制层面的一个逻辑上的远程控制器进行控制,其掌握主机和网络状态,分析最佳路由,通过$Openflow$协议等将转发表(流表)下发给路由器。路由器只需要收到分组、查找转发表、转发分组。
特点:
- 控制和转发功能分离。
- 控制层面集中化。
- 接口开放可编程。
优点:
- 全局集中式控制和分布式高速转发,既利于控制层面的全局优化,又利于高性能的网络转发。
- 灵活可编程与性能的平衡,控制和转发功能分离后,使得网络可以由专有的自动化工具以编程方式配置。
- 降低成本,控制和数据层面分离后,尤其是在使用开放的接口协议后,就实现了网络设备的制造与功能软件的开发相分离,从而有效降低了成本。
缺点:
- 安全风险,集中管理容易受攻击,如果崩溃,整个网络会受到影响。
- 瓶颈问题,原本分布式的控制层面集中化后,随着网络规模扩大,控制器可能成为网络性能的瓶颈。
异构网络互联
- 网络的异构性是指传输介质、数据编码方式、链路控制协议及不同的数据单元格式和转发机制,即物理层与数据链路层均不同。
- 路由器要求物理层、数据链路层、网络层协议不同,由于路由器无法处理上层数据所以要求上层的协议必须相同。
拥塞控制
- 拥塞定义:
- 如果网络负载增加,网络吞吐量明显小于正常吞吐量,则进入轻度拥塞。
- 如果网络负载增加,网络吞吐量反而下降,则进入拥塞。
- 如果网络负载增加,网络吞吐量变为零,则进入死锁。
- 若网络所有结点都来不及接收分组,而要大量丢弃分组的话会使网络处于拥塞状态,所以就需要控制这种拥塞。
- 开环控制:在拥塞之前就提前设计解决。
- 闭环控制:在拥塞时自动调整解决问题。
IP协议
网际协议是$TCP/IP$协议栈中两个最主要的协议。与之配套的还有地址解析协议$ARP$,网际控制报文协议$ICMP$、网际组管理协议$IGMP$,还有一个逆地址解析协议$RARP$已不被使用。
$IP$协议使用$ARP$协议,而$ICMP$与$IGMP$使用$IP$协议。
IP数据报
IP数据报格式
当单个$IP$数据报太长,就会被划分不同的数据部分加上$IP$首部,就是分组。
固定部分$20B=160bit$,按照五行来展示而不是真的这样排列,一行$32$比特。
| 名称 | 注释 | 大小 |
|---|---|---|
| 版本 Version | ipv4或者ipv6 | 4位 |
| 首部长度 IHL | 单位为4字节,同时因为IP数据报固定长度(最小值)为20字节,所以此处最小值为5,即二进制的0101 | 4位 |
| 区分服务 DSCP + ECN | 希望获得哪种服务,用的比较少 | 8位 |
| 总长度 Total Length | 首部+数据的长度,单位为1字节,最大为$2^{16}-1=65535$B,但是实际上永远不会达到该长度,因为有MTU的限制 | 16位 |
| 标识 Identification | 就是一个计数器,用来表示是哪一个数据报的分片,同一个数据报的分片标识相同 | 8位 |
| 标志 Flags | 3bit,用来表示是否分片和分片是否结束;中间位DF(Don't Fragment)为1表示禁止分片,如果是0代表允许分片;最低位MF(More Fragment)为1表示后面还有分片,如果为0表示最后一片分片 | 3位,但实际有用的只有后两位 |
| 片偏移 Fragment Offset | 用来标记分片之后,该分片在原来的数据报的位置,以8字节为单位 | 13位 |
| 生存时间 Time To Live | 即TTL,每经过一个路由器TTL-1,等于0时自动放弃,根据系统不同默认的TTL不同,为了防止无法传输的数据报在链路中无限传输 | 8位 |
| 协议 Protocol | 用来标记数据部分协议名的字段值,如ICMP:1;IGMP:2;TCP:6;EGP:8;IGP:9;UPD:17;IPv6:41;ESP:50;OSPF:89 | 8位 |
| 首部检验和 Header Checksum | 检验首部的字段是否出错,不包括数据部分,出错就丢弃此数据报 | 16位 |
| 源地址 Source IP Address | 发送方ip地址 | 32位 |
| 目的地址 Destination IP Address | 接收方ip地址 | 32位 |
| 可选字段 Options | 用来排错等安全检测 | 未知,可在0-40位之间 |
| 填充 | 将数据报对齐成4字节的整数倍,数值全部为0 | 未知,根据可选字段来定 |
重点单位:首部长度$4bit$、总长度$1bit$、片偏移$8bit$。
由于$IP$具有标识,所以重传的数据不能与之前的数据进行重组。
注意:由于片偏移为$8$的整数倍,所以分片后的数据报的数据部分长度必须在小于$MTU-20B$的前提下为$8$的整数倍。
IP数据报分片
注意$DF$和$MF$。
- 最大传送单元$MTU$,数据链路层帧可封装的数据的上限,以太网的$MTU$是$1500$字节。
- 当$IP$分组超过$MTU$时为了传输就必须要分片,而如果$IP$分组不允许分片则无法传输,会返回上层一个差错报告。
- 除了最后一个分片,每个分片的长度必然为八字节的整数倍。
注意:$MF=0$不能确定是独立的数据报,还是分片得来的,只有当$MF=0$且片段偏移字段$>0$时,才能确定是分片的最后一个分片。
转发分组流程
路由表包括:
- 目的网络地址。
- 目的网络子网掩码。
- 下一跳地址。
路由器转发分组的算法:
- 提取目的$IP$地址。
- 查看是否可直接交付。若网络直连路由器则直接交付目的主机。
- 查看是否有特定主机路由(特殊地址,为了测试或安全),就直接按此路由传输。
- 检测路由表中有无合适路径,若有到达目的地址的路由,则把数据报交付给路由器指明的下一跳路由器。
- 该路由器找不到对应地址,若该路由器有默认路由$0.0.0.0$,则发送给默认路由器,让其他路由器查看是否有该地址。
- 超过$TTL$,丢弃并报告转发分组出错。
IP地址
默认指$IPv4$地址,全世界唯一的$32$位/$4$字节标识符,标识路由器主机的接口。$IP$地址={网络号,主机号}。
IP地址类别
$IP$地址一共分为五类。
其中一些$IP$地址被予以保留做特殊用途:
全$1$的广播地址也称为受限广播地址。
由于网络号不能全$0$或全$1$,所以基本上可用的都要减二。
| 网络类别 | 最大可指派的网络数 | 第一个可指派的网络号 | 最后一个可指派的网络号 | 每个网络中的最大主机数 |
|---|---|---|---|---|
| A类 | 126 | 1 | 126 | 16777214 |
| B类 | 16383 | 128.1 | 191.255 | 65534 |
| C类 | 2097151 | 192.0.1 | 223.255.255 | 254 |
为什么$A$类最大是$126.x.x.x$?
因为网络号最开始第一位是$0$,一共八位,所以二进制表示位$0xxxxxxx$,最大就是$2^7-1=127$,但是因为$127.x.x.x$是特殊$IP$地址,所以将其去掉。
为什么$B$类最大是$191.255.x.x$?
因为网络号最开始第一位是$10$,一共八位,所以二进制表示位$10xxxxxx$,最大就是$10111111=191$,最小就是$10000000=128$,无特殊$IP$地址。
为什么$C$类最大是$223.255.x.x$?
因为网络号最开始第一位是$110$,一共八位,所以二进制表示位$110xxxxx$,最大就是$11011111=223$,最小就是$10000000=192$,无特殊IP地址。
IP地址特点
- 每个$IP$地址都由网络号和主机号两部分组成,因此$IP$地址是一种分等级的地址结构。分等级的好处是:
- $IP$地址管理机构在分配$IP$地址时只分配网络号(第一级),而主机号(第二级)则由得到该网络的单位自行分配,方便了$IP$地址的管理。
- 路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目标主机号),从而减小了路由表所占的存储空间。
- $IP$地址是标志一台主机(或路由器)和一条链路的接口。当一台主机同时连接到两个网络时,该主机就必须同时具有两个相应的$IP$地址,每个$IP$地址的网络号必须与所在网络的网络号相同,且这两个$IP$地址的网络号是互相不同的。因此$IP$网络上的一个路由器必然至少应具有两个$IP$地址(路由器每个端口必须至少分配一个$IP$地址)。不然会冲突。
- 用转发器或桥接器(网桥等)连接的若干$LAN$仍然是同一个网络(同一个广播域),因此该$LAN$中所有主机的$IP$地址的网络号必须相同,但主机号必须不同。
- 在$IP$地址中,所有分配到网络号的网络(无论是$LAN$还是$WAN$)都是平等的。
- 在同一个局域网上的主机或路由器的$IP$地址中的网络号必须是一样的。路由器总是具有两个或两个以上的$IP$地址,路由器的每个端口都有一个不同网络号的$IP$地址。
专用网络通信
NAT
网络地址转换是指通过将专用网络地址转换为公用地址,从而对外隐藏内部管理的$IP$地址。它使得整个专用网只需要一个全球$IP$地址就可以与因特网连通,由于专用网本地$IP$地址是可重用的,所以$NAT$大大节省了$IP$地址的消耗。同时,它隐藏了内部网络结构,从而降低了内部网络受到攻击的风险。
在进行$NAT$转发的时候必须保证内网地址与网络端口都一致,否则不转发。
此外,为了网络安全,划出了部分$IP$地址为私有$IP$地址。私有$IP$地址只用于$LAN$,不用于$WAN$连接(因此私有$IP$地址不能直接用于$Internet$,必须通过网关利用$NAT$把私有$IP$地址转换为$Internet$中合法的全球$IP$地址后才能用于$Internet$),并且允许私有$IP$地址被$LAN$重复使用。
私有$IP$地址(可重用$IP$地址):
私有$IP$地址也叫做可重用地址,不同于一般的全球$IP$地址,这些地址可以在机构内部自行分配使用,这张网络就是专用互联网或是本地互联网,当然也无法直接用于与因特网的通信。
- 如果专用网的内部某些主机已经分配到了本地专用$IP$地址,又想无加密的跟互联网上的主机通信,就需要网络地址转换$NAT$。
- 只用在专用网与因特网的路由器上按照$NAT$软件,安装了$NAT$软件的路由器就是$NAT$路由器,其至少有一个有效的外部全球$IP$地址。
- $NAT$路由器就是该本地专用网的代表,负责与外部因特网联通,分发外部的数据信息,发送时一定会按$NAT$转换表改变源$IP$地址或目的$IP$地址。
- $NAT$路由器维护$NAT$转换表,包含$WAN$端与$LAN$端的散列值对。每个值都包含网络号与端口号。$NAT$路由器在发送和接收时都需要根据转换表更改$IP$地址。
- 普通路由器工作在网络层,而$NAT$路由器工作在网络层和传输层,因为传输时需要查看和转换端口号。
VPN
当目的地址是私有(专用)$IP$地址时路由器一律不转发,而如果在内网的私有$IP$地址要转发或接收本地网络其他主机的数据怎么办呢?
可以利用公用的互联网作为本地各专用网之间的通信载体,这种网络就是虚拟专用网$VPN$。这种网络不同于互联网是因为它只用于本地网络的通信,但是又依靠互联网传输,所以就需要对数据进行加密。
当$VPN$需要外部机构加入就是外联网$VPN$;如果成员分布分散,通过某种软件建立$VPN$通道,这种$VPN$就是远程接入$VPN$。
子网与超网
分级$IP$地址的缺点:
- $IP$地址空间利用率较低。
- 两级$IP$地址不够灵活。
子网划分
- 由两级$IP$地址(网络号+主机号)变为三级$IP$地址(网络号+子网号+主机号),将原来的主机号分割出来一部分作为子网号,子网的划分由单位内部完成,但是对外仍表现一个网络,外部无法看到本单位内子网的划分。
- 子网划分的子网号可以全$0$或全$1$。网络地址和主网络的网络地址是重叠的。(与$CIDR$区别)
- 子网的标识依靠子网掩码,其中网络号和子网号的部分全部位数为$1$,而主机号部分全部为$0$。
- 将子网掩码与$IP$地址逐位进行与操作,就可以得到子网网络地址。
子网掩码
在使用子网掩码的条件下,路由表不仅要给出目的网络地址和下一跳地址外,还需要给出目的网络的子网掩码。
- $A$类地址的默认子网掩码是$255.0.0.0$。
- $B$类地址的默认子网掩码是$255.255.0.0$。
- $C$类地址的默认子网掩码是$255.255.255.0$。
| 二进制 | 十进制 |
|---|---|
| 1000 0000 | 128 |
| 1100 0000 | 192 |
| 1110 0000 | 224 |
| 1111 0000 | 240 |
| 1111 1000 | 248 |
| 1111 1100 | 252 |
| 1111 1110 | 254 |
| 1111 1111 | 255 |
注意:由于子网可以全$0$和全$1$,所以可用子网数量不用减二。
IP广播
如之前的保留地址所展示,如果需要进行广播,则包含两种广播方式。
受限(有限)广播地址是$32$位全$1$的$IP$地址$(255.255.255.255)$。受限的广播地址是255.255.255.255。该地址用于主机配置过程中$IP$数据报的目的地址,此时,主机可能还不知道它所在网络的网络掩码,甚至连它的$IP$地址也不知道。在任何情况下,路由器都不转发目的地址为受限的广播地址的数据报,这样的数据报仅出现在本地网络中。
直接广播地址包含一个有效的网络号和一个全$1$的主机号,如果我们要求一个$IP$地址的直接广播地址,那么需要根据$IP$地址与子网掩码,将网络号部分与出来,然后将所有的主机号位全部置$1$,从而得到的地址就是该网络地址的直接广播地址。
CIDR
无分类域间路由选择。
- 一般子网划分在同一个单位下的子网掩码都是相同长度的,而无分类编址$CIDR$就是变长的子网掩码。
- $CIDR$的子网号可以全$0$全$1$。因为掩码与$IP$地址同时传送,所以可以。但是严格情况下不行。
- $CIDR$构建的超网可以在单位内部根据不同部门的主机个数分配不同数量的子网$IP$地址。
- 通过$CIDR$就将子网划分的三级$IP$地址又回归为两级$IP$地址(网络前缀+主机号)。
- $CIDR$记法:$IP$地址后加上/,然后写上网络前缀的位数。
- 也可用使用:二进制网络前缀*。
- $CIDR$把网络前缀都相同的连续的$IP$地址组成一个$CIDR$地址块。
如根据$128.14.35.7/20$,可以得到其二进制是$1000,0000\quad0000,1110\quad0010|0011\quad0000,0111$,所以其最小地址就是将竖线后面的位全部变为$0$,最大地址就是将竖线后的位全部变为$1$,即为$128.14.32.0$与$128.14.47.255$,可用地址就是$2^{12}-2$个,地址块就是$128.14.32.0/20$。
注意:
- 默认路由:如果是直连一个互联网,就直接是$0.0.0.0/0$,没有指定主机,需要特别记忆。
- 主机路由:对特定目的主机$IP$地址专门制定路由,指定子网掩码为$32$,表示子网掩码没有意义。
构成超网
将多个子网构成一个较大的子网就是构成超网,即将网络前缀都相同的连续$IP$地址组成“$CIDR$地址块”。一个$CIDR$地址块可以表示很多地址,这也就是路由聚合。
方法就是将网络前缀缩短。
如有两个路由表项$206.1.0.0/17$和$206.1.128.0/17$,路由器会发现这两个表项到的网络地址都是同一个,所以可以合并为一个更大的地址块$206.1.0.0/16$。
最长前缀匹配:使用$CIDR$时,查找路由表时可能得到多个匹配结果,应该选择具有最长网络前缀的路由,前缀越长,地址块越小,路由也越具体。
IPv6
无论是$NAT$技术还是$CIDR$技术都无法完全解决$IPv4$地址耗尽的问题,所以就出现了$IPv6$从根本上解决地址耗尽的问题。
解决的问题有:
- $IP$地址不足,增加到了$128$位。
- 改进首部格式,简化$IP$地址类型,且首部长度固定。
- 快速处理/转发数据报,去掉了差错检验,不允许分片。
- 支持$QoS$(服务质量指一个网络能够利用各种基础技术,为指定的网络通信提供更好的服务能力,是网络的一种安全机制,用来解决网络延迟和阻塞等问题的一种技术)。
IPv6帧格式
$IPv6$帧包括$40$字节即$320$位的基本首部,再加上不超过$65535$字节的有效载荷,有效载荷中包含着多个拓展首部与数据部分。
其中报头格式如下:
| 名称 | 作用 | 位数 |
|---|---|---|
| 版本 Version | 指明协议版本,此处因为是ipv6所以总是6 | 4位 |
| 优先级 Traffic Class | 区分数据报的类型和优先级 | 8位 |
| 流标签 Flow Label | 和ipv4标识某个数据报分片不同,这是对于一整个数据报流的标记 | 19位 |
| 有效载荷长度 Payload Length | 指的是扩展首部+数据部分的大小,和ipv4的总长度和首部长度都不同,ipv6的首部长度是固定的40字节 | 16位 |
| 下一个首部(报头) Next Header | 基本首部的下一个首部指的是有效载荷里标记的的扩展首部,有效载荷里的扩展首部再指向有效载荷里标记的的扩展首部,直至最后指向数据 | 8位 |
| 跳数限制 Hop Limit | 基本相当于ipv4当中的TTL,每到一个路由器-1.减到0时丢弃 | 7位 |
| 源地址 Source Address | 发送方ipv6地址 | 128位 |
| 目标地址 Destination Address | 接收方ipv6地址 | 128位 |
IPv6与IPv4的区别
- 地址空间扩大,由$32$位变为$128$位。
- 将校验和字段彻底移除,减少每跳处理时间。
- 将可选字段移出首部,首部长度固定,变成扩展首部(丢弃了首部长度字段),更加灵活。
- 路由器一般不对扩展首部检查,提高处理效率。
- 支持即插即用,不需要$DHCP$协议。
- 首部是$8$字节的整数倍,而$IPv4$首部是$4$字节的整数倍。
- 只能在主机处分片,而$IPv4$能在主机和路由器处分片,所以$IPv6$不允许分片。(如过大在路由器会无法分片而无法传输的话,会用$ICMPv6$返回差错报文)
- 支持资源预分配,支持实时视像等要求,保证一定的带宽和时延的应用。
- 取消了协议字段。
- 取消了总长度字段,改成有效载荷字段。
- 取消服务类型字段。
IPv6地址表示
一般形式:冒号十六进制记法。(分为八个十六进制端)
压缩形式:一段中有连续的$0$,可用一个$0$代替;把在前面的$0$全部删去;使用零压缩的方式,一串连续的$0$可用用一对冒号代替,但是只能在一个地址中使用一次。
IPv6基本地址类型
| 名称 | 作用 | 要求 |
|---|---|---|
| 单播 | 一对一通信 | 可做源地址,目的地址 |
| 多播 | 一对多通信,以前的广播地址当做覆盖所有主机的多播 | 可做目的地址 |
| 任播 | 一对多当中的一个通信,看似一对多,实则一对一,一般是最近的主机 | 可做目的地址 |
IPv4和IPv6之间的过渡
- 双栈协议:在一台设备上同时启用$IPv4$协议栈和$IPv6$协议栈。这样的话,这台设备既能和$IPv4$网络通信,又能和$IPv6$网络通信。如果这台设备是一个路由器,那么这台路由器的不同接口上,分别配置了$IPv4$地址和$IPv6$地址,并很可能分别连接了$IPv4$网络和$IPv6$网络。如果这台设备是一个计算机,那么它将同时拥有$IPv4$地址和$IPv6$地址,并具备同时处理这两个协议地址的功能。
- 隧道技术:通过使用互联网络的基础设施在网络之间传递数据的方式。使用隧道传递的数据(或负载)可以是不同协议的数据帧或包。隧道协议将其它协议的数据帧或包重新封装然后通过隧道发送。
ARP协议
在实际网络的链路上传输数据帧时,都必须使用$MAC$地址,所以$ARP$协议就是完成主机或路由器$IP$地址到$MAC$地址的映射,从而决定下一跳的走向,维护$ARP$表。
由于局域网的数据链路层只能看见$MAC$帧,所以路由器转发时会不断被解封和重新封装。数据帧的$IP$地址不变,但是源与目的$MAC$地址会在不同的路由器中发生变化。(对于网桥则不改变帧的源地址)这决定了无法用$MAC$地址来跨网络通信。
ARP协议使用流程
- 检查在主机或路由器上的$ARP$高速缓存,如果有对应项就写入$MAC$帧。
- 没有对应项,就用$FF-FF-FF-FF-FF-FF$作为目的$MAC$地址,并广播$ARP$请求分组,同一个局域网内的所有主机都能收到该请求。
- 目的主机收到请求后会向源主机单播一个$ARP$响应分组,源主机收到后将该映射写入$ARP$缓存中。($10-20min$更新)
- 如果源主机将源$MAC$地址与目的$MAC$地址与操作,发现目的主机不在同一个局域网,就查询本局域网的默认网关地址并填入目的$MAC$地址,传送到其他局域网。
ARP协议的典型情况
- 主机$A$发送给本网络的主机$B$:用$ARP$找到主机$B$的硬件地址。
- 主机$A$发送给另一网络的主机$B$:用$ARP$找到本网络上一个路由器(网关)的硬件地址。
- 路由器发送给本网络的主机$A$:用$ARP$找到主机$A$的硬件地址。
- 路由器发送给另一网络的主机$B$:用$ARP$找到本网络上一个路由器(网关)的硬件地址。
ICMP协议
网际控制报文协议支持差错报告与网络探寻。主要通过发送特定$ICMP$报文来实现。
$ICMP$协议是网络层的协议,$ICMP$报文是作为$IP$报文的一部分而传输的。
ICMP报文类型
报文类型的值占四个字节。
ICMP差错报文
| 类型 | 值 | 说明 |
|---|---|---|
| 终点不可达 | 3 | 当路由器或主机不能交付数据报时就向源点发送终点不可达报文 |
| 源点抑制 | 4 | 当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢 |
| 改变路由(重定向) | 5 | 路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由) |
| 时间超过 | 11 | 当路由器收到生存时间TTL=0的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,并向源点发送时间超过报文 |
| 参数问题 | 12 | 当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文 |
不应发送$ICMP$差错报文的情况:
- 对$ICMP$差错报告报文(即使差错报文本身出错也不会管)。
- 对第一个分片的数据报片之后的所有后续数据报片。
- 对具有组播地址的数据报。
- 对具有特殊地址(如$127.0.0.1$等)的数据报。
ICMP询问报文
| 类型 | 值 | 说明 |
|---|---|---|
| 回送请求和回答报文 | 8或0 | 主机或路由器向特定目的主机发出的询问,收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。测试目的站是否可达以及了解其相关状态 |
| 时间戳请求和回答报文 | 13或14 | 请某个主机或路由器回答当前的日期和时间。用来进行时钟同步和测量时间 |
| 地址掩码请求和回答报文 | ||
| 路由器询问和通告报文 |
ICMP应用
- $ping$:测试两个主机之间的连通性,使用了$ICMP$回送请求和回答报文。工作在应用层,直接使用网络层$ICMP$,而未使用$TCP$或$UDP$。
- $traceroute$:跟踪一个分组从源点到终点,使用了$ICMP$时间超过差错报告报文。工作在网络层。
路由算法与协议
路由算法就是让路由知道收到报文之后下一步怎么走。
路由器分组是通过路由表来转发,而路由表由路由算法给出。
- 路由选择分为直接交付和间接交付。
- 当发送站与目的站在同一网段(子网号相同)内时,就使用直接交付。直接交付不涉及到路由器。
- 反之使用间接交付,间接交付最后一个路由器肯定是直接交付。
路由算法与协议概述
- 静态路由算法(非自适应路由算法):
- 管理员手工配置路由信息。
- 简便、可靠,在负荷稳定,拓扑变化不大的网络中较好。
- 适用于高度安全的军事网络与较小的商业网络。
- 路由更新慢,不适合用于大型网络。
- 动态路由算法(自适应路由算法):
- 路由器之间交换信息,按照路由算法优化出路由表。
- 路由更新快,适用大型网络,及时响应链路反应与网络拓扑变化。
- 算法复杂,加重网络负担。
- 全局性:所有路由器掌握完整的网络拓扑和链路费用信息;如链路状态路由算法$OSPF$。
- 分散性:路由器只掌握物理相连的相邻路由器与链路费用;距离向量路由算法$RIP$。
RIP协议
- 路由信息协议是一种分布式的基于距离向量的路由选择协议,最大的优点是简单。
- 要求网络中的每一个路由器都维护从它到其他每一个目的网络的唯一最佳路径(即一组距离)。
- 距离通常指跳数,即从源端口到目的端口所经过的路由器个数,经过一个路由器跳数$+1$,与路由器直接连接的网络距离为$1$。$RIP$允许一条路最多只能包含$15$个路由器,所以$16$表示网络不可达。
- $RIP$协议只适用于小型互联网。
- 路由表由目的网络、距离、下一跳路由器三个项目构成。
- $RIP$协议是应用层协议,使用$UDP$传送数据。
- 一个$RIP$报文最多只包含$25$个路由,如果超过必须再用多的$RIP$报文传送。
RIP协议交换信息
- 仅和相邻路由器交换信息。
- 路由器交换的信息是自己的路由表,其中包括每条路径的目的地与路径代价两条信息。
- 每$30s$就交换一次,如果$180s$没收到相邻路由器的通告就默认这个路由器出现错误,并更新路由表。
- 最开始路由器只知道直接相连的网络,若干次更新后所有路由器都会知道到达本自治系统中任何网络的信息,即收敛。
距离向量算法
- 修改相邻路由器发来的$RIP$报文中的所有表项。对地址为$X$的相邻路由器发来的$RIP$报文,修改此报文的所有项目:把下一跳字段中的地址改为$X$,并把所有的距离$+1$。
- 对修改后的$RIP$报文中的每一个项目都进行以下步骤:
- 本路由器路由表中没有该网络,则把这个项目直接填入路由表中。
- 本路由器路由表中已经有该网络,则查看下一跳路由器地址。
- 如果下一跳的路由器名相同,则表明距离更新了,用收到的项目替换原有项目。
- 如果下一跳的路由器名不同,原来距离更远则更新。
- 否则不处理。
- 若$180s$超时,则把该路由器设为不可达,距离设为$16$。
- 返回。
RIP协议问题
$RIP$协议存在问题:
- 限制了网络规模。
- 路由器交换完整的路由表,所以网络规模越大,开销越大。
- 当网络出现故障时,要经过较长的时间才能将此信息传送到所有的路由器,即出现路由回路问题,称为慢收敛。也叫做好消息传得快,坏消息传得慢。
当一个网络故障时,由于坏消息传输的可能较慢,导致故障信息晚于其相邻信息传输的原来正确信息,故障信息被其原来信息覆盖,从而让双方路由器都不断认为通过对方就能达到已经坏掉的网络,直到重复了$16$次才会发现该网络不可达。
解决慢收敛方法:
- 限制路径最大距离:超过$16$次就认为不可达不再传输。
- 分割水平线:路由器从某个接口接收到的更新信息不允许再从这个接口发回去。
- 抑制计时器法:等待足够多的时间(一般$60$秒),已确保所有的机器都收到坏消息,而不会错误的连接过时的报文。需要指出的是,参与$RIP$的机器都要遵循抑制策略,否则任依旧会发生环路。缺点是:如果发生环路,在抑制期内这些路由环路任然会维持下去。
- 毒性逆转:路由中毒是指在路由信息在路由表中失效时,先将度量值变为无穷大的数,而不是马上从路由表中删掉这条路由信息,然后再将其中毒的路由信息发布出去,这样相邻的路由器收到该中毒路由就可以通过其度量值就得知这条路由的度量值是$16$,说明该路由是无效的。然后收到中毒路由信息的相邻的路由器会发送一个毒性逆转的信息,表示已经收到中毒路由信息。
- 触发刷新:正常情况下,路由器会基于计时器每$30s$将路由表发送给邻居路由器,而触发更新就是立刻发送路由更新信息。也就是说检测到网络故障的路由器会直接发送一个更新信息给邻居路由器,并依次产生触发更新通知它们的邻居路由器,此过程就叫触发更新。触发更新这种方式使整个网络上的路由器在最短的时间内收到更新信息。
OSPF协议
- 开放最短路径优先协议的开放指$OSPF$协议是开放的,$SPF$是指最短路径算法。
- 最主要的特征是使用分布式的链路状态协议。
- $OSPF$协议是网络层(或传输层)协议,使用$IP$数据报传输。
- $OSPF$对不同的链路可根据$IP$分组的不同服务类型($TOS$)而设置成不同的代价。因此,$OSPF$对于不同类型的业务可计算出不同的路由,十分灵活。
- 如果到同一个目的网络有多条相同代价的路径,那么可以将通信量分配给这几条路径。这称为多路径间的负载平衡。
- 所有在$OSPF$路由器之间交换的分组都具有鉴别功能,因而保证了仅在可信赖的路由器之间交换链路状态信息。
- 支持可变长度的子网划分和无分类编址$CIDR$。
- 每个链路状态都带上一个$32$位的序号,序号越大,状态就越新。
与RIP协议的区别
- $OSPF$向本自治系统中的所有路由器发送信息,这里使用的方法是洪泛法。而$RIP$仅向自己相邻的几个路由器发送信息。
- 发送的信息是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。“链路状态”说明本路由器和哪些路由器相邻及该链路的“度量”或代价。而在$RIP$中,发送的信息是本路由器所知道的全部信息,即整个路由表。
- 只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息,并且更新过程收敛得快,不会出现$RIP$“坏消息传得慢”的问题。而在$RIP$中,不管网络拓扑是否发生变化,路由器之间都会定期交换路由表的信息。
- $OSPF$是网络层协议,它不使用$UDP$或$TCP$,而直接用$IP$数据报传送(其$IP$数据报首部的协议字段为$89$)。而$RIP$是应用层协议,它在传输层使用$UDP$。
OSPF协议交换信息
- 使用洪泛法向自治系统内所有路由器发送信息,即路由器通过输出端口向所有相邻的路由器发送信息,而每一个相邻路由器又再次将此信息发往其所有的相邻路由器。最终整个区域内所有路由器都得到了这个信息的一个副本。
- 发送的信息就是与本路由器相邻的所有路由器的链路状态(本路由器和哪些路由器相邻,以及该链路的度量/代价——费用、距离、时延、带宽等)。
- 路由器根据全网拓扑结构图使用$Dijkstra$最短路径算法计算自己到各目的网络的最优路径,构建新的路由表。(只存储下一跳)
- 只有当链路状态发生变化时,路由器才向所有路由器洪泛发送此信息。
- 最后,所有路由器都能建立一个链路状态数据库,即全网拓扑图。
链路状态路由算法
涉及到$OSPF$的五种分组类型:
- 每个路由器发现它的邻居结点HELLO问候分组(用于发现和维持邻站的可达性),并了解邻居节点的网络地址。
- 设置到它的每个邻居的成本度量$metric$。
- 构造DD数据库描述分组,向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息。
- 如果$DD$分组中的摘要自己都有,则邻站不做处理;如果有没有的或者是更新的,则发送LSR链路状态请求分组请求自己没有的和比自己更新的信息。
- 收到邻站的$LSR$分组后,发送LSU链路状态更新分组,使用洪泛法对全网链路进行更新。
- 更新完毕后,邻站返回一个LSAck链路状态确认分组进行确认。
- 根据$Dijkstra$算法与自己的链路状态数据库构造到其他结点之间的最短路径。
- 用HELLO问候分组分组保持与邻居的连接。
当一个路由器的链路状态发生变化时,就会重复$5$及其之后的步骤。
通常隔$10$秒相邻两个路由器就要交换一次问候分组。且还要每隔一段时间如$30$分粥就要刷新依次数据库中的链路状态。
OSPF协议的区域
为了使$OSPF$能够用于规模很大的网络,$OSPF$将一个自治系统再划分为若干个更小的范围,叫做区域。每一个区域都有一个$32$位的区域标识符(用点分十进制表示)。
区域也不能太大,在一个区域内的路由器最好不超过$200$个。
一个区域内的路由器只知道本区域内的完整网络拓扑。
处在上层的区域位主干区域,负责连通其他下层的区域和其他自治域。
路由器分为:
- 主干路由器(可以兼任)。
- 区域内部路由器。
- 区域边界路由器。
- 自治系统边界路由器。
BGP协议
边界网关协议是外部网关协议,是应用层协议,是自治系统之间使用的,最新的版本是$BGP-4$。
层次路由
当网络规模扩大时,路由器的路由表成比例地增大。这不仅会消耗越来越多的路由器缓冲区空间,而且需要用更多$CPU$时间来扫描路由表,用更多的带宽来交换路由状态信息。因此路由选择必须按照层次的方式进行。
且由于因特网规模大,而许多单位不想让外界知道自己的路由选择协议但是仍想接入因特网,所以就出现了自治系统。
自治系统$AS$就是多个使用同一种内部选择路由的协议的路由器之间构成的单独的小圈子,圈子内使用自己的协议,圈子和圈子之间也需要另一种$AS$协议。
路由选择协议分为内部网关协议$IGP$($RIP$、$OSPF$)与外部网关协议$EGP$($BGP$)。
使用层次路由时,$OSPF$将一个自治系统再划分为若干区域($Area$),每个路由器都知道在本区域内如何把分组路由到目的地的细节,但不用知道其他区域的内部结构。
采用分层次划分区域的方法虽然会使交换信息的种类增多,但也会使$OSPF$协议更加复杂。但这样做却能使每个区域内部交换路由信息的通信量大大减小,因而使$OSPF$协议能够用于规模很大的自治系统中。
BGP协议工作原理
$BGP$发言人是$AS$与$AS$之间交流信息的路由器,往往是$BGP$边界路由器。
- 每个自治系统的管理员至少选择一个路由器作为该自治系统的“$BGP$发言人”。
- 一个$BGP$发言人与其他自治系统中的$BGP$发言人要交换路由信息,就要先建立$TCP$连接,即通过$TCP$传送,然后在此连接上交换$BGP$报文以建立$BGP$会话($session$),利用$BGP$会话交换路由信息。
- $BGP$发言人之间互相交换了网络可达性的信息后,各$BGP$发言人就根据所采用的策略从收到的路由信息中找出到达各$AS$的较好路由。
- 网络可达性信息是指到达某个网络所经过的路径(一整条),且这个路径不一定是最佳的,而是选择能到达且网络较好的。
BGP协议特点
- 每个$BGP$发言人除必须运行$BGP$外,还必须运行该$AS$所用的内部网关协议,如$OSPF$或$RIP$。
- $BGP$所交换的网络可达性信息就是要到达某个网络(用网络前缀表示)所要经过的一系列$AS$路径。
- $BGP$协议书寻找一条较好的路由,而非找一条最优路由。因为因特网规模太大,选择困难,且$AS$之间选择最优路由不现实,还必须考虑其他相关策略。
- $BGP$交换路由信息的结点数量级是自治系统的数量级,要比这些自治系统中的网络数少很多。
- 每个自治系统中$BGP$发言人(或边界路由器)的数目是很少的。这样就使得自治系统之间的路由选择不致过分复杂。
- $BGP$支持$CIDR$,因此$BGP$的路由表也就应当包括目的网络前缀、下一跳路由器,以及到达该目的网络所要经过的各个自治系统序列。
- 在$BGP$刚刚运行时,$BGP$的邻站是交换整个的$BGP$路由表。但以后只需要在发生变化时更新有变化的部分。这样做对节省网络带宽和减少路由器的处理开销都有好处。
BGP-4报文类型
- $OPEN$(打开)报文:用来与相邻的另一个$BGP$发言人建立关系,并认证发送方。
- $UPDATE$(更新)报文:通告新路径或撤销原路径。
- $KEEPALIVE$(保活)报文:在无$UPDATE$时,周期性证实邻站的连通性;也作为$OPEN$的确认。
- $NOTIFICATION$(通知)报文:报告先前报文的差错;关闭连接。
三种协议的比较
| 协议 | RIP | OSPF | BGP |
|---|---|---|---|
| 类型 | 内部 | 内部 | 外部 |
| 路由算法 | 距离-向量 | 链路状态 | 路径-向量 |
| 传递协议 | UDP | IP | TCP |
| 层次 | 应用层 | 网络层 | 应用层 |
| 路径选择 | 跳数最少 | 代价最低 | 较好,非最佳 |
| 交换结点 | 和本结点相邻的路由器 | 网络中的所有路由器 | 和本结点相邻的路由器 |
| 交换内容 | 当前本路由器知道的全部信息,即自己的路由表 | 与本路由器相邻的所有路由器的链路状态 | 首次是整个路由表,非首次是有变化的部分 |
- $RIP$是一种分布式的基于距离向量的路由选择协议,它通过广播$UDP$报文来交换路由信息。
- $OSPF$是一个内部网关协议,要交换的信息量较大,应使报文的长度尽量短,所以不使用传输层协议(如$UDP$或$TCP$),而直接采用$IP$。
- $BGP$是一个外部网关协议,在不同的自治系统之间交换路由信息,由于网络环境复杂,需要保证可靠传输,所以采用$TCP$。
IP多播
$IP$多播也称为组播。所以肯定仅用于$UDP$。
当网络中某些用户需要特定数据时,组播数据发送者仅发送一次数据,避免路由环路,借助组播路由协议为组播数据包建立组播转发树,被传输的数据到达距离用户端尽可能近的结点后才开始复制和分发。
组播提高了数据传输效率,降低拥塞的可能性,组播组中的主机可以时同一个物理网络,如果有组播路由器也可以来自不同物理网络。
能运行组播协议的路由器就是组播路由器。
组播实现
因特网的组播是靠路由器来实现的,这些路由器必须增加一些能够识别组播的软件。能够运行组播协议的路由器可以是一个单独的路由器,也可以是运行组播软件的普通路由器。因特网上的组播比以太网上的组播复杂得多,因为以太网本身支持广播和组播,而因特网上当前的路由器和许多物理网络都不支持广播和组播。
多个单播可以仿真组播,此时仿真的实验基本上是相同的,但是一个组播所需要的带宽小于多个单播带宽之和,此时路由器的时延变大,而处理一个组播分组的时延是比较小的。
IP组播地址
$IP$组播地址能让源设备能将分组发送给一组设备,属于多播组的设备将被分配一个组播组$IP$地址。
组播地址范围是$244.0.0.0$到$239.255.255.255$,一个$D$类地址表示一个组播组,只能用作目的地址,源地址必然是单播地址。
- 组播数据报由于是组播所以不是一对一,所以无法建立连接,仅能应用于$UDP$,只能尽最大努力交付,不提供可靠交付,。
- 对组播数据报不产生$ICMP$差错报文。
- 并非所有$D$类地址都可以作为组播地址。
硬件组播
同单播地址一样,组播$IP$地址也需要对应的组播$MAC$地址在本地网络中实际传输帧。组播$MAC$地址以十六进制值$01-00-5E$开头,即范围为$01-00-5E-00-00-00\sim01-00-53-7F-FF-FF$,余下的六个十六进制位根据$IP$组播组地址的最后$23$位转换而成,第$9$位为$0$。
有时候可能会$IP$地址映射成同样的$MAC$地址,从而数据组播时可能会出错,所以在收到多播数据报的主机,还要在$IP$层利用软件进行过滤,将不是本主机要接受的数据丢弃。
IGMP协议
网际组管理协议让连接在本地局域网上的多播路由器知道本局域网上是否还有主机的某个进程参加或退出了某个多播组。
首部中协议字段值为$2$表示使用$IGMP$协议。
工作阶段
- 某主机要加入组播组时,该主机向组播组的组播地址发送一个$IGMP$报文,声明自己要称为该组的成员。本地组播路由器收到$IGMP$报文后,要利用组播路由选择协议把这组成员关系发给因特网上的其他组播路由器。
- 本地组播路由器周期性探询本地局域网上的主机,以便知道这些主机是否还是组播组的成员。
- 只要有一个主机对某个组响应,那么组播路由器就认为这个组是活跃的。
- 如果经过几次探询后没有一个主机响应,组播路由器就认为本网络上的没有此组播组的主机,因此就不再把这组的成员关系发给其他的组播路由器。组播路由器知道的成员关系只是所连接的局域网中有无组播组的成员。
组播路由选择协议
组播路由协议目的是找出以源主机为根节点的组播转发树。
对不同的多播组对应不同的多播转发树;同一个多播组,对不同的源点也会也不同的多播转发树。
组播数据报方法
- 洪泛与剪除。
- 隧道技术。
- 基于核心的发现技术。
建议组播路由选择协议
- 距离向量多播路由选择协议$DVMRP$。
- 基于核心的转发树$CBT$。
- 开发最短通路优先的多播扩展$MOSPF$。
- 协议无关多播-稀疏方式$PIM-SM$。
- 协议无关多播-密集方式$PIM-DM$。
MPLS
多协议标记交换利用面向连接的技术,使每个分组都携带一个叫做标记的小整数,当分组到达交换机时,交换机读取分组的标记,并用标记值来检索分组转发表。
$MPLS$具有以下特点:
- 支持面向连接的服务质量。
- 支持流量工程,平衡网络负载。
- 有效地支持虚拟专用网$VPN$。
移动IP
移动$IP$技术是移动结点(计算机/服务器等)以固定的网络$IP$地址,实现跨越不同网段的漫游功能,并保证了基于网络$IP$的网络权限在漫游过程中不发生任何改变。移动结点具有永久$IP$地址的移动设备。
相关术语
- 归属代理(本地代理):一个移动结点拥有的就“居所”称为归属网络,在归属网络中代表移动节点执行,移动管理功能的实体叫做归属代理。
- 外部代理(外地代理):在外部网络中帮助移动节点完成移动管理功能的实体称为外部代理。
- 永久地址(归属地址/主地址):移动站点在归属网络中的原始地址。
- 转交地址(辅地址):移动站点在外部网络使用的临时地址。
通信过程
移动$IP$的基本工作过程可以分为代理发现、注册、分组路由与注销四个阶段
$A$刚进入外部网络:
- 在外部代理登记获得一个转交地址,离开时注销。
- 外地代理向本地代理登记转交地址。
$B$给$A$发送数据报:
- 本地代理截获数据报。
- 本地代理再封装数据报,新的数据报目的地址是转交地址,发给外部代理(隧道)。
- 外部代理拆封数据报并发给$A$。
$A$给$B$发送数据报:
$A$用自己的主地址作为数据报源地址,用$B$的$IP$地址作为数据报的目的地址。
$A$移动到了下一个网络:
- 在新外部代理登记注册一个转交地址。
- 新外部代理给本地代理发送新的转交地址(覆盖旧的)。
- 通信。
$A$回到了归属网络:
- $A$向本地代理注销转交地址。
- 按原始方式通信。
移动$IP$为移动主机设置了两个$IP$地址,即主地址和辅地址(转交地址)。移动主机在本地网时,使用的是主地址。当移动到另一个网络时,需要获得一个临时的辅地址,但此时主地址仍然不变。从外网移回本地网时,辅地址改变或撤销,而主地址仍然保持不变。
互联网连接问题
计算机网络中主机不仅需要跟其他主机相联,还需要跟互联网相联。
- 当询问该网段的主机是否可以访问互联网时,要查看对应网段的默认网关地址,此时默认网关的地址必须跟连接的路由器的接口地址一致,那么可以访问互联网。
- 当主机处于不同的网段(子网号不同)则需要路由器进行连接(就是互联网连接问题,因为不同网段主机访问即使再近都要访问互联网再找到该地址)。此时默认网关的地址必须跟连接的路由器的接口地址一致,否则不能通过路由器转发,从而无法连接。
- 当一个路由表中要填写访问互联网的路径时,那么这个路径就是固定的$0.0.0.0$,掩码也是$0.0.0.0$。这样的话只要这个地址不与路由表中的其他所有地址匹配,那么他们都可以选择这个最终的方案通过互联网查找$IP$地址。
- 如果是要到固定的设备,如域名服务器,则必须$IP$地址全部匹配,此时子网掩码就是$255.255.255.255$。
网络层设备
一般为路由器,是一种具有多个输入端口和多个输出端口的专用计算机,其任务是根据转发表分组转发。
若收到$RIP/OSPF$分组等,则把分组送往路由选择处理机;若收到数据分组,则查找转发表并输出。
功能为分组转发和路由计算,不进行差错检测。
路由器作用于物理层、数据链路层、网络层。
输入端口处理
- 从线路接受分组。
- 物理层进行处理。
- 数据链路层进行处理。
- 网络层进行处理,首先对数据进行分组与排队,再进行查表与转发。
- 输出到交换结构中。
输入端口的查找和转发功能在路由器的交换功能中最重要。
交换结构
根据转发表对分组处理。
- 通过存储器进行交换。
- 通过总线进行交换。
- 通过互联网进行交换。
交换结构由路由选择处理机、路由选择协议、路由表组成。
输出端口处理
- 交换结构中收到分组。
- 网络层进行处理,首先对数据进行分组与排队,速度太快需要放在缓存中并进行缓存处理。
- 数据链路层进行处理。
- 物理层进行处理。
- 向线路发送分组。
若路由器处理分组的速率赶不上分组进入队列的速率,则队列的存储空间必然最终降为$0$,使后面再进入队列的分组由于没有存储而被丢弃。
路由器中的输入或输出队列产生溢出是造成分组丢失的主要原因。
三层设备的对比
- 路由器可以互联两个不同网络层协议的网段。面向协议,根据不同协议进行不同操作。
- 网桥可以互联两个物理层和链路层不同的网段。与高层协议无关
- 集线器不能互联两个物理层不同的网段。
路由表与路由转发
路由表由路由选择算法得到,主要用于路由选择,总由软件实现。包括四个部分:目的网络$IP$地址、子网掩码、下一跳$IP$地址、接口。
其中路由表都有一个默认路由:$0.0.0.0$,其子网掩码为$0.0.0.0$,当不知道发送给谁时就发送这个默认路由,让别的路由器帮忙处理。
转发表由路由表而来,可以使用软件实现也可以使用特殊的硬件实现。转发表必须包含完成转发功能所必须的信息,在每一行都包含要达到的目的网络到输出端口和某些$MAC$地址信息的映射。
一般默认网关地址就是路由器的$LAN$端口地址。