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

【Linux内核二】常用的网络丢包错包debug工具介绍

目录

ifconfig

Ifconfig输出各字段简述

txqueuelen

RX和TX的errors指哪些错误

dropped与overruns的区别

常用ifconfig配置命令

显示网卡信息

启动关闭指定网卡

配置和删除ip地址

修改MAC地址

启用和关闭ARP协议

设置最大传输单元

设置网卡的promiscuous模式

设置网卡的多播模式

配置和删除IPv6地址

配置txqqueuelen

ethtool

netstat


ifconfig

关于此工具找到一篇雄文:note/ifconfig.md at master · vikyd/note · GitHub

Ifconfig输出各字段简述

以下图的Ubuntu系统为例:

 字段:eth0

含义:网卡名,网卡驱动里定义的名称,这个没什么好说的。

字段:flags

示例:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>

含义:表示当前网卡的状态(此列表并非可操作的命令)

详细:

UP:表示网卡已启动(interface is up),无 UP 则表示网卡未启动(ifconfig -a 显示未启动网卡)

BROADCAST:网卡的广播地址有效(broadcast address valid. Volatile)

RUNNING:网卡已连接到路由器等设备(interface RFC2863 OPER_UP. Volatile)

与UP的区别:UP 表示网卡本身启动了,RUNNING 表示是否连接到了路由器等设备。

MULTICAST:可以发送组播包(或说多播)(Supports multicast)

关于4613的这个数字怎么来的,请查看雄文原文,这里不多提了。

字段:mtu

示例:mtu 1500

全称:Linux 文档中称为:Maximum Transfer Unit维基百科中称为:Maximum Transmission Unit

含义:最大传输单元;指链路层(第 2 层)的 frame 的 payload(负载)的最大大小;Linux 中 MTU 对发送和接收都起作用。

单位:Byte

详细:为什么mtu通常是1500?请查看原文。

字段:inet

示例:inet 10.10.10.11 netmask 255.255.240.0 broadcast 10.10.10.255 中的 10.10.10.11

全称:Internet

含义:TCP/IP 的 IPv4 地址(IPv6 的字段为inet6)

理解:互联网基于TCP/IP 协议族(protocol family),所以通常inet指IP地址

类型:除了inet,还可能会有:inet6、ax25、ddp、ipx、netrom 等类型

字段:netmask

示例:netmask 255.255.240.0

全称:IP network mask

中文:子网掩码

字段:broadcast

示例:broadcast 10.10.10.255

全称:IP broadcast address

中文:广播地址

字段:inet6

示例:inet6 fe80::215:5dff:fef6:a8e7

全称:类似前面 inet

含义:TCP/IP 的 IPv6 地址

字段:prefixlen

示例:prefixlen 64

全称:prefix length

含义:表示此地址的前64位是网络前缀,作用类似于IPv4的子网掩码

字段:scopeid

示例:scopeid 0x20<link>

全称:scope id

含义:0x20<link> 表示 IPv6 的 Link-Local类型地址

字段:ether

示例:ether 42:01:0a:aa:00:03

全称:Ethernet

中文:以太网

含义:表示网卡的 MAC 地址

理解:对应第 2 层链路层的Ethernet协议

字段:txqueuelen

示例:txqueuelen 1000

全称:transmit queue length

理解:发送数据时qdisc(Queuing Disciplines)队列的大小

单位:sk_buff(socket buffer)

详细:txqueuelen 是一个比较长的话题,见后面txqueuelen小节

字段:RX 与 TX

示例:

