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

ac的dhcp池里option43配错导致ap无法上线问题排查过程

dhcp池里ac地址配错,导致ap无法上线问题排查过程

问题:ap手动设置ac的ip正常注册在线,但dhcp获得ip和ac地址发现无法在ac上注册成功。

组网:

ac旁路结构,路由器lan口地址172.16.1.1,开dhcp服务,option43提供ac的地址172.16.1.206,地址池172.16.100-200,网关ip172.16.1.1。

解决过程:

如上图,路由器上开dhcp服务,给ap提供dhcp服务,dhcp池设置ip范围是172.16.1.100-172.16.1.200,掩码24,gw是172.16.1.1,ac的地址是172.16.1.206

ap1上电后,查看dhcp分配情况,发现分配地址是172.16.1.200,但在ac172.16.1.206上看不到ap1上线

路由器上

ac上

ap1 ping正常

登录ap,设置ac地址为手动配置172.16.1.206,并在路由器4口抓包

发现ac上,看到ap上线了

抓包tcpdump  -i eth4   -nnev  udp port  5246  -c 20 抓ap的capwap消息,udp port是5246,并抓20包自动退出-c 20,-nnev是关闭dns查询,数字化显示,显示mac地址,并显示详情

tcpdump: listening on eth4, link-type EN10MB (Ethernet), capture size 262144 bytes

17:29:35.427300 6c:ef:c6:65:ab:c0 > 64:c3:41:b2:18:21, ethertype IPv4 (0x0800), length 567: (tos 0x7,CE, ttl 64, id 43379, offset 0, flags [DF], proto UDP (17), length 553)

    172.16.1.200.5246 > 172.16.1.206.5246: UDP, length 525

17:29:35.427579 64:c3:41:b2:18:21 > 6c:ef:c6:65:ab:c0, ethertype IPv4 (0x0800), length 277: (tos 0x7,CE, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 263)

    172.16.1.206.5246 > 172.16.1.200.5246: UDP, length 235

17:29:40.429262 6c:ef:c6:65:ab:c0 > 64:c3:41:b2:18:21, ethertype IPv4 (0x0800), length 825: (tos 0x7,CE, ttl 64, id 43559, offset 0, flags [DF], proto UDP (17), length 811)

    172.16.1.200.5246 > 172.16.1.206.5246: UDP, length 783

17:29:40.429650 64:c3:41:b2:18:21 > 6c:ef:c6:65:ab:c0, ethertype IPv4 (0x0800), length 277: (tos 0x7,CE, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 263)

    172.16.1.206.5246 > 172.16.1.200.5246: UDP, length 235

17:29:40.431498 6c:ef:c6:65:ab:c0 > 64:c3:41:b2:18:21, ethertype IPv4 (0x0800), length 603: (tos 0x7,CE, ttl 64, id 43560, offset 0, flags [DF], proto UDP (17), length 589)

    172.16.1.200.5246 > 172.16.1.206.5246: UDP, length 561

17:29:40.432161 64:c3:41:b2:18:21 > 6c:ef:c6:65:ab:c0, ethertype IPv4 (0x0800), length 1050: (tos 0x7,CE, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 1036)

    172.16.1.206.5246 > 172.16.1.200.5246: UDP, length 1008

17:29:40.616124 6c:ef:c6:65:ab:c0 > 64:c3:41:b2:18:21, ethertype IPv4 (0x0800), length 80: (tos 0x7,CE, ttl 64, id 43564, offset 0, flags [DF], proto UDP (17), length 66)

    172.16.1.200.5246 > 172.16.1.206.5246: UDP, length 38

17:29:40.616458 64:c3:41:b2:18:21 > 6c:ef:c6:65:ab:c0, ethertype IPv4 (0x0800), length 60: (tos 0x7,CE, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 44)

   

发现ap的mac是6c:ef:c6:65:ab:c0,ip是172.16.1.200,ac的ip是172.168.1.206,mac地址是64:c3:41:b2:18:21,2毫秒后,开始有响应。

root@IIIoT:~# arp  -n   ap上执行命令arp -n
IP address       HW type     Flags       HW address            Mask     Device
172.16.1.1       0x1         0x2         20:1f:54:f5:36:61     *        br-wan
172.16.1.206     0x1         0x2         64:c3:41:b2:18:21     *        br-wan

ap的banner显示mac地址

NAME:           WAP6240-IE
 MAC:            6c:ef:c6:65:ab:c0

奇怪,删除ap上手动配置ac地址,改成从dhcp的option43里获取ac地址,重启ap,在路由器上再次抓包

