计算机网络之网络层

IT知识
199
0
0
2024-04-17
标签   网络协议

网络层概述

网络层的目的是实现两个端系统之间的数据透明传送,具体功能包括寻址和路由选择、连接的建立、保持和终止等。它提供的服务使传输层不需要了解网络中的数据传输和交换技术。如果您想用尽量少的词来记住网络层,那就是"路径选择、路由及逻辑寻址"。

网络层中涉及众多的协议,其中包括最重要的协议,也是TCP/IP的核心协议——IP协议。IP协议非常简单,仅仅提供不可靠、无连接的传送服务。IP协议的主要功能有:无连接数据报传输、数据报路由选择和差错控制。与IP协议配套使用实现其功能的还有地址解析协议ARP、逆地址解析协议RARP、因特网报文协议ICMP、因特网组管理协议IGMP。

IP协议详解
虚拟互连网络

实际的计算机网络是错综复杂的,物理设备通过使用IP协议,屏蔽了物理网络之间的差异,当网络中的主机使用IP协议连接时,则无需关注网络细节。IP协议使得复杂的实际网络变为一个虚拟互连的网络,还使得网络层可以屏蔽底层细节而专注网络层的数据转发,IP协议解决了在虚拟网络中数据报传输路径的问题。

IP地址长度为32位,常分成4个8位,IP地址常使用点分十进制来表示(0~255.0~255.0~255.0~255),也就是共有

2^{32} = 4294961296

个IP地址。下图是IP协议的格式:

我们来看看IP协议的首部:

4位版本

4位首部长度

8位服务类型(TOS)

16位总长度(字节)

16位标识

3位标志

13位片偏移

8位生存时间(TTL)

8位协议

16位首部校验和

32位源IP地址

32位目的IP地址

选项options(若有)

IP数据

版本:占4位,指的是IP协议的版本,通信双方的版本必须一致,当前主流版本是4,即IPv4,也有IPv6 首部位长度:占4位,最大数值为15,表示的是IP首部长度,单位是“32位字”(4个字节),也即是IP首部最大长度为60字节 总长度:占16位,最大数值为65535,表示的是IP数据报总长度(IP首部+IP数据) TTL:占8位,表明IP数据报文在网络中的寿命,每经过一个设备,TTL减1,当TTL=0时,网络设备必须丢弃该报文。作用:避免数据在网络中无限传输,当这个网络报文找不到目的机器时,而进行无限传输,来浪费带宽资源 协议:占8位,表明IP数据所携带的具体数据是什么协议的(如:TCP、UDP等)

协议名

ICMP

IGMP

IP

TCP

UDP

OSPF

字段值

1

2

4

6

17

89

首部校验和:占16位,校验IP首部是否有出错

IP协议的转发流程

在数据链路层的学习中我们知道了MAC地址表,由于IP协议的转发是通过逐跳(hop-by-hop)来实现的,所以在网络层中,存在一个类似于MAC地址表的路由表,路由表是存储的目的IP地址和下一跳IP地址的映射,计算机或者路由器都拥有路由表。路由表如下:

目的IP地址

下一跳IP地址

IP1

IP4

IP2

IP5

IP3

IP6

A设备是如何跨设备将数据发送给C设备的呢?

A设备向C设备在网络层中传输数据的过程如下:

  1. A发出目的地为C的IP数据报,查询路由表发现下一跳为E
  2. A将数据报发送给E
  3. E查询路由表发现下一跳为F,将数据报发送给F
  4. F查询路由表发现目的地C直接连接,将数据报发送给C

现在结合数据链路层和网络层,再来看一下跨设备传输数据的过程:

  1. A发出目的地为C的IP数据报,查询路由表发现下一跳为E
  2. A将IP数据报交给数据链路层,并告知目的MAC地址是E
  3. 数据链路层填充源MAC地址A和目的MAC地址E
  4. 数据链路层通过物理层将数据发送给E
  5. E的数据链路层接收到数据帧,把帧数据交给网络层
  6. E查询路由表,发现下一跳为F
  7. E把数据报交给数据链路层,并告知目的MAC地址为F
  8. E的数据链路层封装数据帧并发送
  9. F的数据链路层接收到数据帧,把帧数据交给网络层
  10. F查询路由表,发现下一跳为C
  11. F把数据报交给数据链路层,并告知目的MAC地址为C
  12. F的数据链路层F封装数据帧并发送

从IP协议的转发流程中我们可以看到:数据帧每一跳的MAC地址都在变化,但IP数据报每一跳的IP地址始终不变。但我们会发现一个问题,在网络层中将数据报交给数据链路层,并且需要告知目的MAC地址,但是在网络层中只知道IP地址,我们是如何知道目的MAC地址的呢?这就是ARP协议做的事情了。

ARP协议

