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

devtools/2025/3/20 0:21:55/

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

    • 网络层
      • 无连接服务的实现:数据报子网
      • 面向连接服务的实现:虚电路子网
      • 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/devtools/168481.html

相关文章

Deepseek API+Python测试用例一键生成与导出-V1.0.2【实现需求文档图片识别与用例生成自动化】

在测试工作中,需求文档中的图片(如界面设计图、流程图)往往是测试用例生成的重要参考。然而,手动提取图片并识别内容不仅耗时,还容易出错。本文将通过一个自研小工具,结合 PaddleOCR 和大模型,自…

Kafka精选面试题

1. 如何保证幂等性? 幂等性其实是消息的一致性, 生产和消费都只有一次, 所以分为生产者幂等性和消费者幂等性. 实际开发过程中, 一般只会保证消费幂等性, 所以面试时直接回答消费幂等就行 做法就是做唯一id, 在消费端做个判断,如果唯一id已存在则不做消费处理, 这个唯一id一般…

【R语言】 文件,vector, matrix,dataframe 的基本操作

1. 文件读取&#xff1a;here(), 以及glimpse的使用 cereal <- read.csv(here("datasets", "Cereal.csv")) cereal |> glimpse() # ‘ dplyr ’包中的‘ glimpse() ’函数提供了‘ cereal ’数据集的快速read.csv(here("datasets", "…

matlab R2024b下载教程及安装教程(附安装包)

文章目录 前言一、matlab R2024b安装包下载二、matlab R2024b安装教程 前言 为帮助大家顺利安装该版本软件&#xff0c;特准备matlab R2024b下载教程及安装教程&#xff0c;它将以简洁明了的步骤&#xff0c;指导你轻松完成安装&#xff0c;开启 MATLAB R2024 的强大功能之旅。…

Qt之自定义界面组件 一

通过qt中的painter绘图事件绘制一个电池电量图的变化。效果如下图 创建一个基于界面widget工程&#xff0c;在wdiget界面添加一个widget界面,将添加的widget界面的类提升为Tbattery.在Tbattery类中重写painEvent电池电量代码 文件目录结构 主要部分代码 //Tbattery.cpp #inc…

【eNSP实战】使用ACL实现路由器安全

拓图 要求&#xff1a; 允许 10.0.0.0 网段 telent 登录AR1&#xff0c;不允许其他主机telnet登录路由器设置接口如图所示 AR1接口配置 interface GigabitEthernet0/0/0ip address 30.0.0.1 255.255.255.0 # ip route-static 0.0.0.0 0.0.0.0 30.0.0.2AR2接口配置 interf…

使用DeepSeek和墨刀AI,写PRD文档、画原型图的思路、过程及方法

使用DeepSeek和墨刀AI&#xff0c;写PRD文档、画原型图的思路、过程及方法 现在PRD文档要如何写更高效、更清晰、更完整&#xff1f; 还是按以前的思路写PRD&#xff0c;就还是以前的样子。 现在AI这么强大&#xff0c;产品经理如何使用DeepSeek写PRD文档&#xff0c;产品经…

沐数科技数据开发岗笔试题2025

描述性统计 标准差 答案: A 解析: 标准差 衡量数据集中数值变化或离散程度的一种度量。它反映了数据集中的各个数值与数据集的平均值&#xff08;均值&#xff09;之间的偏离程度。标准差越大&#xff0c;表明数据的分布越分散&#xff1b;标准差越小&#xff0c;表明数据…