网络篇12 | 链路层 ARP

网络篇12 | 链路层 ARP

  • 01 简介
    • 1)工作过程
    • 2)ARP缓存
      • 2.1 动态ARP表项
      • 2.2 静态ARP表项
      • 2.3 短静态ARP表项
      • 2.4 长静态ARP表项
  • 02 ARP报文格式
    • 1)ARP请求报文格式
    • 2)ARP响应报文格式
    • 3)套一层以太网帧(ARP帧)
    • 4)ARP命令
  • 03 抓包分析
    • 1)ARP请求
    • 2)ARP应答
  • 04 ARP攻击

01 简介

1)工作过程

主机A的IP地址为192.168.1.1,MAC地址为0A-11-22-33-44-01;
主机B的IP地址为192.168.1.2,MAC地址为0A-11-22-33-44-02;

当主机A要与主机B通信时,地址解析协议可以将主机B的IP地址(192.168.1.2)解析成主机B的MAC地址,以下为工作流程:

  • 第1步:根据主机A上的路由表内容,IP确定用于访问主机B的转发IP地址是192.168.1.2。然后A主机在自己的本地ARP缓存中检查主机B的匹配MAC地址。
  • 第2步:如果主机A在ARP缓存中没有找到映射,它将询问192.168.1.2的硬件地址,从而将ARP请求帧广播到本地网络上的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。
  • 第3步:主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。
  • 第4步:主机B将包含其MAC地址的ARP回复消息直接发送回主机A。
  • 第5步:当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了。

2)ARP缓存

ARP缓存是个用来储存IP地址和MAC地址的缓冲区,其本质就是一个IP地址–>MAC地址的对应表,表中每一个条目分别记录了网络上其他主机的IP地址和对应的MAC地址。每一个以太网或令牌环网络适配器都有自己单独的表。当地址解析协议被询问一个已知IP地址节点的MAC地址时,先在ARP缓存中查看,若存在,就直接返回与之对应的MAC地址,若不存在,才发送ARP请求向局域网查询。

为使广播量最小,ARP维护IP地址到MAC地址映射的缓存以便将来使用。ARP缓存可以包含动态和静态项目。动态项目随时间推移自动添加和删除。每个动态ARP缓存项的潜在 生命周期 是10分钟。新加到缓存中的项目带有 时间戳 ,如果某个项目添加后2分钟内没有再使用,则此项目过期并从ARP缓存中删除;如果某个项目已在使用,则又收到2分钟的生命周期;如果某个项目始终在使用,则会另外收到2分钟的生命周期,一直到10分钟的最长生命周期。静态项目一直保留在缓存中,直到重新启动计算机为止。

2.1 动态ARP表项

动态ARP表项由ARP协议通过ARP报文自动生成和维护,可以被老化,可以被新的ARP报文更新,也可以被静态ARP表项所覆盖。当到达老化时间或接口关闭时会删除相应的动态ARP表项。

2.2 静态ARP表项

静态ARP表项通过手工配置(通过对应设备的IP地址与MAC地址绑定命定进行)和维护。不会被老化,也不会被动态ARP表项覆盖。配置静态ARP表项可以增加通信的安全性,因为静态ARP可以限定和指定IP地址的设备通信时只使用指定的MAC地址(也就是我们通常所说的IP地址和MAC地址的绑定),此时攻击报文无法修改此表项的IP地址和MAC地址的映射关系,从而保护了本设备和指定设备间正常通信。静态ARP表项又分为短静态ARP表项和长静态ARP表项

2.3 短静态ARP表项

在配置短静态ARP表项时,只需要配置IP地址和MAC地址项。如果出接口是三层以太网接口,短静态ARP表项可以直接用于报文转发;如果出接口是VLAN虚接口,短静态ARP表项不能直接用于报文转发,当要发送IP数据包时,先发送ARP请求报文,如果收到的相应报文中的源IP地址和源MAC地址与所配置的IP地址和MAC地址相同,则将接受ARP响应报文的接口加入该静态表项中,之后就可以用于IP数据包的转发了。

2.4 长静态ARP表项