ARP(Address Resolution Protocol)地址解析协议,将网络层中的32位IP地址,通过ARP协议解析为数据链路层中的48位MAC地址。这个映射关系是存储在ARP缓存表中的。arp -a命令:查看ARP缓存表

IP地址

MAC地址

192.168.83.254

00-50-56-e0-33-40

192.168.83.255

01-00-5e-00-00-16

224.0.0.251

01-00-5e-00-00-fc

239.1.2.3

01-00-5e-40-98-8f

255.255.255.255

01-00-5e-7f-ff-fa

ARP缓存表是ARP协议和RARP协议运行的关键,ARP缓存表缓存了IP地址到硬件地址之间的映射关系,ARP缓存表中的记录并不是永久有效的,有一定的期限。这是因为当你的网络设备,换个网络环境,网络设备的IP地址就可能会发生改变,ARP缓存表中的原来的记录就失效了。当ARP缓存表中有映射关系,就直接查询ARP缓存表;如果没有这个映射关系,ARP协议就会广播,并记录回应得地址信息。

RARP(Reverse Address Resolution Protocol)逆地址解析协议,其作用与ARP协议相反,即把数据链路层中48位MAC地址,解析位网络层中的32位IP地址。®ARP协议是TCP/IP协议栈里面基础的协议,ARP和RARP的操作对程序员是透明的,理解®ARP协议有助于理解网络分层的细节。

IP地址的子网划分
分类的IP地址


最小网络号

最大网络号

子网数量

最小主机号

最大主机号

主机数量

A

0(00000000)

127(01111111)

2

7

2^7

27

0.0.0

255.255.255

2

24

2^{24}

224

B

128.0

191.255

2

14

2^{14}

214

0.0

255.255

2

16

2^{16}

216

C

192.0.0

223.255.255

2

21

2^{21}

221

0

255

2

8

2^{8}

28

2^7

0.0.0255.255.255

2^{24}

B128.0191.255

2^{14}

0.0255.255

2^{16}

C192.0.0223.255.255

2^{21}

0255

2^{8}

特殊的主机号:主机号全0表示当前网络段,不可分配为特定主机;主机号为全1表示广播地址,向当前网络段所有主机发消息

  • A类地址网络段全0(00000000)表示特殊网络
  • A类地址网络段后7位全1(01111111:127)表示回环地址
  • B类地址网络段(10000000.00000000:128.0)是不可使用的
  • C类地址网络段(192.0.0)是不可使用的

实际可使用各类IP地址如下:


最小网络号

最大网络号

子网数量

最小主机号

最大主机号

主机数量

A

1

127(01111111)

2

7

2^7

27-2

0.0.1

255.255.254

2

24

2^{24}

224-2

B

128.1

191.255

2

14

2^{14}

214-1

0.1

255.254

2

16

2^{16}

216-2

C

192.0.1

223.255.255

2

21

2^{21}

221-1

1

254

2

8

2^{8}

28-2

2^7

-20.0.1255.255.254

2^{24}

-2B128.1191.255

2^{14}

-10.1255.254

2^{16}

-2C192.0.1223.255.255

2^{21}

-11254

2^{8}

-2

127.0.0.1,通常被称为本地回环地址(Loopback Address),不属于任何一个有类别地址类。它代表设备的本地虚拟接口,所以默认被看作是永远不会宕掉的接口。在Windows操作系统中也有相似的定义,所以通常在安装网卡前就可以ping通这个本地回环地址。一般都会用来检查本地网络协议、基本数据接口等是否正常的。

划分子网

随着互连网应用的不断扩大,原先的IPv4的弊端也逐渐暴露出来,即网络号占位太多,而主机号位太少,所以其能提供的主机地址也越来越稀缺,目前除了使用NAT在企业内部利用保留地址自行分配以外,通常都对一个高类别的IP地址进行再划分,以形成多个子网,提供给不同规模的用户群使用。这里主要是为了在网络分段情况下有效地利用IP地址,通过对主机号的高位部分取作为子网号,从通常的网络位界限中扩展或压缩子网掩码,用来创建某类地址的更多子网。但创建更多的子网时,在每个子网上的可用主机地址数目会比原先减少。

上图就把原来的C类地址划分成了两个子网。 但子网号这么多,有没有办法快速判断某个IP的网络号?这就是子网掩码的作用了,子网掩码是标志两个IP地址是否同属于一个子网的,也是32位二进制地址,其每一个为1代表该位是网络位,为0代表主机位。它和IP地址一样也是使用点式十进制来表示的。如果两个IP地址在子网掩码的按位与的计算下所得结果相同,即表明它们共属于同一子网中。

子网掩码由连续的1和连续的0组成,某一个子网的子网掩码具备网络号位数个连续的1

