计算机网络——网络层(1)
网络层的功能
- 异构网络互联:[理解]将多个不同的计算机网络连起来
- 路由与转发:
- 拥塞控制
异构网络互联
定义:两个以上的计算机网络,通过一定的方法,用一种或多种通信处理设备(即中间设备)相互联结起来,以构成更大的网络系统。通常指用路由器进行网络互联和路由选择。
中间设备:按层次划分:
- 物理层:中继器、集线器;
- 数据链路层:网桥、交换机;
- 网络层:路由器;
- 网络层以上:网关。
- 注:物理层和数据链路层的中间设备,连起来的网络还是同一个网络,未达到互联的目的。
效果:用因为网络层都采用了标准化协议(即IP协议),虽然互联起来的各种物理网络的异构性本来是客观存在的,但是通过IP协议就可以使这些性能各异的网络在网络层上看起来好像是一个统一的网络,这种使用IP协议的虚拟互联网络可简称为IP网络。
好处是:当互联网上的主机进行通信时,就好像在一个网络上通信一样,而看不见互联的具体的网络异构细节(如具体的编址方案、路由选择协议等)
路由与转发
- 路由选择与转发是路由器的两个功能。路由器的介绍可先看:Note for Computer Network 6。路由器的详细介绍参考本站博客:(暂未提供,本章最后几节)。
- 路由选择是根据特定的路由选择协议构造出的路由表,同时更新维护路由表(经常或定期与相邻路由器交换路由信息)。
- 路由选择协议,大概就是:按照分布式算法,再根据从相邻路由器得到的有关整个网络拓扑的变化情况,动态的改变所选择的路由。
- 转发即分组转发,根据转发表将用户的IP报从合适的端口转发出去。关键操作是:转发表查询、转发以及相关的队列管理和任务调度等。
- 转发表是从路由表得来的,两者的倾向不同,路由表需要对网络拓扑变化的计算最优化,转发表需要使查找过程最优化。有关路由选择的原理时,往往对二者不作区分,统一使用路由表这一名词。
拥塞控制
- 拥塞:出现过量的分组而引起网络性能下降的现象。通俗理解:是A与B之间的网络发生堵塞导致传输过慢或者丢包,来不及传输。
- 现象:观察到网络吞吐量随网络负载的增大,吞吐量明显下降,说明可能出现了网络拥塞。
- 拥塞控制要解决的主要问题:如何获取网络中发生的拥塞信息,从而利用这些信息进行控制,以避免由于拥塞而出现分组的丢失以及严重拥塞产生的网络死锁的现象。
- 控制办法:防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不至于过载。拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络性能有关的所有因素。有两种办法:
- 开环控制。设计网络时事先将有关发生拥塞的因素考虑周到,力求不产生拥塞。是一种静态的预防方法,系统运行后不再需要修改。理解:无需对当前网络状况的反馈。
- 闭环控制。采用监控网络系统去监视,及时检测到哪里发生拥塞,然后将拥塞信息传到合适的地方,以便调整网络系统的运行。是基于反馈环路的概念,是一种动态的方法。
路由算法
按照能否随网络的通信量或拓扑自适应地进行调整变化来划分,分为静态路由算法和动态路由算法两类。
静态路由算法
- 由网络管理员手工配置路由信息系,当拓扑结构或链路发生变化时,需要网络管理员手工去修改路由表中相关的静态路由信息。
- 特点:
- 简便、可靠,在负荷稳定、拓扑变化不大的网络中运行效果很好,广泛应用在高度安全性的军事系统和较小的商业网络。
- 大型和复杂的网络不宜采用静态路由。(网管难以全面了解整个网络拓扑结构,如果拓扑结果出现变化,需要大范围调整,工作难度和复杂程度高)。
动态路由算法
- 路由表是通过相互联接的路由器彼此交换信息,然后按照一定的算法优化出来的。
- 特点:
- 能够有效改善网络性能,利用流量控制
- 算法复杂,会增加网络负荷,应对动态变化时,反应过快引起振荡,反应过慢影响网络路由的一致性;所以算法要仔细设计
- 常用动态路由算法有两类,距离-向量路由算法和链路状态路由算法:
距离-向量路由算法
- 所有结点都定期地将他们的整个路由选择表(包括目的地即下一结点和距离,距离在RIP算法中也叫跳数)传送给相邻结点
- 最常见的就是RIP算法,推荐阅读:RIP路由协议及工作原理,下文也有详细解释。
- 结点的路由表在以下场景发生更新:
- 被通告一条新的路由,本结点的路由选择表中不存在,需要加入进来;
- 发来的信息中有一条到达某目的地的路由,比当前使用的路由代价更小,更新进来。
- 算法实质:迭代计算一条路由中的站段数或延迟时间,得到到达一个目标的最短路径。
- 特点:更新报文的大小与通信子网的结点个数成正比,在通信子网上传送的路由选择信息的数量很容易变得非常大。
- “好消息传得快,坏消息传的慢”,慢收敛是导致发生路由回路问题的根本原因。
链路状态路由算法
- 要求结点具有完全的网络拓扑信息
- 推荐阅读:距离矢量与链路状态的区别,精华如下:
- 距离矢量算法中。① 会将所有路由信息跟直连邻居共享;② 使用Bellman-Ford算法,容易产生环路、无穷大的问题,需要配合防环机制,并且网络规模越大,收敛速度越慢;③ 更新的是“路由条目”;④ 协议发送周期性完整表更新;
- 链路状态算法中。① 将直连的链路状态跟域(domain)内/区域(area)内的所有路由器共享;② 使用强健的OSPF算法(如dijkstra),不易产生环路,收敛速度快;③ 更新的是“拓扑”;④ 非周期性部分表更新。
- 特点:链路状态只涉及相邻路由器的连通状态,与整个互联网的规模并无直接关系,可以用于大型或路由信息变化聚敛的互联网环境
层次路由
- 出于管理和扩展的目的,因特网可以被分割成许多不同的自治系统(Autonomous System,AS)。换句话说,因特网是由自治系统汇集而成的。
- 现在的自治系统被扩展的定义为:共享同一路由选择策略的一组路由器。
- IGP(Interior gateway protocols)——内部网关协议,定义为在一个自治系统内部使用的路由协议(包括动态路由协议和静态路由)。
- IGP的功能是完成数据包在AS内部的路由选择,或者说,是讲述数据包如何穿过本地AS的。
- RIPv1&v2,IGRP,EIGRP,OSPF,ISIS都是典型的IGP。使用最多的有:RIP和OSPF协议。
- EGP(Exterior gateway protocols)——外部网关协议,定义为在多个自治系统之间使用的路由协议。
- 它主要完成数据包在AS间的路由选择,或者说,讲述数据包为了到达目的IP,需要通过哪些AS。
- BGP4是最常用的一种EGP。
- 采用分层路由后,每个路由器知道如何将分组路由到自己所在区域的目标地址,但对于其他区域内结构毫不知情。
- 有关IGP和EGP的内容,参考下一篇博客内容
IPv4
IPv4的转发分组
- 推荐阅读:IPv4数据报格式
首部长度、总长度、片偏移,分别以4B、1B、8B为基本单位。
重要字段含义:
- 总长度:要结合数据链路层的MTU值来定(以太网的MTU为1500字节);
- 标识:占16位,用以分片和组装,各片的标识都一样;
- 标志:两个参数MF和DF。MF=1表示后面还有分片,MF=0表示最后一个分片;DF=0表示允许分片。
- 片偏移:13位字段,表示分片在整个数据报(原始位置)中的相对位置。
- 生存时间TTL:为了确保分组不会永远在网络中循环,经过一次转发分组,TTL减一,但TTL为0时,丢弃该分组。
- 协议,8位字段。
- 源地址和目的地址字段都是4字节。
以某例题举例:
IP分组的前40字节内容(十六进制)
45 00 00 30 01 9b 40 00 80 06 1d e8 c0 a8 00 08 d3 44 47 50
0b d9 13 88 84 6b 41 c5 00 00 00 00 70 02 43 80 5d b0 00 00
45 00
指版本4,首部长度5(5*4B=20B),服务0;00 30
指总长度48(48*1B=48B),01 9b
指标识019b,可以唯一指代某一数据报(分拆后的分组具有相同标识)40 00
,转化为二级制:01000000 00000000
,前3位是标志(指中间一位DF=1,最后一位MF=0),后13位是片偏移(指0)80 06
,指生存时间128,协议6(指TCP)1d e8
,指首部检验和,略去不管c0 a8 00 08
,指源地址192.168.0.8d3 44 47 50
,指目的地址211.68.71.80第二行是数据部分,不管
网络层转发分组的流程:
- 此路由器设为A。从数据报中提取目的主机的IP地址Z,得出目的网络地址为Net;
- ①若A与Net直连,可以直接交付给Z;
- ②若以上不满足,且A的路由表中有个路由B,B是目的主机Z指定的路由,交付给B;
- ③若以上不满足,且A的路由表中有一个路由C,C可以到达网络Net,交付给C;
- ④若以上不满足,且A的路由表有一个默认路由D,交付给D;
- ⑤若以上不满足,则报告转发分组出错。
IPv4地址与NAT
IPv4
IPv4地址分为A、B、C、D、E五类。
A类(1-126)0开头;
B类(128~191)10开头;
C类(192~223)110开头;
D类(224~239)1110开头;
E类(240~255)1111开头;
全32位
- 全0,表示本网络上的本主机;
- 全1,,表示整个TCP/IP网络的广播地址,但实际上因为路由器对广播域的隔离,此时等效于本网络的广播地址;
主机号:
- 全0的表示本网络本身,全1表示本网络的广播地址(如果目的地址是广播地址,会认为消息是发往本网段所有主机的消息)
- 127.0.0.0网络保留作为环路自检地址;
IP地址是分等级的地址结构;
- IP地址管理机构在分配IP地址时只分配网络号,,主机号由得到网络的单位自行分配;
- 路由器仅根据网络号来转发分组(不考虑目标主机号);
当一个主机同时连接到两个网络时,该主机必须同时具有两个相应的IP地址。因此一个路由器至少有两个IP地址(实际上,路由器每个端口至少一个IP地址)
用转发器或网桥连接起来的若干个局域网仍然是同一个网络。
网络地址转换
- 网络地址转换(NAT):通过将专用网络地址转换为公用地址,从而对外隐藏了内部管理的IP地址。
- 私有IP地址只用于LAN,不用于WAN。私有IP网段有:
- A:10.0.0.0~10.255.255.255
- B:172.16.0.0~172.31.255.255
- C:192.168.0.0~192.168.255.255
- 使用网关路由器,开启NAT功能,对照着NAT转换表,将本地地址转换成全球地址。只需一个全球地址,就可以让多台主机同时访问因特网。
- NAT看到了端口,所以工作在传输层。
子网划分、子网掩码、CIDR
子网划分
- 两级IP地址的空间利用率低;
- 采用划分子网的方式,使两段IP地址变成为三级IP地址。实现办法:从主机号借用若干个比特作为子网号:IP地址={<网络号>,<子网号>,<主机号>};
- 流程:传来的IP数据报,根据网络号,找到连接在本单位网络上路由器,然后此路由器再按照目的网络号和子网号找到目的子网 ,最后交付给目的主机。
无分类编址CIDR
- CIDR,Classless Inter-Domain Routing
- 使用斜线记法,将网络前缀都相同的连续IP地址组成CIDR地址块,一个地址块能够表示很多地址,这种地址的聚合称为路由聚合,或构成超网。
- CIDR的优点:网络前缀灵活
- 具体说明参考 :CIDR地址块及其子网划分(内含原始IP地址分类及其子网划分的介绍)
- 最长前缀匹配(最佳匹配)。路由表中的 每个项目由“网络前缀 ”和“下一跳地址”组成。在查找路由表时可能会得到不止一个匹配结果,应当从匹配结果中选择具有最长网络前缀的路由,因为网络前缀越长,其地址块就越小,因此路由就越具体。
- CIDR常用二叉线索的方式查找最长前缀匹配。
ARP协议、DHCP协议与ICMP协议
IP地址与硬件地址
- IP地址放在IP数据报的首部,MAC地址放在MAC帧的首部,所以数据链路层无法看到IP地址。
- 由于路由器的隔离,IP网络无法通过广播方式依靠MAC地址完成跨网络的寻址(可以理解为:在局域网的链路层,能够通过广播MAC地址的方式寻址),所以IP网络只能使用IP地址完成寻址。
- 在IP网络转发分组时,IP分组在每个网络都被路由器解封装和重新封装,使用的MAC地址也是不断改变的。
地址解析协议ARP
- ARP用来进行局域网内,从IP地址到MAC地址的映射。
- 每个主机都设有一个ARP高速缓存,存放ARP表(本局域网上各主机和路由器的IP地址到MAC地址的映射表),并使用ARP协议动态维护。
- ARP工作在网络层。是普通的单播。
- 工作原理:
- 主机A打算向本局域网的主机B发送IP数据报;
- 先查找ARP表中是否有B的IP地址,如果有,就能查出MAC地址,完成传输;
- 如果ARP表中没有,主机A发送MAC地址为FF-FF-FF-FF-FF-FF的帧广播ARP请求分组;
- 主机B收到该ARP请求后,会想主机A发送响应ARP,分组中包含B的IP与MAC地址映射关系 ;
- A收到该映射关系后,写入A的ARP表中,然后按照查到的MAC地址,发送MAC帧。
动态主机配置协议DHCP
- 用于给主机动态地分配IP地址,提供即插即用联网的机制,是应用层协议,基于UDP;
- 原理:使用客户/服务器方式。
- 需要IP的主机向局域网中的DHCP服务器(可能不止一个,挑最快回复的那个)广播发送发现报文,该主机称为DHCP客户;广播发送全部主机,但只有DHCP服务器才能回答;
- DHCP服务器现在数据库中查找该计算机的配置信息,若找到则返回找到的信息;若没有找到,则从服务器的IP地址池中取一个地址分配给原主机。回答的报文叫提供报文 ;
- 客户机如果接受该提供报文的参数,会通过广播消息到DHCP服务器 ,请求提供IP地址;
- DHCP服务器收到请求后,将IP地址分配给DHCP客户机
- tips:
- 被动态分配的IP地址是临时的,有一段“租用期”;
- 应用层协议有两种工作方式:客户/服务器方式和p2p方式,本例属于前者;
- 本协议基于UDP,因为不需要建立连接,而TCP协议需要先建立连接 ,但如果不知道对方IP地址,根本不可能建立套接字连接。
网际控制报文协议ICMP
- 为了提高IP数据报交付成功的机会,网络层使用了ICMP来允许主机或路由器报告差错和异常情况。
- ICMP是IP层协议。
- ICMP有两种类型,ICMP差错报告报文和ICMP询问报文:
- ICMP差错报告报文,用在目标主机或沿途上的路由器向源主机发送差错 报告的情况,有五种类型:
- 终点不可达:不能交付时
- 源点抑制:发生网络拥塞时
- 时间超过:TTL减为零,或终点发现超时
- 参数问题:字段有误时
- 改变路由:重定向时
- ICMP询问报文,有四种类型
- 回送请求和回答报文(例PING)
- 时间戳请求和回答报文
- 掩码地址请求和回答报文
- 路由器询问和通告报文
- ICMP差错报告报文,用在目标主机或沿途上的路由器向源主机发送差错 报告的情况,有五种类型:
- ICMP最常见两个应用:PING和Traceroute/tracert(跟踪分组经过的路由)
- PING工作在应用层,直接使用网络层的ICMP协议;Traceroute/tracert工作在网络层。