网络篇11 | 网络层 ICMP

网络篇11 | 网络层 ICMP

  • 01 简介
  • 02 报文格式
    • 1)Type(类型)
    • 2)Code(代码)
    • 3)Checksum(校验和)
    • 4)ICMP数据部分
  • 03 ICMP数据抓包
    • 1)类型 8:回显请求(Echo Request)
    • 2)类型 13:时间戳请求(Timestamp Request)
      • 协议类型 13(Timestamp 请求)
      • 协议类型 14(Timestamp 应答)
    • 3)类型 17:地址掩码请求(Address Mask Request)
    • 4)类型 9:路由器请求信息(Router Solicitation)
    • 5)类型 10:路由器通告信息(Router Advertisement)
    • 6)类型 3:终点不可达(Destination Unreachable)
    • 7)类型 4:源点抑制(Source Quench)
    • 8)类型 11,超时(Time Exceeded)
    • 9)类型 12:参数问题(Parameter Problem)
    • 10)类型 5:改变路由(路由重定向)
  • 04 关于ICMP报文的几个限制

01 简介

从技术角度来说,ICMP就是一个“错误侦测与回报机制”,其目的就是能够检测网路的连线状况﹐也能确保连线的准确性。当路由器在处理一个数据包的过程中发生了意外,可以通过ICMP向数据包的源端报告有关事件。
其功能主要有:侦测远端主机是否存在,建立及维护路由资料,重导资料传送路径(	ICMP重定向	),资料	流量控制	。ICMP在沟通之中,主要是透过不同的类别(Type)与代码(Code) 让机器来识别不同的连线状况。
在网络中经常会使用到ICMP协议,比如经常使用的用于检查网络通不通的	Ping	命令(Linux和Windows中均有),这个“Ping”的过程实际上就是ICMP协议工作的过程。还有其他的网络命令如跟踪路由的Tracert命令也是基于ICMP协议的。

02 报文格式

在这里插入图片描述

ICMP报文包含在IP数据报中,属于IP的一个用户,IP头部就在ICMP报文的前面,所以一个ICMP报文包括IP头部、ICMP头部和ICMP报文,IP头部的Protocol值为1就说明这是一个ICMP报文,ICMP头部中的类型(Type)域用于说明ICMP报文的作用及格式,此外还有一个代码(Code)域用于详细说明某种ICMP报文的类型,所有数据都在ICMP头部后面。
ICMP报文格式具体由RFC 777,RFC 792规范。

1)Type(类型)

ICMP 报文类型(ICMP Message Type)是指具体的 ICMP 报文中的消息类型,每种类型有一个独特的 Type 编号。
ICMP 类型则更广泛地指代 ICMP 协议本身,表明这些报文是用于控制和管理网络的协议。

下面是一些常见的 ICMP 报文类型及其对应类型的编号:

  • 类差错报文(差异报告报文):
    • 目标不可达(Destination Unreachable):Type 3
    • 源抑制(Source Quench):Type 4
    • 超时(Time Exceeded):Type 11
    • 参数问题(Parameter Problem):Type 12
  • 查询报文:
    • 回显请求(Echo Request):Type 8
    • 回显应答(Echo Reply):Type 0
    • 时间戳请求(Timestamp Request):Type 13
    • 时间戳应答(Timestamp Reply):Type 14
  • 其他类型:
    • 地址掩码请求(Address Mask Request):Type 17
    • 地址掩码应答(Address Mask Reply):Type 18

2)Code(代码)

在 ICMP 报文中,Code 字段通常用于进一步细分报文类型。虽然许多 ICMP 报文类型并不使用 Code 字段,但有些特定的报文类型需要使用 Code 来提供更具体的信息或上下文。以下是一些场景,其中 Code 字段可能会被使用:

  • 差错报文(差异报告报文):某些差错报文类型需要使用 Code 字段来指示特定类型的错误情况。例如,Type 3 的 Destination Unreachable 报文中的 Code 字段可以指示目标不可达的具体原因(网络不可达、主机不可达等)。
    在这里插入图片描述

  • 参数问题(Parameter Problem):Type 12 的 Parameter Problem 报文使用 Code 字段来指示问题的具体位置,例如指示 IP 报文头部中的哪个字段存在问题。

  • 重定向报文(Redirect Message):Type 5 的 Redirect 报文使用 Code 字段来指示重定向数据包的类型,即指示应将数据包发送到哪个更佳的网关。

  • 时间超时(Time Exceeded):Type 11 的 Time Exceeded 报文中的 Code 字段可用于区分生存时间(TTL)超时和片段重新组装超时。

