前言
上一篇我们总结了关于数据链路层的相关知识,如果你还没有看可以先去看看数据链路层相关知识,这样有助于我们后面的继续学习。
传送门:【计算机网络】数据链路层(超多图详析)
接下来我们正式开始学习网络层相关知识点。
网络层概述
网络层的主要任务是实现网络互连,进而实现数据包在各网络之间的传输。
网络层的主要任务是实现网络互连,进而实现数据报在各网络之间的传输。
将多个网络连接起来的设备称为路由器。
网络层提供的服务
网络层提供了两种服务分别是:面向连接的虚电路服务和无连接的数据报服务。
面向连接的虚电路服务
这种服务的特点:
(1)可靠通信由网络来保证;
(2)必须建立网络层的连接 ——虚电路;
(3)通信双方沿着已建立的虚电路发送分组;
(4)目的主机的地址仅在连接建立阶段使用, 之后每个分组的首部只需携带一条虚电路的编号(构成虚电路的每 一段链路都有一个虚电路编号);
(5)这种通信方式如果再使用可靠传输的网络协议,就可使所发送的分组最终正确到达接收方(无差错按序到达、不丢失、不重复);
(6)通信结束后, 需要释放之前所建立的虚电路;
无连接的数据报服务
这种服务的特点:
(1)可靠通信由用户主机来保证;
(2)不需要建立网络层连接;
(3)每个分组可走不同的路径;
(4)每个分组的首部必须携带目的主机的完整地址;
(5)采用这种方式通信的分组可能误码,丢失,重复和失序;
(6)由于网络本身不提供端到端的可靠传输服务,网络中的路由器可以做的相对简单,价格低廉;
(7)将复杂的网络处理功能置于因特网的边缘(用户主机和其内部的运输层),而将相对简单的分组交付功能置于因特网核心;
对这两种服务进行比较:
IPv4地址概述
IPv4地址就是给因特网上的每一台主机或路由器的每一个接口分配一个在全世界范围内是唯一的32比特的标识符。
对于IPV4地址的编制方法经历了三个历史阶段:
接下来我们会对IPv4的这三个历史阶段的编制方式进行讲解。
要知道的是32位比特的IPV4地址不方便阅读,记忆,所以采用点分十进制方法表示,如下:
分类编制的IPv4地址
分类编址的IPV4地址分为A、B、C、D、E五类。
分类方式如下:
要注意的是:
(1)只有A类、B类和C类地址可分配给网络中的主机或路由器的各接口;
(2)主机号为“全0”的地址是网络地址,不能分配给主机或路由器的各接口;
(3)主机号为“全1”的地址是广播地址,不能分配给主机或路由器的各接口;
A类地址
第一个字节的第一位是0表示的是A类地址,如下:
可见A类地址由8位网络号与24位主机号组成,其中:
最小网络号0(0000 0000),保留不指派;
第一个可指派的网络号为1(0000 0001),IPV4地址为1.0.0.0;
最大网络号127(0111 1111),作为本地软件环回测试地址,不指派;
最小的本地环回测试地址为127.0.0.1;
最大的本地环回测试地址为127.255.255.254;
最后一个可指派的网络号为126,网络地址为126.0.0.0;
A类地址可指派的网络数量为2的(8-1)次方-2=126(减2的原因是除去网络号0和最大网络号127);
每个网络中可分配的IP地址数量为2的24次方-2=16777214个。(减2的原因是除去主机号为全0的网络地址和主机号为全1的广播地址);
B类地址
第一个字节的前两位是10的表示B类地址,如下:
可见B类地址由16位网络号与16位主机号组成,其中:
最小网络号也是第一个可指派的网络号128.0(1000 0000 0000 0000),网络地址为128.0.0.0;
最大网络号也是最后一个可指派的网络号191.255(1011 1111 1111 1111),网络地址为191.255.0.0;
可指派的网络数量为:2的(16-2)次方=16384(减去2表示B类地址的10);
每个网络中可分配的IP地址数量为216-2=65534(减去全0网络地址和全1广播地址);
C类地址
第一个字节的前三位是110的表示C类地址,如下:
可见C类地址由24位网络号与8位主机号组成,其中:
最小网络号也是第一个可指派的网络号192.0.0(1100 0000 0000 0000 0000 0000),网络地址为192.0.0.0;
最大网络号也是最后一个可指派的网络号223.255.255(1101 1111 1111 1111 1111 1111),网络地址为223.255.255.0;
可指派的网络数量为2的(24-3)次方=2097152(减去开头表示C类地址的110);
每个网络中可分配的IP地址数量为2的8次方-2=254(减去全0网络地址和全1广播地址);
一般不使用的特殊IP地址如下:
划分子网的IPv4地址
为什么要划分子网呢?我们先来看一个例子:
一家单位有300台主机,申请一个C类地址数量不够分配(254个)。因此只能申请一个B类地址。
但是申请一个B类地址,给所有的主机和路由接口都分配一个IP地址后,还有大量IP地址剩余。
这些剩余的IP地址只能由该单位同一网络使用,其他网络不能使用。
随着单位发展,该单位新增了一批计算机,并且需要将原来的网络划分为3个独立的网络。
如果为另外两个网络(称为子网2和子网3)再申请新的网络,费时又会花费更大的费用。
此时就需要用到划分子网来给子网2和子网3分配IP地址。
那么怎么样来划分子网呢?
一般是从主机号借用几个比特作为子网号,相同的子网号说明他们在同一个子网内。
未借用主机号时:
主机号被借用几个比特作为子网号时:
子网掩码:子网掩码有32个比特位,它可以表明分类IP地址的主机号部分被借用了几个比特作为子网号。
子网掩码使用连续的比特1来对应网络号和子网号;
子网掩码使用连续的比特0来对应主机号;
这样就构成了这个划分子网的IP地址的32比特的子网掩码;
将划分子网的IPv4地址与其相应的子网掩码进行逻辑与运算就可得到IPv4地址所在子网的网络地址;
【举例】
默认子网掩码:默认子网掩码是指在未划分子网的情况下使用的子网掩码。
无分类编制的IPv4地址
为什么要采用无分类编址(CIDR)的IPV4地址呢?
划分子网在一定程度上缓解了因特网在发展中遇到的困难,但是数量巨大的C类网因为其地址空间太小并没有得到充分使用,而因特网的IP地址仍在加速消耗,整个IPv4地址空间面临全部耗尽的威胁。
怎么样进行无分类编址的表示呢?
无分类编制使用“斜线记法”,或称CIDR记法。即在IPv4地址后面加上斜线“/”,在斜线后面写上网络前缀所占的比特数量。
CIDR实际上是将网络前缀都相同的连续的IP地址组成“CIDR地址块”。
我们只要知道CIDR地址块中的任何一个地址,就可以知道该地址块的全部细节,如:
地址块的最小地址
地址块的最大地址地址块中的地址数量
地址块聚合某类网络(A类、B类或C类)的数量
聚合路由
【举例】
路由器R1需要周期性的将自己所知道的路由信息告诉R2,如果将5台主机1的IP地址都告诉给R2,那么将对R2的存储空间有较大的的要求,这就需要提取这5台主机的公共信息,只告诉R2一条信息即可。
我们采用聚合路由的方式:
找这5个目的网络的共同前缀
得到聚合地址块:
聚合后的地址库(也称为超网)
网络前缀越长,地址块越小,路由越具体;
若路由器查表转发分组时发现有多条路由可选,则选择网络前缀最长的那条,这称为最长前缀匹配,因为这样的路由更具体。
IPv4的地址应用规划
给定一个IPV4地址块,如何划分为更小的IPV4地址块,并将这些地址块分配给互联网中不同的网络。进而可以给各网络中的主机和路由器接口分配IPV4地址。
一般有两种方式:定长的子网掩码(FLSM)、变长的子网掩码(VLSM)。
定长的子网掩码
定长的子网掩码:
使用同一个子网掩码来划分子网;
每个子网所分配的IP地址数量相同,造成IP地址的浪费;
【举例】
假设申请到的C类网络为218.75.230.0,请使用定长的子网掩码给下图所示的小型互联网中的各设备分配IP地址。
首先我们要把这个C类网划分成为5个,而且每个子网上可分配的IP地址数量不得少于各自的需求。
根据需求计算出子网掩码
划分子网
从中任意挑选5个子网地址分配给N1-N5即可实现需求。
子网掩码均是255.255.255.224
缺点显而易见:网络N5只需要两个IP地址即可,但我们为其分配了32个网络地址,造成了IP地址的浪费。
变长的子网掩码
变长的子网掩码:
使用不同的子网掩码来划分子网;
每个子网所分配的IP地址数量可以不同,尽可能减少对IP地址的浪费;
【举例】
假设申请到的地址块为218.75.230.0/24,请使用变长的子网掩码给下图所示的小型互联网中的各设备分配IP地址。
从地址块218.75.230.0/24中取出5个地址块(1个“/27”地址块,3个“/28”地址块,1个“/30"地址块),按需分配5个网络。
根据需求分配网络地址(一般从地址数量大的开始分配)
完成分配,剩余的地址可以留作以后分配。
IP数据报的发送及转发过程
IP数据报的发送和转发过程包含以下两部分:
主机发送IP数据报;
路由器转发lP数据报;
【举例】
这是两个网络,由路由器连接。
同一个网络间的主机可以·直接通信,属于直接交付。如:A–>C
不同网络间的主机之间的通信,需要路由器进行中转,属于间接交互。如:A–>D
源主机(发送方)如何知道目的主机(接收方)是否和自己在同一网络之间?
假设主机C要给主机F发送IP数据报
主机C将自己的IP地址和子网掩码相与得到主机C所在的网络地址
主机C将主机F的IP地址和自己的子网掩码相与
该地址与主机C的网络地址不同,因此目的主机与源主机不在同一网络,双方的通信属于间接交互。
主机C需要将IP数据报传输给路由器,由路由器将IP数据报转发给主机F
主机发送IP数据报
首先判断目的主机是否与自己在同一个网络;
若在同一个网络, 则属于直接交付;
若不在同一个网络, 则属于间接交付, 传输给主机所在网络的默认网关;
路由器转发IP数据报
检查IP数据报首部是否出错
若出错, 则直接丢弃该IP数据报并通告源主机; 若没有出错, 则进行转发;
根据IP数据报的目的地址在路由表中查找匹配的条目
若找到匹配的条目, 则转发给条目中指示的下一跳; 若找不到, 则丢弃该IP数据报通告源主机;
路由协议
路由选择协议主要分为两种:静态路由选择和动态路由协议。
因特网所采用的路由选择协议的主要特点
自适应(动态路由选择,能较好地适应网络状态的变化)
分布式(路由器之间交换路由信息)
分层次(将整个因特网划分为许多较小的自治系统AS)。
常见的路由选择协议
IPv4数据报的首部格式
IPv4数据报一般由固定部分与可变部分组成。具体如下:
固定部分:每个IP数据报首部都必须包含的部分。
版本
占4比特,表示IP协议的版本。
通信双方使用的IP协议的版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)。
首部长度
占4比特,表示IP数据报首部的长度。该字段的取值以4字节为单位。最小十进制取值为5,表示lP数据报首部只有20字节固定部分;
最大十进制取值为15,表示IP数据报首部包含20字节固定部分和最大40字节可变部分。
区分服务
占8比特,用来获得更好的服务。
该字段在旧标准中叫作服务类型,但实际上一直没有被使用过。
1998年,因特网工程任务组IETF把这个字段改名为- 区分服务。利用该字段的不同数值可提供不同等级的服务质量。
只有在使用区分服务时,该字段才起作用。一般情况下都不使用该字段。
总长度
占16比特,表示IP数据报的总长度(首部+数据载荷)。
最大取值为十进制的65535(很少传输这么长的数据报),以字节为单位。
标识
占16比特,属于同一个数据报的各分片数据报应该具有相同的标识。
IP软件维持一个计数器,每产生一个数据报,计数器值加1,并将此值赋给标识字段。
标志
占3比特,各比特含义如下:
DF位:1表示不允许分片,0表示允许分片
MF位:1表示后面还有分片,0表示这是最后一个分片
保留位:必须为0
片偏移
占13比特,指出分片数据报的数据载荷部分偏移其在原数据报的位置有多少个单位。
片偏移以8个字节为单位
片偏移量必须为整数
【举例】对IPv4数据报进行分片
以以太网传输该IP数据报,最大传输单元为1500字节,无法封装3820字节长的IP数据报,需要将其拆分。
片偏移 /8 是因为片偏移以8个字节为单位
生存时间TTL
占8比特,最初以秒为单位,最大生存周期为255秒,路由器转发IP数据报时,将IP数据报首部中的该字段的值减去IP数据报在本路由器上所耗费的时间,若不为0就转发,否则就丢弃。
现在以“跳数”为单位,路由器转发IP数据报时,将IP数据报首部中的该字段的值减1,若不为0就转发,否则就丢弃。
生存时间TTL字段的作用——防止IP数据报在网络中永久兜圈(人工错误配置了路由表)
协议
占8比特,指明IPv4数据报的数据部分是何种协议数据单元。
常用的一些协议和相应的协议字段值如下。
首部检验和
占16比特,用来检测首部在传输过程中是否出现差错。比CRC检验码简单,称为因特网检验和。
IP数据报每经过一个路由器,路由器都要重新计算首部检验和,因为某些字段(生存时间、标志.片偏移等)的取值可能发生变化。
由于IP层本身并不提供可靠传输的服务,并且计算首部校验和是一项耗时的操作,因此在IPv6中,路由器不再计算首部校验和,从而更快转发IP数据报。
源IP地址和目的IP地址
各占32比特,用来填写发送该IP数据报的源主机的IP地址和接收该IP数据报的目的主机的IP地址。
可变长部分:有些IP数据报,还包含一些可选的字段来增加IP数据报的功能。
可选字段
长度从1个字节到40个字节不等。用来支持排错、测量及安全等措施。
可选字段增加了IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。这就增加了每一个路由器处理IP数据报的开销。实际上可选字段很少被使用。
填充字段
确保首部长度(固定部分和可变部分)为4字节的整数倍。不足的地方使用全0进行填充。
标识、标志、片偏移这三个字段共同用于IP数据报分片
网络层封装的IP数据报将在数据链路层分装成帧。
每一种数据链路层协议都规定了帧的数据载荷的最大长度,称为最大传输单元MTU。
以太网的数据链路层规定MTU的值为1500字节。
如果某个IP数据报的总长度超过MTUI时,将无法封装成帧,需要将源IP数据报分片为更小的数据报,再将各分片数据报封装成帧。
VPN
虚拟专用网VPN(Virtual Private Network)
利用公用的因特网作为本机构各专用网之间的通信载体,这样的专用网又称为虚拟专用网。
由于IPv4地址的紧缺,一个机构能够申请到的IPv4地址数量往往远小于本机构所拥有的主机数量。
虚拟专用网中的各主机所分配的地址应该是本机构可自由分配的专用地址(私有地址),而不是需要申请的、在因特网上使用的公有地址。
也被称之为IP隧道技术。
私有地址
私有地址只能用于内部通信,而不能用于和因特网上的主机通信。
私有地址只能用于本地地址而不能用作全球地址。
在因特网上的路由器对所有目的地址是私有地址的IP数据报一律不进行转发。
【举例】
这两个部门要想进行通信:
各自至少需要一个路由器具有合法的全球IP地址。
它们各自的专用网才能利用公用的因特网进行通信。
10.1.0.3需要和10.2.0.3通信时
主机10.1.0.3会将待发送数据封装成内部IP数据报,发送给路由器R1。
R1收到数据后,查看目的地址,发现目的网络需要通过因特网才能到达,就将该IP数据报进行加密,确保内部IP数据报的安全,然后为其添加首部信息,封装成可以在因特网上传输的外部数据报。
R2收到R1发送的IP数据报,去掉首部,恢复到原来的内部IP数据报。取出源地址10.1.0.3和目的地址10.2.0.3。
根据目的地址,将数据发送给主机10.2.0.3。
内联网VPN
同一机构内不同部门的内部网络所构成的虚拟专用网VPN又称为内联网VPN。
外联网VPN
有时一个机构的VPN需要有某些外部机构(通常就是合作伙伴)参加进来。这样的VPN就称为外联网VPN.
远程接入VPN
在外地工作的员工需要访问公司内部的专用网络时,只要在任何地点接入到因特网,运行驻留在员工PC中的VPN软件,在员工的PC和公司的主机之间建立VPN隧道,即可访问专用网络中的资源。这种VPN称为远程接入VPN。
NAT
网络地址转换NAT(Network Address Translation)
虽然因特网采用了无分类编址方式来减缓IPv4地址空间耗尽的速度,但由于因特网用户数目的激增,特别是大量小型办公室网络和家庭网络接入因特网的需求不断增加,IPv4地址空间即将面临耗尽的危险仍然没有被解除。
1994年提出了一种网络地址转换NAT的方法再次缓解了IPv4地址空间即将耗尽的问题
NAT能使大量使用内部专用地址的专用网络用户共享少量外部全球地址来访问因特网上的主机和资源。
使用私有地址的主机如何与使用全球IP地址的主机进行通信?
在专用网络连接到因特网的路由器上,安装NAT软件。
装有NAT软件的路由器称为NAT路由器,至少有一个有效的外部全球IP地址。
所有使用私有地址的主机在和外部通信时,都要在NAT路由器上将其私有地址转换成全球IP地址。
如果NAT路由器具有N个全球IP地址,那么至多只能有N个内网主机能够同时和因特网上的主机通信。
由于绝大多数的网络应用都是使用运输层协议TCP或UDP来传送数据,因此可以利用运输层的端口号和IP地址一起进行转换。
这样,用一个全球IP地址就可以使多个拥有本地地址的主机同时和因特网上的主机进行通信。
这种将端口号和IP地址一起进行转换的技术叫作网络地址与端口号转换NAPT(Network Address and Port Translation)。
注意:
使用私有地址的主机不能直接充当因特网服务器
对于一些P2P网络应用,需要外网主机主动与内网主机进行通信,在通过NAT时会遇到问题,需要网络应用自己使用一些特殊的NAT穿越技术来解决问题。
由于NAT对外网屏蔽了内网主机的网络地址,能为内网的主机提供一定的安全保护。
结语
到这里网络层就结束了,接下来是运输层,是后端开发面试必问的部分,比较重要。