网络层负责主机到主机的逻辑通信,而端到端系统的逻辑通信交给了运输层。网络层对运输层只提供简单灵活的,无连接的,尽最大努力交付的数据报服务。也就是说网络层不提供可靠的数据交付服务保证。
网络层主要存在四个协议:IP,ARP,ICMP,IGMP
网际协议IP: 是TCP/IP体系中两个最主要的协议之一。是网络层为运输层提供的数据运输的基础。
地址解析协议ARP:将网络的层的IP地址转化为链路层的硬件地址。
网际控制报文协议ICMP:允许主机或路由器报告网络的状态,有效提高分组的到达率。
路由选择协议:解决分组如何从一台主机到另外一台主机的过程。RIP基于距离选择的AS内部路由选择协议,根据距离来选择分组下一跳路由器;OSPF基于链路状态选择的AS内部路由选择协议,基于链路的代价(距离,费用,耗时等等)来选择路由;BGP基于向量距离选择的AS之间的路由选择协议。
一、IP协议
IP地址的三种编址方法(历史阶段)
- 分类IP地址
- 子网划分
- 构成超网
分类地址
网络号标识当前主机(或路由器)所连接到的网络,一个网络号在整个互联网是唯一。主机号则代表当前主机在所连接的网络是是唯一的。
其中ABC类地址是最常用的单播地址。(其实目前大多数使用无分类IP地址进行路由选择)
从IP地址的前四位默认分配可以快速定位该IP地址的类别,例如128开头的B类地址,192开始C类地址
判断多台主机是否在同个网络的依据网络号相同,通过桥接,转发器连接的网络还是在同个网络中。
子网
说到底,就是分类地址的基础上,借用主机号的若干位数来划分网络,形成内部的网络。对外来说,分组还是到达网络号还在网络,再到子网,最后到主机。
从分组的目的地址和源地址是无法区分是否划分子网。需要借助子网掩码。
无分类编址(超网,CIDR)
从子网的三级编址又回到二级编制,只是不再分类罢了。
- 消除分类地址和子网划分;
- 网络前缀相同的连续IP地址组成“CIDR地址块”,可以计算出最大、最小IP地址;
- 同样存在掩码,但不存在子网。但分配到CIDR地址的单位可以自己划分子网,也就是单位内部的网络前缀大于分配到的CIDR地址前缀;
路由表中利用CIDR地址块来查找目的网络,即路由聚合(构成超网)。意味着路由表的记录条目变小,因为一个记录相比原有代替了一整块IP地址。
路由表每个项目由网络前缀和下一跳地址组成,匹配结果应该选择最长的网络前缀路由,即最长前缀网络匹配,即前缀越长,地址越少,目的地址越具体。二叉线索查找路由表,将IP地址32位从左到右,按位与树的度进行查找,左0右1,如果有匹配的路径,所以存在该前缀,再与对应的掩码按位与得出网络前缀N,如果N与目的地址网络前缀一致,说明找到下一跳地址。
IP数据包格式
-
版本:IP协议版本,通信双方IP协议版本必须一致,例如IPv4,IPv6
-
首部长度:占4位,最大代表十进制15,单位为32位字长,即4个字节,所有首部最长60个字节。首部固定部分20个字节,所以该字段最小值5。首部长度不是4字节整数倍,需要通过填充字段加入填充。
-
总长度:包括首部和数据部分, 16位,单位为字节,2^16-1字节。但不能超过链路层的MTU值,例如互联网MTU=1500字节,否则需要进行分片处理。分片后的总长度指的新的分组总长度。
-
标识:数据包分片后,具有相同的标识,用于重装会数据报。
-
标志: 3位,最低位标识MF=1表示还有分片;中间位DF=0表示允许分片。
-
片偏移:数据报在分片后,在原数据报的的偏移,片偏移以8个字节为单位,即每个分片分组是8字节数的整数倍。
-
生存时间:或跳数限制,在发送方设置,每经过路由器,则减1,小于零则丢弃该分组。
-
协议:协议字段支出该分组携带的数据属于何种协议,让网络层知道如何上交给运输层的何种协议。
-
首部检验和:只检验首部,不检验数据部分。每经过路由器,都需重新计算检验和。
路由器分组转发算法
- 从分组提取目的IP地址D,得出目的网络地址N;
- 若N是与路由器直接相连的网络地址,则直接交付目的主机,否则间接交付,下一步;
- 若路由表有的目的地址D,则将分组交给路由器所指明的下一跳路由器,否则下一步;
- 若路由表有到达网络N的路由,则将分组交给路由器所指明的下一跳路由器,否则下一步;
- 若路由表有默认路由,则将分组交给路由器所指明的默认路由,否则下一步;
- 报告分组出错。
二、地址解析协议ARP
从网络层使用的IP地址,解析出数据链路层的使用的硬件地址。在主机的ARP高速缓存总存放着一个从IP地址到硬件地址的映射表。
映射表数据填充:
1、查询主机的ARP进程在局域网广播ARP请求分组
2、其他主机的ARP进程收到该请求分组,如果收到的请求分组携带的查询IP地址一致,则将自身的硬件地址写入到ARP响应分组中,并发送给查询主机;同时会将查询主机的硬件地址插入到自己的映射表中。否则忽略该分组
3、查询主机收到响应分组,则将硬件地址插入到映射表中。
每个映射表每条记录都有一个生存时间,超过该时间未使用,则会被删除。
其实所有的分组都需要经过路由器进行转发的,不在同个局域网的寻址就交个路由器进行寻址。
三、ICMP网际控制报文协议
允许主机或路由器报告差错情况和提供有关异常情况的报告,更有效转发IP分组和提高交付成功机会。ICMP作为分组数据部分被传递。
差错报告报文
- 终点不可达:当路由器或主机不能交付分组时则向源点发送终点不可达报文。
- 时间超过:当路由器收到生存时间为零的分组需要向源点发送时间超过报文,并丢弃该分组。
- 参数问题:当路由器或者目的主机收到分组首部有字段值不正确,需要向源点发送参数问题报文,并丢弃该分组。
- 改变路由(重定向):路由器吧改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器。
差错报告报文的数据部分:分组的首部+分组数据部分前8个字节(运输层的目的端口和源端口,序号)
询问报文
-
回送请求和回答: 回送请求报文是主机或路由器向特定的目的主机发出的询问报文,收到报文的主机需要回送回答报文。用来测试目的站是否可达以及相关状态。
-
时间戳请求和回答报文: 请某台主机或路由器回答当前日期和时间。用于时钟同步和时间测量。
四、路由选择协议
计算路由器中路由表的各项目。
分层次的路由选择协议
互联网把路由选择协议划分两大类:
-
内部网关协议IGP:自治系统内部使用的路由选择协议,与其它自治系统无关,例如RIP,OSPF协议
-
外部网关协议EGP:若源主机和目的主机在不同的自治系统中,不同自治系统的边界就需要使用该协议将路由选择信息传递给对方。例如BGP-4协议。
内部网关协议RIP
RIP是一种分布式的基于距离向量的路由选择协议。RIP协议维护从自己到其他目的网络的距离记录,也称为跳数,每经过一个路由器距离加1,RIP允许一条路径最长15,超过即不可达,因此只适合在小型网络。那么RIP协议就是在记录中找到最短距离的路径。RIP协议和下文的OSPF协议都需要和其他路由器交互路由信息。
RIP协议特点:
- 仅和相邻路由器交换信息。
- 交换信息为当前路由器所知道的全部信息,即自己现在的路由表。
- 按固定的时间间隔交换路由器信息。
通过路由信息的交换,可以得出到达本自治系统中任何一个网络的最短距离和下一跳路由地址。这种路由交换信息页称为距离向量算法。
内部网关协议OSPF
开发最短路径优先OSPF是基于Dijkstra提出的最短路径算法PSF,使用分布式的链路状态协议。
- 使用洪泛法向本自治系统中所有路由器发送信息。
- 发送的信息就是与本路由器相邻的所有路由器的链路状态,链路状态指出相邻的路由器和该链路的度量,例如费用、距离、时延、带宽等等。
- 只有链路状态发生变化,路由器才使用洪泛法向所有路由器发送此信息。
通过频繁的交换链路状态信息,每个路由器都能建立起链路状态数据库,也是全网的拓扑图。相比RIP,器链路状态能更快的更新,以及知道自治系统的主机数,之间链路的代价。
采用层次结构的区域划分来限制一个较小范围的链路状态信息库,避免每次广播整个自治系统。
OSPF直接使用IP数据报传送,作为IP数据报的数据部分,此时IP数据报协议字段为89。分组使用24字节的固定长度。
-
版本:当前版本号2;
-
类型:五种类型分组的一种。
- 类型1:问候分组,用来发现和维持领站的可达性。每10秒就要交换1次,确认链路可达,若40秒未收到问候分组,则认为不可达。
- 类型2:数据库描述分组,向领站给出自己的链路状态数据库的全部链路状态项目的摘要信息。
- 类型3:链路状态请求分组,向对方请求发送某些链路状态项目的详细信息。
- 类型4:链路状态更新分组,用洪泛方对全网更新链路状态。OSPF协议的核心部分,也是最浮渣的。
- 类型5:链路状态确认分组,对链路更新分组的确认。
-
分组长度:包括首部在内的分组长度,字节为单位。
-
路由器标识符: 标志发送该分组的路由器的接口的IP地址。即源地址的IP地址了。
-
区域标识符:分组所属区域的标识符。
-
校验和:用来检测分组的差错。
-
鉴别类型: 只有两只0(不用)或1(口令)。
-
鉴别:鉴别类型0就填0,1则填8个字符的口令。
外部网关协议BGP
边界网关协议BGP主要应用在不同自治系统之间的中间路由选择协议,而RIP和OSPF则是应用在自治系统内部的。
BGP力求寻找一条能够到达目的网络的且比较好的路由,而并非要找一条最佳路由。采用了路径向量路由器选择协议。
自治系统的管理人员需要配置至少一个路由器作为该系统的”BGP发言人“。通过发言人与其它AS的发言人通过TCP连接交互BGP报文,建立起BGP会话后交换路由信息。
BGP分组有19个字节的首部,基于TCP数据报传输,作为TCP数据报的数据部分。
五、IP多播
采用IP多播,即一对多广播,可显著减轻网络中各种资源的消耗。D类IP一个地址代表一个多播组,且多播地址作用于目的地址,不能是源地址。多播路由器指的是支持转发和复制多播分组的路由器。
网际组管理协议IGMP
IGMP协议让连接在本地局域网上的多播路由器知道本局域网上是否有主机参加或退出某个多播组。
工作阶段:
- 当某台主机加入新的多播组时,向该多播组的多播地址发送广播,声明加入该广播组。本地多播路由器接收到ICMP报文后,还需要通过多播路由选择协议转发到其他网络上的多播路由器。
- 组成员关系是动态的。本地多播路由器要周期探寻本地局域网上的主机,确定是否还有成员参加多播。只要接收一个相应,认为该多播组是活跃的。
具体措施:
- 主机和多播路由器之间所有通信都是IP多播;尽力采用硬件多播,这样没有参加多播的主机就接收不到IGMP报文。
- 多播路由器在探询成员关系,只需要对所有的组发送一个请求信息的询问报文。而不需要对每一个组发送一个询问报文。且间隔125秒一次。
- 若一个网络多个多播路由器时,选择一个探询主机的成员关系。
- 询问报文中有一个数值N,指明最长响应时间。收到询问报文的主机,应该在0和N之间随机选择发送响应所需经过的时延,对最小时延的响应应该最先发送。
- 同个组内的每一台主机都要监听响应,只要本组其他主机先发送了响应,就不再发响应。
多播路由选择协议
在多播过程一个多播组中的成员是动态变化的。多播路由选择就是要找出以源主机为根节点的多播转发树。在多播转发树是哪个,每一个多播路由器向树的叶节点向方向转发收到的多播分组,但转发树上的路由器不会收到重复的多播分组。
常见的多播路由选择协议常用一下三种方法来转发多播数据报:
- 洪泛与剪除:使用较小多播组,所以成员接入的局域网也是相邻的。路由器转发分组采用洪泛的方法,采用反向路径广播RPB来判断该多播分组是否从原点径最短路径转发而来,如果是在,则转发给其他路由器,不是则丢弃。从而得出多播组的多播转发树。最后如果某个路由器发现下游树枝已经没有该多播组的成员,则把自身和下游的树枝剪除。
- 隧道技术:使用与多播组的位置比较分散的情况。即两个支持多播组的网络之间隔着不支持多播组的网络,将多播分组封装成普通的单播数据报,发送到目的网络。
- 基于核心的发现技术:适合多播组大小在较大范围内发送变化的情况。为多播组指定核心路由器,给出它IP单播地址。核心路由器通过洪泛得出多播转发树。其他路由器发往核心路由器的数据报都要被经过的路由器检查。在这个过程中,如果经过是参加了多播组的路由器接收到,路由器就会处理该数据报。如果是该数据报是该多播组的多播数据报,则会进行转发;如果是加入该多播组的请求数据报,则加入到自己的路由中,后续通过隧道技术向该数据报的源路由转发该多播组的数据报。
六、多协议标记交互MPLS
多协议意味着上层可以采用多种协议。利用面向连接技术,使每个分组携带一个叫做标记的小整数。当分组到达交换机时,交换机读取分组标记,并用标记值来检索分组转发表。比查找路由转发表快得多。
在MPLS域入口给分组打上固定长度的标记,在链路层通过硬件转发,在域出口去除标记。
工作过程
MPLS域中所有路由器都支持MPLS技术,故称为标记交换路由器LSR,同时具有标记转换和路由选择功能。
- LSR使用标记分配协议LDP交换报文,并找出和特定路径相对应的路径:标记交换路径LSP。根据这些标记和路径构造出转发表。
- 域入口结点给外部到来的IP数据报打上标记,并按照转发表转发给下个LSR。
- 一个标记仅在两台LSR之间才有意义,LSR对分组所做的就是:转发和更换新的标记。
- 域出口结点把数据报的标记去除,交付给其他主机或路由器。
转发等价类FEC
路由器按照同样方式对待的IP数据报的集合。即从同样的接口转发到同样的下一跳地址,并且具有同样服务类型和同样丢弃优先级等。
FEC例子:
- 目的IP地址与某一特定IP地址的前缀匹配的IP数据报
- 所有源地址与目的地址都相同的数据报
- 具有某种服务质量的IP数据报
在MPLS情况下,将属于同样的FEC的IP数据报都指定同样的标记,从而走其他路径到达目的网络,而不止是最短路径,可以使网络负载较为均衡,更好管理网络资源,这种做法也称为流量工程TE或通信量工程。
MPLS位置与首部格式
MPLS首部位于数据链路层和网络层之间,在IP数据报首部前,MAC帧首部之后插入4个字节的MPLS首部。
- 标记值:通常需要管理员人工管理和设置每条交换路径
- 试验: 保留用于试验
- 栈S: 有标记栈的时候使用
- 生存时间TTL: 防止分组兜圈子。