RX packets 69426519  bytes 20960261647 (19.5 GiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 73886979  bytes 15013465511 (13.9 GiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

这两个大字段数据主要 来源于 /proc/net/dev(查看:cat /proc/net/dev)

参考:Linux输出 /proc/net/dev的源码

字段:RX

示例:

RX packets 69426519  bytes 20960261647 (19.5 GiB)

RX errors 0  dropped 0  overruns 0  frame 0

全称:Received

含义:网卡接收数据的统计

字段:

packets 69426519:成功接收到的数据包数量

单位:sk_buff(与第 2 层链路层的frame的数量相等)

注意:这不是第3层网络层的单位packet

bytes 20960261647 (19.5 GiB):数据 + 各层header的字节数量

换算:CentOS 貌似常按 1024 换算成 GiB,Ubuntu 貌似常按 1000 换算成 GB,参考 man 7 units

errors:出错的包数量

单位:sk_buff

注意:此数值不等于后面 dropped、overruns、frame字段的总和,原因见后面 RX的errors指哪些错误小节

dropped:Linux 内核对应的sk_buff满了导致的丢包

单位:sk_buff

可能原因之一:Linux系统内存不足,导致从网卡拷贝数据到系统内存时丢包

overruns:Linux 内核对应的Ring Buffer满了导致的丢包

单位:sk_buff

可能原因之一:CPU 很忙无法及时处理网卡申请的中断

对应 Linux Kernel 的 rx_fifo_errors

注意:详细见后面dropped与overruns的区别小节

frame:指第2层链路层的frame的bit数不能被8整除,不符合帧的定义的错误

单位:sk_buff

可能原因之一:网卡、交换机等硬件故障导致

详细:见后面RX和TX小节

字段:TX

示例:

TX packets 73886979  bytes 15013465511 (13.9 GiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

全称:Transmitted

含义:网卡发送数据的统计

字段:

与 RX 同名的字段:略过

errors:与前面 RX 的 errors 包含的错误类型有些不一样

carrier:硬件调制信号(modulation of signal)导致的出错包数量

collisions:冲突的包数量

txqueuelen

txqueuelen发送数据时qdisc的允许队列大小,txqueuelen 的单位是 sk_buff(socket buffer),发送数据时,应用层的数据经过内核协议栈的层层封装后,先到达qdisc,之后才到达Ring Buffer(就是下图中的Driver queue),Ring Buffer是一个简单的FIFO(先进先出)队列,但太简单,所以出现了qdisc 提供灵活的流量控制功能。

RX和TX的errors指哪些错误

RX错误类型包括:

rx_frame_errors(对应ifconfig 的frame,表示非对齐的帧,这种错误一般出现在物理层)

rx_crc_errors(不对应ifconfig 的任何字段,表示帧校验错误,这种错误一般出现在物理层)

rx_length_errors(不对应ifconfig的任何字段)

rx_fifo_errors(对应ifconfig的overruns)

这些错误类型可能因不同网卡而不同

错误类型 不一定 包括:

rx_dropped(对应ifconfig的dropped)

TX错误类型包括:

tx_window_errors(不对应 ifconfig 的任何字段)

tx_aborted_errors(不对应 ifconfig 的任何字段)

tx_carrier_errors(对应 ifconfig 的 carrier)

tx_fifo_errors(对应 ifconfig 的 overruns)

这些错误类型可能因不同网卡而不同

错误类型不包括:

tx_dropped(对应 ifconfig 的 dropped)

dropped与overruns的区别

dropped与overruns是指两种不同的丢包情况。

要了解两者的区别,需首先了解Linux内核中的 网络数据流转机制。

以接收数据为例:

1)网卡驱动在内存中分配一片缓冲区用来接收数据包,叫做sk_buff

2)将上述缓冲区的地址和大小(即接收描述符),加入到rx ring buffer。描述符中的缓冲区地址是 DMA 使用的物理地址

3)驱动通知网卡有一个新的描述符

4)网卡从rx ring buffer中取出描述符,从而获知缓冲区的地址和大小

5)网卡收到新的数据包;

6)网卡将新数据包通过 DMA 直接写到sk_buff中

注意,上述流程有几个可能容易模糊的概念:

网卡驱动:这是跑在 Linux 中的程序,而非跑在网卡硬件中

sk_buff:存在于 Linux 内存中,可以在不同的网络协议层之间传递(在 Linux 源码中的定义见 skbuff.h),sk_buff 是真正存放网络数据的位置。

rx ring buffer:是一个 FIFO(先进先出)队列,队列的内容并不是真正的网络数据,而是一些指向 sk_buff 的描述符。

再次看下这个图可能会更清晰:

了解上述流程后,可以开始说两者的区别了:

dropped:sk_buff 满了,新的数据写不进 sk_buff 导致的丢包

可能原因之一:Linux系统分配的内存不足,导致从网卡拷贝数据到系统内存时丢包。

