【从零开始学习计算机科学与技术】计算机网络(五)网络层

embedded/2025/3/21 3:42:46/

【从零开始学习计算机科学与技术】计算机网络(五)网络层

    • 网络层
      • 无连接服务的实现:数据报子网
      • 面向连接服务的实现:虚电路子网
      • IP协议
      • 子网及子网划分
        • 子网掩码
        • 子网规划
        • 可变长子网掩码 (VLSM)
        • 无类别域间路由—CIDR
      • IP路由转发过程
      • ARP与RARP
        • ARP的工作过程:
        • RARP的工作过程如下:
      • DHCP
      • IP数据报格式
      • 路由算法
      • 路由选择的相关概念
      • 内部路由协议
        • 静态路由选择算法
          • Dijkstra
          • flooding
        • 动态路由选择算法
          • 距离矢量路由(D-V)
          • RIP协议
          • 链路状态路由(LS)
          • OSPF开放的路径优先(Open shortest path first)
        • 什么时候使用静态/动态路由?
      • 外部路由协议
        • BGP
      • 数据报的分片
      • IGMP
      • ICMP
        • Ping请求
        • 时间戳请求
      • 拥塞控制与流量控制
      • 拥塞量度
      • 解决拥塞问题的方法
      • 拥塞控制算法
      • 网络质量(Quality of Service(QOS))保证
      • 抖动控制
        • 优先级策略
        • 分组调度
        • 流量整形
        • 漏桶算法
        • 令牌桶算法
      • 资源预留
      • 虚拟专用网(VPN)
      • NAT/PAT
      • IPv6地址

网络层

主要功能就是:将源端数据包一路送到接收方,即主机到主机的服务。
网络层有两种服务,分别是面向连接和面向无连接的服务。

无连接服务的实现:数据报子网

对于无连接服务来说每个数据包都独立地被注入到网络中,并且每个数据包独立路由,不需要建立任何设置(比如IP协议)。

面向连接服务的实现:虚电路子网

面向连接的服务,需要一个虚电路网络,虚电路的目的是避免为每个数据包选择一条新路径,当建立一个连接时,从源机器到目标机器之间的一条路径就被当做这个连接的一部分被确定下来。(比如ATM协议)

IP_14">IP协议

由于网络协议是连接不同异构局域网络的,因此需要对不同网络的不同主机进行唯一标识,即IP地址。
IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
IPv4地址格式为网络号和主机号,其是唯一的,并且每个主机至少有一个。表示方法是点分十进制表示。

在这里插入图片描述

图1:IPv4地址格式

旧有的IP地址划分是将IP地址划分为A,B,C,D,E四类,其中D类地址用于多播,E类地址保留待用。

在这里插入图片描述

图2:分类IPv4地址

IPv4的保留地址空间

IPv4地址中有两类特殊的地址,不能作为主机地址。其分别是网络地址:主机部分全为“0”的 IP 地址,广播地址:主机部分全为“1”的 IP 地址。

子网及子网划分

局域网不断增长,越来越难于管理,必须将它分割成子网。
一个网络被分隔成几个部分(子网),但是在外界看来,该网络仍被看成一个整体 (体现在路由表例上,就是外部的路由器只对应一条路由)。这也允许不同的子网在一个组织内部连接起来。

子网掩码

路由器使用子网掩码决定分组往哪个子网转发。
子网掩码可用点分十进制表示( 1表示网络位, 0表示主机位),也可用“ /网络位数+子网位数”表示,比如255.255.255.224、202.10.23.102/27。路由器采用“ AND ”操作(目的IP和子网掩码),得到目的网络地址。使用这种机制,路由器不必记录全部主机的IP地址,缩减了路由器的规模。

子网规划

将大网络分割成小网络。划分子网实际上建立了一个由网络、子网和主机构成的三级层次结构,从而降低了路由器的表空间。构建子网是通过从网络地址的主机部分借位来进行。但是,子网规划将导致IP地址空间的损失。
确定可用主机数量的公式 2 n − 2 2^n-2 2n2,减2是因为主机地址不能全为0,也不能全为1,并且子网号也不能全为0或全为1。
借位规则:从主机域的高位开始借位;主机域至少保留2位。

可变长子网掩码 (VLSM)

VLSM允许将网络空间分为大小不等的部分。子网掩码将依据为特定子网所借用的位数而变化。先对网络划分子网,然后再将子网进一步划分子网。根据需要重复此过程,以创建不同大小的子网。

无类别域间路由—CIDR