3)Checksum(校验和)

Checksum 的目的是帮助检测数据传输过程中可能引入的错误,例如传输错误、篡改或数据包损坏等。当接收方计算得到的校验和与数据包中的校验和不匹配时,接收方可能会丢弃该数据包或请求重新传输,以确保数据的完整性和正确性。Checksum 在网络通信中起着重要的作用,有助于提高数据传输的可靠性和安全性。

当涉及校验和时,通常会看到以下几种情况:

  • Match(匹配):表示重新计算的校验和与数据包中的校验和完全一致,说明数据包未受损坏或篡改。
  • Mismatch(不匹配):意味着重新计算的校验和与数据包中的校验和不一致,表明数据包可能已经被损坏或篡改,需要进行进一步处理,如丢弃或请求重传。
  • Valid/Invalid Checksum(有效/无效校验和):表示校验和字段是否被正确设置或计算。一个有效的校验和应该能够成功验证数据包的完整性,而无效的校验和可能会导致数据包被丢弃或要求重新传输。

4)ICMP数据部分

ICMP(Internet Control Message Protocol)数据部分在 ICMP 报文中扮演着重要的角色,用于携带特定类型的信息或负载数据。以下是 ICMP 数据部分的一些特点:

  • 根据不同的 ICMP 报文类型而异:ICMP 数据部分的内容取决于具体的 ICMP 报文类型。不同类型的 ICMP 报文可能包含不同的信息或负载数据。
  • 提供有关网络状态或问题的信息:ICMP 数据部分通常用于提供有关网络状态、错误或其他相关信息的内容。例如,Echo Request 报文中的数据部分可能包含发送方发送的用于回显测试的数据;Destination Unreachable 报文可能包含有关无法到达目标的具体原因。
  • 用于识别和处理报文:数据部分有助于接收方正确解析和处理 ICMP 报文。通过检查数据部分中的内容,接收方可以确定报文的用途并采取相应的行动。
  • 长度可变:ICMP 数据部分的长度是可变的,取决于具体的 ICMP 报文类型以及所携带的信息量。有些报文可能只包含少量数据,而其他报文可能携带更多的信息。
  • 用于网络工具和故障排除:ICMP 数据部分对于网络工具和故障排除非常有用。通过分析 ICMP 数据部分中的内容,可以了解网络中发生的情况,并帮助诊断问题。

03 ICMP数据抓包

1)类型 8:回显请求(Echo Request)

类型 8(Echo 请求):发送方向目标主机发送 Echo 请求报文,请求目标主机回送一个 Echo 应答报文。这种类型的 ICMP 报文通常用于检测网络连接是否正常以及计算网络延迟。
类型 0(Echo 应答):目标主机收到 Echo 请求后,会向发送方返回一个 Echo 应答报文。这种类型的 ICMP 报文是对 Echo 请求的响应。

  • 命令请求
ping www.baidu.com
  • 第一层Frame全局信息(物理层)
    给出了数据帧的全局信息,显示了包括帧长74个字节,帧到达的时间,接口的编号和帧的类型。
    在这里插入图片描述

  • 第二行数据帧头部信息(数据链路层)
    可以看到以太帧头部包括的三个字段,目的MAC地址,源MAC地址、类型字段,类型字段取值为十六进制的0800,说明数据帧中包含的是一个IP分组。
    在这里插入图片描述

  • 第三行IP分组头部信息(网络层)
    包括版本号4,头部长度20字节,服务类型,数据报总长度,用于分片的标志字0,分片偏移字段0,说明这是一个完整的IP数据报。没有被分片。生存周期128,表示最多允许经过128跳路由器的转发。协议字段1,说明IP分组里面封装的是一个ICMP报文,头部校验、源IP地址,目的IP地址。我们可以对照以太网IP协议规范的报文格式来检查ICMP报文该字段是符合规范的。
    在这里插入图片描述

  • 第四行是ICMP的协议报文
    具体内容是类型8,Code:0表明这是一个 Echo (ping) request也就是一个回应请求报文,校验和字段,这三个字段是所有ICMP报文的通用首部,或称为固定首部,下面的标识字段(Identifier (BE): 1 (0x0001))和序号字段(Sequence Number (BE): 1434 (0x059a)),都是用两种不同的字节序来显示的。标识代表的是当前运行的ping进程的标识,序号字段代表ping生成的ICMP报文的编号

  • 协议类型 8(Echo 请求)详解
    在这里插入图片描述

