BGP组件交互分析

  1. 内核中的bgp socket收到BGP更新报文,然后被上送到bgpd进程
  2. bgpd处理该报文,并通知zebra进程新增前缀和关联下一跳
  3. zebra确定该目的可达后,生成一个路由网络链接信息,并将该信息信息注入到内核中
  4. zebra进程通过fpm的接口将该该路由网络链接信息传递给fpmsyncd进程
  5. fpmsyncd将此状态推送到APPL_DB中
  6. orchagent订阅了(5)当中的message
  7. orchagent处理收到的信息,并调用sairedis APIs将新状态注入到ASIC_DB中
  8. syncd订阅orchagent生成的消息,并生成新的状态
  9. syncd调用SAI API将此状态注入到ASIC驱动的对应的状态
  10. 新的路由被写入硬件中,并进行转发
  11. bgpcfgd阅CONFIG_DB变化,通过vtysh下发配置到zebra/bgp等

DHCP_RELAY组件交互分析

  1. 设备起机后,dhcp_relay进程通过直接解析config_db.json里面相关的dhcp_relay的配置,然后Dhcp-relay docker里相关的配置文件/etc/supervisor/conf.d/docker-dhcp-relay.supervisord.conf
  2. /usr/bin/dhcp_relay.sh wait通过监听数据库里的接口状态,并动态获取接口的IP地址
  3. 当硬件收到一个dhcp报文(当报文是单播且单播地址非本地IP地址,则直接硬件转发,如果报文是广播或者且单播地址为本地IP,则上送到CPU),根据协议上送到CPU,CPU在根据对应的过滤规则,发送到内核空间对应的socker套接字,dhcp_relay进程从内核空间的dhcp的套件字获取到dhcp的数据包,并解析该数据包,是否转发或者丢弃
  4. dhcp_relay进程处理完数据包后,发到内核空间,由内核转发给硬件进行转发

host系统组件交互分析

/usr/bin/sensorspoll 用于起机拉起sensorspoll.py
/usr/bin/sensorspoll.py 周期性读取电源、风扇、子卡的mib信息,并写入STATE DB
/usr/bin/hostcfgd AAA配置下发
sshd ssh远程登入和scp功能
/usr/bin/sensorspoll.py 周期性读取电源、风扇、子卡的mib信息,并写入STATE DB
/usr/bin/hostcfgd AAA配置下发
sshd ssh远程登入和scp功能。
/usr/sbin/rsyslogd 日志记录
cli 用户命令行交互, 并把对应的CLI写入到CONFIG DB
/usr/sbin/ntpd ntp主进程,用于和ntp server时间同步
/usr/local/bin/fancontrol.py 锐捷风扇控制进程,由 device_i2c 启动

LLDP组件交互分析

  1. lldpmgrd订阅数据库中STATE_DB获取端口的实时状态,并同步给lldpd
  2. lldpd进程从内核空间的lldp的套件字获取到lldp的数据包,并解析此状态,lldp_syncd通过执行lldp cli命令获取到该状态
  3. lldp_syncd将该新状态发布到database中的APPL_DB
  4. SNMP使用订阅方式获取到该message的变动并进行处理

PMON组件交互分析


PMON doncker软件组件主要用于管理平台硬件,包括风扇,热传感器,SFP,收发器,pmon等,其交互流程主要如下:

  1. syseepromd进程从内核空间的syseepromd的套件字获取到数据包,并解析此状态,xcvrd/sysmonitor/pmon_syslog通过syseepromd提供的接口进行信息获取
  2. xcvrd/sysmonitor/pmon_syslog通过syseepromd将该新状态发布到database中的STATE_DB
  3. SNMP使用订阅方式获取到该message的变动并进行处理

redis-server与client交互分析

