计算机网络 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转发出去

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/905100.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker中运行的Chrome崩溃问题解决

问题 各位看官是否在 Docker 容器中的 Linux 桌面环境&#xff08;如Xfce&#xff09;上启动Chrome &#xff0c;遇到了令人沮丧的频繁崩溃问题&#xff1f;尤其是在打开包含图片、视频的网页&#xff0c;或者进行一些稍复杂的操作时&#xff0c;窗口突然消失&#xff1f;如果…

K8S cgroups详解

以下是 Kubernetes 中 cgroups&#xff08;Control Groups&#xff09; 的详细解析&#xff0c;涵盖其核心原理、在 Kubernetes 中的具体应用及实践操作&#xff1a; 一、cgroups 基础概念 1. 是什么&#xff1f; cgroups 是 Linux 内核提供的 资源隔离与控制机制&#xff0c…

javaer快速从idea转战vscode

插件安装列表 在插市场安装下面插件 Extension Pack for JavaSpring Boot Tools 配置文件提示Database Client Database/No-SQL管理工具httpYac - Rest Client .http文件编辑、API测试工具 https://httpyac.github.io/guide/request.htmlGit Graph 图形化Git工具XML by Red H…

[项目总结] 抽奖系统项目技术应用总结

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

【赵渝强老师】TiDB SQL层的工作机制

TiDB节点的SQL层&#xff0c;即TiDB Server&#xff0c;它负责将SQL翻译成Key-Value操作&#xff0c;将其转发给共用的分布式Key-Value存储层TiKV&#xff0c;然后组装TiKV返回的结果&#xff0c;最终将查询结果返回给客户端。这一层的节点都是无状态的&#xff0c;节点本身并不…

性能远超SAM系模型,苏黎世大学等开发通用3D血管分割基础模型

如果把人的身体比作一座庞大的城市&#xff0c;那么血管无疑就是这座城市的「道路」&#xff0c;动脉、静脉以及毛细血管对应着高速公路、城市道路以及乡间小道&#xff0c;它们相互协作&#xff0c;通过血液将营养物质、氧气等输送到身体各处&#xff0c;从而维持着这座「城市…

git高效杀器——cz-customizable 搭配 commitlint

What is cz-customizable and commitlint? cz-customizable 一款可定制化的Commitizen插件(也可作为独立工具),旨在帮助创建如约定式提交规范的一致性提交消息。commitlint commitlint 是一个用于检查 Git 提交信息的工具,它可以帮助开发者保持提交信息的规范性和一致性。…

Spark 中RDD、Job,stage,task的关系

目录 1. 概念定义1.1 Job1.2 Stage1.3 Task 2. 关系总结3. 示例分析代码示例执行过程 4. Spark中的运行流程5. 关键点5.1 宽依赖和窄依赖5.2 并行度5.3 性能优化 **6. 总结****1. RDD的核心作用****1.1 什么是RDD&#xff1f;****1.2 RDD与Job、Stage、Task的关系** **2. Job、…

Kubernetes基础(三十二):Worker节点启动全解析

Worker节点是Kubernetes集群的"肌肉"&#xff0c;负责实际运行业务负载。本文将深入剖析Worker节点的完整启动流程&#xff0c;并揭秘生产环境中的关键优化点。 一、启动流程全景图 二、核心启动阶段详解 1. 系统初始化&#xff08;0-30秒&#xff09; 关键任务&a…

matlab实现模型预测控制

考虑扩展状态空间形式 缩写为 对于未来的预测&#xff0c;这里要注意&#xff0c;默认了最小预测时域为1&#xff0c;如果不为1&#xff0c;从k1到k最小预测时域的x的预测为0 模型预测控制matlab运行代码&#xff0c;可实现模型预测控制。 StateMPC是按照钱积新版《预测控制》…

Python_day22

DAY 22 复习日 复习日 仔细回顾一下之前21天的内容&#xff0c;没跟上进度的同学补一下进度。 作业&#xff1a; 自行学习参考如何使用kaggle平台&#xff0c;写下使用注意点&#xff0c;并对下述比赛提交代码 kaggle泰坦里克号人员生还预测 一、Kaggle 基础使用步骤 注册与登录…

【软件测试】基于项目驱动的功能测试报告(持续更新)

目录 一、项目的介绍 1.1 项目背景 二、测试目标 2.1 用户服务模块 2.1.1 用户注册模块 2.1.1.1 测试点 2.1.1.2 边界值分析法(等价类+边界值) 2.1.1.2.1 有效等价类 2.1.1.2.2 无效等价类 2.1.1.2.3 边界值 2.1.1.2.4 测试用例设计 2.1.2 用户登录 2.1.2.1 测试…

QT中多线程的实现

采用官方推荐的 QObject::moveToThread 方式实现&#xff08;相比继承 QThread 更灵活&#xff09;&#xff0c;包含耗时任务执行、主线程通信、线程安全退出等核心功能。 环境说明 Qt 版本&#xff1a;Qt 5.15 或 Qt 6&#xff08;兼容&#xff09;项目类型&#xff1a;GUI …

从知识图谱到精准决策:基于MCP的招投标货物比对溯源系统实践

前言 从最初对人工智能的懵懂认知&#xff0c;到逐渐踏入Prompt工程的世界&#xff0c;我们一路探索&#xff0c;从私有化部署的实际场景&#xff0c;到对DeepSeek技术的全面解读&#xff0c;再逐步深入到NL2SQL、知识图谱构建、RAG知识库设计&#xff0c;以及ChatBI这些高阶应…

maven如何搭建自己的私服(LINUX版)?

环境准备 安装 JDK &#xff1a;确保系统已安装 JDK 8 或更高版本。可以通过以下命令安装 JDK&#xff1a; 安装 OpenJDK &#xff1a;sudo apt update && sudo apt install openjdk-11-jdk 安装 Oracle JDK &#xff1a;需要添加第三方仓库&#xff0c;例如 WebUpd8 …

armv7 backtrace

ref&#xff1a; ARM Cortex-M3/M4/M7 Hardfault异常分析_arm hardfault-CSDN博客

探索 C++23 的 views::cartesian_product

文章目录 一、背景与动机二、基本概念与语法三、使用示例四、特点与优势五、性能与优化六、与 P2374R4 的关系七、编译器支持八、总结 C23 为我们带来了一系列令人兴奋的新特性&#xff0c;其中 views::cartesian_product 是一个非常实用且强大的功能&#xff0c;它允许我们轻…

SHAP分析!Transformer-BiLSTM组合模型SHAP分析,模型可解释不在发愁!

SHAP分析&#xff01;Transformer-BiLSTM组合模型SHAP分析&#xff0c;模型可解释不在发愁&#xff01; 目录 SHAP分析&#xff01;Transformer-BiLSTM组合模型SHAP分析&#xff0c;模型可解释不在发愁&#xff01;效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基于SH…

牛客周赛 Round 92-题解

牛客周赛 Round 92-题解 A-小红的签到题 code #include<iostream> #include<string> using namespace std; string s; int main() {int n;cin >> n;cout << "a_";for (int i 0; i < n - 2; i )cout << b;return 0; }B-小红的模…

Java设计模式之建造者模式:从入门到精通

1. 建造者模式概述 1.1 定义与核心概念 **建造者模式(Builder Pattern)**是一种创建型设计模式,它将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。 专业术语解释表: 术语解释产品(Product)最终要构建的复杂对象建造者(Builder)定义创建产品各个…