在配置长静态ARP表项时,除了配置IP地址和MAC地址项外,还必须配置该ARP表所对应的VLAN(虚拟局域网)和出接口。也就是长静态ARP表项同事绑定了IP地址、MAC地址、VLAN和端口,可以直接用于报文转发。

02 ARP报文格式

在这里插入图片描述

1)ARP请求报文格式

ARP是一个独立的三层协议,所以ARP报文在向数据链路层传输时不需要经过IP协议的封装,而是直接生成自己的报文,其中包括ARP报头,到数据链路层后再由对应的数据链路层协议(如以太网协议)进行封装。ARP报文分为ARP请求和ARP应答报文两种,它们的报文格式可以统一为下图所示。
在这里插入图片描述

2 bytes2 bytes1 byte1 byte2 bytes6 bytes4 bytes6 bytes4 bytes
Hardware TypeProtocol TypeHLENPLENOperationSender MAC AddressSender IP AddressTarget MAC AddressTarget IP Address
  • Hardware Type硬件类型:指明了发送方想知道的硬件接口类型,以太网的值为1;
  • Protocol Type协议类型:指明了发送方提供的高层协议类型,IP为0800(16进制);
  • HLEN硬件地址长度和PLEN协议长度:指明了硬件地址和高层协议地址的长度,这样ARP报文就可以在任意硬件和任意协议的网络中使用;
  • Operation操作类型:用来表示这个报文的类型,ARP请求为1,ARP响应为2,RARP请求为3,RARP响应为4;
  • Sender MAC Address发送方硬件地址(0-3字节):源主机硬件地址的前3个字节;
  • Sender MAC Address发送方硬件地址(4-5字节):源主机硬件地址的后3个字节;
  • Sender IP Address发送方IP地址(0-1字节):源主机硬件地址的前2个字节;
  • Sender IP Address发送方IP地址(2-3字节):源主机硬件地址的后2个字节;
  • Target MAC Address目标硬件地址(0-1字节):目的主机硬件地址的前2个字节;
  • Target MAC Address目标硬件地址(2-5字节):目的主机硬件地址的后4个字节;
  • Target IP Address目标IP地址(0-3字节):目的主机的IP地址。

2)ARP响应报文格式

在这里插入图片描述

2 bytes2 bytes1 byte1 byte2 bytes6 bytes4 bytes6 bytes4 bytes
Hardware TypeProtocol TypeHLENPLENOperationSender MAC AddressSender IP AddressTarget MAC AddressTarget IP Address
  • Hardware Type:表示硬件类型,如以太网、令牌环等。
  • Protocol Type:表示协议类型,如IP、IPX等。
  • HLEN:表示硬件地址长度,如以太网地址长度为6个字节。
  • PLEN:表示协议地址长度,如IP地址长度为4个字节。
  • Operation:表示操作类型,如ARP请求为1,ARP响应为2。
  • Sender MAC Address:表示发送方的MAC地址。
  • Sender IP Address:表示发送方的IP地址。
  • Target MAC Address:表示目标主机的MAC地址。
  • Target IP Address:表示目标主机的IP地址。

3)套一层以太网帧(ARP帧)

ARP报文不是直接在网络层上发送的,它还是需要向下传输到数据链路层,所以当ARP报文传输到数据链路层之后,需要再次进行封装。以以太网为例,ARP报文传输到以太网数据链路层后会形成ARP帧。ARP帧如下图所示,他就是在ARP报文前面加了一个以太网帧头。
在这里插入图片描述

以太网帧头的三个字段说明

  • 目的MAC地址:占6字节,如果是ARP请求帧,因为它是一个广播帧,所以要填上广播MAC地址(FF-FF-FF-FF-FF-FF),其目标主机是网络上的所有主机。
  • 源MAC地址:占6字节,这是发送ARP帧的节点MAC地址。
  • 帧类型:占两字节,这里用来标识帧封装的上层协议,因为本帧的数据部分是ARP报文,所以直接用ARP的协议号 0x0806 表示就可以了,而RARP的类型帧为0x8035。

4)ARP命令

  • arp -n查看arp缓存
