当前位置: 首页 > article >正文

计算机网络 4-2-1 网络层(IPv4)

  • 2 IPv4分组

  • 各协议之间的关系

  • IP协议(Internet Protocol, 网际协议)是互联网的核心!

    ARP协议用于查询同一网络中的<主机IP地址,MAC地址>之间的映射关系

    ICMP协议用于网络层实体之间相互通知“异常事件”

    IGMP协议用于实现IP组播

    • 2.1 结构<首部+数据部分>

      • 看书的素图回忆各字段的作用

      • 首部固定部分20B,可变部分0~40B

      • 注意3个与“长度”相关的字段:418,首总偏

    • 补充:

         版本:v4:0100,v6:0110

         首部长度:固定部分20B,则是5*4=20B,为0101;最大60B,则15*4=60B,为1111

      一般首部长度默认为固定长度

         实际传输过程中, “数据部分”的长度受下一段链路的最短/最长帧长限制

      eg: 以太网帧有最短帧长、最长帧长限制

    • 2.2 命题重点

      • 2.2.1 分片问题

        • MTU (最大传送单元):一个链路层数据帧能承载的最大数据量

        • 如果一个IP数据报的总长度大于下一段链路的MTU,就需要将“数据部分”分片

        • 易错:除最后一个分片外,其他每个分片的“数据部分”必须是8B的整数倍

        • 易混

          • 标识16bit,用于区分每个分片原本属于哪个IP数据报

          • 标记3bit, 关注最低位MF、次低位DF

            • MF=1,表示后面还有分片

            • MF=0, 表示这是最后一个分片

            • DF=1,表示不允许被分片

            • DF=0,表示允许被分片

注意:

·IP数据报的“分片”可能在源主机、或任何一个路由器中发生

·只有目的主机才会对分片进行“重组”

·各分片有可能乱序到达目的主机

·由于首部的“片偏移”字段是以×8B为单位,因此,除了最后一个分片外,其他每个分片的数据部分必须是8B的整数倍(片偏移表示的是这个IP数据报它自己承载的数据在原始数据报当中的位置。)

      • 2.2.2 TTL字段

        • IP分组每经过一个路由器,TTL减1,如果已经减到0,该路由器就丢弃分组,并向源主机发送ICMP报文 (通知出现异常)

    • 不可达:

      TTL的初始值通常由源主机设置。

      每经过一个路由器,路由器就将TTL减1, 如果TTL减到0,就直接丢弃分组,并向源主机发送ICMP报文

      注:ICMP报文用于通知一个节点发生了某种“异常”

2.3 ip地址最初的分类方案 

  • 路由器和路由器连接的接口可以不分配IP地址,但路由器和其他节点连接的接口必须分配IP地址
  • 从属于同一个网络的所有主机、路由器接口的IP地址“网络号”都相同
  • 当一台新主机接入网络时,需要给它分配一个IP地址、并配置“默认网关”

H1给H7发送IP数据报(166.1.0.0--200.1.1.2):

        这个IP分组需要发送到另一个网络上,先交给默认网关这台路由器(H1的内部已配置:166.1.0.5)当H1知道了这个默认网关的IP地址之后。通过ARP协议查询到默认网关的IP地址所对应的MAC地址。把这个IP数据包封装成帧,把这个帧的目的MAC地址直接写成b2接口所对应的MAC地址对;

        接下来H1会把这个mac帧发送给交换机,交换机根据MAC地址逐层转发到路由器的b2这个接口,路由器检查目的网络的IP地址网络号,根据转发表查看,把这个数据报从b0接口转发出去。当转发这个IP数据报的时候,也会修改mac帧,把mac帧的目的地址修改为接口的MAC地址。所以会把这个IP数据包重新封装成帧,这个帧的目的MAC地址填写为c0。

        把帧从b0接口转发出去。公司的路由器就收到了这个IP数据包。检查IP数据包的目的地址,查看转发表,确定这个IP数据包接下来从c2这个接口转发出去。那同样根据ARP协议查询对应Mac地址重新封装成帧。