docker 组件 与redis之间的联系 测试点
lldp lldpd: monitor unix 1、攻击UNIX连接下,做LLDP相关配置拷机,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题
2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
lldp_syncd TCP/unix 1、攻击击UNIX/TCP连接下,做LLDP相关配置拷机,组件和server的连接可正常稳定运行, 无数据读写异常问题/无组件稳定性问题
2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
/usr/bin/lldpmgrd TCP 1、攻击TCP连接下,做LLDP相关配置拷机,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题
2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
lldp-mgmt lldpd: monitor unix 1、攻击UNIX连接下,做LLDP相关配置拷机,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题
2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
lldp_syncd TCP/unix 1、攻击击UNIX/TCP连接下,做LLDP相关配置拷机,组件和server的连接可正常稳定运行, 无数据读写异常问题/无组件稳定性问题
2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
/usr/bin/lldpmgrd TCP 1、攻击TCP连接下,做LLDP相关配置拷机,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题
2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
snmp /usr/sbin/snmpdr unix 1、攻击UNIX连接下,做SNMP相关配置拷机,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题
2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
python3.6 -m sonic_ax_impl unix 1、攻击UNIX连接下,做SNMP相关配置拷机,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题 2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
dhcp-relay /usr/sbin/dhcrelay udp/unix 1、攻击UNIX连接下,做dhcp-relay相关配置拷机,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题
2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
teamd /usr/bin/teammgrd unix 1、攻击UNIX连接下,做teamd相关配置拷机,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题
2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
/usr/bin/teamsyncd unix 1、攻击UNIX连接下,做teamd相关配置拷机,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题 2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
/usr/bin/python /usr/bin/teamshow TCP 1、攻击TCP连接下,做teamd相关配置拷机,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题 2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
teamdctl unix 1、攻击UNIX连接下,做teamd相关配置拷机,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题 2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
syncd /usr/bin/dsserve unix 1、攻击UNIX连接下,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题 2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
/usr/bin/syncd --diag -u -p /etc/sai.d/sai.profile unix 1、攻击UNIX连接下,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题 2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
/usr/bin/syncd --diag -u -p /etc/sai.d/sai.profile unix 1、攻击UNIX连接下,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题 2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
swss /usr/bin/orchagen unix 1、攻击UNIX连接下,做orchagen相关配置拷机,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题 2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
/usr/bin/portsyncd unix 1、
unix 1、攻击UNIX连接下,做port相关配置拷机,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题 2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
/usr/bin/vrfmgrd unix 1、攻击UNIX连接下,做VRF相关配置拷机,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题 2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
/usr/bin/vlanmgrd unix 1、攻击UNIX连接下,做vlan相关配置拷机,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题 2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
/usr/bin/intfmgrd unix 1、攻击UNIX连接下,做intf相关配置拷机,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题 2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
/usr/bin/portmgrd unix 1、攻击UNIX连接下,做port相关配置拷机,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题 2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
/usr/bin/buffermgrd unix 1、攻击UNIX连接下,做占用/释放BUFFER相关内容拷机,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题 2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
/usr/bin/nbrmgrd unix 1、攻击UNIX连接下,做生成和删除nbr相关内容拷机,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题 2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
/usr/bin/switchmgrd unix 1、攻击UNIX连接下,做生成和删除switch相关内容拷机,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题 2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
/usr/bin/neigh_update TCP 1、攻击TCP连接下,做neigh_update更新相关内容拷机,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题 2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
/usr/bin/no_stack_neigh.py TCP 1、攻击TCP连接下,做去堆叠更新相关内容拷机,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题 2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
bgp python /usr/bin/bgpcfgd TCP 1、攻击TCP连接下,做BGP配置相关内容拷机,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题 2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
fpmsyncd TCP/unix 1、攻击TCP/UNIX连接下,做BGP配置相关内容拷机,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题 2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
/usr/lib/frr/zebra TCP/unix 1、攻击TCP连接下,做路由表项更新和删除相关内容拷机,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题 2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
/usr/lib/frr/bgpd TCP/unix 1、攻击TCP/unix连接下,做BGP配置相关内容拷机,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题 2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
pmon /usr/bin/python /usr/bin/pmon_syslog unix 1、攻击UNIX连接下,做光模块相关的内容拷机后读取syslog,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题 2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
/usr/bin/python /usr/bin/xcvrd TCP 1、攻击TCP连接下,做光模块相关的内容拷机,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题 2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
/usr/bin/python /usr/bin/sysmonitor unix 1、攻击UNIX连接下,做monitor相关的内容拷机,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题 2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题
/usr/bin/python /usr/bin/bmcmgrd.py TCP 1、攻击TCP连接下,做BMC相关的内容拷机,组件和server的连接可正常稳定运行,无数据读写异常问题/无组件稳定性问题 2、数据库容器进行warm start后,组件状态和重启前一致,无上下层表项不一致问题