~ # tcpdump  -i eth4  -nnev  udp port  5246  -c 20

tcpdump: listening on eth4, link-type EN10MB (Ethernet), capture size 262144 bytes

17:58:51.777366 6c:ef:c6:65:ab:c0 > 20:1f:54:f5:36:61, ethertype IPv4 (0x0800), length 567: (tos 0x7,CE, ttl 64, id 52870, offset 0, flags [DF], proto UDP (17), length 553)发给了这个mac地址

    172.16.1.200.5246 > 17.16.1.206.5246: UDP, length 525  发出的目的ip 是17.16.1.206,好像ip错了,正确的ip是172.16.1.206,ip第一段错了

17:58:58.793246 6c:ef:c6:65:ab:c0 > 20:1f:54:f5:36:61, ethertype IPv4 (0x0800), length 567: (tos 0x7,CE, ttl 64, id 53510, offset 0, flags [DF], proto UDP (17), length 553)

    172.16.1.200.5246 > 17.16.1.206.5246: UDP, length 525  没有响应,在重发

17:59:22.803515 6c:ef:c6:65:ab:c0 > 20:1f:54:f5:36:61, ethertype IPv4 (0x0800), length 567: (tos 0x7,CE, ttl 64, id 54484, offset 0, flags [DF], proto UDP (17), length 553)

    172.16.1.200.5246 > 17.16.1.206.5246: UDP, length 525 没有响应,在重发

17:59:52.823960 6c:ef:c6:65:ab:c0 > 20:1f:54:f5:36:61, ethertype IPv4 (0x0800), length 567: (tos 0x7,CE, ttl 64, id 56270, offset 0, flags [DF], proto UDP (17), length 553)

    172.16.1.200.5246 > 17.16.1.206.5246: UDP, length 525  没有响应,在重发

18:00:18.835629 6c:ef:c6:65:ab:c0 > 20:1f:54:f5:36:61, ethertype IPv4 (0x0800), length 567: (tos 0x7,CE, ttl 64, id 57090, offset 0, flags [DF], proto UDP (17), length 553)

    172.16.1.200.5246 > 17.16.1.206.5246: UDP, length 525  没有响应,在重发

18:00:20.843741 6c:ef:c6:65:ab:c0 > 20:1f:54:f5:36:61, ethertype IPv4 (0x0800), length 567: (tos 0x7,CE, ttl 64, id 57274, offset 0, flags [DF], proto UDP (17), length 553)

    172.16.1.200.5246 > 17.16.1.206.5246: UDP, length 525  没有响应,在重发

18:00:39.874509 6c:ef:c6:65:ab:c0 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 567: (tos 0x7,CE, ttl 64, id 18424, offset 0, flags [DF], proto UDP (17), length 553)

    172.16.1.200.5246 > 255.255.255.255.5246: UDP, length 525  发出二层广播和三层广播发现消息

18:00:39.875037 64:c3:41:b2:18:21 > 6c:ef:c6:65:ab:c0, ethertype IPv4 (0x0800), length 277: (tos 0x7,CE, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 263)

    172.16.1.206.5246 > 172.16.1.200.5246: UDP, length 235  有ac的响应

18:00:39.875166 20:1f:54:f5:36:61 > 6c:ef:c6:65:ab:c0, ethertype IPv4 (0x0800), length 277: (tos 0x7,CE, ttl 64, id 53519, offset 0, flags [DF], proto UDP (17), length 263)

    172.16.1.1.5246 > 172.16.1.200.5246: UDP, length 235  有另一个ac的响应

18:00:44.876971 6c:ef:c6:65:ab:c0 > 20:1f:54:f5:36:61, ethertype IPv4 (0x0800), length 825: (tos 0x7,CE, ttl 64, id 46801, offset 0, flags [DF], proto UDP (17), length 811)

172.16.1.200.5246 > 172.16.1.1.5246: UDP, length 783  选择向这个ac的响应

18:00:44.877689 20:1f:54:f5:36:61 > 6c:ef:c6:65:ab:c0, ethertype IPv4 (0x0800), length 277: (tos 0x7,CE, ttl 64, id 54647, offset 0, flags [DF], proto UDP (17), length 263)

    172.16.1.1.5246 > 172.16.1.200.5246: UDP, length 235

18:00:44.879582 6c:ef:c6:65:ab:c0 > 20:1f:54:f5:36:61, ethertype IPv4 (0x0800), length 603: (tos 0x7,CE, ttl 64, id 46802, offset 0, flags [DF], proto UDP (17), length 589)

  发现最初ap发出的ip错误,mac地址发给20:1f:54:f5:36:61查询发现是路由器lan口地址,重发几次后,发出广播消息,所有的ac都会响应。