H1给H6发送IP数据报(166.1.0.0--166.1.4.4):

        先检查源IP和目的IP是否属于同网段,同属同网段就不需要转发到默认网关;h1通过ARP协议查询到h6对应的MAC地址,直接把这个数据包封装成mac帧,把帧发送给交换机,交换机根据mac帧,转交给下一台交换机,交换机再根据mac帧转发到下一个节点,

        该结点是集线器。集线器收到帧之后,会把帧无脑的转发给与之相连的所有结点,h6收到帧查看确认是自己接收,H5查看不是自己不接收丢弃

注意:以上这些特殊地址不能指派给网路中的任何一台主机或路由器“私用”

重要结论:前两行说明,如果一个网络中,主机号占Nbit,那么这个网络中,最多支持台主机&路由器

2.4 子网划分 & 子网掩码

  • 2.4.1 子网划分技术

    • ✅子网划分
      • 原理:若某单位租用了一个IP地址段,假设原本主机号占 n bit,那么可以将前k bit抠出来作为子网号,用剩余的n-kbit作为主机号,这样就能划分出2^k个子网(每个子网包含的IP地址块大小相等)

      • 子网划分前,IP地址为两级结构=<网络号,主机号>

      • 子网划分后,IP地址为三级结构=<网络号,子网号,主机号>

      • 注意:每个子网地址中,主机号不能分配为全0/全1 

        • 全0表示子网本身,全1为子网广播地址

    •  

    • 子网划分作用:让一个很大的IP地址块划分成几个相互独立的这种地址块,从而提升IP地址资源的利用率。

    • ✅子网掩码
      • 作用

        • 子网掩码、IP地址“逐位与”,算出<网络号,子网号>(可合称为“网络前缀”)

        • 只有网络前缀相同的IP地址,才归属于同一个网络 (或子网)

      • 注意

        • 如果一个网络内部进行了子网划分,那么这个网络中的每台主机、每个路由器接口都需要配置IP地址、默认网关、子网掩码

        • 如果一台路由器支持子网划分技术,那么在它的转发表中, 需要包含<目的网络号,子网掩码,转发接口>

    • ✅默认子网掩码
      • 如果一个传统网络 (A/B/C类)内部没有进行子网划分,那么可以将对应此网络的转发表项设置为“默认子网掩码”

        • A类默认255.0.0.0 B类默认255.255.0.0 C类默认255.255.255.0

    • ✅默认路由
      • 默认路由 (默认转发表项)设置:<目的网络号全0,子网掩码全0>

      • 在路由器转发表中,如果所有表项都不匹配,那么将从“默认路由”转发出去

  • 2.4.2 主机发送IP数据报的过程

    • 一、判断目的主机和本机是否属于同一个网络

      • ①检查本机IP地址和目的IP地址的网络前缀是否相同(需要用本机配置的子网掩码“逐位与”)

      • ②若网络前缀相同,说明目的主机和本机属于同一个网络;若网络前缀不同,说明不属于同一网络

    • 二、将IP数据报封装成MAC帧并发送到链路上

      • 如果目的主机与本机属于同一个网络,就通过ARP协议找到目的主机的MAC地址,再将IP数据报封装成帧,并将帧发送给目的主机

      • 如果目的主机与本机不属于同一个网络,就通过ARP协议找到默认网关的MAC地址,再将IP数据报封装成帧,并将帧发送给默认网关

  • 2.4.3 路由器转发一个IP数据报的过程

    • 一、路由器的某个接口收到一个IP数据报

    • 二、对IP数据报首部进行校验,并从中找到目的IP地址

    • 三、查“转发表”

      • 转发表的表项包含<目的网络号,子网掩码,转发接口>

      • 检查目的IP地址与每个表项能否匹配(将目的IP地址、子网掩码“逐位与”,匹配表项中的目的网络号)

      • 注:至少“默认路由”表项一定是可以匹配成功的

    • 四、转发

      • 根据查转发表的结果,将IP数据报从匹配的接口转发出去

      • 注:如果匹配的“转发接口”和该IP数据报的入口相同,就不用再把IP数据报转发回去

 