在计算子网掩码时,我们要注意IP地址中的保留地址,即" 0"地址和广播地址,它们是指主机地址或网络地址全为" 0"或" 1"时的IP地址,它们代表着本网络地址和广播地址,一般是不能被计算在内的。

无分类编址CIDR

CIDR中没有A、B、C类网络号、和子网划分的概念,CIDR将网络前缀相同的IP地址称为一个“CIDR地址块”,注意网络前缀是任意位数的。

网络前缀

主机号

斜线记法:193.10.10.129/25 使用二进制表示:11000001.00001010.00001010.10000001 无分类地址CIDR相比原来的子网划分更加 灵活:

CIDR前缀长度

掩码点分十进制

地址数

/13

255.248.0.0

512K

/14

255.252.0.0

256K

/15

255.254.0.0

128K

/16

255.255.0.0

64K

/17

255.255.128.0

32K

/18

255.255.192.0

16K

/19

255.255.224.0

8K

网络地址转换NAT技术

IPv4最多只有40+亿个IP地址,早期IP地址的不合理规划导致IP号浪费。在介绍NAT技术之前,首先要知道内网地址和外网地址。

  • 内网地址:内部机构使用,避免与外网地址重复。三类内网地址如下:
  • 10.0.0.0~10.255.255.255(支持千万数量级设备)
  • 172.16.0.0~172.31.255.255(支持百万数量级设备)
  • 192.168.0.0~192.168.255.255(支持万数量级设备)
  • 外网地址:全球范围使用,全球公网唯一

网络地址转换技术是发生在本地路由器的,主要功能就是把内网的IP地址转成外网的IP地址来进行外部的通信,并且在接收到数据之后,再把外网IP地址映射成内网IP地址,转发到具体的某个设备上面去。

内网多个设备使用同一个外网IP请求外网的服务,外部怎么知道具体是哪个设备在请求的?网络地址转换NAT的英文全称是Network Address Translation,NAT技术用于多个主机通过一个公有IP访问互联网的私有网络中,外部主要是通过端口号来区分到底是内网的哪一个设备进行请求的,这其中有一个NA§T表表:示例如下:

方向

旧的地址和端口号

新的地址与端口号

192.168.2.11:6666

173.21.59.10:16666

192.168.2.10:7777

173.21.59.10:17777

173.21.59.10:16666

192.168.2.11:6666

173.21.59.10:17777

192.168.2.10:7777

NAT减缓了IP地址的消耗,但是增加了网络通信的复杂度

ICMP协议

ICMP协议全称是网际控制报文协议(Internet Control Message Protocol),ICMP协议可以报告错误信息或者异常情况

ICMP协议首部:

8位类型

8位代码

16位校验和

ICMP报文数据

ICMP报文分为:差错报告报文和询问报文:

ICMP报文种类

类型的值

报文类型

具体代码

差错报告报文

3(终点不可达)

网络不可达

0

主机不可达

1

5(重定向)

对网络重定向

0

对主机重定向

1

11

传输超时

-

12

坏的IP头

0

缺少其他必要参数

1

询问报文

0或8

回送(Echo)请求或应答

-

13或14

时间戳(Timestamp)请求或应答

-

####ICMP协议的应用 ping应用:我们可以通过ping命令进行简单的网络故障排查:

  1. ping本地回环地址,一般情况下,都会得到返回的,如果得不到返回,则说明你的计算机的协议栈出现了问题,这个时候就可能需要重装系统,或者是重新安装这个协议栈
  2. ping网关地址,即路由器地址,如果能得到返回的话,则说明本机到路由器的通路是通的,如果没有返回的话,则说明你的wifi,或者你的网线连接是有问题的
  3. ping远端地址,如果不通的话,则说明你的家到ISP之间的网络是故障的,此时就需要联系网络服务商(移动、电信、联通)进行排查。

Traceroute应用:Traceroute可以探测IP数据报在网络中走过的路径

路由概述

思考:路由表中的下一跳地址是怎么来的?下一跳地址是唯一的吗?下一跳地址是最佳的吗?路由器怎么多,他们是怎么协同工作的?为了解决这些问题,路由表需要一个好的算法去解决这些事情。路由算法实际上是图论的算法,由于网络环境复杂,使得路由算法要比图论的算法更复杂。

由于互联网的规模是非常大的,互联网环境是非常复杂的,所以我们需要对互联网进行划分。自治系统(Autonomous System)是指处于一个管理机构下的网络设备群,AS内部网络自行管理,AS对外提供一个或者多个出(入)口。自治系统内部路由的协议称为:内部网关协议(RIP、OSPF), 自治系统外部路由的协议称为:外部网关协议(BGP)。

路由算法

路由算法的本质是距离矢量(DV)算法, 距离矢量(DV)算法介绍如下:

  • 每一个节点使用两个向量

D_i

S_i

D_i

描述的是当前节点到别的节点的距离