XOS#show  ip arp
   IP Address       MAC Address     Interface  Type
   172.16.1.187  c0:a6:6d:45:06:80  vlan1.3     ether
  172.16.81.205  00:0f:c9:24:10:b1  vlan1.1     ether
     172.16.1.1  20:1f:54:f5:36:61  vlan1.3     ether   发现这是路由器lan口地址对应mac是20:1f:54:f5:36:61,最初ap的capwap消息发给了路由器lan口mac地址
   172.16.1.200  6c:ef:c6:65:ab:c0  vlan1.3     ether
Total arp count : 4 

tcpdump不好判断,生成抓包文件,下载下拉查看

/mnt/userspace # tcpdump  -i eth4  -w  abc0.pcap 生成抓包文件

tcpdump: listening on eth4, link-type EN10MB (Ethernet), capture size 262144 bytes

^C311 packets captured  中断后生成文件

313 packets received by filter

0 packets dropped by kernel

crt打开tftp服务器,准备传出文件

cmd下查看udp69端口是否打开?

C:\>netstat  -aon | findstr :69    查看69端口是那个进程号打开,行尾红色为进程号,本例为22560
  UDP    0.0.0.0:69             *:*                                    22560
  UDP    [::]:69                *:*                                        22560

C:\>tasklist  | findstr  22560   根据进程号查询文件名
SecureCRT.exe                22560 Console                    1     59,104 K 证明是crt打开了文件

确定文件保存目录

路由器里传出文件

/mnt/userspace # tftp  -pl  abc0.pcap   172.16.81.205  tftp传出文件

abc0.pcap            100% |*************************************************************| 34733  0:00:00 ETA传递完成

在已经获得tftp目录下打开抓包文件,并过滤bootp,arp和capwap消息

现在问题是dhcp获得的ac地址错误,导致ap注册关联消息发给网关

检查一下dhcp的offer消息

Value: 800c0131372e31362e312e323036   17.16.1.206

在ap上查询

root@IIIoT:~#

root@IIIoT:~# cd  /tmp

root@IIIoT:/tmp# cat  wtp.cfg  dhcp获得ac的地址,

<WTP_DHCP_AC_IPV4_ADDR> 17.16.1.206   发现这个地址错误

root@IIIoT:/tmp# cat wtp.ip   这是目前ap连接的ac的ip地址

172.16.1.1  发现是网关的地址

在路由器上查看配置

修正

路由器上重新抓包查看:

tcpdump  -i eth4 -nnev  ether host 6c:ef:c6:65:ab:c0

19:56:08.315353 20:1f:54:f5:36:61 > 6c:ef:c6:65:ab:c0, ethertype IPv4 (0x0800), length 342: (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)

    172.16.1.1.67 > 172.16.1.200.68: BOOTP/DHCP, Reply, length 300, xid 0xaf764a47, Flags [none]

          Your-IP 172.16.1.200

          Client-Ethernet-Address 6c:ef:c6:65:ab:c0

          Vendor-rfc1048 Extensions

            Magic Cookie 0x63825363

            DHCP-Message Option 53, length 1: Offer

            Server-ID Option 54, length 4: 172.16.1.1

            Lease-Time Option 51, length 4: 86400

            Subnet-Mask Option 1, length 4: 255.255.255.0

            Default-Gateway Option 3, length 4: 172.16.1.1

            Domain-Name-Server Option 6, length 4: 114.114.114.114

Vendor-Option Option 43, length 15: 128.13.1.49.55.50.46.49.54.46.49.46.50.48.54

    ascii码显示的ac地址                                          1 7  2  .  1  6  . 1  .  2  0 6 

19:56:09.304704 6c:ef:c6:65:ab:c0 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 172.16.1.206 tell 172.16.1.200, length 46  arp查询

19:56:09.305024 64:c3:41:b2:18:21 > 6c:ef:c6:65:ab:c0, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Reply 172.16.1.206 is-at 64:c3:41:b2:18:21, length 46 arp响应

capwap消息

19:56:14.311909 6c:ef:c6:65:ab:c0 > 64:c3:41:b2:18:21, ethertype IPv4 (0x0800), length 825: (tos 0x7,CE, ttl 64, id 18791, offset 0, flags [DF], proto UDP (17), length 811)

    172.16.1.200.5246 > 172.16.1.206.5246: UDP, length 783  注册消息