训练一:H3→H6(同一子网内的两台主机):在局域网的内部就完成了IP数据包的传送   

             H3要检查目的地址与源是否从属于同一个网络:用配置的子网掩码和目的地址逐位相与。网络前缀都相同这个目的地址和源从属于同一个网络之内。h3直接把这个IP数据包封装成mac帧,并且在mac帧当中直接说明h6的这个MAC地址。到达集线器,集线器会把帧无脑的转发给h5和h6两台主机。h5主机不会接收这个mac帧,因为目的地址和自己的mac地址不相同,而h6主机会接收这个帧,拆掉mac帧的首部和尾部,得到IP数据包。由于IP地址和自己的IP地址是匹配的,所以h6这台主机就会接收这个IP数据包

训练二:H1→H3(不同子网内的两台主机)

        要判断目的地址和的源IP地址是否同属于同一个网络,把目的地址和源的IP地址和本机内配置好的子网掩码进行逐位与运算,得到两个IP地址的网络前缀。由于二者的网络前缀不相等。

所以就说明这个目的结点和源不在同一个网络内。于是h1需要把这个IP数据包发送给默认网关,让他帮忙转发。转发给b3路由器

        路由器的网络层需要决定这个地址应该往哪转发。首先要和转发表的子网掩码进行相与。相与的结果再和目的网络号进行比较,可以看出和第二行匹配,就会从b2接口把这个IP数据包转发出去。

训练三:H1→H7(采用子网划分技术的网络→传统网络)

        如果它没有进行子网划分,设置默认子网掩码

训练四:H7→H1(传统网络→采用子网划分技术的网络)

训练五:主机H1发往Internet的某个IP数据报如何传输?(设目的IP地址=111.2.3.4)

  • 2.5 CIDR无分类编址

    • 2.5.1 基本原理

      • 取消了IP地址传统的A/B/C/D/E 分类。采用无分类编址CIDR,IP地址块分配更灵活,利用率更高,一定程度上缓解了IP地址耗尽 (时代背景:1993年)

      • IP地址={<网络前缀>,<主机号>},其中网络前缀不定长

      • CIDR记法

        • 128.14.32.153/30, 表示在这个IP地址中,网络前缀占30bit, 主机号2bit

    • 2.5.2 CIDR地址块的子网划分

      • 定长子网划分

        • 在一个CIDR地址块中,把主机号前k bit抠出来作为定长子网号,这样就能划分出2^k个子网 (每个子网包含的IP地址块大小相等)

        • 缺点:每个子网都一样大,不够灵活,IP地址利用率低,浪费有限的IP地址资源

      • 变长子网划分

        • 在一个CIDR地址块中,划分子网时,子网号长度不固定(每个子网包含的IP地址块大小不同)

      • 注意:在每个子网中,主机号全0、全1的IP地址不能分配给特定节点私用

    • 2.5.3 子网划分解题技巧

      • CIDR地址块的子网划分技巧:可以利用类似于“从根到叶构造二叉哈夫曼树”的技巧

        • ⚠️原始CIDR地址块作为根节点(假设可以自由分配的主机号占 h bit)

        • ⚠️每个分支节点必须同时拥有左右孩子,左0,右1(反过来也行)

        • ⚠️每个叶子结点对应一个子网,根据根节点到达叶子结点的路径来分析子网对应的IP地址块范围

        • ⚠️整棵树的高度不能超过h-1(因为即便最小的子网也至少要保留2bit主机号)

例子: 

注意:路由器和主机相连的链路,需要给路由器节点也分配一个ip地址

​​​​​​​

  • 2.6 路由聚合

    •         对于一个路由转发表,如果几条路由表项的转发接口相同,部分网络前缀也相同,那么可以将这几条路由表项聚合为一条。这种地址的聚合称为路由聚合,也称构成超网。

      • 缺点:

                ● 路由聚合可以减少路由表的大小。

                ● 路由聚合可能会引入额外的无效地址。

存在1: 目的IP地址和转发表多个表项匹配--最长前缀匹配原则

        目的地址128.14.32.131与路由器转发表均匹配,则采用最长前缀匹配原则进行匹配,表项2匹配的长度最长,则从G3转发出去

相关文章:

计算机网络 4-2-1 网络层(IPv4)

2 IPv4分组 各协议之间的关系 IP协议(Internet Protocol, 网际协议)是互联网的核心&#xff01; ARP协议用于查询同一网络中的<主机IP地址&#xff0c;MAC地址>之间的映射关系 ICMP协议用于网络层实体之间相互通知“异常事件” IGMP协议用于实现IP组播 2.1 结构<首…...