无类别域间路由是基于可变长子网掩码(VLSM)来进行任意长度的前缀的分配的。在RFC 950(1985)中有关于可变长子网掩码的说明。CIDR包括:指定任意长度的前缀的可变长子网掩码技术。遵从CIDR规则的地址有一个后缀说明前缀的位数,例如 192.168.0.0/16。CIDR用可变长子网掩码(VLSM),根据各人需要来分配IP地址,而不是按network-wide rule。所以,网络/主机的划分可以在地址内的任意位置进行。这个划分可以是递归进行的,即通过增加掩码位数,来使一部分地址被继续分为更小的部分。
其缓解了地址枯竭的趋势;控制甚至缩减了路由表的开销。其分配IP地址的时候不再以类别来分,而是按照可变长的地址块来分配。

使用CIDR时,主机地址不能全为0,也不能全为1,但是子网号可以全为0或全为 1,但是,路由表必须扩展,增加一个 32-bit 的子网掩码。即每个路由表有一个三元组 (IP address, subnet mask, outgoing line),当一个分组到来到的时候,分组中的目标IP地址(Destination IP)被检查:目标IP和子网掩码进行与操作,获得目标网络地址,以查找路由表,如果路由表中有多个表项匹配 (这些表项有不同的子网掩码) ,使用子网掩码最长的那个表项。

IP_61">IP路由转发过程

  1. 提取目的站的IP地址D,得出其网络号N。
  2. 若路由表中有目的地址为D的指明主机路由,则将数据报送给所指明的下一站路由器;否则转3。
  3. 若N是此路由器直接相连的一个网络号,则直接通过该网络将数据报交付给目的站D;否则转4。
  4. 若路由表中有到达网络N的路由,则将数据报送给所指明的下一站路由器;否则转5。
  5. 若路由表中有默认路由,则将数据报送给所指明的默认路由器;否则转6。
  6. 报告分组转发出错。

在上述过程中,网络层IP数据包的实际交互需要通过链路层提供的服务,而链路层的交互需要MAC地址,因此,这需要IP地址与MAC地址之间的转换。因此,需要用到ARP和RARP协议。

在这里插入图片描述

图3:工作过程

ARPRARP_76">ARP与RARP

ARP(地址解析协议)IP 地址转化为MAC 地址。
RARP(逆向地址解析协议):MAC 地址转化为IP 地址。

ARP_81">ARP的工作过程:

假设主机A的IP地址为192.168.1.1,MAC地址为0A-11-22-33-44-01;主机B的IP地址为192.168.1.2,MAC地址为0A-11-22-33-44-02;当主机A要与主机B通信时,地址解析协议可以将主机B的IP地址(192.168.1.2)解析成主机B的MAC地址,以下为工作流程:

第1步:根据主机A上的路由表内容,IP确定用于访问主机B的转发IP地址是192.168.1.2。然后A主机在自己的本地ARP缓存中检查主机B的匹配MAC地址。
第2步:如果主机A在ARP缓存中没有找到映射,它将询问192.168.1.2的硬件地址,从而将ARP请求帧广播到本地网络上(广播域内)的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。
第3步:主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。
第4步:主机B将包含其MAC地址的ARP回复消息直接发送回主机A。
第5步:当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了。

