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

计算机网络 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.xdnf.cn/news/5277.html

相关文章:

  • 每日算法-250510
  • 深入理解Embedding技术-什么是Embedding?
  • 使用fdisk 、gdisk管理分区
  • Satori:元动作 + 内建搜索机制,让大模型实现超级推理能力
  • python:ASCII-generator 实用教程
  • $\int_{0}^{1} x \arcsin \sqrt{4x - 4x^2}dx$
  • LintCode第366题-斐波那契数列
  • 各种环境测试
  • 解释器和基于规则的系统比较
  • 【Linux基础】文件和目录管理指令
  • 对日开发 TeraTerm ttl脚本开发环境配置
  • python04——条件判断(选择结构)
  • 部署RocketMQ
  • 数孪实战笔记(1)数字孪生的含义、应用及技术体系
  • java-代理
  • [特殊字符] AI网关:大模型时代的智能交通指挥官 [特殊字符]
  • 科大讯飞TTS(文字转语音)和STT(语音转文字)
  • 如何将 Windows 11 的开始菜单移到左侧
  • ECMAScript 2017(ES2017):异步编程与对象操作的革新
  • CUDA编程——性能优化基本技巧
  • 常用的Linux命令100条
  • python 版本管理用的是pyenv pip install 把东西安装到那里了,好的检测方法,注意是windows环境
  • RENAME 语句与RENAME选项学习
  • 理解Yocto项目中`${D}`作为模拟目标系统根文件结构的临时目录
  • 投影显示技术全解析:主流方案对比与雷克赛恩 CyberPro1 的核心优势
  • 【桌面】【输入法】常见问题汇总
  • Day 14
  • 介绍一下synchronized锁升级过程
  • 2024年AI发展趋势全面解析:从多模态到AGI的突破
  • LintCode第485题-生成给定大小的数组,第220题-冰雹猜想,第235题-分解质因数