书本上是这样子定义网络层的:网络层向上只提供简单灵活的、无连接的、尽最大努力交付的 数据报服务,但不提供服务质量的承诺,即所传递的分组可能出错、丢失、重复和失序。
网络层主要任务是:
该层控制数据链路层与传输层之间的信息转发,建立、维持和终止网络的连接。具体地说,数据链路层的数据在这一层被转换为数据包,然后通过路径选择、分段组合、顺序、进/出路由等控制,将信息从一个网络设备传送到另一个网络设备。
一般地,数据链路层是解决同一网络内节点之间的通信,而网络层主要解决不同子网间的通信。例如在广域网之间通信时,必然会遇到路由(即两节点间可能有多条路径)选择问题。
在实现网络层功能时,需要解决的主要问题如下:
我们先来了解一下网络层向上提供了什么信息交换服务,网络层向上提供了两种服务:
虚电路
虚电路是分组交换的两种传输方式中的一种,其提供 面向连接 的通信服务。在两个节点或应用进程之间建立起一个逻辑上的连接或虚电路后,就可以在两个节点之间依次发送每一个分组,接收端收到分组的顺序必然与发送端的发送顺序一致,因此接收端无须负责在接收分组后重新进行排序。
虚电路协议向高层协议隐藏了将数据分割成段,包或帧的过程。虚电路是建立一条逻辑连接,发送方与接收方不需要预先建立连接。
数据报服务
当端系统要发送数据时,网络层给该数据附加上地址、序号等信息,然后作为数据报发送给网络节点(路由器),目的端系统收到数据报可能是不按照顺序到达,也有可能出现数据报丢失。网络层于此只需尽最大努力持续交付即可。数据报服务与OSI的无连接网络服务类似。
现在基本上都是使用数据报服务。
为了解决寻址问题,网络层有使用了 网际协议IP 来给每台设备标识一个唯一的软地址,这个根据协议生成的软地址我们也叫 IP地址,与网际协议IP 配套使用的还有三个协议:
地址解析协议 ARP
用于生成IP地址对应的MAC地址
网际控制协议 ICMP
允许主机和路由器报告差错情况和提供有关异常情况的报告
网际组管理协议 IGMP
是用来在接收者主机和与其所在网段直接相邻的组播路由器之间建立、维护组播组成员关系的协议。
我们可以利用这几个协议来构成虚拟互联网,我们来了解一下 虚拟互连网络 的概念
虚拟网络把复杂的Internet看成一个网络,化简问题。虚拟互联网络就是逻辑互联网络,意思是互联起来的各种物理网络的异构性本来就是客观存在的, 但是我们利用IP协议就可以使这些性能各异的网络从用户看起来好像是一个统一的网络,而不用考虑具体的网络异构细节。这些利用IP协议的虚拟互联网络可简称为IP网。他们互联的中间设备就是 路由器。
下面我们来介绍一下IP地址, IP地址 就是用来唯一标识全球连接在互联网上的主机的 接口 的标识符。IP地址由网络号和主机号组成,是一种分等级的地址结构,分等级的好处有:
IP地址是标志一台主机/路由器和一条联络的接口。当一台主机同时连在两个网络上时,该主机就必须同时具有两个相应的IP地址,其网络号必须是不同的。
在IP地址中,所有分配到网络号的网络应该是平等的,即互联网同等地对待每一个IP地址。IP地址是二级结构。
主类IP地址可以分为A,B,C类,但这种固定的分类方式导致了IP地址的浪费,例如:一个需要1万个IP地址的机构,若使用C类地址显然不能满足需要(使用C类地址的网络最多容纳256个主机),但使用B类地址则又造成了5.5万个IP地址的浪费!(使用C类地址的网络最多容纳6万5千个主机) IP地址的利用率将低于20%。
这时候,我们意识到一个问题: 我们需要细分出比A/B/C类更细粒度的网络, 而完成这项工作的,就是 子网掩码。我们叫这个比A/B/C类更细粒度的网络叫做 子网。
划分子网纯属一个单位内部的事情,该单位对外表现为一个网络,除了本单位以外的网络,无法知道该单位有多少子网。
子网掩码的作用是屏蔽IP地址的一部分,从而更加灵活地指定网络地址的长度,实现网络地址和主机地址的进一步细分,用于划分子网, 具体:
子网划分后,IP地址变为三级结构。注意,子网划分后只是将IP地址主机号这一部分再划分,而不改变IP地址原本的网络号。凡是从其他网络发送给本单元某台主机的IP报文,仍然是根据IP地址找到连接在本单元的路由器上。路由器接收到了IP数据报后,再按照目的网络号和子网号找到目的网络,把IP数据报交付给目的主机。
如下图,(a)的IP地址是145.13.3.10,转化为二进制就是1001 0001 0000 1101 0000 0011 0000 1010,按照上面的分类,对应的就是B类IP地址,得出其的网络号就是 145.13,根据该网络号找到对应的路由器。
路由器根据子网掩码算出子网号,根据子网号进行转发。若子网掩码是 255.255.0.0,那么求出的子网号还是145.13;如果子网掩码是255.255.255,求出的子网号是 145.13.3,能十分容易地求出子网号。
可以用子网掩码重新划分IP地址,一定程度上减少了IP地址的浪费。划分子网一定程度上缓解了网络地址不足的困难,但是没办法解决该问题,科学家们又想出一种方法解决地址不足的问题,那就是 构造超网 CIDR。
CIDR最主要的特点有两个
CIDR消除了传统的A类、B类和C类地址以及划分子网的概念,因而能更加有效地分配IPv4的地址空间,并且在新的IPv6使用之前容许互联网的规模继续增长。
CIDR把32位的IP地址划分为前后两个部分。前面部分是 网络前缀,用来指明网络,后面部分则用来指明主机。因此CIDR使IP地址从三级编址(使用子网掩码)又回到了两级编址,但这已是无分类的两级编址。其记法是:IP地址 ::= {<网络前缀>,<主机号>}
CIDR还使用 斜线记法,或称为CIDR记法,即在IP地址后面加上斜线“/”,然后写上网络前缀所占的位数。
CIDR把网络前缀都相同的连续的IP地址组成一个 CIDR地址块。我们只要知道CIDR地址块中的任何一个地址,就可以知道这个地址块的起始地址(即最小地址)和最大地址,以及地址块中的地址数。
为了更方便地进行路由选择,CIDR使用32位的 地址掩码,地址掩码由一串1和一串0组成,而1的个数就是网络前缀的长度。虽然CIDR不使用子网了,但由于目前仍有一些网络还使用子网划分和子网掩码,因此CIDR使用的地址掩码也可继续称为子网掩码。例如:/20地址块的地址掩码是:11111111 11111111 11110000 00000000 (20个连续的1)。斜线记法中,斜线后面的数字就是地址掩码中1的个数。
由于一个CIDR地址块中有很多地址,所以在路由表中就利用CIDR地址块来查找目的网络。这种地址的聚合常称为 路由聚合 ,它使得路由表中的一个项目可以表示原来传统分类地址的很多个(例如上千个)路由。路由聚合也称为构成超网。
IP地址是一种逻辑地址,转发器以及网桥无法识别,所以网络层将来自运输层的数据报传递给数据链路层的同时,要将源地址和目的地地址的MAC地址也附上,封装成MAC帧传递给数据链路层。
注意:在网络层以及以上网络只能看到IP数据报,在局域网的链路层,只能看到MAC帧
网络层如何知道IP地址对应的MAC地址呢?ARP协议就是解决这个问题的,ARP协议的工作原理如下:
请注意,上述我们描述的过程都是在同一个局域网内进行的,ARP协议是解决 同一个局域网 上的主机或路由器的IP地址和MAC地址的映射问题。ARP协议无法解析不在同一局域网的主机的MAC地址,事实上,我们也不需要解析。主机A想向不在同一个局域网内的主机B发送数据,主机A只需要利用ARP协议解析出连接本局域网的路由器,向其发送数据报,路由器根据转发表找出目的路由的地址,进行转发。目的路由接收到数据后,利用ARP协议生成MAC地址,将数据报传输给目的主机。
TCP/IP协议定义了一个在因特网上传输的包,称为 IP数据包,而 IP数据报(IP Datagram) 是个比较抽象的内容,是对数据包的结构进行分析。 由首部和数据两部分组成,其格式如图所示:
在这里,我们先屏蔽掉下层复杂的细节,只在网络层上讨论问题。
在互联网上转发分组,是从一个路由器转发到下一个路由器。路由器中存在一张表,叫做路由表,路由表存储着指向特定网络地址的路径,可以由管理员设置,也可以自己动态生成。
在路由表中,对于每一条路由最主要的是目的网络地址和下一跳地址这两条信息。
路由器分组转发算法
在使用 CIDR 时,由于采用了网络前缀这种记法,所以路由表中的内容也相应地改变,由 “网络前缀” 和 “下一跳地址” 构成。在查找路由表时,可能会匹配到不止一个结果,这时候我们要选择 最长网络前缀 的路由。
IP协议是一种面向无连接的数据报协议,它是一种不可靠的协议,它不提供任何差错检验。因此网际报文控制协议(Internet Control Message Protocol)ICMP出现了,ICMP协议用于IP主机、路由器之间 传递控制消息,这里的控制消息可以包括很多种:数据报错误信息、网络状况信息、主机状况信息等,虽然这些控制消息虽然并不传输用户数据,但对于用户数据报的有效递交起着重要作用。
从TCP/IP的分层结构看ICMP属于网络层,它配合着IP数据报的提交,提高IP数据报递交的可靠性。ICMP是封装在IP数据报中进行发送的,从这点看来,ICMP协议又有点像一个传输层协议,其实不然,因为ICMP报文的目的不是目的主机上的某个应用程序,它不为应用程序提供传输服务,ICMP报文的目的是目的主机上的网络层处理软件。
简单的来说,ICMP协议就像奔波于网络中的一名医生,它能及时检测并汇报网络中可能存在的问题,为解决网络错误或拥塞提供了最有效的手段。
常见的ICMP报文
ICMP报文作为IP数据报的数据字段发送给源点,下图是ICMP差错报文的内容:
现在的互联网采用分层次的路由选择协议,因为
在目前的互联网中,一个大的ISP就是一个自治系统。互联网将路由选择协议划分为两大类:
下面逐一讲解这三个协议
RIP是一种分布式的基于距离向量的路由选择协议,其最大的优点就是简单,其的缺点是好消息传的快,坏消息传的慢。RIP 还限制了网络的规模,它能使用的最大距离为 15(16 表示不可达)
有以下的特点:
下图是书本说介绍的距离向量算法:
可以结合下面的题目来理解该算法。
题目:假定网络中路由器B的路由表有以下项目:
目的网络 | 距离 | 下一条路由 |
---|---|---|
N1 | 7 | A |
N2 | 2 | C |
N6 | 8 | F |
N8 | 4 | E |
N9 | 4 | F |
现在B收到C发过来的路由信息
目的网络 | 距离 |
---|---|
N2 | 4 |
N3 | 8 |
N6 | 4 |
N8 | 3 |
N9 | 5 |
求出路由器B更新后的路由表:
目的网络 | 距离 | 下一条路由 | 解释 |
---|---|---|---|
N1 | 7 | A | C中没有N1的信息,不需要更新 |
N2 | 5 | C | 下一跳相同,更新且距离+1 |
N3 | 9 | C | B中没有N3的信息,添加用户 |
N6 | 5 | C | C中到N6的距离为4,小于B到N6的距离8,需更新 |
N8 | 4 | E | B、C到N8的距离相同,不更新 |
N9 | 4 | F | B到N9的距离为4,小于C到N9的距离5,不更新 |
总结起来就是有一个表中没有的直接写,下一跳相同的更新,下一跳不相同选距离(C更新后的表)短的
下面是RIP报文的格式:
RIP协议使用运输层的用户数据报UDP进行传送
OSPF最主要的特征就是使用分布式的链路状态协议,其主要特点:
OSPF协议使用IP数据报进行传送,下面是OSPF分组的格式:
OSPF具有五种分组类型,分别是:
OSPF具体流程:
BGP是不同自治系统的路由器之间交换路由信息的协议,它采用路径向量路由选择协议,其主要特点: