【计算机网络:自顶向下方法】(四)网络层 (IPV4 | IPV6 | 路由算法 )

news2024/7/4 6:17:24

【计算机网络:自顶向下方法 第7版 | 中科大 】
在这里插入图片描述

第4章 网络层 : 数据平面

4.1 导论

网络层服务
在这里插入图片描述
网络层功能

  • 转发: 将分组从路由器 的输入接口转发到合适 的输出接口 (局部)
  • 路由: 使用路由算法来 决定分组从发送主机到 目标接收主机的路径 (全局 )
    • 路由选择算法
    • 路由选择协议

数据平面

  •  本地,每个路由器功能
  •  决定从路由器输入端口 到达的分组如何转发到输出端口
  •  转发功能:
    • 传统方式:基于目标 地址+转发表
    • SDN方式:基于多个 字段 + 流

控制平面

  • 网络范围内的逻辑
  • 决定数据报如何在路由器之间 路由,决定数据报从源到目标 主机之间的端到端路径
  • 2个控制平面方法:
    • 传统的路由算法: 在路由器 中被实现
    • software-defined networking (SDN): 在远程的服务器中 实现

传统方式:路由和转发的相互作用 Vs SDN方式:逻辑集中的控制平面

  • 传统方式
    在这里插入图片描述
  • SDN 方式
    在这里插入图片描述

网络服务模型

  • 在某些网络架构中是第三个重要的功能 ATM, frame relay, X.25
  • 在分组传输之前,在两个主机之间,在通过一些 路由器所构成的路径上建立一个网络层连接 涉及到路由器
  • 网络层和传输层连接服务区别:
    • 网络层: 在2个主机之间,涉及到路径上的一些路由器
    • 传输层: 在2个进程之间,很可能只体现在端系统上 (TCP连接)
      在这里插入图片描述
      Q: 从发送方主机到接收方主机传输数据报的“通道” ,网络提供什么样的服务模型?
  • 对于单个数据报的服务: 可靠传送 延迟保证,如:少于 40ms的延迟
  • 对于数据报流的服务: 保序数据报传送 保证流的最小带宽 分组之间的延迟差

4.2 路由器组成

概况

在这里插入图片描述

  • 路由:运行路由选择算法/协议 (RIP, OSPF, BGP)-生成 路由表
  • 转发:从输入到输出链路交换数据报-根据路由表进行分组 的转发

输入端口功能

在这里插入图片描述

  • 基于目标的转发: 如果地址范围如果没有划分的特别规整,会发生什么?
  • **最长前缀匹配 longest prefix matching Destination Address Range** : 当给定目标地址查找转发表时,采用最长地址前 缀匹配的目标地址表项 . (IP地址部分详解 )

输入端口缓存

在这里插入图片描述

交换结构

  • 将分组从输入缓冲区传输到合适的输出端口
  • 交换速率:分组可以按照该速率从输入传输到输 出
    • 运行速度经常是输入/输出链路速率的若干倍
    • N 个输入端口:交换机构的交换速度是输入线路速度的N倍比较理想,才不会成为瓶颈
       3种典型的交换机构
      在这里插入图片描述

第一代路由器

  • 在CPU直接控制下的交换,采用传统的计算机
  • 分组被拷贝到系统内存,CPU从分组的头部提取出目标 地址,查找转发表,找到对应的输出端口,拷贝到输出 端口
  • 转发速率被内存的带宽限制 (数据报通过BUS两遍)
  • 一次只能转发一个分组
    在这里插入图片描述

通过总线交换

在这里插入图片描述

  • 数据报通过共享总线,从输入端 口转发到输出端口
  • 总线竞争: 交换速度受限于总线 带宽
  • 1 次处理一个分组
  • 1 Gbps bus , Cisco 1900; 32 Gbps bus, Cisco 5600;对于接 入或企业级路由器,速度足够( 但不适合区域或骨干网络)

通过互联网络(crossbar等)的交换

在这里插入图片描述
 同时并发转发多个分组,克服总线带宽限制
 Banyan(榕树)网络,crossbar(纵横) 和其它的互联网络被开发,将多个处理 器连接成多处理器
 当分组从端口A到达,转给端口Y;控 制器短接相应的两个总线
 高级设计:将数据报分片为固定长度的 信元,通过交换网络交换

输出端口

在这里插入图片描述
在这里插入图片描述
 假设交换速率Rswitch是Rline的N倍(N:输入端口的数量)
 当多个输入端口同时向输出端口发送时,缓冲该分组(当通 过交换网络到达的速率超过输出速率则缓存)
排队带来延迟,由于输出端口缓存溢出则丢弃数据报!

调度机制

在这里插入图片描述

  • 调度: 选择下一个要通过链路传输的分组

FIFO (first in first out) scheduling: 按照 分组到来的次序发送

  •  丢弃策略: (队列满的时候 )
    • tail drop: 丢弃刚到达的分组
    • priority: 根据优先权丢失/移除分组
    • random: 随机地丢弃/移除

调度策略:优先权

  • 优先权调度:发送最高优先 权的分组。
  • 多类,不同类别有不同的 优先权。
    • 类别可能依赖于标记或者其他的头部字段, e.g. IP source/dest, port numbers, ds,etc.
    • 先传高优先级的队列中的分 组,除非没有
    • 高(低)优先权中的分组传 输次序:FIFO

调度策略:其他的

Round Robin (RR) scheduling:

  • 多类
  • 循环扫描不同类型的队列, 发送完一类的一个分组 ,再发送下一个类的一个分组,循环所有类
  • Weighted Fair Queuing (WFQ) : 每个类在每一个循环中获得不同权重的服务量
    在这里插入图片描述

4.3 IP :Internet Protocol

IP:Internet Protocol

IPv4数据报结构

img

  • 版本(Version, 4bit
    对于IPv4,字段的值是4。

  • 首部长度(Header Length, IHL, 4bit
    首部长度说明首部有多少32位字(4字节)。一般为5,相当于5*4=20字节。

  • 服务类别(Type Of Service,8bit

  • 报文长度(Length, 16bit
    IP首部+数据部分的总长度

  • 标识(Identification, 16bit
    用于在IP层对数据报进行分片的时候,标识数据包。

  • 标志 (Flags, 3bit )

    这个3位字段用于控制和识别分片,它们是:

    • 位0:保留,必须为0;
    • 位1:禁止分片(Don’t Fragment,DF),当DF=0时才允许分片;
    • 位2:更多分片(More Fragment,MF),MF=1代表后面还有分片,MF=0 代表已经是最后一个分片。
      如果DF标志被设置为1,但路由要求必须分片报文,此报文会被丢弃。这个标志可被用于发往没有能力组装分片的主机。
      当一个报文被分片,除了最后一片外的所有分片都设置MF为1。最后一个片段具有非零片段偏移字段,将其与未分片数据包区分开,未分片的偏移字段为0。
  • 分片偏移 (Fragment Offset, 13bit
    这个13位字段指明了每个分片相对于原始报文开头的偏移量,以8字节作单位。

  • 存活时间(Time To Live,TTL, 8bit
    本数据报的TTL.

  • 协议 (Protocol, 8bit
    1—-icmp, 2—-igmp, 6—-tcp, 17—-udp, 89—-ospf

  • 首部检验和 (Header Checksum, 16bit
    IP首部的校验和

  • 源IP地址(Source IP, 32bit

  • 目的IP地址(Destination IP, 32bit

IPv4数据报分片

  • 网络链路有MTU(最大传送单元)— 最大可传输的链路的帧
    • 不同的链路类型有不同的MTU
  • 如果IP数据报 > MTU ,则分片,到目的地后再重组
  • IP头部字段用来标记

img

IP数据报分片示例

img

  • 本来要发送 4000 byte 的数据报(head部分 + data部分)

  • 链路的 MTU = 1500 bytes

  • 需要将数据分为3片来发送

  • length:片长度,包括了 20 bytes IP首部部分,最大为MTU

    • length为1500的数据报,实际包含 1500−20=1480 bytes1500−20=1480 ����� 的data部分
    • 最后一片的length为 (4000−20)−1480×2+20=1040(4000−20)−1480×2+20=1040
  • fragflag
    

    :3 bits

    • 第二个bit为 DF(Don’t Flag):为0则该数据报分片,为1则不分片
    • 第三个bit为 MF:为0则后面没有片了,为1则后面还有片
    • 前两片为 1(001),表示该IP数据报分片,且后面还有片
    • 最后一片为 0(000),表示该IP数据报分片,后面没片(即最后一片)
  • offset
    

    :data部分偏移量,以 8 bytes 为单位,只计算data部分

    • 第一片的offset为 0
    • 第二片的offset为 1480 bytes/8 bytes=1851480 �����/8 �����=185

IPv4编址

概述

  • IP地址:32位、主机和路由器接口的ID

  • 接口

    (interface):主机/路由器 和 物理链接 之间的连接

    • 路由器一般有多个接口
    • 主机一般有1到2个接口
  • 每个接口都有一个对应的IP地址

img

接口连接方式

  • 通过路由器连接
  • 有线以太网通过以太网交换机连接
  • 无线网络通过WiFi基站连接

子网(Subnet)

IP地址

  • 网络部分 —— 高位
  • 主机部分 —— 低位

子网

  • 子网部分相同
  • 可以不通过路由器到达彼此

把路由器去掉,剩下的每个区域都是一个子网。

img

上图中有6个子网。

分类编制(Classful Addressing)

  • A类
    • 网络部分前1位 —— 0
    • 网络部分 8 bits,主机部分 24 bits
    • IP地址范围:1.0.0.0127.255.255.255
  • B类
    • 网络部分前2位 —— 10
    • 网络部分 16 bits,主机部分 16 bits
    • IP地址范围:128.0.0.0191.255.255.255
  • C类
    • 网络部分前3位 —— 110
    • 网络部分 24 bits,主机部分 8 bits
    • IP地址范围:192.0.0.0223.255.255.255
  • D类
    • 前4位 —— 1110
    • 用于多播地址
  • E类
    • 前4位 —— 1111
    • 被留作将来使用

img

子网掩码(subnet mask)

  • IP地址采用点分十进制:例如 192.32.216.9
  • 分类编制导致了地址资源的浪费
  • 子网和子网掩码:可以减小地址资源的浪费

img

200.23.16.64/27中的27网络部分+子网部分 的位数

  • 子网掩码
    • 网络部分+子网部分 置1
    • 主机部分 置0
  • 子网的网络ID
    • 网络部分+子网部分 不变
    • 主机部分 置0

CIDR:无类的域间路由(Classless InterDomain Routing)

  • IP分为两个部分 —— 子网部分 + 主机部分
  • 子网部分可以是任意长度
  • 地址格式:a.b.c.d / x,其中x是子网部分位数
  • 网络部分称为前缀(prefix)

如何获取IP地址

主机如何获取IP地址

主机获取IP地址:

  • 硬编码:自己设置静态的IP设置
  • DHCP:动态主机配置(Dynamic Host Configuration Protocol)
      当主机连接网络时,允许主机从网络服务器动态获取IP地址。
DHCP
  • 即插即用
  • 可以更新IP
  • 地址重用:主机的IP只有在上线时才固定,下线即释放
  • 支持移动用户

当一台主机加入网络时,从子网中的DHCP服务器获取IP地址。

img

网络如何获取IP地址

从ISP处获取分配的IP地址。

img

img

ISP如何获取IP地址

ISP从ICANN组织获取IP地址

ICANN:Internet Corporation for Assigned Names and Numbers

  • 分配地址
  • 管理DNS
  • 分配域名、解决争议

NAT:网络地址转换(Network Address Translation)

  • 从这个本地网络出去的报文都有着:相同的源IP+不同的端口号
  • 对于外界网络来说,这个本地网络都是一个IP
    • 本地网络有内部地址,改变该内部地址不需要通知外部网络
    • 改变ISP不需要改变本地网络的内部地址
    • 内部地址在外部不可见(保障安全性)
  • 实现方式
    • 发送出去的报文:(源IP(内部的IP),端口号)—> (NAT IP(NAT统一的IP),新端口号)
      • 外部发来的报文的目的地址填写:(NAT IP(NAT统一的IP),新端口号)
    • NAT转换表:记住(源IP(内部的IP),端口号)<—> (NAT IP(NAT统一的IP),新端口号)的转换对
    • 收到的报文:根据NAT转换表,(NAT IP(NAT统一的IP),新端口号)—> (源IP(内部的IP),端口号)

img

  • 外部不知道内部的情况,所以外部不能发起通信
  • 预留给内部的IP地址:
    • 10.0.0.0~10.255.255.255(A类)
    • 176.16.0.0~172.31.255.255(B类)
    • 192.168.0.0~192.168.255.255(C类)
  • 可以有16bit的主机地址位(10.0.0.0~10.255.255.255),一个NAT支持内部60000+的连接
  • NAT存在争议
    • 路由器本来是在第3层,但NAT修改了端口号,而端口号包含在TCP/UDP的段结构里,即改了第4层的内容
    • 违反了端到端
    • 所以用IPv6来解决地址短缺

ICMP:因特网控制消息协议(Internet Control Message Protocol)

ICMP
  • 主机、路由器、网关来交流网络层信息
    • 报错:到达不了主机、网络、端口、协议等等
    • 用于探测:echo request/reply(使用ping)
  • IP的一部分,但体系结构在IP之上:ICMP消息搭载在IP数据报上
  • ICMP消息:type,code,引发错误的IP数据报首部和前8个字节
TypeCodedescription描述
00echo reply (ping)echo响应 (被程序ping使用)
30dest. network unreachable目标网络不可达
31dest host unreachable目标主机不可达
32dest protocol unreachable目标协议不可达
33dest port unreachable目标端口不可达
36dest network unknown未知的目标网络
37dest host unknown未知的目标主机
40source quench (congestion control - not used)源端关闭(拥塞控制)
80echo request (ping)Echo请求
90route advertisement路由通告
100router discovery路由器的发现/选择/请求
110TTL expiredTTL 超时
120bad IP headerIP 报首部参数错误
  • ICMP是管控制的IP的“兄弟”
  • ICMP被IP使用,同时作为网络层协议使用IP
  • ping、traceroute、path MTU discovery 都使用到了ICMP
    • ping:使用 ICMP Echo request/repley msgs
    • path MTU discovery
      • 发送一个大的IP数据报,该数据报的 don’t fragment 置 1(即不分片)
      • 减小数据报大小,直至成功(成功标志:没有接收到返回的ICMP消息)
Traceroute

Traceroute程序:跟踪从一台主机到其他主机之间的路由,用ICMP报文实现。

  • 源发送一系列 UDP报文段 到目的
    • 第一个数据报 TTL=1,第二个数据报 TTL=2,以此类推
    • 使用不常见的端口号
  • 当第n个数据报到达第n台主机时
    • 这个第n个数据报TTL刚好过期
    • 路由器丢弃该数据报
    • 路由器发送一个ICMP告警报文(type 11,code 0)给源
    • 该ICMP告警报文包括第n台路由器名字及其IP
  • 当该ICMP报文返回到源主机,源主机计算RTT(往返时延),得到第n台路由器名字及其IP
  • 标准的Traceroute程序用相同的TTL发送3个一组的分组,输出对每个TTL提供3个结果
  • 停止条件步骤
    • UDP数据报到达目的主机
    • 目的主机返回 ICMP端口不可到达报文(type 3,code 3)
    • 源主机接收到该ICMP报文,则停止

在Mac上可在app“系统信息”中的窗口->网络实用工具中使用Ping、Traceroute等工具。

IPv6

  • 动机
    • 初动机:解决32位IP地址空间分配完的问题
    • 更快处理/转发的头部格式
    • 头部支持QoS
  • IPv6数据报格式
    • 固定长度的头部:40 byte (IPv4头部长度不固定)
    • 不允许分片

IPv6数据报结构

img

  • 版本(Version, 4 bit
    对于IPv6,字段的值是6(0110)。

  • 流量类型(Traffic class,8 bit
    用来标识对应IPv6的通信流类别,类似于IPv4中的ToS。

  • 流标签(Flow label,20 bit
    用来标记报文的数据流类型,以便在网络层区分不同的报文。

  • 有效载荷长度(Payload length,16 bit
    给出了IPv6数据报中跟在定长的40 byte数据报头部后面的字节数量。

  • 下一个头部(Next Header,8 bit
    该字段标识数据报中的内容(数据字段)需要交付给哪个协议(如TCP或UDP)。无扩展的头部,Next Header指向TCP/UDP;有扩展的头部,Next Header指向的下一个头部比如路由选择。与IPv4头部 协议(Protocol)字段相同。
    img

  • 跳段数限制(Hop limit,8 bit

    生存时间,相当于IPv4中的TTL。转发数据报的每台路由器讲对该字段内容 -1,如果跳转限制计数到0时,则丢弃该数据报

  • 源IP地址(Source Address,128 bit

  • 目的IP地址(Destination Address,128 bit

  • 数据(Data)

IPv6相较于IPv4的部分改变

  • 去除Checksum:加快了转发速度

  • Options:依旧允许可选项,但是不放在头部,而是放在 Next Header 指出的位置上

  • ICMPv6

    :ICMP的IPv6版本

    • 增加新的 type:比如“Packet Too Big”
    • 包含多播组管理

IPv6地址

  • 三种类型:单播(unicast)、多播(multicast)、任意播(anycast)

  • 冒号划分的十六进制(128 bit)

    eg. 68E6:8C64:FFFF:FFFF:0:1180:960A:FFFF

  • 0的压缩

    用双冒号::表示一组0或多组连续的0,但只能出现一次。

    • FF05:0:0:0:0:0:0:B3 = FF05::B3
    • 0:0:0:0:0:0:128.10.2.1 = ::128.10.2.1(IPv4和IPv6兼容的IP)
    • 12AB:0:0:CD30:0:0:0:0 = 12AB::CD30:0:0:0:0 = 12AB:0:0:CD30::(如果出现两个多个0,随意压一个都行)

单播(Unicast address)

单播的地址格式(一共 128 bit):

  • 全球路由前缀(Global routing prefix,48 bit

    前3位为001,分配给公司和组织。

  • 子网ID(Subnet ID,16 bit

    如果是小公司,只需要1个子网的话,全设为0

  • 接口ID(Interface ID,64 bit

    基于 EUI-64

IPv4到IPv6的迁移

  • 现在的网络既有IPv4,也有IPv6。世界上的所有网从IPv4到IPv6需要很长的转换时间。
  • 两种IPv4到IPv6的迁移
    • 双栈(Dual Stack):一些路由器可以兼容IPv4和IPv6
    • 隧道(Tunneling):当IPv6穿过IPv4的路由器上时,将IPv6作为载荷承载在IPv4上

双栈(Dual Stack)

  • 早期的设计
  • 一些路由器有双栈(IPv4 & IPv6),可以翻译这两种格式

img

隧道(Tunneling)

当IPv6穿过IPv4的路由器上时,将IPv6作为载荷承载在IPv4上。就是像一个连接两个IPv6路由器的IPv4隧道

img

4.4 通用转发和 SDN

传统

在这里插入图片描述

  • 网络层功能: 转发:对于从某个端口 到来的分组转发到合适的 输出端口 路由:决定分组从源端 到目标端的路径 路由算法
  • 类比: 旅行  转发:一个多岔路口的 进入和转出过程  路由:规划从源到目标 的旅行路径
    每个路由器上都有实现路由算法元件(它们之间需要相互交 互)- 形成传统IP实现方式的控制平面
    在这里插入图片描述
  • 路由器的网络层功能:
    • IP转发:对于到来的分组按照路由表决定如何转发,数 据平面
  • 路由:决定路径,计算路由表;处在控制平面

SDN:逻辑上集中的控制平面

  • 一个不同的(通常是远程)控制器和CA交互,控制器决定分组 转发的逻辑(可编程),CA所在设备执行逻辑。
    在这里插入图片描述

SDN的主要思路

  • 网络设备数据平面和控制平面分离
  • 数据平面-分组交换机
    • 将路由器、交换机和目前大多数网络设备的功能进一步抽 象成:按照流表(由控制平面设置的控制逻辑)进行PDU (帧、分组)的动作(包括转发、丢弃、拷贝、泛洪、阻 塞)
    • 统一化设备功能:SDN交换机(分组交换机),执行控制 逻辑
  • 控制平面-控制器+网络应用
    • 分离、集中
    • 计算和下发控制逻辑:流表

优点

水平集成控制平面的开放实现(而非私有实 现),创造出好的产业生态,促进发展
集中式实现控制逻辑,网络管理容易
基于流表的匹配+行动的工作方式允许“可编程的”分组交换机

在这里插入图片描述
通用转发和SDN OpenFlow数据平面抽象 每个路由器包含一个流表(被逻辑上集中的控制器计算和分发)

OpenFlow数据平面抽象

一种网络通信协议,应用于SDN架构中控制器和转发器之间的通信。

  • 流: 由分组(帧)头部字段所定义
  • 通用转发: 简单的分组处理规则
    • 模式: 将分组头部字段和流表进行匹配
    • 行动:对于匹配上的分组,可以是丢弃、转发、修改、 将匹配的分组发送给控制器
    • 优先权Priority: 几个模式匹配了,优先采用哪个,消除歧 义
    • 计数器Counters: #bytes 以及#packets
      路由器中的流表定义了路由器的匹配+行动规则 (流表由控制器计算并下发 )

OpenFlow抽象

  •  match+action: 统一化各种网络设备提供的功能
    在这里插入图片描述

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

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

相关文章

八、(了解即可)MyBatis懒加载(或者叫延迟加载)

文章目录 八、懒加载(了解即可)8.1 为啥需要懒加载?8.2 懒加载是什么&#xff1f;8.3 开启方式8.4 既然fetchType可以控制懒加载那么我仅仅配置fetchType不配置全局的可以吗&#xff1f;8.5 aggressiveLazyLoading是做什么么的&#xff1f;8.6 注意点8.7 案例验证懒加载准备工…

openEuler RISC-V 成功适配 LicheePi 4A 开发板,推动 RISC-V 生态发展

近期&#xff0c;RISC-V SIG 在 LicheePi 4A 开发板上成功实现了欧拉操作系统的适配。目前&#xff0c;最新版本的 openEuler RISC-V 23.03 V1 镜像已在 LicheePi 4A 开发板上可用&#xff0c;这一成果再次展现了 openEuler 在推动 RISC-V 生态发展过程中所取得的新突破。 下载…

JavaWeb综合案例1-2

1. 环境搭建 1.1 创建maven项目 补充相应的文件目录 1.2 修改pom文件及创建相应的基本框架 1.3 创建接口&#xff0c;实体类&#xff0c;映射到xml文件等等 创建xml映射文件 创建接口文件 创建实体类 导入对应的sqlsession工具类 导入对应的brand.html页面 2. 查询所有 2.1 编…

【看表情包学Linux】软硬链接

&#x1f923; 爆笑教程 &#x1f449; 《看表情包学Linux》&#x1f448; 猛戳订阅 &#x1f525; &#x1f4ad; 写在前面&#xff1a;上面我们学到的所有东西&#xff0c;全部都是在内存中的。是不是所有的文件都被打开了呢&#xff1f;不是所有的文件&#xff0c;都被打开…

论文投稿技巧

论文的投稿技巧包括会议论文的投稿技巧和期刊论文的投稿技巧。会议论文和期刊论文投稿技巧差别较大&#xff0c;读者需要根据自己投稿的是会议论文还是期刊论文使用不同的技巧。 为了提高会议论文的录用率&#xff0c;需要重点考虑的因素包含如下几方面。 1. 会议的主题 投稿…

【Linux】冯诺依曼体系和操作系统:

1.冯诺依曼体系结构&#xff1a; 1.1体系概述理清&#xff1a; 我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体系。 &#x1f525;我们将冯诺依曼体系结构分为输入设备、输出设备、存储器和CPU 上述部分…

一个混淆Tailwindcss类的工具

一个混淆Tailwindcss类的工具 一个混淆Tailwindcss类的工具 前言方案的寻找如何实现混淆如何使用 1. 安装这2个包2. 执行一下脚本3. 添加 prepare script 在你的 package.json 里4. 注册这个插件 webpackvite 效果预览 核心原理 SSR 场景思考和解决方案 错误与反馈 前言 ta…

Ant Design Pro---【03 UMI中使用MOCK】

Mock 数据 Mock 数据是前端开发过程中必不可少的一环&#xff0c;是分离前后端开发的关键链路。通过预先跟服务器端约定好的接口&#xff0c;模拟请求数据甚至逻辑&#xff0c;能够让前端开发独立自主&#xff0c;不会被服务端的开发所阻塞。 约定式 Mock 文件 Umi 约定 /mo…

SpringData-Redis配置及常用操作

文章目录 1.引入依赖2.yml配置文件3.设置Redis序列化4.使用教程5.操作String数据类型6.操作Hash数据类型7.操作Set数据类型8.操作List数据类型9.操作Sorted Set 数据类型 1.引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId…

史上最烂 spring web 原理分析

盗引下篇spring web spring web、spring web 与 tomcat、映射器与适配器、参数解析器与类型转换器、返回值处理器与消息转换器、异常处理器、ControllerAdvice、spring web 工作流程。 版本 jdk&#xff1a;8spring&#xff1a;5.3.20spring boot&#xff1a;2.7.0 1 spring…

关键词高亮显示浏览器 Edge 插件开发 源码

插件功能 将网页中的关键词高亮显示 项目结构 $ tree . |-- content # 注入到网页中的 js 与 css | |-- content.css | -- content.js |-- icons # 插件用到的图标 | |-- icon128.png | |-- icon16.png | |-- icon32.png | -- icon48.png |-- manifest.json # …

Python+Yolov5电梯口跌倒识别

程序示例精选 PythonYolov5电梯口跌倒识别 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<PythonYolov5电梯口跌倒识别>>编写代码&#xff0c;代码整洁&#xff0c;规则&#x…

【AGC】applinking服务接入产生崩溃问题

【关键字】 AGC、applinking、崩溃 【问题描述】 开发者反馈在应用中集成了AGC的applinking服务&#xff0c;在打开app时遇到了一些问题。具体如下所述&#xff1a; 在接入app linking后&#xff0c;从浏览器中访问短链接&#xff0c;能正常唤起app, 但app启动后就崩溃了&am…

UAD142A01 3BHE012551R0001使用以太网交叉电缆,您也可以直接连接。

​ UAD142A01 3BHE012551R0001使用以太网交叉电缆&#xff0c;您也可以直接连接。 如何将 MicroLogix PLC 连接到计算机并将程序下载到 MicroLogix 1100 MicroLogix PLC由美国罗克韦尔自动化旗下知名工业自动化厂商Allen-Bradley设计。MicroLogix 1100 主要用于小型工业。我们在…

【视频解读】动手学深度学习V2_02深度学习介绍

1.AI地图 人工智能的地图&#xff0c;x轴是不同模式&#xff0c;由符号学到概率模型 到机器学习&#xff0c;Y轴是我想做的东西&#xff0c;最底下的是感知&#xff0c;我得了解这是什么东西&#xff0c;然后做推理&#xff0c;形成自己的知识&#xff0c;最后做规划。最底层的…

07-Vue技术栈之(组件之间的通信方式)

目录 1、组件的自定义事件1.1 绑定自定义事件&#xff1a;1.1.1 第一种方式1.1.2 第二种方式1.1.3 自定义事件只触发一次 1.2 解绑自定义事件1.3绑定原生DOM事件1.4 总结 2、全局事件总线&#xff08;GlobalEventBus&#xff09;2.1 应用全局事件总线 3、 消息订阅与发布&#…

SwiftUI 极简实现文本摆动弹性动画

概览 SwiftUI 为我们来了界面设计和调试上的便利&#xff0c;只需几行代码我们就能实现一个不错的文本动画效果&#xff1a; 如上图所示&#xff0c;我们在 SwiftUI 中基本还没发力&#xff0c;就实现了文本摆动弹性动画。 这究竟是怎么做到的呢&#xff1f; 无需等待&#…

英文论文(sci)解读复现【NO.7】基于注意机制的改进YOLOv5s目标检测算法

此前出了目标检测算法改进专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读发表高水平学术期刊中的 SCI论文&a…

Loadrunner性能测试(一)

备注&#xff1a;电脑最好安装有IE浏览器 一、下载安装包 链接&#xff1a;https://pan.baidu.com/s/1f5Sw0QK5zrLCU1EbN01evg?pwdbite 提取码&#xff1a;bite 包含的文件有&#xff1a; 二、安装loadrunner 注意&#xff0c;以下教程仅展示需要特别注意的步骤&#x…

PHP学习笔记第一天

前言 作者简介&#xff1a;不知名白帽&#xff0c;网络安全学习者。 博客主页&#xff1a;不知名白帽的博客_CSDN博客-网络安全,CTF,内网渗透领域博主 网络安全交流社区&#xff1a;https://bbs.csdn.net/forums/angluoanquan 目录 PHP语法 基本的PHP语法 PHP的数据类型 PH…