为了让ARP的工作更加高效,下面是几种优化措施:

  • 缓存 ARP 结果。在ARP请求中包括源机的 IP-to-MAC 地址的映射,每台机器在启动的时候,广播它的IP-MAC地址对。
  • 缺省网关(代理 ARP。当源设备需要的目的地址与自己不在同一个网络时,如果源不知道目的MAC地址,它必须使用路由器的服务使它的数据达到目的,当路由器在这种方式下使用时,称为缺省网关。缺省网关是与源设备所处的网段相连的路由器接口上的IP地址。
  • ARPIP地址到MAC地址的映射表,储存在存储器(RAM)中,自动维护。(掉电消失)。为了减少ARP请求的次数,每个设备拥有自己的ARP表,包括路由器。
  • 自动维护ARP。通过广播ARP请求中的源设备信息添加更新表;利用自己的ARP请求之应答信息来添加、更新表;删除超过一定时限的信息。
ARP_98">RARP的工作过程如下:
  1. 网络上的每台设备都会有一个独一的硬件地址,通常是由设备厂商分配的MAC地址。PC1从网卡上读取MAC地址,然后在网络上发送一个RARP请求的广播数据包,请求RARP服务器回复该PC的IP地址。
  2. RARP服务器收到了RARP请求数据包,为其分配IP地址,并将RARP回应发送给PC1。
  3. PC1收到RARP回应后,就使用得到的IP地址进行通讯。

RARP在功能上有点类似于DHCP协议,从功能上说,RARP只能实现简单的从MAC地址到IP地址的查询工作,RARP server上的MAC地址和IP地址是必须事先静态配置好的。但DHCP却可以实现除静态分配外的动态IP地址分配以及IP地址租期管理等等相对复杂的功能。

DHCP

DHCP:动态主机配置协议
通过DHCP可以灵活分配IP地址,节约IP地址的使用;使一台主机迅速并动态地获取一个IP地址;通过DHCP获取的 IP是租来的,可能会过期。

IP_111">IP数据报格式

IP数据报报头的最小长度为20个字节。

在这里插入图片描述

图4:IP数据报格式

固定部分(前20字节):

  1. 版本。占4位,指IP协议的版本。通信双方使用的IP协议版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)。关于IPv6,目前还处于草案阶段。
  2. 首部长度。占4位,可表示的最大十进制数值是15。请注意,这个字段所表示数的单位是32位字长(1个32位字长是4字节),因此,当IP的首部长度为1111时(即十进制的15),首部长度就达到60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此数据部分永远在4字节的整数倍开始,这样在实现IP协议时较为方便。首部长度限制为60字节的缺点是有时可能不够用。但这样做是希望用户尽量减少开销。最常用的首部长度就是20字节(即首部长度为0101),这时不使用任何选项。
  3. 区分服务。占8位,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998年IETF把这个字段改名为区分服务DS(Differentiated Services)。只有在使用区分服务时,这个字段才起作用。
  4. 总长度。总长度指首部和数据之和的长度,单位为字节。总长度字段为16位,因此数据报的最大长度为 2 1 6 − 1 = 65535 2^16-1=65535 216

http://www.ppmy.cn/embedded/174318.html

相关文章

Node.js模块:使用 Bull 打造高效的任务队列系统

在现代 Web 开发中,异步任务处理是一个常见需求。无论是发送邮件、处理批量数据还是执行耗时操作,将这些任务放入队列可以显著提升应用的性能和用户体验。Node.js 生态中,Bull 是一个强大且易用的任务队列库,基于 Redis 构建&…

机器学习算法实战——天气数据分析(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ ​​​ 1. 引言 天气数据分析是气象学和数据科学交叉领域的一个重要研究方向。随着大数据技术的发展,气象数据的采集、存储和分…

蓝桥杯备考:图论之Prim算法

嗯。通过我们前面的学习,我们知道了,一个具有n个顶点的连通图,它的生成树包括n-1个边,如果边多一条就会变成图,少一条就不连通了 接下来我们来学一下把图变成生成树的一个算法 Prim算法,我们从任意一个结…

远程控制中的云电脑是什么意思?1分钟学会用

很多常用我们ToDesk远程控制的朋友们或许会注意到无论是在PC端还是移动端中都出现有【云电脑】【来云电脑爽玩-新用户免费1小时】这些词句等信息。那么这究竟是代表什么意思呐?云电脑是什么又怎么用呐?为什么要增加云电脑?以下小编就为大家科…

OpenHarmony子系统开发 - 电池管理(一)

OpenHarmony子系统开发 - 电池管理(一) 一、电量与LED灯颜色的定制开发指导 概述 简介 OpenHarmony默认提供了电量与LED灯颜色的映射关系。对于部分产品形态(如Pad),会使用LED灯的颜色来展示当前设备充电时的电量信…

物联网为什么用MQTT不用 HTTP 或 UDP?

先来两个代码对比,上传温度数据给服务器。 MQTT代码示例 // MQTT 客户端连接到 MQTT 服务器 mqttClient.connect("mqtt://broker.server.com:8883", clientId) // 订阅特定主题 mqttClient.subscribe("sensor/data", qos1) // …

1.Qt SDK 的下载和安装

1Qt 下载官⽹: http://download.qt.io/archive/qt/ 2版本自行选择 3下载对应版本的.exe文件 4下载包下载完成 5双击.exe文件,默认下一步,要注册一个qt的账户 6记住程序安装的位置,后面要配置环境变量 7勾3个(组件自行…

Spring Boot 整合 Nacos 注册中心终极指南

摘要:本文详细讲解如何在 Spring Boot 项目中整合 Nacos 作为服务注册中心,包含版本选择、核心配置、心跳机制及常见问题解决方案,助你快速构建微服务架构。 一、环境准备 1.1 组件版本要求 组件推荐版本说明Spring Boot2.6.x长期支持版本S…