(base) [root@vm12_efficiency01_50_221 ~]# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
172.172.172.172                  (incomplete)                              br-1afde1951c8c
192.168.50.222           ether   54:81:85:d7:6e:65   C                     eth0
192.168.50.105           ether   6c:92:bf:16:fc:f6   C                     eth0
192.168.50.224           ether   44:a0:e9:f9:90:2a   C                     eth0
192.168.50.1             ether   c0:b8:e6:1d:4c:55   C                     eth0
192.168.50.223           ether   74:7c:8d:2c:01:a9   C                     eth0
172.172.172.173          ether   02:42:ac:11:00:01   C                     br-1afde1951c8c
  • arp -a Ip
    如果有多个网卡,那么使用arp -a加上接口的IP地址,就可以只显示与该接口相关的ARP缓存项目。
(base) [root@vm12_efficiency01_50_221 ~]# arp -a 192.168.50.222
? (192.168.50.222) at 54:81:85:d7:6e:65 [ether] on eth0
  • arp -s Ip 物理地址
    可以向ARP缓存中人工输入一个静态项目。该项目在计算机引导过程中将保持有效状态,或者在出现错误时,人工配置的物理地址将自动更新该项目。
(base) [root@vm12_efficiency01_50_221 ~]# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
172.172.172.172                  (incomplete)                              br-1afde1951c8c
192.168.50.222           ether   54:81:85:d7:6e:65   CM                    eth0
192.168.50.105           ether   6c:92:bf:16:fc:f6   C                     eth0
192.168.50.224           ether   44:a0:e9:f9:90:2a   C                     eth0
192.168.50.1             ether   c0:b8:e6:1d:4c:55   C                     eth0
192.168.50.223           ether   74:7c:8d:2c:01:a9   C                     eth0
172.172.172.173          ether   02:42:ac:11:00:01   C                     br-1afde1951c8c
(base) [root@vm12_efficiency01_50_221 ~]# arp -s 192.168.50.222 54:81:85:d7:6e:64
(base) [root@vm12_efficiency01_50_221 ~]# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
172.172.172.172                  (incomplete)                              br-1afde1951c8c
192.168.50.222           ether   54:81:85:d7:6e:64   CM                    eth0
192.168.50.105           ether   6c:92:bf:16:fc:f6   C                     eth0
192.168.50.224           ether   44:a0:e9:f9:90:2a   C                     eth0
192.168.50.1             ether   c0:b8:e6:1d:4c:55   C                     eth0
192.168.50.223           ether   74:7c:8d:2c:01:a9   C                     eth0
172.172.172.173          ether   02:42:ac:11:00:01   C                     br-1afde1951c8c

使用arp -s 192.168.50.222 54:81:85:d7:6e:64添加了一条缓存记录,因为是错误的mac地址,所以会收不到报文。

  • arp -d Ip
    使用该命令能够人工删除一个静态项目。
(base) [root@vm12_efficiency01_50_221 ~]# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
172.172.172.172                  (incomplete)                              br-1afde1951c8c
192.168.50.222           ether   54:81:85:d7:6e:64   CM                    eth0
192.168.50.105           ether   6c:92:bf:16:fc:f6   C                     eth0
192.168.50.224           ether   44:a0:e9:f9:90:2a   C                     eth0
192.168.50.1             ether   c0:b8:e6:1d:4c:55   C                     eth0
192.168.50.223           ether   74:7c:8d:2c:01:a9   C                     eth0
172.172.172.173          ether   02:42:ac:11:00:01   C                     br-1afde1951c8c
(base) [root@vm12_efficiency01_50_221 ~]# arp -d 192.168.50.222
(base) [root@vm12_efficiency01_50_221 ~]# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
172.172.172.172                  (incomplete)                              br-1afde1951c8c
192.168.50.105           ether   6c:92:bf:16:fc:f6   C                     eth0
192.168.50.224           ether   44:a0:e9:f9:90:2a   C                     eth0
192.168.50.1             ether   c0:b8:e6:1d:4c:55   C                     eth0
192.168.50.223           ether   74:7c:8d:2c:01:a9   C                     eth0
172.172.172.173          ether   02:42:ac:11:00:01   C                     br-1afde1951c8c

使用 arp -d 192.168.50.222删除了此ip的mac地址缓存。

03 抓包分析