19:56:14.312308 64:c3:41:b2:18:21 > 6c:ef:c6:65:ab:c0, ethertype IPv4 (0x0800), length 277: (tos 0x7,CE, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 263)

    172.16.1.206.5246 > 172.16.1.200.5246: UDP, length 235  响应

问题总结:

原以为dhcp获得的ac地址和手动设置ac地址两个发discover包会有所区别,起始没有区别。

获得地址错误,查询路由器发现不是直连路由,会发向网关mac地址。

相关文章:

ac的dhcp池里option43配错导致ap无法上线问题排查过程

dhcp池里ac地址配错&#xff0c;导致ap无法上线问题排查过程 问题&#xff1a;ap手动设置ac的ip正常注册在线&#xff0c;但dhcp获得ip和ac地址发现无法在ac上注册成功。 组网&#xff1a; ac旁路结构&#xff0c;路由器lan口地址172.16.1.1&#xff0c;开dhcp服务&#xff0…...

第1章:LangChain4j的聊天与语言模型

LangChain4J官方文档翻译与解析 目标文档路径: https://docs.langchain4j.dev/tutorials/chat-and-language-models/ 语言模型的两种API类型 LangChain4j支持两种语言模型&#xff08;LLM&#xff09;的API&#xff1a; LanguageModel&#xff1a;这种API非常简单&#xff0c;…...

Cython学习笔记1:利用Cython加速Python运行速度

Cython学习笔记1&#xff1a;利用Cython加速Python运行速度 CythonCython 的核心特点&#xff1a;利用Cython加速Python运行速度1. Cython加速Python运行速度原理2. 不使用Cython3. 使用Cython加速&#xff08;1&#xff09;使用pip安装 cython 和 setuptools 库&#xff08;2&…...

【从0做项目】Java音缘心动(1)———项目介绍设计

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 零&#xff1a;项目结果展示 一&#xff1a;音乐播放器Web网页介绍 二&#xff1a;前期准备工作&…...

智慧农业新生态 | 农业数字化服务平台——让土地生金,让服务无忧

一部手机管农事&#xff0c;从播种到丰收&#xff0c;全链路数字化赋能&#xff01; 面向农户、农机手、农服商、农资商打造的一站式农业产业互联网平台&#xff0c;打通农资交易、农机调度、农服管理、技术指导全场景闭环&#xff0c;助力乡村振兴提效增收。 三大核心场景&am…...

C++编程,#include <iostream>详解,以及using namespace std;作用

在C编程中&#xff0c;#include <iostream> 是用来包含输入/输出流头文件的预处理指令。它允许程序使用标准的输入/输出对象如 std::cout 和 std::cin&#xff0c;以便与标准输入和输出流进行交互。这一头文件是编写输入输出操作时必不可少的部分。 讲到这里&#xff0c…...

jetbrains IDEA集成大语言模型

一、CodeGPT ‌CodeGPT‌是由CSDN打造的一款生成式AI产品&#xff0c;专为开发者量身定制。它能够提供强大的技术支持&#xff0c;帮助开发者在学习新技术或解决实际工作中的各种计算机和开发难题‌1。 idea集成 1.在线安装&#xff1a;直接在线安装 2.离线安装 JetBrains Mar…...

理解都远正态分布中指数项的精度矩阵(协方差逆矩阵)

之前一直不是很理解这个公式为什么用这个精度矩阵&#xff0c;为什么这么巧合&#xff0c;为什么是它&#xff0c;百思不得其解&#xff0c;最近有了一些新的理解&#xff1a; 1. 这个精度矩阵相对公平合理的用统一的方式衡量了变量间的关系&#xff0c;但是如果是公平合理的衡…...

使用 Spark NLP 实现中文实体抽取与关系提取

在自然语言处理(NLP)领域,实体抽取和关系提取是两个重要的任务。实体抽取用于从文本中识别出具有特定意义的实体(如人名、地名、组织名等),而关系提取则用于识别实体之间的关系。本文将通过一个基于 Apache Spark 和 Spark NLP 的示例,展示如何实现中文文本的实体抽取和…...

less-8 boolen盲注,时间盲注 函数补全

获取当前数据库名 import requestsdef inject_database(url):namemax_length20 # 假设数据库名称最大长度为20# ASCII范围&#xff1a;数字、字母、下划线&#xff08;_&#xff09;low{a: 97, z: 122, A: 65, Z: 90, 0: 48, 9: 57, _: 95}high{97: a, 122: z, 65: A, 90: Z,…...