这是一个回显请求(Ping请求)

  • Type字段,标明了报文的类型, request 表示这是一个「请求」报文。
  • Code字段,标明了报文的代码。
  • Checksum:Status = Good,表示校验状态是良好的,报文无误
    BE 和 LE 这四个字段用来对应请求和响应的关系。请求和响应中,这四个字段都是一样的,用来标识这次请求。请求与响应两个报文必须完全一致。
  • Data:发送了多少「字节」
  • 协议类型 0(Echo 应答)详解
    在这里插入图片描述

这是一个回显应答(Ping应答)

  • Type字段,标明了报文的类型, reply 表示这是一个「响应」报文。
  • Code字段,标明了报文的代码。
  • Checksum:Status = Good,表示校验状态是良好的,报文无误
  • BE 和 LE 这四个字段用来对应请求和响应的关系。请求和响应中,这四个字段都是一样的,用来标识这次请求。请求与响应两个报文必须完全一致。
  • Response time:Ping命令返回的响应时间,就是从这里获取的
  • Data:发送了多少「字节」

2)类型 13:时间戳请求(Timestamp Request)

类型 13(Timestamp 请求)和类型 14(Timestamp 应答):Timestamp 请求用于请求目标主机的时间戳信息,而Timestamp 应答则是目标主机对Timestamp请求的响应,包含其自己的时间戳信息。

  • 命令请求
    在一个Linux上执行命令,192.168.10.238为我本机ip4地址:
 (base) [root@vm12_efficiency01_50_221 ~]# hping3 -c 1 -V -p 0 --icmp -C 13  192.168.10.238
  • 这是关于 hping3 命令的详细解释:
    • hping3: 这是用于发送定制化网络数据包的工具。
    • -c 1: 表示设置发送的数据包数量为 1,即只发送一个数据包。
    • -V: 启用冗长输出模式,可以显示更详细的信息。
    • -p 0: 设置要发送的数据包的目的端口为 0。在 ICMP 报文中,端口号通常不适用,因此设置为 0。
    • –icmp: 指定要发送的数据包使用 ICMP 协议。
    • -C 13: 用于指定 ICMP 报文的类型为 13,即 Timestamp 请求。这告诉 hping3 发送一个 ICMP 类型为 Timestamp 请求的数据包。
    • 192.168.10.238: 是目标主机的 IP 地址,表示数据包将发送到该目标主机。
using eth0, addr: 192.168.50.221, MTU: 1500
HPING 192.168.10.238 (eth0 192.168.10.238): icmp mode set, 28 headers + 0 data bytes
len=40 ip=192.168.10.238 ttl=127 id=41685 tos=0 iplen=40
icmp_seq=0 rtt=0.7 ms
ICMP timestamp: Originate=3251593 Receive=1738092800 Transmit=1738092800
ICMP timestamp RTT tsrtt=1--- 192.168.10.238 hping statistic ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.7/0.7/0.7 ms
  • 以下是收到的响应结果:
    • HPING 192.168.10.238: 表示正在使用 hping 工具向目标主机 192.168.10.238 发送 ICMP 报文。
    • icmp mode set, 28 headers + 0 data bytes: 这表明 ICMP 模式已设置,并且发送的 ICMP 报文中包含 28 字节的头部信息。
    • len=40 ip=192.168.10.238 ttl=127 id=41685 tos=0 iplen=40: 这是关于 ICMP 报文的一些详细信息,包括长度、IP 地址、TTL(Time to Live)等。
    • icmp_seq=0 rtt=0.7 ms: 指示收到的 ICMP 应答中的序列号和往返时间为 0.7 毫秒。
    • ICMP timestamp: Originate=3251593 Receive=1738092800 Transmit=1738092800: 显示了 Timestamp 请求和应答中涉及的时间戳信息。
    • ICMP timestamp RTT tsrtt=1: 提供了有关 Timestamp 请求往返时延的信息。
    • — 192.168.10.238 hping statistic —: 总结了发送和接收的数据包统计信息。
    • 1 packets transmitted, 1 packets received, 0% packet loss: 表示发送了 1 个数据包并成功接收了一个,没有数据包丢失。
  • round-trip min/avg/max = 0.7/0.7/0.7 ms: 显示了往返时间的最小、平均和最大值。