ARP请求包图片: https://uploader.shimo.im/f/3Gxq47ucLFgVIIgr.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE3MTMwNzAxNjksImZpbGVHVUlEIjoibTRrTU1hMFlOdmZ5OERrRCIsImlhdCI6MTcxMzA2OTg2OSwiaXNzIjoidXBsb2FkZXJfYWNjZXNzX3Jlc291cmNlIiwidXNlcklkIjo4MTkxOTc0MX0.cqT2q2wcFYQCod12psf0f2X0lUdkQFbaJzwep_IE0ZQARP应答包:内容格式和上图相似,不过会有目的地址对应的MAC地址,ARP数据包类型字段为2。

1)ARP请求

在这里插入图片描述

在这个ARP请求中,发送者希望找到IP地址为192.168.10.70的设备的MAC地址。ARP请求包中,发送者提供了自己的MAC地址和IP地址,并请求目标设备的MAC地址进行通信。根据提供的信息,这是另一个 Address Resolution Protocol(ARP)请求包的数据字段解析:

  • 硬件类型:Ethernet (1)
  • 协议类型:IPv4 (0x0800)
  • 硬件地址长度:6
  • 协议地址长度:4
  • 操作码:请求 (1)
  • 发送者 MAC 地址:GigaByteTech_3f:c8:7a (e0:d5:5e:3f:c8:7a)
  • 发送者 IP 地址:192.168.10.238
  • 目标 MAC 地址:Dell_cd:e7:b0 (e4:54:e8💿e7:b0)
  • 目标 IP 地址:192.168.10.70

2)ARP应答

在这里插入图片描述

在这个ARP应答中,发送者向请求方回复了其所需的信息。发送者提供了自己的MAC地址和IP地址作为响应,并将目标设备的MAC地址和IP地址进行了匹配。
根据提供的信息,这是一个 Address Resolution Protocol(ARP)应答包的数据字段解析:

  • 硬件类型:Ethernet (1)
  • 协议类型:IPv4 (0x0800)
  • 硬件地址长度:6
  • 协议地址长度:4
  • 操作码:应答 (2)
  • 发送者 MAC 地址:Dell_cd:e7:b0 (e4:54:e8💿e7:b0)
  • 发送者 IP 地址:192.168.10.70
  • 目标 MAC 地址:GigaByteTech_3f:c8:7a (e0:d5:5e:3f:c8:7a)
  • 目标 IP 地址:192.168.10.238

04 ARP攻击

ARP–在TCP/IP协议栈中,最不安全的协议莫过于ARP了,我们经常听到的网络扫描,内网渗透,流量欺骗等等,他们基本上都与ARP有关系,甚至可以说,他们的底层都是基于ARP实现的。但是ARP的是实现仅需一问一答的两个包即可,实现上很简单。
在这里插入图片描述

我们知道,当PC1对PC2正常通信的时候(先别管攻击者PC3),PC2、PC1会先后建立对方的IP和MAC地址的映射(即建立ARP缓存表),同时对于交换机而言,它也具有记忆功能,会基于源MAC地址建立一个CAM缓存表(记录MAC对应接口的信息),理解为当PC1发送消息至交换机的Port1时,交换机会把源MAC(也就是MAC1)记录下来,添加一条MAC1和Port1的映射,之后交换机可以根据MAC帧的目的MAC进行端口转发,这个时候PC3只是处于监听状态,会把PC1的广播丢弃。

正常的PC3会把广播包丢弃,同样的PC3可以抓住这一环节的漏洞,把不属于自己的广播包接收,同时回应一个虚假的回应包,告诉PC1我就是PC2(IP2-MAC3),这样PC1会收到两个回应包(一个正确的IP2-MAC2,一个虚假的IP2-MAC3),但是PC1并不知道到底哪个是真的,所以PC1会做出判断,并且判断后到达的为真,那么怎么让虚假的回应包后到达呢,PC3可以连续不断的发送这样的回应包,总会把哪个正确的回应包覆盖掉。

而后PC1会建立IP2-MAC3这样一条ARP缓存条目,以后当PC1给PC2发送信息的时候,PC1依据OSI模型从上至下在网络层给数据封装目的IP为IP2的包头,在链路层通过查询ARP缓存表封装目的MAC为MAC3的数据帧,送至交换机,根据查询CAM表,发现MAC3对应的接口为Port3,就这样把信息交付到了PC3,完成了一次ARP攻击。
在这里插入图片描述