Python赋能自动驾驶:如何打造高效的环境感知系统

Python赋能自动驾驶:如何打造高效的环境感知系统 大家好,我是 Echo_Wish,今天我们来聊聊自动驾驶里的“眼睛”——环境感知系统,以及如何用 Python 实现它。 自动驾驶的核心目标是让车辆在没有人工干预的情况下安全行驶,而要做到这一点,环境感知系统必须实时获取并理解…...

ST表(稀疏表)

对ST表进行一个简单的总结&#xff0c;它可以实现O(1)的静态区间查询&#xff0c;可以适用于查询操作频繁但数据不修改的场景 题目来源 https://www.luogu.com.cn/problem/P3865 题目介绍 给定一个长度为 N 的数列&#xff0c;和 M 次询问&#xff0c;求出每一次询问的区间…...

Java常用类-比较器

目录 一、为什么需要比较器&#xff1f;二、核心差异速记表三、Comparable&#xff1a;对象自带的 “默认规则”1. 核心作用2. 源码定义3. 实战&#xff1a;给Student类加默认规则4. 源码验证&#xff08;以Integer为例&#xff09; 四、Comparator&#xff1a;临时的 “外部规…...

Python----机器学习(模型评估:准确率、损失函数值、精确度、召回率、F1分数、混淆矩阵、ROC曲线和AUC值、Top-k精度)

一、模型评估 1. 准确率&#xff08;Accuracy&#xff09;&#xff1a;这是最基本的评估指标之一&#xff0c;表示模型在测试集上正确 分类样本的比例。对于分类任务而言&#xff0c;准确率是衡量模型性能的直观标准。 2. 损失函数值&#xff08;Loss&#xff09;&#xff1…...

Linux工作台文件操作命令全流程解析(高级篇之vim和nano精讲)

全文目录 1 简单易用的 Nano (入门之选)1.1 适用场景1.2 安装命令1.3 基础操作1.4 优点 2 功能强大的 Vim2.1 适用场景2.2 安装命令2.3 模式说明‌2.4 常用命令2.4.1 普通模式2.4.2 编辑模式2.4.3 可视模式2.4.4 命令行模式 3 参考文献 写在前面 作为运维或者研发&#xff0c;日…...

大数据产品销售数据分析:基于Python机器学习产品销售数据爬虫可视化分析预测系统设计与实现

文章目录 大数据产品销售数据分析&#xff1a;基于Python机器学习产品销售数据爬虫可视化分析预测系统设计与实现一、项目概述二、项目说明三、研究意义四、系统总体架构设计总体框架技术架构数据可视化模块设计图后台管理模块设计数据库设计 五、开发技术介绍Flask框架Python爬…...

VS2022 Qt配置Qxlsx

目录 1、下载QXlsx&#xff0c;并解压文件夹 ​编辑2、打开VS2022配置QXlsx 3、VS配置Qxslx库 方法一&#xff1a;常规方法 方法二&#xff1a;直接使用源码 方法三&#xff1a;将QXlsx添加到Qt安装目录&#xff08;暂时尝试未成功&#xff09; 1、下载QXlsx&#xff0c;…...

OSPF案例

拓扑图&#xff1a; 要求&#xff1a; 1&#xff0c;R5为ISP&#xff0c;其上只能配置IP地址&#xff1b;R4作为企业边界路由器&#xff0c; 出口公网地址需要通过PPP协议获取&#xff0c;并进行chap认证 2&#xff0c;整个OSPF环境IP基于172.16.0.0/16划分&#xff1b;…...

1.1.2 简化迭代器 yield return的使用

yield return 是一个用于简化迭代器(Iterator)实现的关键字组合。它的核心作用是让开发者能够以更简洁的方式定义一个按需生成序列的方法(生成器方法),而无需显式实现 IEnumerable 或 IEnumerator 接口。yield return 方法会在每次迭代时按需生成下一个值,而不是一次性生…...

《用MATLAB玩转游戏开发》贪吃蛇的百变玩法:从命令行到AI对战