S_i

描述的是当前节点到别的节点的下一节点

  • 每一个节点与相邻的节点交换向量

D_i

S_i

的信息

  • 每一个节点根据交换的信息更新自己的节点信息

现在假设有A的距离矢量信息,收到的距离矢量信息如下图:

A通过B到各个节点得距离矢量信息如下:

A通过C到各个节点得距离矢量:并更新下一条的节点

A通过D到各个节点得距离矢量:并更新下一条的节点

A通过F到各个节点得距离矢量:并更新下一条的节点

RIP协议

RIP(Routing Information Protocol)协议,RIP协议是使用DV算法的一种路由协议。RIP协议把网络的跳数(hop)作为DV算法的距离,每隔30s交换一次路由信息,认为跳数>15的路由则为不可达路由。

RIP协议的过程

  1. 路由器初始化路由信息(两个向量

D_i

S_i

)

  1. 对相邻路由器X发过来的信息,对信息的内容进行修改(下一跳地址设置为X,所有距离加1)
  2. 检索本地路由,将信息中新的路由插入到路由表里面
  3. 检索本地路由,对于下一跳为X的,更新为修改后的信息
  4. 检索本地路由,对比相同目的的距离,如果新信息的距离更小,则更新本地路由表
  5. 如果3分钟没有收到相邻的路由信息,则把相邻路由设置为不可达(16跳)

RIP协议的优缺点:

  • 优点:实现简单,开销很小。
  • 缺点:故障信息传递慢。也就是随便相信“隔壁老王”,“自己不思考” “视野不够”。因为RIP协议每一个路由器它只看到相邻路由器的信息,而看不到更远的路由器信息,这也限制了网络的规模。
内部网关路由协议之OSPF协议
链路状态(LS)协议

链路状态(LS)协议:向所有的路由器发送消息,也就是一传十、十传百,只和相邻的路由器交换信息。消息描述该路由器与相邻路由器的链路状态,每隔30s交换路由信息,只有链路状态发生变化时,才发送更新信息。

Dijkstra(迪杰斯特拉)算法

Dijkstra算法是著名的图算法,Dijkstra算法解决有权图从一个节点到其他节点的最短路径问题,“以起始点为中心,向外层层扩展”。

Dijkstra(迪杰斯特拉)算法定义:

  1. 初始化两个集合(S, U)(S为只有初始顶点点A的集合,U为其他顶点集合)
  2. 如果U不为空, 对U集合顶点进行距离的排序,并取出距离A最近的一个顶点D i. 将顶点D的纳入S集合 ii. 更新通过顶点D到达U集合所有点的距离(如果距离更小则更新,否则不更新) iii. 重复2步骤
  3. 直到U集合为空,算法完成

OSPF协议的过程

OSPF(Open Shortest Path First:开放最短路径优先),OSPF协议的核心是Dijkstra算法。OSPF协议的过程:路由器接入网络,路由器向邻居发出问候信息,与邻居交流链路状态数据库,广播和更新未知路由。

RIP协议

OSPF协议

从邻居看网络

整个网络的拓扑

在路由器之间累加距离

Dijkstra算法计算最短路径

频繁、周期更新,收敛很慢

状态变化更新,收敛很快

路由间拷贝路由信息

路由间传递链路状态,自行计算路径

外部网关路由协议之BGP协议

BGP(Border Gateway Protocol: 边际网关协议),BGP协议是运行在AS之间的一种协议。由于互联网的规模很大,AS内部使用不同的路由协议。

AS之间需要考虑除网络特性以外的一些因素(政治、安全…),BGP(Border Gateway Protocol,边界网关协议),BGP协议能够找到一条到达目的比较好的路由,AS之间通过BGP发言人来进行路由信息的交换。BGP发言人(speaker):BGP并不关心内部网络拓扑,AS之间通过BGP发言人交流信息,BGP Speaker可以人为配置策略。

总结:网络层负责对子网间的数据包进行路由选择。此外,网络层还可以实现拥塞控制、网际互连等功能;网络层的基本数据单位为IP数据报;包含的主要协议:IP协议(Internet Protocol,因特网互联协议)、ICMP协议(Internet Control Message Protocol,因特网控制报文协议)、ARP协议(Address Resolution Protocol,地址解析协议)以及RARP协议(Reverse Address Resolution Protocol,逆地址解析协议)。网络层重要的设备是路由器。常见的路由选择协议有:RIP协议、OSPF协议。RIP协议 :底层是贝尔曼福特算法,它选择路由的度量标准(metric)是跳数,最大跳数是15跳,如果大于15跳,它就会丢弃数据包;OSPF协议 :Open Shortest Path First开放式最短路径优先,底层是迪杰斯特拉算法,是链路状态路由选择协议,它选择路由的度量标准是带宽,延迟。