如果ARP攻击严重话,会导致同一个局域网(也是同一个广播域)的所有主机的ARP缓存表中都存放着错误的IP和MAC的映射,如上图,每台主机的ARP缓存表中,不论哪个IP,都会映射到攻击者的MAC地址MAC1上,这样该局域网内的所有主机的消息都发送到Hacker的主机上。

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

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

相关文章

Python学习笔记25 - 一些案例

1. 输出金陵前五钗 2. 向文件输出信息 3. 打印彩色字 4. print函数、进制转换 5. 猜数游戏 6. 输出ASCII码对应的字符 7. 计算100~999之间的水仙花数 8. 千年虫数组的索引及其值 9. 星座zip dict 10. 12306车次信息 11. 字符串的格式化 12. 手动抛出异常 13. 计算圆的面积和周长…

SpringBoot 整合RocketMQ

目录 一、引入依赖 二、配置文件 三、生产者 四、消费者 五、结果 一、引入依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.0</version> </d…

MYSQL09_行格式概述、变长字段、NULL值、记录头信息、真实数据、内部结构

文章目录 ①. InnoDB - 行格式概述②. 变长字段长度列表 ③. NULL值列表④. 记录头信息5字节⑤. 记录的真实数据⑥. Compact行记录的内部结构⑦. Dynamic和Compressed行格式 ①. InnoDB - 行格式概述 ①. 我们平时的数据以行为单位来向表中插入数据,这些记录在磁盘上的存放方式…

IP查询在追踪网络攻击源头中的应用

随着网络攻击事件的不断增加&#xff0c;追踪攻击源头成为网络安全领域的重要任务之一。IP查询技术通过分析网络流量中的IP地址&#xff0c;可以帮助确定攻击的来源。本文将探讨IP查询在追踪网络攻击源头中的应用&#xff0c;包括其原理、方法以及实际案例分析。 IP地址查询&a…

linux(ub)-redis环境部署

1.下载redis包 wget http://download.redis.io/releases/redis-7.0.5.tar.gz 2.解压缩&#xff1a; tar -zxvf redis-7.0.5.tar.gz 3.安装gcc&#xff1a;sudo apt-get install gcc 4. 编译&#xff1a;cd redis-7.0.5 make make make install 5. cd /usr/local/bin/ 6. mkdir …

21.5k Star , AI 智能体项目OpenDevin:少写代码,多创造(附部署教程)

Aitrainee | 公众号&#xff1a;AI进修生 这是一个旨在复制 Devin 的开源项目&#xff0c;Devin 是一位自主人工智能软件工程师&#xff0c;能够执行复杂的工程任务并在软件开发项目上与用户积极协作。该项目致力于通过开源社区的力量复制、增强和创新 Devin。 Devin 代表了一…

STK与matlab交互 Astrogator模块 (11)

一、背景知识 前面由于定轨的大作业&#xff0c;关于Astrogator模块的学习有所滞后&#xff0c;在本节将重新聚焦Astrogator模块&#xff0c;在本节中&#xff0c;首先解决的问题是已知两个卫星的轨道六根数&#xff0c;求解其中某一颗卫星LVLH坐标下另一颗卫星的位置速度。这…

一起学习python——基础篇(20)

前言&#xff0c;之前经常从网上找一些免费的接口来测试&#xff0c;有点受制于人的感觉。想了想还不如直接写一个接口&#xff0c;这样方便自己测试。自己想返回什么格式就返回什么样子&#xff0c;不用担心服务报错&#xff0c;因为自己就可以完全掌控。然后宿舍二哥告诉我py…

(四)qt中使用ffmpeg播放视频,可暂停恢复

一、在qt中添加ffmpeg库及头文件 INCLUDEPATH /usr/local/ffmpeg/include LIBS -L/usr/local/lib -lavutil -lavcodec -lavformat -lswscale 二、详细代码 FFempegVideoDecode 视频解码类&#xff08;放入线程中&#xff09; ffmpegvideodecode.h #ifndef FFMPEGVIDEODE…