协议类型 13(Timestamp 请求)

在这里插入图片描述

  • Type: 表示 ICMP 报文类型,这里是 Timestamp 请求 (Type 13)。
  • Code: 帮助进一步细分消息类型,这里是 0,通常对应于 Timestamp 请求。
  • Checksum: 校验和字段,用于验证数据包完整性。
  • Identifier: 标识符字段,可用于与响应相关联,BE 表示 Big Endian(大端序),LE 表示 Little Endian(小端序)。
  • Sequence Number: 序列号字段,用于标识数据包的顺序,BE 和 LE 分别表示大端序和小端序。
  • Originate Timestamp: 发起时间戳,指示报文发出时的时间戳。在这个例子中,为 4483987,表示在 UTC 午夜后 1 小时、14 分钟、43.987 秒时发出了该报文。
  • Receive Timestamp: 接收时间戳,请求报文值为 0。
  • Transmit Timestamp: 传输时间戳,请求报文值为 0。

协议类型 14(Timestamp 应答)

(base) [root@vm12_efficiency01_50_221 ~]# sudo hping3 -c 1 -M 14 192.168.10.238
HPING 192.168.10.238 (eth0 192.168.10.238): NO FLAGS are set, 40 headers + 0 data bytes
len=40 ip=192.168.10.238 ttl=127 DF id=28518 sport=0 flags=RA seq=0 win=0 rtt=0.7 ms--- 192.168.10.238 hping statistic ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.7/0.7/0.7 ms

在这里插入图片描述

  • Type: 表示 ICMP 报文类型,这里是 Timestamp 应答 (Type 14)。
  • Code: 帮助进一步细分消息类型,这里是 0,通常对应于 Timestamp 应答。
  • Checksum: 校验和字段,用于验证数据包完整性。
  • Identifier: 标识符字段,可用于与请求相关联,BE 表示 Big Endian(大端序),LE 表示 Little Endian(小端序)。
  • Sequence Number: 序列号字段,用于标识数据包的顺序,BE 和 LE 分别表示大端序和小端序。
  • Originate Timestamp: 发起时间戳,指示报文发出时的时间戳。在这个例子中,为 4483987,表示在 UTC 午夜后 1 小时、14 分钟、43.987 秒时发出了此报文。
  • Receive Timestamp: 接收时间戳,表示目标主机接收到该报文时的时间戳。值为 1969701888,即在 UTC 午夜后 1 小时、14 分钟、42.933 秒时接收到了报文。
  • Transmit Timestamp: 传输时间戳,表示发送方发送该报文时的时间戳。和接收时间戳相同,值也为 1969701888,即在 UTC 午夜后 1 小时、14 分钟、42.933 秒时发送了该报文。

3)类型 17:地址掩码请求(Address Mask Request)

类型 17(Address Mask 请求)和类型 18(Address Mask 应答):Address Mask 请求用于请求目标主机的子网掩码信息,以获取目标主机所使用的子网掩码。Address Mask 应答则是目标主机对Address Mask请求的响应,包含其所使用的子网掩码信息。

(base) [root@vm12_efficiency01_50_221 ~]# sudo hping3 -c 1 -M 17 192.168.10.238
HPING 192.168.10.238 (eth0 192.168.10.238): NO FLAGS are set, 40 headers + 0 data bytes
len=40 ip=192.168.10.238 ttl=127 DF id=9849 sport=0 flags=RA seq=0 win=0 rtt=0.8 ms--- 192.168.10.238 hping statistic ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.8/0.8/0.8 ms

4)类型 9:路由器请求信息(Router Solicitation)

一种 ICMPv6 报文类型,主机用来请求附近路由器发送路由器通告信息,以获取网络配置信息。

5)类型 10:路由器通告信息(Router Advertisement)

一种 ICMPv6 报文类型,用于路由器向主机发送网络配置信息或路由信息的通告。

6)类型 3:终点不可达(Destination Unreachable)

用于通知发送方数据包无法到达目的地的原因,比如网络不可达、主机不可达、协议不可达等。

Code: 具体原因,如网络不可达 (Code 0)、主机不可达 (Code 1)、协议不可达 (Code 2) 等。

在这里插入图片描述

我本地使用FinalShell连接上了192.168.50.221的服务器,以上是抓包信息。

7)类型 4:源点抑制(Source Quench)

