1.4 MiB
网络层
基本概念
主要任务是将分组从源端发送到目的端,未分组交换网上的不同主机提供通信服务。
传输单位
- 应用层的传输单位是报文。
- 传输层的传输单位是报文或报文段。
- 网络层的传输单位是IP数据报或分组。
- 数据链路层的传输单位是帧。
- 物理层的传输单位是比特流。
网络层功能
- 路由选择域分组转发(最佳路径)。
- 异构网络互联。
- 拥塞控制:若网络所有结点都来不及接收分组,而要大量丢弃分组的话会使网络处于拥塞状态,所以就需要控制这种拥塞。(开环控制:在拥塞之前就提前设计解决;闭环控制:在拥塞时自动调整解决问题)
分组交换传输方式
数据报和分组的关系:分组是一段比较长的数据,将它进行切割成一段段之后就得到数据报。
分组交换分为数据报方式和虚电路方式两种。
数据报方式
- 提供无连接服务,可随时发送和接受。
- 尽最大可能交付,所以不保证可靠性。
- 不事先为分组的传输确定传输路径,每个分组独立确定传输路径,不同分组传输路径可能不同,也不一定按序到达。
- 每个分组携带源和目的地址。
- 存储转换需要排队等待。当出现拥塞时会丢弃部分分组。
- 可及时更新转发表,适应性强。
- 时延小,提高吞吐量。
- 不单独占用信道,资源利用率高。
- 路由器根据分组的目的地址转发组:基于路由协议/算法构建转发表(目的网络地址与链路接口的散列对);检索转发表;每个分组独立选路。
虚电路方式
虚电路将数据报方式与电路交换方式结合。
虚电路是一条源主机到目的主机类似电路的逻辑连接,路径上所有结点都要维持该虚电路的建立,都维持一张虚电路表,每一项都记录一个打开的虚电路的信息。
虚电路方式提供连接服务,首先为分组的传输确定传输路径,然后沿该路径/连接传输系列分组,分组的传输路径相同,结束后拆除连接。
- 建立虚电路连接:每个分组携带虚电路号,而非目的地址,源主机发送呼叫请求分组并收到呼叫应答分组后才算建立连接。
- 数据传输:全双工通信。
- 释放虚电路连接:源主机发送释放请求分组以拆除虚电路。
- 虚电路通信链路建立拆除需要时间,不适合交互式和小量短分组,适合长时间频繁数据交换。
- 链路建立确定传输路径。
- 可靠通信,保证有序到达。
- 提供流量控制。
- 虚电路某点或某部分破坏,则会影响其他相关电路。
- 分组首部不包含目的地址,包含虚电路标识符,开销小。
| 数据报服务 | 虚电路服务 | |
|---|---|---|
| 建立连接 | 不用 | 必须 |
| 目的地址 | 每个分组都要有完成的目的地址 | 仅在建立连接时使用,之后每个分组使用较短的虚电路号 |
| 路由选择 | 每个分组单独进行路由选择与转发 | 属于同一条虚电路的分组按照同一个路由转发 |
| 分组顺序 | 不保证有序到达 | 保证有序到达 |
| 可靠性 | 不保证,可靠性依靠用户主机保证 | 保证 |
| 网络故障适应性 | 强 | 弱 |
| 差错控制和流量控制 | 用户主机完成 | 可由网络完成也可以由用户主机完成 |
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 | 用来表示是否分片和分片是否结束;中间位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 | 未知,根据可选字段来定 |
IP数据报分片
- 最大传送单元MTU,数据链路层帧可封装的数据的上限,以太网的MTU是1500字节。
- 当IP分组超过MTU时为了传输就必须要分片,而如果IP分组不允许分片则无法传输,会返回上层一个差错报告。
- 除了最后一个分片,每个分片的长度必然为八字节的整数倍。
例题 假如现在一个数据报,首部为20字节,数据部分3800字节,需要分片为长度不超过1420字节的数据报片,求每一个报片的片偏移量。
已知MTU=1420字节,此题目中首部为20字节,所以每一个分片的数据部分最大为1400字节。
数据部分为3800字节,所以可以分为三片,数据大小分别为1400、1400、1000字节。
所以第一个报片的数据部分是从0到1399字节的,所以该片的片偏移为0,因为分片后数据开头的地方不变。
第二个报片的数据部分是从1400到2799字节,且偏移量以8字节为单位,所以该片的偏移量为1400÷8=175。
第二个报片的数据部分是从2800到3799字节,所以该片的偏移量为2800÷8=350。
IP地址
默认指IPv4地址,全世界唯一的32位/4字节标识符,标识路由器主机的接口。IP地址={网络号,主机号}。
IP地址一共分为五类。
其中一些IP地址被予以保留做特殊用途:
还有私有IP地址:
私有IP地址也叫做可重用地址,不同于一般的全球IP地址,这些地址可以在机构内部自行分配使用,这张网络就是专用互联网或是本地互联网,当然也无法直接用于与因特网的通信。
由于网络号不能全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地址。
专用网络通信
VPN
当目的地址是私有(专用)IP地址时路由器一律不转发,而如果在内网的私有IP地址要转发或接收本地网络其他主机的数据怎么办呢?
可以利用公用的互联网作为本地各专用网之间的通信载体,这种网络就是虚拟专用网VPN。这种网络不同于互联网是因为它只用于本地网络的通信,但是又依靠互联网传输,所以就需要对数据进行加密。
当VPN需要外部机构加入就是外联网VPN;如果成员分布分散,通过某种软件建立VPN通道,这种VPN就是远程接入VPN。
NAT
- 如果专用网的内部某些主机已经分配到了本地专用IP地址,又想无加密的跟互联网上的主机通信,就需要网络地址转换NAT。
- 只用在专用网与因特网的路由器上按照NAT软件,安装了NAT软件的路由器就是NAT路由器,其至少有一个有效的外部全球IP地址。
- NAT路由器就是该本地专用网的代表,负责与外部因特网联通,分发外部的数据信息。
- NAT路由器维护NAT转换表,包含WAN端与LAN端的散列值对。每个值都包含网络号与端口号。NAT路由器在发送和接收时都需要根据转换表更改IP地址。
子网与超网
分级IP地址的缺点:
- IP地址空间利用率较低。
- 两级IP地址不够灵活。
子网划分
-
由两级IP地址(网络号+主机号)变为三级IP地址(网络号+子网号+主机号),将原来的主机号分割出来一部分作为子网号,子网的划分由单位内部完成,但是对外仍表现一个网络,外部无法看到本单位内子网的划分。
-
子网号可以全0或全1,但是主机号仍然不能全0全1。
-
子网的标识依靠子网掩码,其中网络号和子网号的部分全部位数为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 |
注意:可用子网数量不用减二。
例题 已知IP地址位141.14.72.24,子网掩码为255.255.192.0,求网络地址。
已知子网掩码前两个八位都是255,表示掩码前16位全部是1,相与时不变,所以网络前16位依然为141.14。
而子网掩码最后一个八位全部是0,所以与24相与全部是0,从而网络地址为141.14.x.0。
主要看子网掩码第三个八位既有0又有1的部分。72用二进制表示为0100 1000,而192用二进制表示为1100 0000,子网号为2位,主机号为14位,从而进行与操作得到网络号为64。
所以最后网络号为141.14.64.0。
子网分组转发
路由表包括:
- 目的网络地址。
- 目的网络子网掩码。
- 下一跳地址。
路由器转发分组的算法:
- 提取目的IP地址。
- 查看是否可直接交付。
- 查看是否有特定主机路由,就直接按此路由传输。
- 检测路由表中有无合适路径。
- 默认路由0.0.0.0,发送给其他路由器查看是否有该地址。
- 超过TTL,丢弃并报告转发分组出错。
IP广播
如之前的保留地址所展示,如果需要进行广播,则包含两种广播方式。
受限(有限)广播地址是32位全1的IP地址(255.255.255.255)。受限的广播地址是255.255.255.255。该地址用于主机配置过程中IP数据报的目的地址,此时,主机可能还不知道它所在网络的网络掩码,甚至连它的IP地址也不知道。在任何情况下,路由器都不转发目的地址为受限的广播地址的数据报,这样的数据报仅出现在本地网络中。
直接广播地址包含一个有效的网络号和一个全1的主机号,如果我们要求一个IP地址的直接广播地址,那么需要根据IP地址与子网掩码,将网络号部分与出来,然后将所有的主机号位全部置1,从而得到的地址就是该网络地址的直接广播地址。
CIDR
- 一般子网划分在同一个单位下的子网掩码都是相同长度的,而无分类编址CIDR就是变长的子网掩码。
- CIDR构建的超网可以在单位内部根据不同部门的主机个数分配不同数量的子网IP地址。
- 通过CIDR就将子网划分的三级IP地址又回归为两级IP地址(网络前缀+主机号)。
- CIDR记法:IP地址后加上/,然后写上网络前缀的位数。
- 也可用使用:二进制网络前缀*。
- CIDR把网络前缀都相同的连续的IP地址组成一个CIDR地址块。
如根据128.14.35.7/20,可以得到其二进制是10000000 00001110 0010|0011 00000111,所以其最小地址就是将竖线后面的位全部变为0,最大地址就是将竖线后的位全部变为1,即为128.14.32.0与128.14.47.255,可用地址就是$2^{12}-2$个,地址块就是128.14.32.0/20。
构成超网
将多个子网构成一个较大的子网就是构成超网,也就是路由聚合。
方法就是将网络前缀缩短。
最长前缀匹配:使用CIDR时,查找路由表时可能得到多格匹配结果,应该选择具有最长网络前缀的路由,前缀越长,地址块越小,路由也越具体。
例题 路由器R0的路由表见下表:若进入路由器R0的分组的目的地址为132.19.237.5,请问该分组应该被转发到哪一一个下一跳路由器()。
A. R1 B. R2 C. R3 D. R4
| 目的网络 | 下一跳 |
|---|---|
| 132.0.0.0/8 | R1 |
| 132.0.0.0/11 | R2 |
| 132.19.232.0/22 | R3 |
| 0.0.0.0/0 | R4 |
其中D表示默认路由,代表本路由表中找不到对应的路由,只能交给其他路由器查找。如果ABC都不对D才能作为选项。
如果是R1,网络前缀是8的话,目的地址的网络号就是132.0.0.0,所以与路由表中目的网络网络号一致,可用作为下一跳的选项。
如果是R2,网络前缀是11的话,目的地址的网络号就是132.0.0.0,所以也可用作为下一条的选项。
如果是R3,网络前缀是22的话,目的地址的网络号是132.19.236.0,与路由表中目的网络网络号不一致,所以不能作为选项。
所以AB都是可选的,而根据最长前缀匹配,需要选择网络前缀最长的、地址最具体的,所以选择B。
例题 某网络的IP地址空间为192.168.5.0/24,采用定长子网划分,子网掩码为255.255.255.248,则该网络中的最大子网个数、每个子网内的最大可分配地址个数分别是()。
A. 32, 8 B. 32, 6 C. 8, 32 D.8, 30
已知IP为192.168.5.0/24,前24位都是网络前缀,又采用定长子网划分,所以要对后面八位进行子网划分。
子网掩码为255.255.255.248,所以前五位为子网号,后三位为主机号。所以子网号就是$2^5=32$。主机号为$2^3=8$,但是全0全1不可用,所以就是6。所以最后选B。
IPv6
无论是NAT技术还是CIDR技术都无法完全解决IPv4地址耗尽的问题,所以就出现了IPv6从根本上解决地址耗尽的问题。
解决的问题有:
- IP地址不足。
- 改进首部格式,简化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能在主机和路由器处分片。(如过大在路由器会无法分片而无法传输的话,会用ICMPv6返回差错报文)
- 支持资源预分配,支持实时视像等要求,保证一定的带宽和时延的应用。
- 取消了协议字段。
- 取消了总长度字段,改成有效载荷字段。
- 取消服务类型字段。
IPv6地址表示
一般形式:冒号十六进制记法。(分为八个十六进制端)
压缩形式:一段中有连续的0,可用一个0代替;把在前面的0全部删去;使用零压缩的方式,一串连续的0可用用一对冒号代替,但是只能在一个地址中使用一次。
IPv6基本地址类型
| 名称 | 作用 | 要求 |
|---|---|---|
| 单播 | 一对一通信 | 可做源地址,目的地址 |
| 多播 | 一对多通信,以前的广播地址当做覆盖所有主机的多播 | 可做目的地址 |
| 任播 | 一对多当中的一个通信,看似一对多,实则一对一 | 可做目的地址 |
IPv4和IPv6之间的过渡
双栈协议:在一台设备上同时启用IPv4协议栈和IPv6协议栈。这样的话,这台设备既能和IPv4网络通信,又能和IPv6网络通信。如果这台设备是一个路由器,那么这台路由器的不同接口上,分别配置了IPv4地址和IPv6地址,并很可能分别连接了IPv4网络和IPv6网络。如果这台设备是一个计算机,那么它将同时拥有IPv4地址和IPv6地址,并具备同时处理这两个协议地址的功能。
隧道技术:通过使用互联网络的基础设施在网络之间传递数据的方式。使用隧道传递的数据(或负载)可以是不同协议的数据帧或包。隧道协议将其它协议的数据帧或包重新封装然后通过隧道发送。
ARP协议
在实际网络的链路上传输数据帧时,都必须使用MAC地址,所以ARP协议就是完成主机或路由器IP地址到MAC地址的映射,从而决定下一跳的走向。
数据帧的IP地址不变,但是源与目的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找到本网络上一个路由器(网关)的硬件地址。
例题 主机发送IP数据报给主机B,经过了5个路由器,此过程中一共使用了多少次ARP协议?
因为五个路由器,所以有六段链路,所以需要选择路由六次,所以使用了六次ARP协议。
ICMP协议
网际控制报文协议支持差错报告与网络探寻。主要通过发送特定ICMP报文来实现。
ICMP协议是网络层的协议,ICMP报文是作为IP报文的一部分而传输的。
ICMP报文类型
报文类型的值占四个字节。
ICMP差错报文
| 类型 | 值 | 说明 |
|---|---|---|
| 终点不可达 | 3 | 当路由器或主机不能交付数据报时就向源点发送终点不可达报文 |
| 时间超过 | 11 | 当路由器收到生存时间TTL=0的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,并向源点发送时间超过报文 |
| 参数问题 | 12 | 当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文 |
| 改变路由(重定向) | 5 | 路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由) |
不应发送ICMP差错报文的情况
- 对ICMP差错报告报文(即使差错报文本身出错也不会管)。
- 对第一个分片的数据报片之后的所有后续数据报片。
- 对具有组播地址的数据报。
- 对具有特殊地址(如127.0.0.1等)的数据报。
ICMP询问报文
| 类型 | 值 | 说明 |
|---|---|---|
| 回送请求和回答报 | 8或0 | 主机或路由器向特定目的主机发出的询问,收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。测试目的站是否可达以及了解其相关状态 |
| 时间戳请求和回答报 | 13或14 | 请某个主机或路由器回答当前的日期和时间。用来进行时钟同步和测量时间。 |
ICMP应用
- ping:测试两个主机之间的连通性,使用了ICMP回送请求和回答报文。
- traceroute:跟踪一个分组从源点到终点,使用了ICMP时间超过差错报告报文。
路由算法与协议
路由算法就是让路由知道收到报文之后下一步怎么走。
路由算法与协议概述
- 静态路由算法(非自适应路由算法)管理员手工配置路由信息;简便、可靠,在负荷稳定,拓扑变化不大的网络中较好;适用于高度安全的军事网络与较小的商业网络;路由更新慢,不适合用于大型网络。
- 动态路由算法(自适应路由算法)路由器之间交换信息,按照路由算法优化出路由表;路由更新快,适用大型网络,及时响应链路反应与网络拓扑变化;算法复杂,加重网络负担。
- 全局性:所有路由器掌握完整的网络拓扑和链路费用信息;如链路状态路由算法OSPF。
- 分散性:路由器只掌握物理相连的相邻路由器与链路费用;距离向量路由算法RIP。
由于因特网规模大,而许多单位不想让外界知道自己的路由选择协议但是仍想接入因特网,所以就出现了自治系统。
自治系统AS就是多个使用同一种内部选择路由的协议的路由器之间构成的单独的小圈子,圈子内使用自己的协议,圈子和圈子之间也需要另一种AS协议。
路由选择协议分为内部网关协议IGP(RIP、OSPF)与外部网关协议EGP(BGP)。
RIP协议
- 路由信息协议是一种分布式的基于距离向量的路由选择协议,最大的优点是简单。
- 要求网络中的每一个路由器都维护从它到其他每一个目的网络的唯一最佳路径(即一组距离)。
- 距离通常指跳数,即从源端口到目的端口所经过的路由器个数,经过一个路由器跳数+1,与路由器直接连接的网络距离为1。RIP允许一条路最多只能包含15个路由器,所以16表示网络不可达。
- RIP协议只适用于小型互联网。
- 路由表由目的网络、距离、下一跳路由器三个项目构成。
- RIP协议是应用层协议,使用UDP传送数据。
- 一个RIP报文最多只包含25个路由,如果超过必须再用多的RIP报文传送。
RIP协议交换信息
- 仅和相邻路由器交换信息。
- 路由器交换的信息是自己的路由表。
- 每30秒就交换一次,如果180s没收到相邻路由器的通告就默认这个路由器出现错误,并更新路由表。
- 最开始路由器只知道直接相连的网络,若干次更新后所有路由器都会知道到达本自治系统中任何网络的信息,即收敛。
距离向量算法
- 修改相邻路由器发来的RIP报文中的所有表项。对地址为X的相邻路由器发来的RIP报文,修改此报文的所有项目:把下一跳字段中的地址改为X,并把所有的距离+1。
- 对修改后的RIP报文中的每一个项目都进行以下步骤:
- 本路由器路由表中没有该网络,则把这个项目直接填入路由表中。
- 本路由器路由表中已经有该网络,则查看下一跳路由器地址:如果下一跳的路由器名相同,则表明距离更新了,用收到的项目替换原有项目;如果下一跳的路由器名不同,原来距离更远则更新,否则不处理。
- 若180s超时,则把该路由器设为不可达,距离设为16。
- 返回。
例题 已知路由器R6的路由表:
现收到相邻路由器R4发来的路由更新信息:
试更新路由器R6的路由表。
首先第一步是更新R4发来的路由更新信息,距离全部加1,下一跳地址改为R4:
然后对每一项进行查看。
因为R6没有到Net1的项目,所以可以直接填入R6路由表。
因为R6有到Net2的项目,也同样走R4,但是更新后的距离变为了5,所以距离改成5。
因为R6有到Net3的项目,原来走R5,现在走R4,距离从4变为了2,所以走R4距离更短,从而应该改为走R4,距离为2。
所以最后为:
RIP协议问题
RIP协议存在一个问题:当网络出现故障时,要经过较长的时间才能将此信息传送到所有的路由器,“慢收敛”。也叫做好消息传得快,坏消息传得慢。
当一个网络故障时,由于坏消息传输的可能较慢,导致故障信息晚于其相邻信息传输的原来正确信息,故障信息被其原来信息覆盖,从而让双方路由器都不断认为通过对方就能达到已经坏掉的网络,直到重复了16次才会发现该网络不可达。
OSPF协议
- 开放最短路径优先协议的开放指OSPF协议是开放的,SPF是指最短路径算法SPF。
- 最主要的特征是使用分布式的链路状态协议。
- OSPF协议是网络层(或传输层)协议,使用IP数据报传输。
- 每隔30min,要刷新一次数据库中的链路状态。
- 由于一个路由器的链路状态只涉及到与相邻路由器的连通状态,因而与整个互联网的规模并无直接关系。因此当互联网规模很大时,OSPF协议要比距离向量协议RIP好得多。
- 0SPF不存在坏消息传的慢的问题,它的收敛速度很快。
OSPF协议交换信息
- 使用洪泛法向自治系统内所有路由器发送信息,即路由器通过输出端口向所有相邻的路由器发送信息,而每一个相邻路由器又再次将此信息发往其所有的相邻路由器。最终整个区域内所有路由器都得到了这个信息的一个副本。
- 发送的信息就是与本路由器相邻的所有路由器的链路状态(本路由器和哪些路由器相邻,以及该链路的度量/代价——费用、距离、时延、带宽等)。
- 只有当链路状态发生变化时,路由器才向所有路由器洪泛发送此信息。
- 最后,所有路由器都能建立一个链路状态数据库,即全网拓扑图。
链路状态路由算法
涉及到OSPF的五种分组类型:
- 每个路由器发现它的邻居结点HELLO问候分组,并了解邻居节点的网络地址。
- 设置到它的每个邻居的成本度量metric。
- 构造DD数据库描述分组,向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息。
- 如果DD分组中的摘要自己都有,则邻站不做处理;如果有没有的或者是更新的,则发送LSR链路状态请求分组请求自己没有的和比自己更新的信息。
- 收到邻站的LSR分组后,发送LSU链路状态更新分组进行更新。
- 更新完毕后,邻站返回一个LSAck链路状态确认分组进行确认。
- 根据Dijkstra算法与自己的链路状态数据库构造到其他结点之间的最短路径。
当一个路由器的链路状态发生变化时,就会重复5及其之后的步骤。
OSPF协议的区域
为了使OSPF能够用于规模很大的网络,OSPF将一个自治系统再划分为若干个更小的范围,叫做区域。每一个区域都有一个32位的区域标识符(用点分十进制表示)。
区域也不能太大,在一个区域内的路由器最好不超过200个。
路由器分为主干路由器、区域内部路由器、区域边界路由器与自治系统边界路由器。
BGP协议
- 边界网关协议是外部网关协议,是应用层协议,是自治系统之间使用的,最新的版本是BGP-4。
- BGP协议书寻找一条较好的路由,而非找一条最优路由。
- BGP发言人是AS与AS之间交流信息的路由器,往往是BGP边界路由器。
- BGP所交换的网络可达性的信息就是要到达某个网络所要经过的一系列AS。当BGP发言人互相交换了网络可达性的信息后,各BGP发言人就根据所采用的策略从收到的路由信息中找出到达各AS的较好路由。
- 一个BGP发言人与其他自治系统中的BGP发言人要交换路由信息,就要先建立TCP连接,即通过TCP传送,然后在此连接上交换BGP报文以建立BGP会话(session),利用BGP会话交换路由信息。
- BGP支持CIDR,因此BGP的路由表也就应当包括目的网络前缀、下一跳路由器,以及到达该目的网络所要经过的各个自治系统序列。
- 在BGP刚刚运行时,BGP的邻站是交换整个的BGP路由表。但以后只需要在发生变化时更新有变化的部分。这样做对节省网络带宽和减少路由器的处理开销都有好处。
BGP-4报文类型
- OPEN(打开)报文:用来与相邻的另一个BGP发言人建立关系,并认证发送方。
- UPDATE(更新)报文:通告新路径或撤销原路径。
- KEEPALIVE(保活)报文:在无UPDATE时,周期性证实邻站的连通性;也作为OPEN的确认。
- NOTIFICATION(通知)报文:报告先前报文的差错;也被用于关闭连接。
三种协议的比较
| 协议 | RIP | OSPF | BGP |
|---|---|---|---|
| 类型 | 内部 | 内部 | 外部 |
| 路由算法 | 距离-向量 | 链路状态 | 路径-向量 |
| 传递协议 | UDP | IP | TCP |
| 路径选择 | 跳数最少 | 代价最低 | 较好,非最佳 |
| 交换结点 | 和本结点相邻的路由器 | 网络中的所有路由器 | 和本结点相邻的路由器 |
| 交换内容 | 当前本路由器知道的全部信息,即自己的路由表 | 与本路由器相邻的所有路由器的链路状态 | 首次是整个路由表,非首次是有变化的部分 |
IP多播
IP多播也称为组播。当网络中某些用户需要特定数据时,组播数据发送者仅发送一次数据,借助组播路由协议为组播数据包建立组播发送树,被传输的数据到达距离用户端尽可能近的结点后才开始复制和分发。
组播提高了数据传输效率,降低拥塞的可能性,组播组中的主机可以时同一个物理网络,如果有组播路由器也可以来自不同物理网络。
IP组播地址
IP组播地址能让源设备能将分组发送给一组设备,属于多播组的设备将被分配一个组播组IP地址。
组播地址范围是244.0.0.0到239.255.255.255,一个D类地址表示一个组播组,只能用作目的地址,源地址必然是单薄地址。
- 组播数据报也是尽最大努力交付,不提供可靠交付,应用于UDP。
- 对组播数据报不产生ICMP差错报文。
- 并非所有D类地址都可以作为组播地址。
硬件组播
同单播地址一样,组播IP地址也需要对应的组播MAC地址在本地网络中实际传输帧。组播MAC地址以十六进制值01-00-5E开头,余下的六个十六进制位根据IP组播组地址的最后23位转换而成。
有时候可能会IP地址映射成同样的MAC地址,从而数据组播时可能会出错,所以在收到多播数据报的主机,还要在IP层利用软件进行过滤,将不是本主机要接受的数据丢弃。
IGMP协议
网际组管理协议让连接在本地局域网上的多播路由器知道本局域网上是否还有主机的某个进程参加或退出了某个多播组。
工作阶段
- 某主机要加入组播组时,该主机向组播组的组播地址发送一个IGMP报文,声明自己要称为该组的成员。本地组播路由器收到IGMP报文后,要利用组播路由选择协议把这组成员关系发给因特网上的其他组播路由器。
- 本地组播路由器周期性探询本地局域网上的主机,以便知道这些主机是否还是组播组的成员。只要有一个主机对某个组响应,那么组播路由器就认为这个组是活跃的;如果经过几次探询后没有一个主机响应,组播路由器就认为本网络上的没有此组播组的主机,因此就不再把这组的成员关系发给其他的组播路由器。组播路由器知道的成员关系只是所连接的局域网中有无组播组的成员。
组播路由选择协议
组播路由协议目的是找出以源主机为根节点的组播转发树。
对不同的多播组对应不同的多播转发树;同一个多播组,对不同的源点也会也不同的多播转发树。
组播数据报方法
- 洪泛与剪除。
- 隧道技术。
- 基于核心的发现技术。
建议组播路由选择协议
- 距离向量多播路由选择协议DVMRP。
- 基于核心的转发树CBT。
- 开发最短通路优先的多播扩展MOSPF。
- 协议无关多播-稀疏方式PIM-SM。
- 协议无关多播-密集方式PIM-DM。
MPLS
多协议标记交换利用面向连接的技术,使每个分组都携带一个叫做标记的小整数,当分组到达交换机时,交换机读取分组的标记,并用标记值来检索分组转发表。
MPLS具有以下特点:
- 支持面向连接的服务质量。
- 支持流量工程,平衡网络负载。
- 有效地支持虚拟专用网VPN。
移动IP
移动IP技术是移动结点(计算机/服务器等)以固定的网络IP地址,实现跨越不同网段的漫游功能,并保证了基于网络IP的网络权限在漫游过程中不发生任何改变。移动结点具有永久IP地址的移动设备。
相关术语
- 归属代理(本地代理):一个移动结点拥有的就“居所”称为归属网络,在归属网络中代表移动节点执行,移动管理功能的实体叫做归属代理。
- 外部代理(外地代理):在外部网络中帮助移动节点完成移动管理功能的实体称为外部代理。
- 永久地址(归属地址/主地址):移动站点在归属网络中的原始地址。
- 转交地址(辅地址):移动站点在外部网络使用的临时地址。
通信过程
A刚进入外部网络:
- 在外部代理登记获得一个转交地址,离开时注销。
- 外地代理向本地代理登记转交地址。
B给A发送数据报:
- 本地代理截获数据报。
- 本地代理再封装数据报,新的数据报目的地址是转交地址,发给外部代理(隧道)
- 外部代理拆封数据报并发给A。
A给B发送数据报:
A用自己的主地址作为数据报源地址,用B的IP地址作为数据报的目的地址。
A移动到了下一个网络:
- 在新外部代理登记注册一个转交地址。
- 新外部代理给本地代理发送新的转交地址(覆盖旧的)。
- 通信。
A回到了归属网络:
- A向本地代理注销转交地址。
- 按原始方式通信。
网络层设备
一般为路由器,是一种具有多个输入端口和多个输出端口的专用计算机,其任务是根据转发表分组转发。
若收到RIP/OSPF分组等,则把分组送往路由选择处理机;若收到数据分组,则查找转发表并输出。
输入端口处理
- 从线路接受分组。
- 物理层进行处理。
- 数据链路层进行处理。
- 网络层进行处理,首先对数据进行分组与排队,再进行查表与转发。
- 输出到交换结构中。
输入端口的查找和转发功能在路由器的交换功能中最重要。
输出端口处理
- 交换结构中收到分组。
- 网络层进行处理,首先对数据进行分组与排队,速度太快需要放在缓存中并进行缓存处理。
- 数据链路层进行处理。
- 物理层进行处理。
- 向线路发送分组。
若路由器处理分组的速率赶不上分组进入队列的速率,则队列的存储空间必然最终降为0,使后面再进入队列的分组由于没有存储而被丢弃。
路由器中的输入或输出队列产生溢出是造成分组丢失的主要原因。
三层设备的对比
- 路由器可以互联两个不同网络层协议的网段。
- 网桥可以互联两个物理层和链路层不同的网段。
- 集线器不能互联两个物理层不同的网段。
路由表与路由转发
路由表由路由选择算法得到,主要用于路由选择,总由软件实现。包括四个部分:目的网络IP地址、子网掩码、下一跳IP地址、接口。
其中路由表都有一个默认路由:0.0.0.0,其子网掩码为0.0.0.0,当不知道发送给谁时就发送这个默认路由,让别的路由器帮忙处理。
转发表由路由表而来,可以使用软件实现也可以使用特殊的硬件实现。转发表必须包含完成转发功能所必须的信息,在每一行都包含要达到的目的网络到输出端口和某些MAC地址信息的映射。