NAT技术

网络技术深似海呀&#xff0c;一段时间不用又忘。 是什么 NAT技术是网络防火墙技术的一部分&#xff0c;可以作用在linux防火墙或者设备防火墙&#xff0c;NAT技术可以实现地址和端口的转换&#xff0c;主要还是为了网络连通性。 作用 存在以下三个IP&#xff0c;A(10.234.…

阿里云OSS使用流程

准备工作 无论怎么样&#xff0c;你需要准备一个阿里云账号&#xff0c;点击&#xff1a;注册阿里云 输入相关信息&#xff0c;然后注册成功以后&#xff0c;点击 然后注册成功了&#xff0c;实名一下阿里云账号。打开实名入口&#xff0c;选择个人实名或者企业实名。 如果你…

在Mac主机上连接Linux虚拟机

前言 最近醉心于研究Linux&#xff0c;于是在PD上安装了一个Debian Linux虚拟机&#xff0c;用来练练手。但是每次在mac和Linux之间切换很是麻烦&#xff0c;有没有一种方法&#xff0c;可以在mac终端直接连接我的虚拟机&#xff0c;这样在mac终端上就可以直接操控我的Linux虚…

【C语言】——字符串函数的使用与模拟实现(上)

【C语言】——字符串函数 前言一、 s t r l e n strlen strlen 函数1.1、函数功能1.2、函数的使用1.3、函数的模拟实现&#xff08;1&#xff09;计数法&#xff08;2&#xff09;递归法&#xff08;3&#xff09;指针 - 指针 二、 s t r c p y strcpy strcpy 函数2.1、函数功能…

tkinter窗口组件Entry

from tkinter import * 创建主窗口 app Tk() 设置窗口大小为1040x2048(手机) app.geometry(“1040x2048”) 设置窗口背景为灰色 app.configure(bg“gray”) 定义一个函数text()&#xff0c;用于处理输入框内容的变化 def text(): # 获取输入框e1的内容 if e1.get() “…

JS/TS笔记学习1

周末总得学点什么吧~ 奥利给! 跑火车 递归 减速 let currentIndex 0; let speed 500; // 初始速度&#xff0c;单位是毫秒 let decrement 20; // 每次迭代速度减少的量 const cells document.querySelectorAll(.cell); function highlightCell() { cells.forEach(…

常见的锁策略,synchronized优化过程和cas过程

1. 常见的锁策略 所谓"策略",也可以理解为做法."锁策略"就是用来描述一把锁面对加锁/解锁时的做法. 1.1 乐观锁 vs 悲观锁 要区分一把锁是乐观锁还是悲观锁,就要预测当前这把锁冲突的概率高不高. 如果冲突概率高,后续要做的工作往往会更多,加锁的开销就…

使用阿里云试用Elasticsearch学习:4. 聚合——2

近似聚合 如果所有的数据都在一台机器上&#xff0c;那么生活会容易许多。 CS201 课上教的经典算法就足够应付这些问题。如果所有的数据都在一台机器上&#xff0c;那么也就不需要像 Elasticsearch 这样的分布式软件了。不过一旦我们开始分布式存储数据&#xff0c;就需要小心…

Docker 安装 RocketMQ

目录 一、新建两个配置文件 1.1 创建docker-compose.yml文件 1.2 .新建broker.conf文件 二、运行 三、可视化界面 一、新建两个配置文件 1.1 创建docker-compose.yml文件 version: 3.5 services:rmqnamesrv:image: foxiswho/rocketmq:servercontainer_name: rmqnamesrvports…

用html写一个雨的特效

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>雨特效</title><link rel"stylesheet" href"./style.css"> </head> <body> <div id"wrap-textu…

43岁百亿千金夫妇国外旅游高调放闪,羡煞好友马国明

萧正楠早前忙着拍摄TVB新剧《奔跑吧&#xff01;勇敢的女人们》&#xff0c;剧集煞科后他即和老婆黄翠如一起到意大利旅行。两公婆分别在IG大晒旅行靓相&#xff0c;甜蜜满泻。 这次萧正楠的旅游照都是由翠如亲自操刀拍摄&#xff0c;相中所见&#xff0c;萧正楠在广场大摆Chok…