用于控制源主机流量,提示发送端减缓数据发送速度。

Code: 0

8)类型 11,超时(Time Exceeded)

指示某个数据包生命周期中的时间已过期,可能由于 TTL(Time-To-Live)字段减至0或者片段在重新组装时耗时过长导致。

Code: TTL 为 0 (Code 0) 或片段重组时间过长 (Code 1)。

9)类型 12:参数问题(Parameter Problem)

用于指示 IP 报文头部中的一个问题,例如数据包长度不正确或者选项字段格式错误。

Code: 指示头部中的具体问题,如必要选项丢失 (Code 0)、首部长度不正确 (Code 1)。

10)类型 5:改变路由(路由重定向)

用于告知发送方将某个特定流量通过更优的路径发送。

Code: 通常表示重定向主机 (Code 0) 或重定向服务 (Code 1)。

04 关于ICMP报文的几个限制

1.对于携带ICMP差错报文的数据报,不再产生ICMP差错报文。
  如果主机A发送了一个ICMP的数据报文给主机B,数据在传输过程中经过其中一个路由器出现错误,由于该路由器已经接收到一个ICMP数据报文,所以不会再产生一个ICMP差错报文。
2.对于分片的数据报,如果不是第一个分片,则不产生ICMP差错报文
  对于主机A发送了一个分片的数据,如果路由设备或主机接收到的分片数据不是第一个分片数据,不会产生ICMP差错报文。
3.对于具有多播地址的数据报,不产生ICMP差错报文
  如果一个ip地址是一个广播地址的话,不会产生ICMP差错报文。
4.对于具有特殊地址如(127.0.0.0或0.0.0.0)的数据报,不产生ICMP差错报文

下面,我们通过wireshark来抓一个icmp包,如下图所示:request表示这是一个ICMP请求报文,reply表示这个是一个ICMP回答报文。

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

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

相关文章

[Java、Android面试]_18_详解Handler机制 常见handler面试题(非常重要,非常高频!!)

本人今年参加了很多面试,也有幸拿到了一些大厂的offer,整理了众多面试资料,后续还会分享众多面试资料。 整理成了面试系列,由于时间有限,每天整理一点,后续会陆续分享出来,感兴趣的朋友可关注收…

【智能优化算法】人工原生动物优化器(APO)

人工原生动物优化器(Artificial Protozoa Optimizer,APO)是发表在中科院一区期刊‘Knowledge-Based Systems’期刊上“Artificial Protozoa Optimizer (APO): A novel bio-inspired metaheuristic algorithm for engineering optimization”这篇文章上的算法。 01.引…

下载好了annaconda,但是在创建一个新的Conda虚拟环境报错