[NKU]C++基础课(五)补充:结构体

【3.3】C结构体介绍_哔哩哔哩_bilibili 结构体 最厉害的学生 现有N名同学参加了期末考试&#xff0c;并且获得了每名同学的信息: 1 姓名(不超过8个字符的仅有英文小写字母的字符串) 2 语文、数学、英语成绩(均为不超过150的自然数)。 3 总分最高的学生就是最厉害的。 请输…...

亲测可用,IDEA中使用满血版DeepSeek R1!支持深度思考!免费!免配置!

作者&#xff1a;程序员 Hollis 之前介绍过在IDEA中使用DeepSeek的方案&#xff0c;但是很多人表示还是用的不够爽&#xff0c;比如用CodeChat的方案&#xff0c;只支持V3版本&#xff0c;不支持带推理的R1。想要配置R1的话有特别的麻烦。 那么&#xff0c;今天&#xff0c;给…...

springcloud整合seata

1、前置安装与了解&#xff1a; 1、nacos的安装&#xff1a;docker安装nacos并挂载 2、seata的安装&#xff1a;docker安装seata并挂载&#xff0c;同时注册到nacos 3、spring-boot版本为2.6.12&#xff0c;spring-cloud-alibaba版本为2021.0.4.0&#xff0c;spring-cloud版本…...

Html5学习教程,从入门到精通,HTML5 简介语法知识点及案例代码(1)

HTML5 简介 HTML5 是最新的 HTML 标准&#xff0c;它引入了许多新特性&#xff0c;使网页开发更加强大和灵活。以下是一些关键的 HTML5 语法知识点&#xff1a; 1. 文档类型声明 (DOCTYPE) HTML5 的文档类型声明非常简单&#xff1a; <!DOCTYPE html>2. 字符编码 HT…...

Django加bootstrap实现上传文件含有进度条

1. 项目结构 myproject/ ├── myproject/ │ ├── settings.py │ ├── urls.py │ └── ... ├── myapp/ │ ├── templates/ │ │ └── upload.html │ ├── views.py │ ├── urls.py │ └── ... └── media/ # 手动创…...

八大排序算法(2)交换排序-冒泡排序 和 快速排序

快速排序&#xff08;Quick Sort&#xff09; 和 冒泡排序&#xff08;Bubble Sort&#xff09; 都是常见的交换排序算法&#xff0c;它们的核心思想都是通过交换元素来实现排序。但是&#xff0c;它们的工作原理和性能差异非常大。下面我们来详细对比这两种排序算法&#xff1…...

Python的那些事第二十三篇:Express(Node.js)与 Python:一场跨语言的浪漫邂逅

摘要 在当今的编程世界里,Node.js 和 Python 像是两个性格迥异的超级英雄,一个以速度和灵活性著称,另一个则以强大和优雅闻名。本文将探讨如何通过 Express 框架将 Node.js 和 Python 结合起来,打造出一个高效、有趣的 Web 应用。我们将通过一系列幽默风趣的实例和表格,展…...

STM32MP157A单片机移植Linux驱动

在stm32mp157a单片机移植Linux操作系统&#xff0c;并移植内核驱动&#xff0c;在应用程序中使用3个线程&#xff0c;分别实现控制单片机上3个led流水灯的功能、蜂鸣器控制的功能、风扇控制的功能。 需求整理&#xff1a; 1.驱动程序-->led1.c&#xff0c;led2.c&#xff…...

Qt程序退出相关资源释放问题

目录 问题背景&#xff1a; aboutToQuit 代码举例 closeEvent事件 代码举例 程序退出方式 quit() exit(int returnCode 0) close() 问题背景&#xff1a; 实际项目中程序退出前往往需要及进行一些资源释放、配置保存、线程中断等操作&#xff0c;避免资源浪费&#xff…...

【大学生职业规划大赛备赛PPT资料PDF | 免费共享】

自取链接&#xff1a; 链接&#xff1a;https://pan.quark.cn/s/4fa45515325e &#x1f4e2; 同学&#xff0c;你是不是正在为职业规划大赛发愁&#xff1f; 想展示独特思路却不知如何下手&#xff1f; 想用专业模板却找不到资源&#xff1f; 别担心&#xff01;我整理了全网…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

软件工程 期末复习

瀑布模型&#xff1a;计划 螺旋模型&#xff1a;风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合&#xff1a;模块内部功能紧密 模块之间依赖程度小 高内聚&#xff1a;指的是一个模块内部的功能应该紧密相关。换句话说&#xff0c;一个模块应当只实现单一的功能…...