网络层概述
网络层的主要任务是实现异构网络互连,进而实现数据包在各网络之间的传输;
网络层提供的两种服务
面向连接的虚电路服务
无连接的数据报服务
- 总结
IPv4地址
- 概述
- 点分十进制 表示 32比特IPv4地址
将32比特的4个字节用4个十进制数表示;
- 二进制转换为十进制:
- 根据每位二进制所对应的十进制权值相乘,得到最终的十进制表示;
- 当1的个数较少时,把每位权值相加;当1的个数很多时,从255开始减去比特为0的权值;
- 十进制转换为二进制:
- 记住八位二进制所对应的十进制权值,使用凑值法;
分类编址的IPv4地址
- A类地址
第一个字节小于127的为A类地址;
- B类地址
第一个字节为[128,191]的为B类地址;
- C类地址
第一个字节为[192,223]为C类地址;
- 习题
一般不使用的特殊地址:
- 主机号为0网络地址,主机号全1广播地址不能作为主机的IP地址,因为这不能唯一标识一台主机;
- 广播地址只能作为目的地址,发送方只有一个,源地址不可能广播;
- 网络号全0,只能在分组源地址中使用,缺省的表示本网络上的某台主机,不可缺省的表示目的地址;
- 网络号和主机号全为1的IP地址,为受限的广播地址,因为路由器会隔离广播域,因此全1的广播地址只能在本网络上广播;
不同网络的网络号不能相同,即使是同一类分类编址;
划分子网的IPv4地址
对原本的网络号进一步划分子网,从主机号中借一部分过来当作子网号(逻辑子网 ),把二级IP地址变成三级IP地址;
- 如何让计算机知道主机号中子网是有几位?-> 子网掩码
- 从主机中借走了
n
个比特,就有2^n
个子网; - 若网路未划分子网,则根据网络分类使用默认子网掩码;
无分类编址的IPv4地址CIDR
与传统IP地址相比,CIDR并没有固定的网络前缀位数,可以任意选取
- CIDR地址块:将网络前缀相同的连续IP地址组成“CIDR地址块”,用一个CIDR地址块可以表示多个地址,因此也成为路由聚合;
- 最长前缀匹配(最佳匹配):有多个路由可选时,选择网络前缀最长的地址,因为其地址块最小,路由更具体;
- 无分类编址示例
- 路由聚合示例
通过取多个网络地址的最短公共前缀,将相同接口的多个路由地址表示成一个超网;
定长子网掩码和变长子网掩码
- 定长子网掩码
- 变长子网掩码
IP数据报的发送和转发过程
- 默认网关:当主机要给其它网络的主机发送信息时(间接交付),会将IP数据报发送给默认的路由器,该路由器的IP地址就称为默认网关;
(通过设置默认网关,让主机需要在间接交付时,知道该找哪个路由器转发)
- 如何判断主机是否同属于一个网络:通过IP地址与子网掩码相与结果是否相等而判断;
- 路由器转发IP数据报时的路由表
- 路由器隔离广播域
全1地址代表在当前网路进行广播 ,是受限的广播地址;
- 习题
静态路由配置
人工配置路由表中的表项
默认路由
在路由表中某一类下一跳接口相同的网络,全部归结到默认路由中,默认路由没有具体网络地址,用0.0.0.0/0
表示,全0掩码与任何目的地址按位与结果都是全0,即0.0.0.0/0
可以与任何目的地址匹配,其路由类型为静态,需要人工配置;
特定主机
单独给某一个主机配置一个路由表项,便于网络管理人员对网络的管理和测试;
特定主机的路由表项中目的网络直接填主机的IP地址,无分类编址填/32
(这样即使当有多条路由可选时,特定主机路由的网络前缀也是最长的 )
路由环路问题
静态路由配置导致的环路
**问题描述:**静态路由的下一跳配置错误,导致路由器之间形成路由环路;
**解决方法:**在IP数据报首部中设置生存时间TTL字段,每当IP数据报转发一次TTL就减一,当TTL为空时,就将其丢弃;
路由聚合导致的环路
**问题描述:**路由聚合中的某些网络可能实际并不存在,但因为路由聚合的原因,就算使用了这些并不存在的网络IP地址,路由器也会照样按照超网进行转发;
当转发出去给另一个路由器时,对方肯定是没有对应的表项的,只能从默认路由转发出去,这时就可能又回到原本的路由器,构成了路由环路;
**解决方法:**在路由表中给路由聚合中没有意义的IP地址,单独设置黑洞路由;黑洞路由的下一跳为虚拟接口null0,路由器收到该IP数据报直接丢弃;
网络故障导致的路由
**问题描述:**若某个网络故障,而路由器检测到该网络故障,就会在路由器中自动删除该直连网络的路由条目;若有其它路由还想要发送数据到该网络,则会可能导致路由环路(发生网路故障的路由的默认路由为发送数据的路由器时)
**解决方法:**当路由器自动删除原本的路由条目后,继续添加直连网络设置为黑洞路由;
若后续故障网络被修复,则将原本的黑洞网络失效,使用新的路由表项;
动态路由算法
动态路由算法:可以通过相互连接的路由器之间彼此交换信息,利用这些信息计算出相应的动态路由;
自治系统(AS,Autonomous System):单一技术管理下的一组路由器,这些路由器使用同一种内部路由选择协议和共同的度量来确认分组在自治系统内的路由;
分层次:
- 自治系统内部使用域内路由选择,内部网关协议IGP
- 自治系统之间使用域间路由选择,外部网关协议EGP
路由器基本结构:
有路由表和转发表之分,平时为了方便表述没有严格区分;
路由信息协议RIP
路由信息协议RIP(Routing Information Protocol)是内部网关协议;
路由信息的转发基于距离向量;
- RIP中距离16表示不可达,到达16之后跳数就不用再增加,因为已经是不可达了;
- 当到达同一目的网络,有多条距离相等的路由时,可以进行等价负载均衡,将通信量均衡分布到多条等价路由上;
RIP工作基本原理
- 相邻路由改造
相邻路由器发来其自身的路由表时,首先将其内容进行改造,将其所有路由距离加1,并把所有下一跳都改为相邻路由器自己;(在路由器C可到达的基础上,路由器D只需要经过路由器C,也可到达相应网络,所以距离都加1,下一跳改为了路由C)
- 自身路由更新
在改造后的C路由表基础上,对D路由表进行更新,将两个路由表按目的网络进行比较;
- 新的目的网络直接添加;
- 相同目的网络:
- 相同下一跳,更新跳数(代表更新的信息,即使更新后的跳数更大);
- 不同下一跳:
- 若新路由跳数更小,则更新原路由跳数(新路由优势更大);
- 若新路由跳数相同,则添加新路由(相同跳数可进行等价负载均衡);
- 若新路由跳数更大,则不更新原路由表项(新路由劣势)
RIP“坏消息传播得慢”的问题
当路由器直连网络故障后,相连路由器会将其跳数设置为不可达16,但是相邻路由器中的故障网络路由信息却依旧是没故障之前的版本;
(假设R2的路由信息比R1的路由信息早达到时的情况):
通过相邻路由信息交换,R1会以为可以通过R2与故障网络N1交流,R2又以为可以通过R1和故障网络N2交流,双方进行数次路由环路,各自都把跳数加到了16,才能够同时意识到N1不可达;
这就是为什么错误信息传得慢的原因,因为故障信息更新不及时,需要多次收敛后才能让整个自治系统知道N1不可达;
- 习题
R3只向R2通告不可达,但没有向R1通告不可达,R1依旧会认为故障网络可达;
因为这是RIP协议,所以相邻路由器之间会交换并更新路由信息;所以R2的更新,是在和R1、R3进行交换路由的基础上进行更新的;
即使R3使得R2中的目的网络不可达后,但是之后R1又会告诉R2目的网络可达;
开放最短路径优先OSPF
每个结点通过广播与所有其他结点交谈,但是仅告诉它自己的直连结点的信息;而RIP中每个路由器结点,仅与它的直接邻居交谈,发送的是自己到网络上所有其它结点的代价;
每个路由器都有自己的数据库,其存储了整个自治系统的网络拓扑结构,每个结点都具有完全相同的网络拓扑信息,通过网络拓扑结构可以得出网络的带权有向图,然后再使用DijKstra最短路径算法SPF,计算得出到达其它各路由器的最短路径;
- 专用术语:
**链路状态通告LSA(Link State Advertisement):**包含每个路由器的直连网络和邻居路由器的链路状态信息;
**链路状态更新分组LSU(Link State Update):**LSA被封装在了路由器的链路状态更新分组LSU中,采用洪泛法发送给自治系统中的其它路由器;
**链路状态数据库LSDB(Link State DataBase):**每个路由都一个链路状态数据库LSDB,用于存储网络中各个路由器的链路状态信息,也就是说每个路由器通过数据库存储着整个网络的网络拓扑结构。
OSPF的五种分组类型
- 问候分组(Hello)
OSPF的工作原理
- 在发送问候分组,路由之间建立邻居关系后;
- 路由器各自发送自身的数据库描述分组,告知网络中的其它路由器自己的链路状态信息;
- 通过其它数据库描述分组,路由器可能发现自己缺少了某些链路状态信息;路由器之间可以通过链路状态更新请求分组请求各自缺少的链路状态信息,最终使得各自之间的链路状态数据库达到同步;
- 相应路由器收到链路状态更新请求分组后,会发送对应链路状态更新分组,将所请求的链路状态信息,封装在链路状态更新分组中;
- 请求的路由器收到请求的链路状态信息后,会发回相应的链路状态确认分组;
- 每间隔30分钟,或者链路状态发生变化,路由器会通过洪泛法发送链路状态更新更新分组;
OSPF在多点接入网络中的路由邻居关系管理
当在总线型网络(多点接入网络)中使用OSPF协议,这次一个路由器的邻居路由器将会是网络上除它自身外的所有路由器,那么每次进行洪泛法的网络通信量就很大,因此提出指定路由器DR/BDR的方法;
指定路由器DR(designated router)和备用的指定路由器BDR(backup designated router):
- 非DR/BDR之间的交流只能通过DR/BDR进行,且只能和其建立邻居关系;
- DR/BDR的选举,通过一定规则选举产生;
自治系统的区域划分
在OSPF算法中,还可以进一步把自治系统划分为若干区域;路由器只知道所属区域的内部细节,但不知道其它区域的内部结构(因此需要边界路由器进行区域交互)
通过划分区域,从而把路由器进行洪泛法的交换信息范围局限在每一个区域内,减少整个自治系统的通信量,使得OSPF可以适用于大规模的自治系统
每个区域有个32位区域标识符,主干区域必须为0;其它区域标识符不为0且互不相同;
名词解释:
- 主干路由器BBR(backbone router):存在于主干区域内部的路由器;
- 区域内路由器IR(internal router):路由器的全部接口在区域内部;
- 区域边界路由器ABR(area border router):用于连接主干区域和自身所在区域,ABR也能够算是主干路由器;
- 自治系统边界路由ASBR(AS border router):主干区域内有一个边界路由器用于连接其它自治系统,称为自治系统边界路由器
边界网关协议BGP
由于不同自治系统内部的度量路由的代价不相同,自治系统之间没有统一的度量代价,寻找自治系统之间的最佳路由是没有意义;因此BGP协议寻找的是能够达到目的网络且比较好的路由,并不是自治系统之间的最佳路由;
BGP发言人
BGP发言人和邻站的信息交流使用TCP连接;
BGP使用多级因特网结构
IPv4数据报的首部格式
IPv4数据报的首部格式需要熟记(重要字段的长度和含义)
长度相关字段:
首部长度:占4比特,表示IP数据报的首部长度,以4字节为单位(省略了尾部两个0);
最小值是20B(二进制0101/十进制5),最大值是60B(二进制1111/十进制15)
总长度:占16比特,表示IP数据报的总长度(首部+数据载荷),以字节为单位;
最大长度为2^16-1
=65535B,而以太网帧的数据载荷部分MTU为1500B,因此当IP数据报封装成帧时,需要注意是否需要分片;
片偏移:占13比特,表示分片后的数据载荷在原数据载荷中的相对位置,以8字节为单位(省略3位比特);
片偏移一定要是8的整数倍,同时除最后一个分片外,每个分片的长度一定都是8的整数倍;
首部长度、总长度和片偏移三者的单位长度各不相同,做题时需要额外注意;
IP数据报的分片
数据链路中对帧的数据载荷进行了相应的限制:最大传输单元MTU;而IP数据报就是被封装在帧的数据载荷中,因此IP数据报的总长度不能超过MTU,超过就需要进行分片并在首部添加相关控制信息(将数据载荷分片后各自加上首部,整体长度不能大于MTU);
标识、标志、片偏移用于服务IP数据报的分片;
- 标识:占16比特,同一个IP数据报的标识都相同,用以标识分片所属数据报;
- 标志:共有3比特,第一个比特为0无含义,只有后两位比特MF、DF有意义;
- DF位:表示是否允许分片,一般允许分片的话,整个数据报分片后的DF都为1;
- MF位:表示是否后面是否还有分片,看该分片后面是否还存在相同标识的数据报;
- IPv4数据报分片习题
数据报分片是对数据载荷进行分片;
MTU同时对首部长度和数据载荷长度(总长度)进行约束,分片的时候也要考虑首部长度;
初步分片完之后,需要看片偏移量是否为8的整数倍,若不是则需要进行一定的调整(将原本的片偏移量除8下取整,然后再乘8);除最后一个分片外,所有帧的数据载荷都必须是8的整数倍;
协议字段
首部校验和字段
- IPv4数据报习题
网际控制报文协议ICMP
为了更有效地转发IP数据报和提高交付成功机会,在网际层使用ICMP;
主机或路由器会利用ICMP来发送差错报告报文和询问报文;
注意四种不应发送ICMP差错报告报文的情况;
ICMP差错报告报文
用于目标主机和目标主机路径上的路由器向源主机报告差错和异常情况;
- 终点不可达
- 源点抑制
- 时间超过
两种情况:TTL为0;目的主机没能按时收到所有分片数据报
- 参数问题
IP数据报首部中的校验字段出错;
- 改变路由(重定向)
ICMP询问报文
- 回送请求和回答
- 时间戳请求和回答
ICMP应用
- PING
使用了ICMP的回送请求和回答报文,PING工作在应用层;
- 跟踪路由
通过发送递增TTL的ICMP回送请求报文,测试出从源主机到目的主机要经过哪些路由器;使用了ICMP差错报告报文(时间超过类型)和ICMP询问报文(回送请求和回答报文);Traceroute工作在网络层;
- 图示
虚拟专用网VPN和网络转接地址NAT
虚拟专用网VPN
因为从逻辑上来看两个私有网络之间好像建立起了一条点对点链路,因此虚拟专用网VPN也称为IP隧道技术 ;
内部的IP数据报会经过利用相应的加密算法,封装在外部的IP数据报中发送给目的私有网络,目的私有网络会利用相应解密算法,取出内部真正的信息(因此也成为隧道技术,把外部的IP数据报看成隧道,用于承载内部IP数据报)
网络地址转换NAT
由于公有地址数据量有限、不可重复利用,因此将IP地址中部分地址划分为私有地址应用于本地网络,可重复利用,有效解决了IP地址不足的问题,私有地址也称为可重用地址;
私有地址不能直接用于因特网,必须通过网关利用NAT把私有地址转换为共有地址;
在专用网和因特网相连之处会有一台装有NAT软件的路由器,其至少有一个全球IP地址;NAT路由器会把内网发送或接收的IP数据报中修改私有地址变成全球地址;(NAT看得到端口号,因此NAT工作在运输层)
- 私有网络与因特网通信
- 因特网对私有网络的回应
- 外网主机不能首先对私有网络发起通信
在因特网中的所有路由器,对目的地址是私有地址的数据报一律不转发;
IPv6
从根本上解决IP地址的耗尽问题,把32位(4字节)的IP地址增大到128位(16字节)的IP地址;
IPv6数据报的格式
IPv6数据报由基本首部和扩展首部组成,基本首部固定40字节
- 基本首部
- 扩展首部
IPv6地址
- 冒号十六进制法
采用冒号十六进制记法,将16个比特作为一组用冒号隔开,每一组中每四个比特用十六进制表示;
- 左侧零和连续零压缩的简洁表示方法
- 连续零压缩只能使用一次,因为0的个数没有表明,一次以上连续零压缩将会导致歧义;
- IPv6的目的地址分类
移动IP
移动IP的基本概念
移动IP可以使移动节点在移动过程中保持其连接性;移动IP技术使移动主机在各网络之间漫游时,仍然能够保持其原有的IP地址不变;
- 专用术语
移动IP的通信过程
- 代理发现与注册
移动主机向外地代理注册自己的永久地址和归属代理地址,外地代理将该移动主机的转交地址发回归属代理;
- 固定主机向移动主机发送IP数据报
固定主机按照永久地址,发送IP数据报给归属代理,归属代理会将报文通过隧道技术发送给外地代理,外地代理再根据封装在里面的永久IP地址直接转发给移动主机;
- 移动主机向固定主机发送IP数据报
- 同址转交
IP组播(IP多播)
组播的概念
IP组播地址
软件定义网络SDU
在路由器的控制层面,不再使用路由软件,而是用一个在逻辑上集中的远程控制器,其在物理上可有不同地点的多个服务器组成;
SDU的核心思想:把网络的控制层面和数据层面分离,而让控制层面利用软件来控制数据层面中的许多设备;
- SDN的广义转发
- 流表
- OpenFlow交换机的简单转发
- 负载均衡
- 防火墙
- SDN体系结构及其四个关键特征