欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

计算机网络之网络层

程序员文章站 2022-06-15 20:33:53
网络层概述  网络层的目的是实现两个端系统之间的数据透明传送,具体功能包括寻址和路由选择、连接的建立、保持和终止等。它提供的服务使传输层不需要了解网络中的数据传输和交换技术。如果您想用尽量少的词来记住网络层,那就是"路径选择、路由及逻辑寻址"。  网络层中涉及众多的协议,其中包括最重要的协议,也是TCP/IP的核心协议——IP协议。IP协议非常简单,仅仅提供不可靠、无连接的传送服务。IP协议的主要功能有:无连接数据报传输、数据报路由选择和差错控制。与IP协议配套使用实现其功能的还有地址解析协议ARP、逆...

网络层概述

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

  网络层中涉及众多的协议,其中包括最重要的协议,也是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),也就是共有232=42949612962^{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) 272^7 0.0.0 255.255.255 2242^{24}
B 128.0 191.255 2142^{14} 0.0 255.255 2162^{16}
C 192.0.0 223.255.255 2212^{21} 0 255 282^{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) 272^7-2 0.0.1 255.255.254 2242^{24}-2
B 128.1 191.255 2142^{14}-1 0.1 255.254 2162^{16}-2
C 192.0.1 223.255.255 2212^{21}-1 1 254 282^{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)算法介绍如下:

  • 每一个节点使用两个向量DiD_iSiS_i
  • DiD_i描述的是当前节点到别的节点的距离
  • SiS_i描述的是当前节点到别的节点的下一节点
  • 每一个节点与相邻的节点交换向量DiD_iSiS_i的信息
  • 每一个节点根据交换的信息更新自己的节点信息

计算机网络之网络层
现在假设有A的距离矢量信息,收到的距离矢量信息如下图:
计算机网络之网络层
A通过B到各个节点得距离矢量信息如下:
计算机网络之网络层
A通过C到各个节点得距离矢量:并更新下一条的节点
计算机网络之网络层
A通过D到各个节点得距离矢量:并更新下一条的节点
计算机网络之网络层
A通过F到各个节点得距离矢量:并更新下一条的节点
计算机网络之网络层

RIP协议

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

RIP协议的过程

  1. 路由器初始化路由信息(两个向量DiD_iSiS_i)
  2. 对相邻路由器X发过来的信息,对信息的内容进行修改(下一跳地址设置为X,所有距离加1)
    1. 检索本地路由,将信息中新的路由插入到路由表里面
    2. 检索本地路由,对于下一跳为X的,更新为修改后的信息
    3. 检索本地路由,对比相同目的的距离,如果新信息的距离更小,则更新本地路由表
  3. 如果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开放式最短路径优先,底层是迪杰斯特拉算法,是链路状态路由选择协议,它选择路由的度量标准是带宽,延迟。

本文地址:https://blog.csdn.net/weixin_44393822/article/details/107227316