计算机网络基础|第四节|网络层
网络层(重点掌握)
网络层的任务
实现网络互连,进而实现数据包在各网络之间传输
网络层需要解决的问题
- 提供运输层的服务
- 网络层寻址
- 路由选择问题
因特网(Internet)使用的是TCP/IP协议栈
网络层也常被称为网际层
面向连接的虚电路服务
必须建立网络层连接 虚电路VC(Virtual Circuit)
可靠性由网络来保证
分组按序,走虚电路到达
- 在通信结束需要释放之前建立的虚电路
无连接的数据报服务
可靠通行应当由用户主机来保证
不需要建立网络层连接
- 首部必须携带目的主机的完整地址
- 可以走不同的路由
- 容易出现误码,乱序等问题
在TCP/IP全栈体系中
网际层提供的简单灵活的,无连接的,尽最大努力交付的数据报服务
基本概念
IPV4地址
全世界范围内唯一的 32比特的标识符(每一台主机或路由器的每一个接口)
IP地址由因特网名字和数字分配机构ICANN进行分配
- 2011 IANA(互联网号码分配管理局)宣布IPv4分配完毕
- 2014~2015 我国逐渐停止分配IPv4,同时开始全面部署IPv6
这里由时间发展,解释IPv4的编址方法的三个历史阶段
- 1981年 分类编址
- 1985年 划分子网
- 1993年 无分类编址
IPV4表示
32位的IPv4地址采用点分十进制的表示方法
每八个比特分为一组,每组的十进制数,用点来分隔
快速计算
凑值法
IPV6地址
是IPv432位地址4倍长度,一样用的是CIDR记法
- 扩展了路由和寻址的能力
- 报头格式的简化
- 对可选项更大的支持
- 身份验证和保密
- 支持无状态自动地址配置
编址阶段
分类编址
分出了五类依次按照ABCDE排序
注意
- ABC可以分配给网络中的主机或路由器的各接口
- 主机号全为0的是网络地址,不能分配
- 主机号全为1的事广播地址,不能分配
A类
网络号全为0:最小网络号,保留不指派
可指派的网络号起始为00000001
最大网络号为:01111111, 为本地环回测试地址,不指派
最小的本地环回测试地址为127.0.0.1
最大的本地环回测试地址为127.255.255.254
所以可分配的范围为1~126,每个网络号的最大主机数:$2^{24}-2$
注意0.0.0.0只能最为源地址使用
B类
最小网络号全为 0 ,也是第一个可指派的网络号,128.0
网络地址为128.0.0.0(给荷兰用的)最大网络号也是最后一个可指派的网络号 ,191.255
网络地址为191.255.0.0
所以可分配的范围为1~126,每个网络号的最大主机数:$2^{16}-2$
C类
- 最小网络号192.0.0.0 ,也是可以指派的网络号
- 最大网络号223.255.255.0
所以可分配的范围为1~126,每个网络号的最大主机数:$2^{8}-2$
特殊的ip地址:
注意:两台路由器通过链路直连也是一个网络,也需要分配IP给各个端口。
子网划分
网络号申请得花钱。开销还很大,浪费原有网络号中剩余的主机号地址
那我在主机号中再划分各个子网,就充分利用了网络资源
- 利用子网掩网使用连续的比特1来对应网络号和子网号
- 连续的的比特0;来对应主机号
子网掩码将原有的耳机结构划分为了三级结构:
划分细节示例:
一个比特相当于将IP再次划分了两部分,子网0和子网1
同时子网0和子网1同时也有自己的广播地址和最小网络地址。
例题:
注意事项:
- 在确定子网掩码时需要先确定网络类型,根据网络类型网络号确认默认子网掩码
无分类编址
虽然划分了子网呢一定程度上解决些问题,但还是8太顶用,因为主机号与网络号不成正比。
CIDR(无分类的域间路由选择)
CIDR消除了传统的A类B类和C类地址,以及划分子网的概念
CIDR使用“斜线记法”,即在IPv4地址后面加上/ 数字代表网络前缀占用数量
示例:
路由聚合(超网)
用来节省路由器中的路由表的占用,所以就叫做路由聚合。
将多个目的网络聚合在一个地址块。
聚合出来的地址块就称为聚合地址块
聚合地址块根据 所有的目的地址的共同前缀 :
聚合得到的地址块即为:172.1.4.0/22
网络前缀越长,地址块越小,路由就越具体
当路由器查表转发分组的时候就会发现又有多条路由可选,就会选择网络前缀最长的那条,被称为最长前缀匹配。
应用规划
定长子网掩码划分(FLSM)
上面的子网掩码实际上都归类为地场子网划分,只能划分2的n次方的子网(n是子网比特数),但只要划分9个子网时,很有可能造成资源浪费,比如定长子网掩码 只能划分16个子网,就造成极大浪费
变长子网掩码划分(VLSM)
按需分配:
分配原则选分配地址数量最多的网络开始
尽可能减少了浪费,在不添加主机的情况下还是又一点点浪费
IP数据报
IPv4数据报的首部格式
实现iP协议的基础
版本
- 半个字节(字段)4位,通信双方协议版本必须一致,一般记为4(IPv4)
首部长度
- 同占4位,表示该IP数据报的首部的长度,改字段的取值是以4字节为单位,最小值为5(十进制,即20个字节),最大为15(同理,为60字节)
可选字段
- 可选字段,1~40个子接,用来支持拍错,测量及安全等措施,但是很少用
填充字段
- 确保首部长度字段为4字节的整数倍
区分服务
- 用来获得更好的服务,实际上没咋使用过。
总长度
- 16个比特,顾名思义就是首部和数据载荷的长度
- 最大取值为十进制的65535,以字节为单位。
标识,标志,长偏移
- 作用是分片
- 标识:占16比特,属于同一个数据报的各分片数据包应该具有相同的标识,并且IP软件维持一计数器,每产生一个数据报,计数器的值加1,并且将此值赋给标识字段
- 标志:占3比特,DF位0表示可以切片,MF位0表示这是最后一个分片,保留位,必须为零
- 片偏移:占13比特,值出分片数据报的数据载荷部分偏移其在原数据报的位置有多少个单位。(片偏移以8个字节为单位)
- 分片示例(假设因特网最大数据载荷为1500)
- 分片的分片同理
生存时间,协议,首部检验和
- 生存时间TTL:路由器在转发该IP数据报时,将IP数据报首部中该字段的值减去IP数据报在本路由器上所耗费的时间(减1),若不为0就转发,否则就丢弃(当前以 跳数 为单位)
- 协议 占8比特,用来指明,IP数据报是啥协议的数据单元
- 常见的协议字段值
- 首部检验和:也被称为因特网检验和,检验首部传输过程中是否出现差错,每经过一个路由器都需要重新计算首部检验和,IPV6中不再计算首部检验和
发送与转发
主机发送
间接交付是指两个不同的子网(网关)下进行数据报的发送
需要进行路由器的转发,
路由器转发
指定的路由器就是常说的默认网关
路由表中:目的网络,地址掩码 :下一跳路由器
注意是目的网络,路由器根据所传入的IP数据报首部的目的地址
目的地址与地址掩码相与得到所要传递的目的网络(网段)
- 如果找不到就丢弃该IP数据报,并返回一个ICMP报文
最基本的原理
附加:
路由器不转发广播P数据报(可以理解为由软件实现),三层解析
VLAN(虚拟局域网技术)这玩意是在物理层隔离个广播域,只有两层解析地址,因此隔离广播域还得用VLAN
静态路由的配置
多个路由之间的数据报的传递,需要手动配置静态路由表
但是不能及时适应网络状态的变化(流量,拓扑)
默认路由
当包含众多网络时(比如接入互联网),总不能每个接口都给路由表配置一个
我们使用该默认路由0.0.0.0/0
默认接入该接口下的所有网络.
特定主机路由
考虑安全问题时,路由器中添加一条特定主机的IP(CIDR)也可以访问
当同时存在默认路由和特定主机路由,最长前缀匹配
静态路由环路
- 错误的配置:
路由容易引发路由环路错误
不过呢为防止IP数据报在路由环路中永久兜圈,在IP数据报首部都设有有生存时间的
TTL字段,该字段在进入路由器后TTL字段的值减1.弱TTL的值不等于0,责备路由器转发,否则丢弃
- 聚合不存在了不存在的网络:
聚合的概念:就是超网。
你指定的聚合网络块中,有一些是没有进行配置主机接入的网络,当有数据报转发到该不存在的网络时就会找不到,只能走默认路由,二默认路由的下一跳是原网络,就会出现路由环路的问题
所以我们为这些不存在的网络配置了一个黑洞路由
- 网络故障
网络故障导致的路由条目进行删除,一样转发只能走默认路由,如果下一跳是源网络,又会出现路由环路的情况
所以我们为这些删除的,不存在的网络配置了一个黑洞路由(下一条为null0)。
当网络故障恢复好后,路由器会自动检测添加该网络接口,并将之前的人工配置的黑洞路由配置自动失效
,当又出现故障,就恢复生效状态
动态路由的选择
比较复杂,开销大,但是适应性好,适用于大规模网络
特点:
分层次
自治系统的之间的路由选择
使用的协议为外部网关协议EGP(只是名称,不是具体协议)
等同于ERP外部路由协议
自治系统内部的路由选择
使用的协议为内部网关协议EGP(只是名称,不是具体协议)
等同于IRP内部路由协议
以下是常见的路由选择协议:
路由器的基本机构
分为两部分:
路由选择部分
- 路由选择处理机:路由表
分组转发部分
- 一组端口(可以输入可以输出,下图分出来是为了方便理解)
- 交换结构:分组表
- 输入输出的缓冲区
- 输出缓冲区暂存的是来不及处理发送的数据
- 输入缓冲区暂存的事来不及处理接受的数据
注意:
路由表和分组表事分开的东西,为了方便理解,默认将路由表
如图所示:
路由信息协议RIP
- 内部网关协议IGP中最先得到广泛使用的协议之一
- 要求每一个路由器都维护从它到其他每一个网络的距离记录,称为距离向量(Distance-Vector)
- 跳数(Hop Count)作为度量(Metirc)来衡量到达目的网络的距离
- 路由器到直连网络的距离定义为1
- 到非直联网络的距离定义为所经过的路由器数+1
- 最多15个路由器,所以距离等于16时相当于不可达
基本工作原理
- 好的路由就是距离短的路由
- 同时又多条距离相等的路由是进行,等价负载均衡
- 等价负载均衡:将通信数据等量平均的分布到多条等价的路由上
- 仅和相邻路由器周期性交换更新路由表
- 若干次交换网络与更新,路由都记录了各网络的最短距离和下一跳地址,这个过程称为收敛
更新规则:
路由表的交换,传递,改造,更新
RIP的缺陷
坏消息传的慢
出现故障时,就会有可能出现路由环路的问题,如图所示
坏消息 (故障的网络的信息)传得很慢
又被成为路由环路或无穷记数的问题:这是距离向量算法的一个固有问题
但是可以采取多种措施减小该问题出现的概率或者降低其带来的危害
- 限制最大距离为15
- 当路由表发生变化立即发送更新报文,而不是周期发送
- 水平分割:让路由器记录收到某特定路由信息的接口,而不让同意路由的信息再通过此接口反方向传送
注意:这些方法并不能消除问题,距离向量算法是这样的
缺少的内容
RIP的报文格式
定时时常等
IPv4 的RIP有两个版本
IPv6 的RIPng
开放式最短路径优先OSPF协议
克服RIP的缺点
- 基于链路状态
- 采用SPF算法,原理上不会产生路由环路的问题
- 不限制网络规模,收敛速度快
- 链路的状态是指和那些路由器相邻,以及相应链路的代价(cost)
- 代价用来表示链路时延距离带宽等等都行,由网络管理人员决定
- 思科路由器OSPF计算代价的方法:100Mbps/链路带宽
基本工作原理
- 发送问候(hello)分组,建立和维护邻居关系
- 该分组封装在IP数据报中,发往组播地址224.0.0.5
- 发送周期为10秒
- 40秒未收到来自邻居路由器的hello分组,则认为该邻居路由不可达
- 每个路由器都会产生链路状态通告LSA(Link State Advertisement).
- 直连网络的链路状态信息
- 邻居路由器的链路状态信息
- 每个路由器都有一个链路状态数据库LSDB,用来存储LSA
- 通过各个路由器泛洪发送封装自己的LSA的LSU分组,最终使个路由器的LSDB达到一致
- 基于最短SPF算法得出最短路径。具体SPF算法请移步这篇文章:
- OSPF有一下五种分组类型
- hello分组
- 问问能不能到达
- 数据库描述(Database Description)
- 发送自家的集合成的所有链路状态项目的摘要信息)
- 链路状态请求(Link State Request)
- 请求发送具体的详细信息
- 链路状态更新(Link State Update)
- 路由器使用这种分组,发送链路状态进行洪泛发送,对全网更新链路状态
- 链路状态确认(Link State Ackonwledgment)
- 确认更新链路状态的确认分组
- hello分组
基本工作过程如下图所示:
- 在多点接入网络中路由器邻居关系的建立
- 选举 指定路由器DR,备选的 指定路由器BDR
- 所有的非DR/BDR只与DR/BDR建立邻居关系
- 非DR/BDR之间通过DR/BDR才能交换数据
实现选举并不复杂,类似交换机的生成树协议STP,忘请回看上一章
为了进一步扩大网络规模,OSPF把一个自治系统再划分为诺干更小的范围 ,叫做区域Area
划分区域的好处,就是区域内交换的信息量少了,能应用于更大规模的网络
边界网关协议BGP
这不讲了两个内部主要的网关(路由)协议,就不得不讲讲EGP外部网关协议中的BGP边界网关协议了
内部网关协议IGP
- 只需要考虑自治系统内的网络,无需考虑外部的其他策略
外部网关协议EGP
- 因为不同的自治系统内,度量路由的代价cost可能不同,因此需要换个度量寻找最佳路由,但是没有统一的度量,找个最佳路由没有意义
- 而且,不同的自治系统可能代表着不同的国家(你懂的)必须考虑相关策略(注意策略并不是协议)
注意:这里我还是要提一嘴,IGP和EGP并不是具体协议,可以理解为类型
基本工作原理
基于以上考虑:
- BGP协议 设定一个路由作为自治系统内的 BGP发言人
- 发言人互相交换了网络可达性的信息后,各BGP发言人根据各自的相关策略选出一个达到各自治系统比较好的路由。也就是构造出一个树形结构(避免环路)
- 各AS自治系统交换其路径向量
BGP-4四种报文
- open
- 打开,可以理解为开门,建立关系,通信初始化
- update
- 通告路由信息,列出撤销或增加的多条路由
- keepalive
- 周期性证实邻站的连通性
- notificatin
- 用来发送检测到的差错信息
不同协议的报文的直接封装的协议分别如下图
网际控制报文协议ICMP
为了更有效地转发IP数据报和提高交付成功的机会,在网际层使用了ICMP(Internet Control Message Protocol)
主机或者路由器使用ICMP来发送差错报告报文和询问报文。
ICMP报文被封装在IP数据报中发送
五种差错报文类型
- 终点不可达
- 终点还可以细分为,端口,路由,网络,等等
- 源点抑制
- 出现拥塞是丢弃数据报,就想源点发送源点抑制报文,通知源点把发送速率放慢点,要坏掉了。
- 时间超过
- 当收到不是给自己的IP数据报,将TTL减1,结果不为0就转发,结果为0时,就像源点发个时间超过报文
- 当出现分片缺少时,把所有分片都丢失,并且发送给源点一个时间超过
- 参数问题
- 检测到误码,就想源码法参数问题数据报文
- 改变路由(重定向)
- 路由器把改变路由报文发送给主机,让主机知道下次应当将数据包发送给另外的路由器。
不该发送的情况
- 多播地址报文
- ICMP报文出差错,不再发ICMP
- 数据片发送一个就够了
- 特殊地址,127.0.0.0或者0.0.0.0
两种常用ICMP询问报文
- 回送请求和回答
- 向一个特定的目的主机发出询问,收到询问,目的主机必须回送一个回送回答报文
- 用来测试目的站是否可达
- 时间戳请求和回答
- 询问时间,1900年1月1日开始 到 当前时刻的多少秒,作为值填入一个32位的字段,作为回答报文
- 用来进行时钟的同步和测量时间
ICMP应用举例
分组网间探测(Packet InterNet Groper)
就是我们常用的ping指令,用来测试网络是否可达
应用层直接使用网际层的ICMP(没有通过运输层的TCP或UDP)
1
2直接拿百度做测试就好
ping www.baidu.com
效果如图:
跟踪路由(traceroute)
用来测试IP数据报从源主机到达目的主机要经过那些路由器
直接使用的网际层,一样没有用到应用层
1
2同样还是百度
traceroute www.baidu.com
效果如图
原理就是源主机连续的发送,每发送一次,ttl+1,直到到达发送的主机(此时到当前目的路由TTL的值为1),回送请求回答的报文。
虚拟专用网(VPN)与网络地址转换(NAT)
虚拟专用网(Virtual Private Network)
利用公用的因特网,作为一个专用网之间的通信载体,这样额专用网又成为虚拟专用网。
由于IPv4都分配完了挺紧缺的,一个机构能申请到的地址数远远小于拥有的主机数量,因此,虚拟专用网中的各个主机所分配的地址应该是本机构可自由分配的专用地址,而不是需要再重新申请的,在因特网中使用的公有地址
以上这段话可以这么理解:我呢家里啊只申请到了一个IP地址,要接我网络的主机超过了我能拥有的IP的数量,我想让我的其他主机也能接入网络,但是没有IP地址,得咋整呢:
这么时候诶,
我们查找到了几个能让我们自己使用的ip地址块,这些地址块被称为私有地址
也就是我们常说的 内网,我们将这些主机的IP设为这些内网地址。
但是私有地址们只能在内部通信,咋接入因特网呢,这些内网地址发出来的数据报因特网也不收啊?它只接受我们申请到的公网IP。
诶,所以你以为咱们为啥要买路由器?。。
这不就是将唯一申请到的IP地址分配给路由器么,通过路由器再接入互联网?(NAT)
这种内网传送到内网的操作,咱们称其为IP隧道技术
这类同一机构不同部门的内部网络所构成的虚拟专用网VPN又成为内联网VPN
在世界各地接入因特网,只需要运行该VPN软件,就可以访问VPN其他内网的资源,这种VPN称为远程接入VPN
网络地址转换(Network Address Translation)
1994年提出了网络地址转换NAT的方法。
通俗来说就是:私有地址主机到的IP地址转换为全球IP地址
NAT路由器可以实现每一个内网地址对应一个外网地址对应并进行数据转发
但是只能一个外网地址跟一个内网地址对应,那不是还是需要申请公网地址?这不白转换了?
那么我们带着运输层的端口一起进行转换。这样,就可以只使用一个全球IP地址绑定多个本地地址的主机进行通信。
NAPT(Network Address and Port Translation)
网络地址和端口号转换
但是注意,外网的服务器是无法主动发起对内网的通信的,
内网的好处:
- 隔绝外网随意对内网进行链接,安全防护
ARP协议
能将IP地址解析下一个路由或者设备的相应MAC地址并在数据链路中重新封装
ARP(Address 解析 协议)高速缓存表:
用来存储的东西
注意一下arp报文都是封装在MAC帧当中的
在数据链路层,向所有主机发送ARP请求报文
根据其中请求的ARP请求报文检验,是否是来请求自己的,如果不是,就丢掉
如果是,交给上层网络层ARP进程 解析 先记录请求报文的主机IP与MAC 地址于自己的ARP高速缓存表中:
然后向下 数据链路层 再向发送请求的主机,一个ARP响应报文,其中包含自己的MAC 与ip地址,
收到了ARP响应报文,网络层的ARP进程进行解析,然后记录到自身的ARP告诉缓存表
注意不能跨网络使用
注意了:
ARP还有其他报文,比如,免费报文(用来检测IP是否冲突)
ARP协议没有安全验证机制,有写人就会利用ARP进行攻击,ARP欺骗等问题
总结
这章学爽了