SNMP组件交互分析


0、Config Manager从CLI / Rest接受配置请求,或者从Minigraph检索设备上的LAG和IP over LAG数据,然后将对象更新到ConfigDB中
1、teammgrd订阅ConfigDB的LAG对应的KEY值(PORTCHANNEL,PORTCHANNEL_MEMBER),经过teammgrd、teamdsyncd处理,将状态更新到APPL_DB,
对于相应的ConfigDB表中的任何更改,teammgrd/teamdsyncd将针对LAG和LAG成员执行Linux主机配置,一旦成功,它们将继续更新APPL_DB/STATE_DB中的LAG_TABLE /LAG_MEMBER_TABLE状态表。
2、orchagent,intfmgrd组件订阅APPl_DB/STATE_DB中的LAG_TABLE /LAG_MEMBER_TABLE状态表
3、经过进程处理后,转换成ASIC信息写入ASIC_DB
4、syncd订阅ASIC_DB的LAG信息,处理后写入SDK

SWSS组件交互分析


端口初始化:
(0)在初始化期间,portsyncd与redis引擎中的主数据库建立通信通道。 Portsyncd声明打算充当APPL_DB和STATE_DB的发布者,以及CONFIG_DB的订阅者。同样,portsyncd也订阅系统的netlink通道,该通道负责传送端口/链接状态信息。

(1)Portsyncd首先通过解析与系统中正在使用的硬件配置文件/ sku相关联的端口配置文件(port_config.ini)(有关更多详细信息,请参阅配置部分)。与端口相关的信息(例如通道,接口名称,接口别名,速度等)在通过此通道传输到APPL_DB的过程中。

(2)Orchagent听到了所有这些新状态,但是将推迟对其执行操作,直到portsyncd通知它已完全完成解析port_config.ini信息为止。一旦发生这种情况,orchagent将继续进行硬件/内核中相应端口接口的初始化。 Orchagent调用sairedis API来传递此请求,以通过常规ASIC_DB接口进行同步。

(3)Syncd通过ASIC_DB接收此新请求,并准备调用满足Orchagent的请求所需的SAI API。

(4)Syncd利用SAI API + ASIC SDK创建与正在初始化的物理端口相关的内核主机接口。

(5)上一步将生成一个netlink消息,该消息将被portsyncd接收。与先前从port_config.ini解析的所有端口相关的消息到达portsyncd后(在步骤1中),portsyncd将继续声明“初始化”过程已完成。

(6)作为上一步的一部分,portsyncd将一个记录条目写入到STATE_DB中,该条目与成功初始化的每个端口相对应。

(7)从现在开始,以前订阅STATE_DB内容的应用程序将收到通知,以允许这些应用程序开始使用它们所依赖的端口。
端口down:
1、ASIC光模块造成的载波丢失,该消息被发送到ASIC驱动,ASIC驱动发送给syncd模块
2、syncd调用通知处理程序来把端口关闭时间发送给ASIC_DB
3、orchagent使用其通知处理程序来收集ASIC_DB中的新状态,并发布端口更新状态到:
<3a>发布新的状态到APPL_DB中,用于警告依靠这个端口状态进行操作的应用程序
<3b>调用sairedis APIs来警告更新与主机接口关联的接口被关闭
4、syncd通过ASIC_DB接收此新请求,并调用SAI API去满足 orchagent的请求
5、syncd使用SAI APIs + ASIC SDK使用
受影响的主机接口的最新操作状态(DOWN)
6、与上一步关联的netlink消息是在portsyncd接收到,并作为所有SONiC静默丢弃,组件现在完全了解端口关闭事件
7、作为上一步的一部分,portsyncd将记录条目写入与成功初始化的每个端口相对应的STATE_DB中。
8、从现在开始,以前订阅STATE_DB内容的应用程序将收到通知,以允许这些应用程序开始使用它们所依赖的端口。 换句话说,如果在STATE_DB中找不到用于特定端口的有效条目,则任何应用程序都将无法使用它。