overruns:ring buffer 队列满了,队列暂无可用的描述符,导致的丢包。在 ifconfig 源码实际就是 rx_fifo_errors(recv'r fifo overrun)

可能原因之一:CPU 很忙无法及时处理网卡申请的中断

总之,大概可理解为,一个是指针满了(overruns),一个是内存满了(dropped)

ring buffer满了不代表buffer满了,可能是因为每个指针指向的buffer数据都很小,当有一段相对小帧数据过来,需要的消耗的指针数量大于ring buffer的当前容量;sk_buff 满了也不代表 ring buffer满了,可能是因为每个指针指向的buffer数据较大,大到当前的socket buffer装不下此数据。

常用ifconfig配置命令

显示网卡信息

(1) 显示激活的网卡信息

ifconfig

(2) 显示所有的网卡信息

ifconfig -a

(3) 显示简要的网卡信息

ifconfig -s

启动关闭指定网卡

(1) 关闭网卡

ifconfig eth0 down

(2) 启动网卡

ifconfig eth0 up

配置和删除ip地址

(1) 配置ip

// 配置ip地址

ifconfig eth0 192.168.1.100

// 配置ip地址和子网掩码

ifconfig eth0 192.168.1.100 netmask 255.255.255.0

// 配置ip地址、子网掩码和广播地址

ifconfig eth0 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255

(2) 单网卡添加多个IP地址

ifconfig eth0:0 192.168.1.100 netmask 255.255.255.0 up

ifconfig eth0:1 192.168.2.100 netmask 255.255.255.0 up

(3) 删除IP地址

ifconfig eth0 del 192.168.1.100

修改MAC地址

ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE

启用和关闭ARP协议

(1) 启用arp

ifconfig eth0 arp

(2) 禁用arp

ifconfig eth0 -arp

设置最大传输单元

ifconfig eth0 mtu 1500

设置网卡的promiscuous模式

(1) 启用

ifconfig eth0 promisc ,指网卡能够接收所有经过它的数据流,而不论其目的地址是否是它。

(2) 禁用

ifconfig eth0 -promisc

设置网卡的多播模式

(1) 启用

ifconfig eth0 allmulti

(2) 禁用

ifconfig eth0 -allmulti

配置和删除IPv6地址

(1) 添加

ifconfig eth0 add 3ffe:3240:800:1005::2/64

(2) 删除

ifconfig eth0 del 3ffe:3240:800:1005::2/64

配置txqqueuelen

ifconfig eth0 txqqueuelen 1500

ethtool

ethtool查询或控制网络驱动程序和硬件设置。利用ethtool可以根据需要更改以太网卡的参数,包括自动协商、速度、双工和局域网唤醒等参数。

命令格式:ethtool [<options>] [<devname>]

Option说明:

-a, --show-pause

    查看网卡中接收模块RX、发送模块TX 和 Autonegotiate模块的pause帧流控状态:启动on或停用off。

-A, --pause <devname> [autoneg on|off] [rx on|off] [tx on|off]

    修改网卡中接收模块RX、发送模块TX和Autonegotiate 模块的pause帧流控状态:启动on或停用off。

-c, --show-coalesce

    查询指定网络设备的合并信息。

-C, --coalesce

    更改指定网络设备的合并设置。

-g, --show-ring

    显示指定以太网卡的rx/tx环参数信息。就是上篇文章提到的ring buffer。

-G, --set-ring

    更改指定以太网卡的rx/tx环设置。

-i, --driver

    显示网卡驱动的信息,如驱动的名称、版本等。

-d, --register-dump <devname> [raw on|off] [hex on|off] [file name]

    显示register dump信息,部分网卡驱动不支持该选项。

-e, --eeprom-dump <devname> [raw on|off] [offset N] [length N]

    显示EEPROM dump信息,部分网卡驱动不支持该选项。

-E, --change-eeprom

    修改网卡 EEPROM byte。

-k, --show-features, --show-offload <devname>

    显示网卡 Offload 参数的状态:on或off,包括 rx-checksumming、tx-checksumming等。就是网卡来做一些事情,给CPU减负。

-K, --features, --offload <devname> <feature> on|off ...

    修改网卡 Offload 参数的状态。

-p, --identify <devname> [N]

    用于区别不同 ethX 对应网卡的物理位置,常用的方法是使网卡 port 上的 led 不断的闪;N 指示了网卡闪的持续时间,以秒为单位。

-P, --show-permaddr

    向指定的网络设备查询永久硬件地址。

-r, --negotiate <devname>

    如果auto-negotiation 模块状态为on,则restarts auto-negotiation。

-S, --statistics

    显示 NIC- and driver-specific 的统计参数,如网卡接收/发送的字节数、接收/发送的广播包个数等。

-t, --test

    让网卡执行自我检测,有两种模式:offline or online。

-s, --change

    修改网卡的部分配置,包括网卡速度、单工/全双工模式、MAC地址等。

-h, --help

    显示帮助信息。

--version

    显示版本信息。

参考文章:(24条消息) Linux 命令(194)—— ethtool 命令_ethtool命令详解_恋喵大鲤鱼的博客-CSDN博客

netstat

该命令经常用于查看网络连接状态

下面是它的一些参数:

-a:显示所有选项

-t:仅显示tcp相关选项

-u:仅显示udp相关选项

-n:不显示别名

-l:仅列出处于监听状态下的服务

-p:显示建立相关链接的程序名

-r:显示路由信息、路由表

-e:显示扩展信息,如uid

-s:按各个协议进行统计

-c:每隔一段事件执行netstat

 

 

相关文章:

【Linux内核二】常用的网络丢包错包debug工具介绍

目录 ifconfig Ifconfig输出各字段简述 txqueuelen RX和TX的errors指哪些错误 dropped与overruns的区别 常用ifconfig配置命令 显示网卡信息 启动关闭指定网卡 配置和删除ip地址 修改MAC地址 启用和关闭ARP协议 设置最大传输单元 设置网卡的promiscuous模式 设置…...

qt控件增加渐变色效果

ui->returnBtn->setStyleSheet("color: rgb(0, 0, 0);""background:qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, ""stop:0 #5f5f5f, stop:0.5 #ffffff, stop:0.98 #5f5f5f);""border:none;");效果如下图&#xff1a; …...

【node : 无法将“node”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。 最全面有效的解决方案】

执行nodejs文件错误&#xff1a; 这个错误提示通常是由于你的系统无法识别 "node" 命令&#xff0c;可能是由于你没有正确地安装或配置 Node.js 环境变量。 问题描述 ​​​​​​​​​​​​​​ 原因分析&#xff1a; 可能原因包括&#xff1a; 1.Node.js未正确安…...

打怪升级之字符串的分界符与字符串替换

流的字符串分界符 在C的iostream中&#xff0c;有流的字符串分界符&#xff1a; " “和”"都代表简单的分隔。 因此&#xff0c;使用流来做字符串分隔的话&#xff0c;有一个比较简单的方案就是将原定义的分隔符通过替换的方式变成流的分隔符。然后再录入流中就能…...

载荷台子使用方式

载荷自动测量台子使用方法 电源开关旋转到1&#xff0c;开启电源开启台子微机开关&#xff0c;开启电脑&#xff08;winxp&#xff09;开启台子载荷开关&#xff0c;启动载荷台子点击电脑动标图标&#xff0c;开启软件放入载荷&#xff0c;弹性体向上&#xff0c;载荷台子压头压…...

1005 继续(3n + 1)猜想

卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里&#xff0c;情况稍微有些复杂。 当我们验证卡拉兹猜想的时候&#xff0c;为了避免重复计算&#xff0c;可以记录下递推过程中遇到的每一个数。例如对 n3 进行验证的时候&#xff0c;我们需要计算 3、5、8、4、2、1&a…...

VMware15配置NAT模式联通网络

最近为了测试C# 开发的桌面应用程序悬浮球的兼容性&#xff0c;在虚拟机上安装了win7系统和xp系统&#xff0c;之前也安装过黑苹果系统&#xff0c;但是win系统倒是第一次安装&#xff0c;在win7系统联网的时候&#xff0c;踩了一些坑&#xff0c;整理纪录一下。 设置主物理机配…...

doPost的实际使用

目录 前言 一、doPost是什么&#xff1f; 二、使用步骤 1.doPost的请求方法 2.需要引入依赖 总结 前言 本章主要记录一下doPost的请求公用方法的使用。 一、doPost是什么&#xff1f; 它其实就是一个http的post请求方式。 二、使用步骤 1.doPost的请求方法 当我们系…...

2017年MathorCup数学建模A题流程工业的智能制造解题全过程文档及程序

2017年第七届MathorCup高校数学建模挑战赛 A题 流程工业的智能制造 原题再现&#xff1a; “中国制造 2025”是我国制造业升级的国家大战略。其技术核心是智能制造&#xff0c;智能化程度相当于“德国工业 4.0”水平。“中国制造 2025”的重点领域既包含重大装备的制造业&…...

HNU-电子测试平台与工具2-数模转换

数模转换实验 计科XXXX wolf 工程文件我也一并上传了 D级任务 一.实验任务 对74194进行仿真验证&#xff0c;掌握Quartus仿真的基本原则和常规步骤&#xff0c;记录移位寄存器的数据读写&#xff0c;并描述仿真波形&#xff0c;分析结果。 二.实验过程 1.电路连接 2.功能…...

CentOS7安装Telnet客户端和服务端和使用方式

在执行telnet时会提示命令不存在。Telnet服务的配置步骤如下:一、检测是否安装telnet软件包&#xff08;通常要两个&#xff09;1、telnet-client (或 telnet)&#xff0c;这个软件包提供的是 telnet 客户端程序&#xff1b;2、telnet-server 软件包&#xff0c;这个才是真正的…...

脂肪毒性的新兴调节剂——肠道微生物组

谷禾健康 肠道微生物组与脂质代谢&#xff1a;超越关联 脂质在细胞信号转导中起着至关重要的作用&#xff0c;有助于细胞膜的结构完整性&#xff0c;并调节能量代谢。 肠道微生物组通过从头生物合成和对宿主和膳食底物的修饰产生了大量的小分子。 最近的研究表明&#xff0c;由…...

【JavaSE系列】 第九节 —— 多态那些事儿

文章目录 前言 一、多态的概念 二、向上转型和向下转型 2.1 向上转型 2.2 什么是向上转型 2.3 三种常见的向上转型 2.3.1 直接赋值 2.3.2 作为方法的参数 2.3.3 作为方法的返回值 2.4 向下转型&#xff08;这个了解即可&#xff09; 三、方法重写 3.1 方法重写的…...

ego微商小程序项目-测试步骤

文章目录 1. 需求分析和评审2. 编写测试计划和测试方案2.1 ego小程序测试计划2.1.1 项目简介2.1.2 项目任务2.1.3 项目风险2.1.4 测试方案2.1.5 测试实施2.1.6 测试管理2.1.7 附录资料3. 编写测试用例和评审3.1 功能测试用例设计3.1.1 总-整体把控3.1.2 分- 拆分细化3.2 测试用…...

华为OD机试用Python实现 -【报数游戏】2023Q1 A卷

华为OD机试题 本篇题目:报数游戏题目输入输出示例 1输入输出示例 2输入输出Code代码编写思路最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解...

Plsql使用

登录登录system用户&#xff0c;初始有两个用户sys和system&#xff0c;密码是自己安装oracle数据库时写的&#xff0c;数据库选择orcl创建用户点击user,右键新增填写权限关于3个基本去权限介绍&#xff1a; connect : 基本操作表的权限&#xff0c;比如增删改查、视图创建等 r…...

小丑改造计划之四线程控制

1.线程有哪些优点&#xff0c;缺点&#xff1f; 1.优点&#xff1a; 创建线程的代价比较小 线程切换比进程的切换&#xff0c;操作系统要做的事少 线程比进程占用的资源要少 缺点&#xff1a; 子线程可能会影响主线程&#xff0c;健壮性不如进程 编写多线程比单线程难&#xff…...

Spring注册Bean的几种方式

通过XML配置注册Bean spring-config.xml <!--方式一&#xff1a;声明自定义的bean,没有设置id,id默认为全类型#编号--><bean id"cat" class"com.rzg.entity.Cat"/><bean class"com.rzg.entity.Cat"/>public class SpringApp…...

Egg:使用joi进行参数校验以及注册接口小demo

目录 前言&#xff1a; 准备工作&#xff1a; 前端代码&#xff1a; 后端目录截图&#xff1a; 1.获取参数 2.校验参数 3.查询数据库中是否已经存在该用户 4.用户入库 5.测试一哈 添加用户成功 同样的用户名再注册一遍 ​编辑总结&#xff1a; 前言&#xff1a; 在阅…...

天梯赛训练L1-016(查验身份证)

目录 1、L1-016 查验身份证 2、如果帮助到大家了&#xff0c;希望大家一键三连&#xff01;&#xff01;&#xff01; 1、L1-016 查验身份证 分数 15 题目通道 一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下&#xff1a; 首…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

在 Spring Boot 项目里,MYSQL中json类型字段使用

前言&#xff1a; 因为程序特殊需求导致&#xff0c;需要mysql数据库存储json类型数据&#xff0c;因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...

TCP/IP 网络编程 | 服务端 客户端的封装

设计模式 文章目录 设计模式一、socket.h 接口&#xff08;interface&#xff09;二、socket.cpp 实现&#xff08;implementation&#xff09;三、server.cpp 使用封装&#xff08;main 函数&#xff09;四、client.cpp 使用封装&#xff08;main 函数&#xff09;五、退出方法…...

验证redis数据结构

一、功能验证 1.验证redis的数据结构&#xff08;如字符串、列表、哈希、集合、有序集合等&#xff09;是否按照预期工作。 2、常见的数据结构验证方法&#xff1a; ①字符串&#xff08;string&#xff09; 测试基本操作 set、get、incr、decr 验证字符串的长度和内容是否正…...

高保真组件库:开关

一:制作关状态 拖入一个矩形作为关闭的底色:44 x 22,填充灰色CCCCCC,圆角23,边框宽度0,文本为”关“,右对齐,边距2,2,6,2,文本颜色白色FFFFFF。 拖拽一个椭圆,尺寸18 x 18,边框为0。3. 全选转为动态面板状态1命名为”关“。 二:制作开状态 复制关状态并命名为”开…...