文章目录 问题描述:解决方案1.生成一个配置文件 问题总结 问题描述: ProxyError(MaxRetryError(“HTTPSConnectionPool(host‘repo.anaconda.com’, port443): Max retries exceeded with url: /pkgs/pro/win-64/repodata.json.bz2 (Caused by ProxyErr…

基于深度学习的智能停车场车牌识别计费系统(完整程序+训练数据集+开题报告+论文))

摘要 本篇论文研究的是基于车牌识别技术的智能停车场管理系统,采用基于深度学习的车牌识别算法,通过卷积神经网络对车牌图像进行处理和分析,实现车牌字符的识别和车牌信息的提取。同时,本文还设计了一个智能停车场管理系统&#x…

2024最新版守约者二级域名分发系统

主要功能 二级域名管理:我们的系统提供全面的二级域名管理服务,让您轻松管理和配置二级域名。 域名分发:利用我们先进的域名分发技术,您可以自动化地分配和管理域名,确保每个用户或客户都能及时获得所需的域名资源。 自…

前端开发攻略---Vue实现防篡改水印的效果。删除元素无效!更改元素属性无效!支持图片、元素、视频等等。

1、演示 2、水印的目的 版权保护:水印可以在图片、文档或视频中嵌入作者、品牌或版权所有者的信息,以防止未经授权的复制、传播或使用。当其他人使用带有水印的内容时,可以追溯到原始作者或版权所有者,从而加强版权保护。 身份识…

流程图步骤条

1.结构 <ul class"stepUl"> <li class"stepLi" v-for"(item, index) in stepList" :key"index"> <div class"top"> <p :class"{active: currentState > item.key}">{{ item.value }}…

Gradle 实战 - 启动main函数-ApiHug准备-工具篇-012

&#x1f917; ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱&#xff0c;有温度&#xff0c;有质量&#xff0c;有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace ApiHug …

【ELK】ELK企业级日志分析系统

搜集日志&#xff1b;日志处理器&#xff1b;索引平台&#xff1b;提供视图化界面&#xff1b;客户端登录 日志收集者&#xff1a;负责监控微服务的日志&#xff0c;并记录 日志存储者&#xff1a;接收日志&#xff0c;写入 日志harbor&#xff1a;负责去连接多个日志收集者&am…

PCL 高斯滤波(C++详细过程版)

目录 一、概述二、代码实现三、结果展示1、滤波前2、滤波后3、对比PCL 高斯滤波(C++详细过程版)由CSDN点云侠原创,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、概述 高斯滤波在PCL里有现成的调用函数,具体算法原理和实现代码见:

2路音频解码器JR-AD201

音频解码器 详细介绍 JR-AD201 2路音频解码器&#xff0c;支持RF/ASI/IP输入&#xff0c;支持DRA/AC3/EAC3/AAC/MPEG等音频&#xff0c;输出&#xff1a;2路模拟立体声&#xff0c;2路AES/EBU。 产品特点 支持多种输入方式RF/IP/ASI 接口丰富&#xff0c;AES/EBU/模拟立体声/A…

CSS盒模型(详讲)

目录 概述&#xff1a; 内容区&#xff08;content&#xff09;&#xff1a; 内边距&#xff08;paddingj&#xff09;&#xff1a; 前言&#xff1a; 设置内边距&#xff1a; 边框&#xff08;border&#xff09;&#xff1a; 前言&#xff1a; 示例&#xff1a; 外边…

Android开发——布局

LinearLayout RelativeLayout 所谓父子容器&#xff0c;就是嵌套容器时存在的关系。 根据兄弟容器定位需要传入兄弟的id。 通用属性 FrameLayout (覆盖布局&#xff09; TableLayout (表格&#xff09; GridLayout (网格) 子控件属性

【C++学习】深入理解C++异常处理机制:异常类型,捕获和处理策略

文章目录 ♫一.异常的提出♫二.异常的概念♫三.异常的使用♫3.1 异常的抛出和捕获♫3.2.异常的重新抛出♫3.3异常安全♫3.4 异常规范 ♫4.自定义异常体系♫5.C标准库的异常体系♫6.异常的优缺点 ♫一.异常的提出 之前&#xff1a; C语言传统的处理错误的方式与带来的弊端&…

基于SpringBoot的“线上教学平台”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“线上教学平台”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 线上教学平台结构图 管理员登录界面图 学员管理界…

深入理解JavaScript - JavaScript中call、apply、bind方法

一、call() / apply() JavaScript中的函数是对象&#xff0c;与其他JavaScript对象一样,JavaScript函数也有方法。其中有两个自带的方法 – call和apply&#xff0c;可以利用这两个方法来间接调用某个函数。 通过一个简单的例子体会一下call和apply的用法&#xff1a; funct…

嵌入式学习54-ARM3

S3c2440中断控制器 内部外设&#xff1a; DMA &#xff1a;&#xff08;直接内存存取&#xff09; Direct Memor…

基于docker的开发者集成环境

docker-compose一键部署开发者环境。 常见的中间件&#xff1a;nginx, mysql, redis, mongo, rabbitmq, nacos, rocketmq, zookeeper等。 GIthub项目地址 1. 下载项目&#xff1a;git clone https://github.com/xhga/docker-develop-env.git 2. 进入文件夹&#xff1a;cd d…

服务器测试之intel E8102CQDA2

这个卡是个双口100G双芯片的卡&#xff0c;QSFP28 单口速率100G&#xff0c;双口200G 1.BIOS下pcie带宽设置 服务器BIOS下支持设置PCIE link width 设置x8x8&#xff0c;否则只能显示一个网口&#xff0c;如下图 E810-2CQDA2需要BIOS下设置该卡槽位pcie slot link width 设置x8…

Paddle实现人脸对比(二)

我之前发过一篇基于孪生网络的人脸对比的文章&#xff0c;这篇文章也到了百度的推荐位置&#xff1a; 但是&#xff0c;效果并不是很好。经过大量的搜索&#xff0c;我发现了一种新的方法&#xff0c;可以非常好的实现人脸对比。 原理分析 我们先训练一个普通的人脸分类模型&…