Syncd组件交互分析

端口初始化:

0、在初始化期间,portsyncd与redis引擎中的主数据库建立通信通道。 Portsyncd声明打算充当APPL_DB和STATE_DB的发布者,以及CONFIG_DB的订阅者。同样,portsyncd也订阅系统的netlink通道,该通道负责传送端口/链接状态信息。
1、Portsyncd首先通过解析与系统中正在使用的硬件配置文件/ sku相关联的端口配置文件(port_config.ini)(有关更多详细信息,请参阅配置部分)。与端口相关的信息(例如通道,接口名称,接口别名,速度等)在通过此通道传输到APPL_DB的过程中。
2、Orchagent听到了所有这些新状态,但是将推迟对其执行操作,直到portsyncd通知它已完全完成解析port_config.ini信息为止。一旦发生这种情况,orchagent将继续进行硬件/内核中相应端口接口的初始化。 Orchagent调用sairedis API来传递此请求,以通过常规ASIC_DB接口进行同步。
3、Syncd通过ASIC_DB接收此新请求,并准备调用满足Orchagent的请求所需的SAI API。
4、Syncd利用SAI API + ASIC SDK创建与正在初始化的物理端口相关的内核主机接口。
/5、上一步将生成一个netlink消息,该消息将被portsyncd接收。与先前从port_config.ini解析的所有端口相关的消息到达portsyncd后(在步骤1中),portsyncd将继续声明“初始化”过程已完成。
/6、作为上一步的一部分,portsyncd将一个记录条目写入到STATE_DB中,该条目与成功初始化的每个端口相对应。
/7、从现在开始,以前订阅STATE_DB内容的应用程序将收到通知,以允许这些应用程序开始使用它们所依赖的端口。

端口down:

1、ASIC光模块造成的载波丢失,该消息被发送到ASIC驱动,ASIC驱动发送给syncd模块
2、syncd调用通知处理程序来把端口关闭时间发送给ASIC_DB
3、orchagent使用其通知处理程序来收集ASIC_DB中的新状态,并发布端口更新状态到:
<3a>发布新的状态到APPL_DB中,用于警告依靠这个端口状态进行操作的应用程序
<3b>调用sairedis APIs来警告更新与主机接口关联的接口被关闭
4、syncd通过ASIC_DB接收此新请求,并调用SAI API去满足 orchagent的请求
5、syncd使用SAI APIs + ASIC SDK使用
受影响的主机接口的最新操作状态(DOWN)
6、与上一步关联的netlink消息是在portsyncd接收到,并作为所有SONiC静默丢弃,组件现在完全了解端口关闭事件
7、作为上一步的一部分,portsyncd将记录条目写入与成功初始化的每个端口相对应的STATE_DB中。
8、从现在开始,以前订阅STATE_DB内容的应用程序将收到通知,以允许这些应用程序开始使用它们所依赖的端口。 换句话说,如果在STATE_DB中找不到用于特定端口的有效条目,则任何应用程序都将无法使用它。

TEAMD组件交互分析


0、Config Manager从CLI / Rest接受配置请求,或者从Minigraph检索设备上的LAG和IP over LAG数据,然后将对象更新到ConfigDB中
1、teammgrd订阅ConfigDB的LAG对应的KEY值(PORTCHANNEL,PORTCHANNEL_MEMBER),经过teammgrd、teamdsyncd处理,将状态更新到APPL_DB,
对于相应的ConfigDB表中的任何更改,teammgrd/teamdsyncd将针对LAG和LAG成员执行Linux主机配置,一旦成功,它们将继续更新APPL_DB/STATE_DB中的LAG_TABLE /LAG_MEMBER_TABLE状态表。
2、orchagent,intfmgrd组件订阅APPl_DB/STATE_DB中的LAG_TABLE /LAG_MEMBER_TABLE状态表
3、经过进程处理后,转换成ASIC信息写入ASIC_DB
4、syncd订阅ASIC_DB的LAG信息,处理后写入SDK