《用MATLAB玩转游戏开发&#xff1a;从零开始打造你的数字乐园》基础篇&#xff08;2D图形交互&#xff09;-&#x1f40d; 贪吃蛇的百变玩法&#xff1a;从命令行到AI对战 &#x1f3ae; 欢迎来到这篇MATLAB贪吃蛇编程全攻略&#xff01;本文将带你从零开始&#xff0c;一步步…...

【数据结构与算法】图的基本概念与遍历

目录 一、图的基本概念 1.1 图的基本组成 1.2 图的分类 1.3 顶点的度数 1.4 路径与回路 1.5 子图与特殊图 二. 图的存储结构 2.1 邻接矩阵 2.2 邻接表 三、深度优先遍历 3.1 原理 3.2 实现步骤 3.3 代码实现 四、广度优先遍历 4.1 原理 4.2 实现步骤 4.3 代码…...

MAE自监督大模型在医学报告生成中的应用

MAE自监督大模型在医学报告生成中的应用详解 一、核心技术原理与医学适配 MAE&#xff08;Masked Autoencoder&#xff09;通过掩膜重建策略&#xff0c;在医学影像领域展现出独特优势&#xff1a; 解剖结构理解&#xff1a;通过随机掩盖图像区域&#xff08;如75%的MRI切片&…...

Linux云服务器配置git开发环境

文章目录 1. 安装 git2. git clone3. git add .4. git commit -m 提交记录5. git push&#x1f351; 异常原因&#x1f351; 解决办法 6. git pull7. git log8. git rm9. git mv10. git status 1. 安装 git sudo yum install git -y2. git clone 此命令的作用是从远程仓库把代…...

Vue v-model 深度解析:实现原理与高级用法

一、v-model 的本质 v-model 是 Vue 中最常用的指令之一&#xff0c;它本质上是一个语法糖&#xff0c;用于在表单元素和自定义组件上实现双向数据绑定。在 Vue 2.x 和 Vue 3.x 中&#xff0c;v-model 的实现机制有所不同&#xff0c;但核心思想都是简化数据绑定的过程。 1.1…...

STM32F103单片机在不需要使用 JTAG 调试接口的情况下,释放引脚给其他功能使用。

最近调试STM32F103的时候&#xff0c;由于引脚比较紧张就用了PB3(SYS_JTDO-TRACESWO)引脚&#xff0c;带电下载完程序后&#xff0c;功能都是正常运行&#xff0c;但是断电再上电&#xff0c;PB3引脚就不受控制了&#xff0c;后来查了一下发现PB3不是普通的IO&#xff0c;需要关…...

手机浏览器IP归属地查询全指南:方法与常见问题解答

在当今数字化时代&#xff0c;手机浏览器已成为人们日常生活中不可或缺的工具之一。然而&#xff0c;在使用手机浏览器的过程中&#xff0c;有时我们需要了解当前网络连接的IP归属地信息&#xff0c;那么&#xff0c;手机浏览器IP归属地怎么查看呢&#xff1f;本文将详细介绍几…...

Microsoft Azure DevOps针对Angular项目创建build版本的yaml

Azure DevOps针对Angular项目创建build版本的yaml&#xff0c;并通过变量控制相应job的执行与否。 注意事项&#xff1a;代码前面的空格是通过Tab控制的而不是通过Space控制的。 yaml文件中包含一下内容&#xff1a; 1. 自动触发build 通过指定code branch使提交到此代码库的…...

Web 架构之负载均衡全解析

文章目录 一、引言二、思维导图三、负载均衡的定义与作用定义作用1. 提高可用性2. 增强性能3. 实现扩展性 四、负载均衡类型硬件负载均衡代表设备优缺点 软件负载均衡应用层负载均衡代表软件优缺点 网络层负载均衡代表软件优缺点 五、负载均衡算法轮询算法&#xff08;Round Ro…...

Linux系统管理与编程16:PXE自动化安装部署centos7.9操作系统

兰生幽谷&#xff0c;不为莫服而不芳&#xff1b; 君子行义&#xff0c;不为莫知而止休。 0.准备 1&#xff09;防火墙和SELinux systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i s/^SELINUX.*/SELINUXdisabled/ /etc/selinux/config (很不好的…...

金丝雀/灰度/蓝绿发布的详解

