网络层
已同步微信公众号:乐享Coding
,欢迎各位的关注!
主要功能:实现主机与主机之间的通信,也叫点对点(end to end)通信。
思维导图附上
实现网络层任务,需要解决以下主要问题:
- 网络层向运输层提供怎样的服务(可靠or不可靠)
- 网络层寻址问题
- 路由选择问题
两种服务
-
面向连接的虚电路服务
双方必须建立网络层的连接-虚电路VC(Virtual Circuit),目的主机的地址记在连接建立阶段使用,之后每个分组的首部只携带一条虚电路的编号(构成虚电路的每一段链路都有一个虚电路编号)。通信结束后,需要释放之前建立的虚电路。
无连接的数据报服务
(因特网选择)
双方通信不需要建立连接,每个分组可走不同的路径,每个分组的首部必须携带目的主机的完整地址,由于无连接,可能造成误码
,丢失
,重复
和失序
等问题,由于不提供端到端的可靠传输服务,因此路由器可以做的比较简单,而且价格低廉,因特网最终选择了这种通信方式。
IPV4地址
IPv4地址就是给因特网(Internet)上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内唯一的32比特的标识符
。
IP地址由特定机构分配,我国用户可向其申请。2011年,IPv4地址宣布分配完毕。由于IPv4地址仅用32比特标识最多可满足43亿(2的32次方)个,实际上,IP 地址并不是根据主机台数来配置的,而是以网卡。像服务器、路由器等设备都是有 2 个以上的网卡,也就是它们会有 2 个以上的 IP 地址。让 43 亿台计算机全部连网其实是不可能的,更何况 IP 地址是由「网络标识」和「主机标识」这两个部分组成的,所以实际能够连接到网络的计算机个数更是少了很多。
表示方法:点分十进制
三个阶段
分类编址
五类地址 =「网络标识」+「主机标识」初步管理IP地址
注意事项:(官方规定)
- 只能分配给主机或路由器接口A类,B类和C类地址
- 主机号全为0的地址是
网络地址
,不能分配 - 主机号全为1的地址是
广播地址
,不能分配
TIPS:A类地址网络号不能包含127,因为已被占用作为本地软件换回测试!
根据以上规则,我们总结出以下规律:
子网划分
为什么需要进行子网划分?
假设一个企业需要为主机分配IP地址,如果申请C类网络地址,仅能获得254个分配名额,显然大公司是不够用的,只能申请B类网络地址,就能获得65534个分配名额,造成很大不必要的浪费,况且公司规模越大,就需要不同的网络为不同的分公司主机分配IP地址,可以称之为子网,如果子网还需要向官方申请新的B类网络,那么会造成时间和金钱成本的增加
,也会使得路由表新增更多的记录
,由于主公司分配了65534个名额,可能还有剩余,但再次申请变浪费了主公司已申请的剩余的B类地址。为解决上述问题,子网采用了从主机号借用了一部分作为子网号的方式。
划分子网虽然将之前已分配给主公司剩余的B类地址利用起来,但是又产生了一个新的问题:
计算机是如何知道主机号有多少位被借用作为子网号了呢?
子网掩码目的就是保留网络号和子网号,主机号清零。通过与子网掩码做逻辑与运算(只有1&1=1,其余均为0可以看成乘法)这样就可以知道主机号被借用了多少位。
例题解析:
已知某个网络的地址为218.75.230.0,使用子网掩码255.255.255.128对其进行子网划分,求子网数量和每个子网可分配的主机地址数量。
详细子网划分
注意
:如果网络中没有设置子网掩码的情况不同类的网络会采用默认子网掩码。
无分类编址
划分子网在一定程度上缓解了因特网在发中遇到的困难,但是数量巨大的C类网络因为其地址空间太小并没有得到充分使用,因而因特网面临Ipv4地址的耗尽。
为此因特网工程任务组(官方)IETF又提出了采用无分类编址(CIDR)
的方法来解决以上问题。
优势:
- 消除了传统的A类,B类,C类地址,以及子网划分的概念;
- 更加有效地分配IPv4的地址空间,为IPv6的广泛应用提供时间!
CIDR到底是什么呢?
CIDR采用斜线记法
,实际上是将网络前缀都相同的连续的IP地址组成一个“CIDR地址块”
。
斜线后面写上网络前缀所占的比特数量。
CIDR到底有什么用?
我们知道CIDR地址块中的任何一个地址,就可以知道该地址的全部细节(最小地址,最大地址,地址数量,聚合C类网络数量,地址掩码)。
TIPS:因为无分类,所以就没有了全0和全1不能分配主机的限制。
举例:
超网(路由聚合)
超网的引出:如图
可以看到R2的路由表将增加5条记录,但如果将共同前缀提出来,就可将5条记录综合成一条,减少了路由器的负担。如图:
聚合地址块 172.1.4.0/22
由此可见,地址块越小,路由越具体
若路由表转发分组时发现有多条路由可选,则选择网络前缀最长的那条,因为这样的路由更具体。
例题详解
已知:
收到的分组的目的地址 D = 206.0.71.128
路由表中的项目:206.0.68.0/22 206.0.71.128/25
问:分组发往哪个地址?
求解思路
将子网掩码与目的地址相与,确定该目的地址是否属于该子网内部。如果两者都属于,则选择网络前缀(掩码)最长
的。
求解过程
1.先用 D 和第一个下一跳地址的子网掩码相与
结果说明206.0.71.128与206.0.71.128/25匹配。
2.再用 D 和第二个下一跳地址的子网掩码相与
结果说明206.0.71.128与206.0.71.128/25也匹配。这个时候由于两个子网都匹配,选择最长的网络前缀匹配,也就是206.0.71.128/25。
IPv4地址规划
定长的子网掩码(FLSM)
将C类网络218.75.230.0划分5个子网,每个子网可分配的IP地址数量不得少于各自需求。
可以将3个主机位借用为网络位,一个可以产生2的3次方(8>5)个子网,因此每个主机可分配的IP地址数量为2的(8-3)次方的地址,足以满足上述分配,因此每个网络的子网掩码固定,都为255.255.255.224。可以看出,这种方法只能画出2的n次方个子网,每个子网所分配的IP地址数量相同,因此很容易造成IP地址的浪费。
变长的子网掩码(VLSM)
申请到的地址块218.75.230.0/24,使用变长的子网掩码给小型网络中的各设备分配IP地址。
可以看到,每个网络的子网掩码不是固定的,每个子网所分配的IP地址数量也不相同,218.75.230.0/24可分配的最小地址为218.75.230.0,最大地址为218.75.230.255.因此可以从起点按需分配这5个子网,多余的可剩下留作后续使用。
IP数据报首部格式
版本字段
:表示IP协议的版本(IPv4或IPv6)
首部长度字段
:IP数据报首部的长度,该字段的取值以4字节为单位。
区分服务
:实际没使用
总长度
:IP数据报的总长度
标识
:属于同一数据报的各分片数据报应具有相同的标识。
标志
:DF位:1表示不允许分片
0表示允许分片
MF位:1表示“后面还有分片”
0表示“这是最后一个分片”
保留位:必须为0
片偏移
:指出分片数据报的数据载荷部分偏移的与其原数据报的位置有多少,用于排序合并分片后的数据报。
生存时间
:以跳数(hop)为单位,每经过一个路由器转发,该值减1,如果为0就丢弃。
协议
:指明数据部分是何种协议数据单元。
首部检验和
:用来检测首部在传输过程中是否出现差错。
源IP地址和目的IP地址
:指明源主机IP和目的主机IP。
为什么要进行分片?
分片的实例?
总长度与首部长度的区别?
常见的协议字段取值?
IPV6
IPv4的地址空间不够用,而子网、CIDR、超网等技术均治标不治本,因此出现了IPv6的格式。
1、IPv6将地址从32位(4B) 扩大到128位(16B) ,更大的地址空间。
2、IPv6将IPv4的校验和字段彻底移除,以减少每跳的处理时间。
3、IPv6将IPv4的可选字段移出首部,变成了扩展首部,成为灵活的首部格式,路由器通常不对扩展首部进行检查,大大提高了路由器的处理效率。
4、IPv6支持即插即用(即自动配置),不需要DHCP协议。
5、IPv6首部长度必须是8字节的整数倍,IPv4首部是4B的整数倍。
6、IPv6只能在主机处分片,IPv4可以在路由器和主机处分片。
7、ICMPv6:附加报文类型“分组过大”。
8、 IPv6支持资源的预分配,支持实时 视像等要求,保证- - 定的带宽和时延的应用。
9、IPv6取消了协议字段,改成下一个首部字段。
10、IPv6取消了总长度字段,改用有效载荷长度字段。
11、Pv6取消了服务类型字段。
表示方式
一般形式冒号十六进制记法:4BF5:AA12:0216:FEBC:BA5F:039A:BE9A:2170
压缩形式
4BF5:0000:0000:0000:BA 5F:039A:000A:2176
↓
4BF5:0:0:0:BA5F:39A:A:2176
零压缩:一连串连续的0可以被一对冒号取代。
FFO5:0:0:0:0:0:0:B3
↓
FFO5::B3
首部格式:如图
ICMP报文
主机或路由器使用ICMP来发送差错报告报文
和询问报文
。
ICMP报文被封装在IP数据报中发送。
共有以下五种:
终点不可达:
当路由器或主机不能交付数据报时,就向源点发送终点不可达报文。
源点抑制:
当路由或主机由于拥塞而丢弃数据报时,就向源点发送抑制报文。
时间超过:
当路由器收到一个目的IP地址不是自己的数据报时,会将其生存时间TTL字段的值减1,若结果为0,除丢弃数据报外,还要向源点发送时间超过报文。
还有一种情况,当终点在预先规定的时间内不能收到一个数据报的全部数据片时,就把已收到的数据报全部丢弃,同样向源点发送时间超过报文。
参数问题:
当路由器或目的主机收到IP数据报后,根据其首部中的检验和字段发现首部在传输过程中出现了误码,就会丢弃该数据报,并向源点发送参数问题报文。
改变路由(重定向):
路由器把改变路由报文发送给主机,让主机知道下次应将书纪宝发送给另外的路由器,因此可以找到更好的路由。
应用举例
PING命令 -windows系统下
用来测试主机或路由器间的连通性,应用层直接使用网络层,没有通过UDP和TCP,同时使用ICMP回送请求和回答报文。
tracert命令 -winows系统下
用来测试IP数据报从源主机到达目的主机经过哪些路由器。
tracert命令实现原理?
通过设置不同的TTL时间触发超时向源主机发送类型为时间超过
的ICMP报文。
路由配置
静态路由配置
人工配置的下一跳网络,记录在路由表上,直连网络路由器自动配置。
TIPS:
人工配置不能适应网络的变化动态做出配置,而且一旦配置出错,可能造成路由环路的问题,即IP数据包重复在两个网络之间发送。但是这种配置操作简单,开销小。一般应用小规模
网络。
动态路由配置
由于人工配置的上述缺点,引出了动态路由选择的出现,动态路由配置通过路由选择协议自动获取路由信息,但这种方式也有缺点,配置比较复杂,开销大。一般应用大规模
网络。
路由选择协议
本章重点讨论内部网关协议中的RIP
和OSPF
RIP
每一个协议都有严格的规则,RIP要求自治系统AS内的每一个路由器都要维护从他自己到AS内其他每一个网络的距离记录,称位距离向量(DV)
。使用跳数(Hop)
来衡量到达目的网络的距离。直连网络的距离为1,路由器到非直连网络的距离定义为所经过的路由器数加1,一条路径最多允许包含15个路由器,因此,距离=16
相当于不可达。
- 工作原理
OSPF
OSPF是基于链路状态的,采用SPF算法计算路由,不限制网络规模,更新效率高,收敛(达到稳态)速度快。链路状态是指本路由器都和哪些路由器相邻,以及相应链路的“代价”(cost)。
代价
:综合费用,距离,时延,带宽等等数据使用特定算法计算代价
1.OSPF相邻路由器之间通过交互问候(Hello)分组,建立和维护邻居关系,Hello分组封装在IP数据报中,发往组播地址。周期为10秒,40秒未收到Hello分组,被认为邻居不可达。
2.使用OSPF的每个路由器都会产生链路状态通告(LSA)
3.每个路由器都有一个链路状态数据库LSDB。用于存储LSA,各路由器互相发送自己封装了LSA的LSU分组,最终各路由器的LSDB将达到一致。如图,以R2为例:
4.各路由器基于LSDB进行最短路径优先SPF算法计算,构建出最短路径的路由表。
更新同步原理
出现的问题:
OSPF在多点接入网络中,因为互为邻居关系所以组播要发送大量的Hello分组来维持邻居关系,如图:
为解决这个问题,通过选定指定路由器DR和备用指定路由器BDR,规定所有的非DR/BDR只与DR/BDR来建立邻居关系,大大减少了hello分组的数量。如图:
TIPS:
为了使OSPF能够用于规模很大的网络,OSPF把一个自治系统划分为若干的更小范围,叫做区域(
Area)。