SONiC架构DOCKER组件交互分析相关推荐

  1. Docker源码分析(一):Docker架构

    1 背景 1.1 Docker简介 Docker是Docker公司开源的一个基于轻量级虚拟化技术的容器引擎项目,整个项目基于Go语言开发,并遵从Apache 2.0协议.目前,Docker可以在容器内 ...

  2. 转载:Docker源码分析(一):Docker架构

    原文地址: http://www.infoq.com/cn/articles/docker-source-code-analysis-part1  作者:孙宏亮 1 背景 1.1 Docker简介 D ...

  3. docker containerd 架构和源码简单分析

    docker containerd 架构和源码简单分析 本文结合docker1.12简单说明一下docker 的现有框架,简单分析docker containerd的架构和源码. docker发展到现 ...

  4. Docker源码分析(十一):镜像存储

    http://www.infoq.com/cn/articles/docker-source-code-analysis-part11 1.前言 Docker Hub汇总众多Docker用户的镜像,极 ...

  5. Docker源码分析(十):Docker镜像下载

    http://www.infoq.com/cn/articles/docker-source-code-analysis-part10 1.前言 说Docker Image是Docker体系的价值所在 ...

  6. Docker源码分析(八):Docker Container网络(下)

    http://www.infoq.com/cn/articles/docker-source-code-analysis-part8 1.Docker Client配置容器网络模式 Docker目前支 ...

  7. Docker源码分析(六):Docker Daemon网络

    http://www.infoq.com/cn/articles/docker-source-code-analysis-part6 1. 前言 Docker作为一个开源的轻量级虚拟化容器引擎技术,已 ...

  8. 网站(B/s)架构发展探索、分析

    1.系统概况图 图1.1 系统架构概况图 图1.2 较为完整的系统架构图 2.系统使用的主要技术 下列排名不分先后 2.1前端 JavaScript,html,css,silverlight,flas ...

  9. Apache Hive入门:模拟实现Hive功能、Hive架构、 组件

    一.Apache Hive概述 什么是Hive Apache Hive是一款建立在Hadoop之上的开源数据仓库系统,可以将存储在Hadoop文件中的结构化.半结构化数据文件映射为一张数据库表,  基 ...

最新文章

  1. 【Python初级】009-错误与异常
  2. gradle中的增量构建
  3. mysql客户端版本太低_windows一机多装mysql,5.5低版本+5.8高版本
  4. 【转】ABP源码分析十九:Auditing
  5. 像A + B一样容易
  6. 2021,前方路艰,与君共勉
  7. POJ 1155 TELE 树形DP
  8. STL vector的迭代器的熟练运用及lower_bound和upper_bound的使用
  9. 在虚函数 声明中写override的作用
  10. 你会用 JSON.stringify()? JSON.stringify一些坑
  11. jrtplib linux编译,linux下编译jrtplib、jthreadlib
  12. 企业双运营商出口负载均衡同时冗余备份
  13. html编写红头文件
  14. 《DFS》《剪枝》Problem C. 买蛋糕
  15. 基于itchat获取微信好友头像
  16. 利用好 git bisect 这把利器,帮助你快速定位疑难 Bug
  17. uni-app(H5)拼图游戏
  18. wps斜杠日期格式_使用WPS处理日期数据格式的方法
  19. 【Linux编程】UVC摄像头采集与显示(V4L2编程)
  20. Mircrosoft Visual C++ Runtime Library提示窗口为何黏着桌面

热门文章

  1. shell编程-初始shell及变量
  2. issu3.6 sdk 试玩
  3. Android测试游戏帧数的方法
  4. 弘扬运河文化 传承百年技艺——“甘陵春”酒酿造技艺及发展现状
  5. 联想计算机游戏本,2021十大游戏本排行(最佳游戏笔记本电脑推荐)
  6. ffmpeg gpu硬件加速
  7. 读取邮箱邮件(PHP)三种
  8. 解决java项目时乱码问题
  9. vue改变class名字_vue中动态添加class类名的方法
  10. tkinter向文本框里加内容_tkinter学习-文本框