以下是 金丝雀发布、灰度发布 和 蓝绿发布 的详细解析&#xff0c;涵盖核心原理、技术实现、适用场景及实际案例&#xff1a; 1. 金丝雀发布 (Canary Release) 核心原理 渐进式流量切换&#xff1a;将新版本部署到生产环境后&#xff0c;逐步将用户流量从旧版本迁移到新版本&…...

如何通过ABAP获取SAP生产订单的目标成本

SAP存储生产订单成本的主要底表包括&#xff1a; COBK: CO凭证表头COEP: CO凭证行项目COSS: 来自CO内部的汇总数据COSP: 来自CO外部部的汇总数据 先说结论&#xff1a;SAP 对生产订单的目标成本是没有保存到底表的。那么如何通过代码的方式获取呢&#xff1f; K_KKB_KKBCS_O…...

git 多个提交记录合并为一个

1.场景 有时候用devops等平台测试问题&#xff0c;需要多次修改小的记录提交&#xff0c;但是最终我们在合并主干的时候不想留那么多乱七八糟的记录&#xff0c;就需要在此分支合并这些提交记录&#xff0c;再合并到主干。 2.交互式变基 2.1 确定要合并的提交范围 # 查看最近…...

深入理解栈数据结构(Java实现):从原理到实战应用

在计算机科学的世界里&#xff0c;数据结构是构建高效程序的基石&#xff0c;而栈作为其中最基础且应用广泛的一种数据结构&#xff0c;其独特的 “后进先出&#xff08;LIFO&#xff09;” 特性&#xff0c;使其在众多领域发挥着关键作用。从算法设计到编译器实现&#xff0c;…...

支付宝 SEO 优化:提升小程序曝光与流量的完整指南

在拥有庞大用户基数的支付宝平台上&#xff0c;小程序已成为商家触达用户、提供服务的重要渠道。然而&#xff0c;随着平台上小程序数量的快速增长&#xff0c;如何在激烈的竞争中脱颖而出&#xff0c;获得更多的曝光和流量&#xff0c;成为每个开发者和运营者必须面对的关键挑…...

【leetcode100】最长重复子数组

1、题目描述 给两个整数数组 nums1 和 nums2 &#xff0c;返回 两个数组中 公共的 、长度最长的子数组的长度 。 示例 1&#xff1a; 输入&#xff1a;nums1 [1,2,3,2,1], nums2 [3,2,1,4,7] 输出&#xff1a;3 解释&#xff1a;长度最长的公共子数组是 [3,2,1] 。示例 2&…...

代码随想录算法训练营第五十六天| 图论2—卡码网99. 岛屿数量(dfs bfs)

假期归来继续刷题&#xff0c;图论第二天&#xff0c;主要是进一步熟悉dfs 和 bfs 的运用。 99. 岛屿数量&#xff08;dfs&#xff09; 99. 岛屿数量 ACM模式还是需要练&#xff0c;不过现在输入输出的感觉已经比较熟悉了。首先是要按照输入搭建一个grid&#xff0c;然后有一…...

源码示例:使用SpringBoot+Vue+ElementUI+UniAPP技术组合开发一套小微企业ERP系统

目录 一、系统架构设计 1、技术分层 2、开发环境 二、快速开发实践 1、后端搭建&#xff08;Spring Boot&#xff09; 2、前端管理端&#xff08;VueElementUI&#xff09; 3、移动端开发&#xff08;UniAPP&#xff09; 三、关键集成方案 1、统一接口处理 2、跨平台…...

基于Django框架的股票分红数据爬虫和展示系统

项目截图 一、项目简介 本项目是一个基于 Django 框架的股票分红数据爬虫和展示系统。它可以从东方财富网站爬取股票分红数据&#xff0c;并将数据存储到 Django 数据库中&#xff0c;同时提供数据查询、导出和图表展示功能。该系统为用户提供了一个方便的平台&#xff0c;用于…...

QT高级(1)QTableView自定义委托集合,一个类实现若干委托

自定义委托集合 1同系列文章2 功能3 源码 1同系列文章 QT中级&#xff08;1&#xff09;QTableView自定义委托&#xff08;一&#xff09;实现QSpinBox、QDoubleSpinBox委托 QT中级&#xff08;2&#xff09;QTableView自定义委托&#xff08;二&#xff09;实现QProgressBar委…...