《计算机网络简易速速上手小册》第6章:网络性能优化(2024 最新版)

在这里插入图片描述

文章目录

  • 6.1 带宽管理与 QoS - 让你的网络不再拥堵
    • 6.1.1 基础知识
    • 6.1.2 重点案例:提高远程办公的视频会议质量
      • 实现步骤
      • 环境准备
      • Python 脚本示例
      • 注意事项
    • 6.1.3 拓展案例1:智能家居系统的网络优化
      • 实现思路
      • Python 脚本示例
    • 6.1.4 拓展案例2:提升在线教育平台的教学质量
      • 实现方法
      • Python 脚本示例
  • 6.2 负载均衡技术 - 平衡艺术的网络版
    • 6.2.1 基础知识
    • 6.2.2 重点案例:Web应用的负载均衡
      • 实现步骤
      • 环境准备
      • Python 脚本示例
      • 脚本说明
      • 运行脚本
    • 6.2.3 拓展案例1:数据库读写分离
      • 实现思路
      • Python 脚本示例
    • 6.2.4 拓展案例2:使用健康检查提高服务可用性
      • 实现步骤
      • Python 脚本示例
  • 6.3 网络监控与管理 - 网络的守护者
    • 6.3.1 基础知识
    • 6.3.2 重点案例:使用 Python 进行基本的网络性能监控
      • 实现步骤
      • 安装所需库
      • Python 脚本示例
      • 脚本说明
    • 6.3.3 拓展案例1:实现网络设备的健康检查
      • 实现步骤
      • Python 脚本示例
    • 6.3.4 拓展案例2:构建实时网络流量分析工具
      • 实现步骤
      • Python 脚本示例
      • 脚本说明

第6章:网络性能优化

6.1 带宽管理与 QoS - 让你的网络不再拥堵

在这个数字化飞速发展的时代,我们的网络带宽就像是城市中的道路,而数据包则是在这些道路上行驶的车辆。但是,不同的车辆(数据包)有不同的目的地(应用),它们的重要性也各不相同。这就是带宽管理与服务质量(QoS)发挥作用的地方。

6.1.1 基础知识

带宽管理是指通过控制网络服务的数据流量和带宽分配来优化或提高网络服务的响应时间和数据处理能力的过程。简而言之,它帮助确保网络资源的合理分配,防止网络拥堵,并提高网络的整体性能。

**服务质量(QoS)**则进一步细化了带宽管理,通过给网络流量中的不同数据包设置优先级,确保关键应用(如实时视频会议、在线游戏等)获得必要的带宽,同时对不那么重要的应用(如文件下载、电子邮件)进行限制。

6.1.2 重点案例:提高远程办公的视频会议质量

在远程办公成为新常态的今天,确保视频会议的流畅性至关重要。使用Python,我们可以通过监控网络流量,并动态调整网络策略来优化视频会议的质量。

实现步骤

  1. 监控网络流量:使用Python的psutil库来监控网络流量,识别出视频会议流量的特征。
  2. 流量分类:根据流量特征,区分出视频会议流量与其他类型的网络流量。
  3. 优先级调整:为视频会议流量设置更高的优先级,使用Linux tc(Traffic Control)工具可以在网络层面进行这种设置。
  4. 带宽分配:为确保视频会议的流畅性,需要为其保留足够的带宽,同时对其他较不重要的流量进行限制。

为了提供一个具体的实现示例,我们将编写一个简单的 Python 脚本。这个脚本将演示如何使用psutil监控网络流量,并使用假设的逻辑来模拟为视频会议流量设置更高优先级的过程。请注意,实际的网络策略调整需要根据具体的网络设备和配置进行,这里仅提供一个概念性的实现框架。

环境准备

首先,确保你的Python环境中安装了psutil库。如果尚未安装,可以通过以下命令安装:

pip install psutil

Python 脚本示例

以下是一个简单的Python脚本,它演示了如何监控网络流量,并根据流量类型(在这个例子中是通过端口号假设识别视频会议流量)来调整优先级。

import psutil
import timedef monitor_network_traffic(sample_interval=1):"""监控网络流量,并识别假定的视频会议流量:param sample_interval: 采样间隔时间(秒)"""while True:# 获取网络流量统计net_before = psutil.net_io_counters()time.sleep(sample_interval)net_after = psutil.net_io_counters()# 计算这段时间内的流量差异bytes_sent = net_after.bytes_sent - net_before.bytes_sentbytes_recv = net_after.bytes_recv - net_before.bytes_recvprint(f"Bytes Sent: {bytes_sent}, Bytes Received: {bytes_recv}")# 假设视频会议流量通过特定端口进行# 这里的逻辑是示例性的,实际中需要更精确的流量分析if bytes_sent > 1000000:  # 假设大于1MB的发送流量为视频会议流量adjust_network_priority("video_conference")def adjust_network_priority(service_type):"""调整网络优先级:param service_type: 服务类型"""if service_type == "video_conference":print("Adjusting network priority for video conference traffic...")# 这里应该包含调整网络优先级的代码# 实际应用中,这可能涉及到配置网络设备或使用网络管理工具# 例如,使用 Linux tc 工具设置 QoS 策略# 这部分代码留作读者实现if __name__ == "__main__":monitor_network_traffic()

注意事项

  • 上述脚本中的monitor_network_traffic函数会无限循环,监控网络流量,并在检测到假定的视频会议流量时(这里简单以发送流量大于1MB为条件),调用adjust_network_priority函数。
  • adjust_network_priority函数目前仅打印了一个消息,表示在实际应用中,这里应包含具体的网络优先级调整逻辑,如使用Linux的tc工具配置QoS策略。
  • 请注意,实际中识别特定类型流量(如视频会议流量)需要更复杂的分析,可能涉及到深度包检查(DPI)或特定应用程序接口(API)的使用,这里的示例仅用于演示目的。

这个脚本提供了一个基础框架,展示了如何利用Python开始网络性能优化的探索。根据你的具体需求和网络环境,你可以进一步发展和定制这个脚本。

6.1.3 拓展案例1:智能家居系统的网络优化

随着智能家居设备的增加,家庭网络中的流量也日益增多。优化智能家居系统的网络,确保关键服务(如安防监控)的稳定运行变得非常重要。

实现思路

  1. 设备识别:利用Python脚本识别网络中的智能家居设备,通过设备的MAC地址或IP地址进行标识。
  2. 服务分类:根据设备类型和服务内容,对网络流量进行分类,识别出需要高优先级处理的服务(如安防视频流)。
  3. 策略应用:为关键服务设置高优先级的网络策略,保证在网络拥堵时,这些服务仍能获得必要的网络资源。

为了进一步演示如何使用 Python 处理网络优化的实际应用场景,我们将提供简单的Python 脚本示例。请注意,这些示例主要用于概念演示,真实环境下的实现可能需要更复杂的逻辑和额外的网络管理工具。

Python 脚本示例

假设我们想要监控智能家居系统中的设备流量,并为关键服务(如安防视频流)保证带宽。这个脚本将模拟如何识别特定设备的流量(基于设备IP)并打印一个调整网络优先级的消息。

# 假设的智能家居设备IP列表
smart_home_devices = {'security_camera': '192.168.1.5','smart_tv': '192.168.1.6','thermostat': '192.168.1.7'
}def monitor_device_traffic(device_ip):"""模拟监控特定设备的网络流量:param device_ip: 设备的IP地址"""print(f"Monitoring network traffic for device: {device_ip}")# 在实际应用中,这里将包含分析设备流量的代码# 可以是通过网络监控工具或自定义脚本实现# 示例中仅模拟逻辑if device_ip == smart_home_devices['security_camera']:# 假设识别到安防摄像头的高优先级流量adjust_network_priority_for_device(device_ip, "High")def adjust_network_priority_for_device(device_ip, priority):"""调整特定设备的网络优先级:param device_ip: 设备的IP地址:param priority: 优先级"""print(f"Adjusting network priority for device {device_ip} to {priority} priority.")# 实际应用中,这里将包含调整设备网络优先级的实际代码# 例如,通过配置路由器或交换机的QoS设置if __name__ == "__main__":for device, ip in smart_home_devices.items():monitor_device_traffic(ip)

6.1.4 拓展案例2:提升在线教育平台的教学质量

在线教育平台需要确保教学视频的高清流畅传输,特别是在大规模在线课堂中更是如此。

实现方法

  1. 流量监控:使用Python监控教学平台的流量,特别是视频流量。
  2. 动态调整:根据实时网络状况,动态调整视频流量的优先级,确保教学视频流畅。
  3. 资源保障:为教学视频预留充足的网络带宽,通过动态带宽分配确保教学视频的质量。

Python 脚本示例

假设我们需要监控在线教育平台的教学视频流量,并根据流量情况动态调整优先级以保证视频传输的质量。以下脚本将展示如何模拟这一过程。

# 假设的在线教育平台服务IP
education_service_ip = '192.168.2.10'def monitor_education_service_traffic(service_ip):"""模拟监控在线教育服务的网络流量:param service_ip: 服务的IP地址"""print(f"Monitoring network traffic for education service: {service_ip}")# 在实际应用中,这里将包含分析服务流量的代码# 可以是通过网络监控工具或自定义脚本实现# 示例中仅模拟逻辑# 假设识别到教育服务的高优先级流量adjust_network_priority_for_service(service_ip, "High")def adjust_network_priority_for_service(service_ip, priority):"""调整在线教育服务的网络优先级:param service_ip: 服务的IP地址:param priority: 优先级"""print(f"Adjusting network priority for education service {service_ip} to {priority} priority.")# 实际应用中,这里将包含调整服务网络优先级的实际代码# 例如,通过配置路由器或交换机的QoS设置if __name__ == "__main__":monitor_education_service_traffic(education_service_ip)

这个脚本示例提供了一个基本的框架,展示了如何通过 Python 脚本监控和调整网络流量的优先级,以满足不同应用场景的需求。实际部署时,需要根据具体网络环境和设备进行详细的配置和调整。

这些案例展示了如何利用 Python 进行网络流量的监控和管理,以及如何通过带宽管理和QoS 技术优化特定场景下的网络性能。这些实践不仅提高了网络的效率和用户体验,也展示了网络管理在不同应用场景中的灵活性和重要性。

6.2 负载均衡技术 - 平衡艺术的网络版

负载均衡技术是网络工程中的一项重要技术,它的核心目的是分散处理和通信的负载,从而提高系统的整体性能和可靠性。通过有效地分配进来的请求或网络流量到多个服务器上,负载均衡确保了任何单一的服务器不会过载,同时提高了服务的可用性和响应速度。

在这里插入图片描述


6.2.1 基础知识

负载均衡器可以是软件或硬件设备,它位于客户端和服务器之间,工作于第4层(传输层)或第7层(应用层)上,根据特定的算法决定入站流量应该被路由到哪个服务器。

负载均衡算法包括但不限于:

  • 轮询(Round Robin):依次将新的请求分配给下一个服务器,循环进行。
  • 最少连接(Least Connections):将新的请求分配给当前连接数最少的服务器。
  • 源IP哈希(Source IP Hash):根据请求的源IP地址决定将请求分配给哪个服务器,保证特定用户的请求总是被路由到同一个服务器。

会话保持(Session Persistence)是负载均衡中的一个重要概念,确保用户的会话在多次请求中能够被路由到同一个后端服务器,对于需要保持用户登录状态的应用尤为重要。

6.2.2 重点案例:Web应用的负载均衡

假设你有一个高流量的Web应用,需要确保应用的高可用性和响应速度。使用Python,你可以创建一个简单的负载均衡器,它将根据轮询算法将请求分配给一组后端服务器。

实现步骤

  1. 确定后端服务器:列出所有可用的后端服务器地址。
  2. 选择负载均衡算法:在这个例子中,我们使用轮询算法。
  3. 请求分发:负载均衡器接收到请求后,根据算法将请求转发到选定的后端服务器。

为了实现一个简单的负载均衡演示,我们将创建一个Python脚本,模拟Web应用的负载均衡过程。这个脚本将使用轮询算法来分配请求到一组模拟的后端服务器。请注意,这个示例为了简化,只模拟了请求的分配过程,并没有实际处理网络请求。

环境准备

请确保你的 Python 环境已经安装好。这个脚本不需要额外的第三方库。

Python 脚本示例

import itertools
import timeclass SimpleLoadBalancer:def __init__(self, servers):self.servers = serversself.server_cycle = itertools.cycle(servers)def dispatch_request(self, request):"""模拟请求分发"""selected_server = next(self.server_cycle)print(f"Dispatching request '{request}' to server {selected_server}")# 在实际应用中,这里会将请求转发到选定的服务器self.simulate_server_processing(selected_server)@staticmethoddef simulate_server_processing(server):"""模拟服务器处理请求"""print(f"Server {server} is processing request...")time.sleep(1)  # 模拟处理请求需要一定时间print(f"Server {server} has finished processing request.")if __name__ == "__main__":servers = ['Server1', 'Server2', 'Server3']load_balancer = SimpleLoadBalancer(servers)# 模拟10个连续的请求for i in range(1, 11):load_balancer.dispatch_request(f"Request{i}")

脚本说明

  • 这个脚本定义了一个SimpleLoadBalancer类,它接受一个服务器列表作为输入,并使用itertools.cycle来创建一个无限循环的服务器迭代器,模拟轮询算法。
  • dispatch_request方法模拟了请求的分发过程,它选择下一个服务器并打印出分配的服务器。
  • simulate_server_processing方法模拟服务器处理请求的过程,这里简单地使用time.sleep(1)来表示服务器正在处理请求。

运行脚本

当你运行这个脚本时,它会模拟10个连续的请求被分发到三个服务器上,按照轮询算法的顺序。这个简单的演示说明了负载均衡器如何在多个服务器之间分配请求,以提高应用的可用性和响应能力。

这个示例是一个非常基础的负载均衡模拟,实际的负载均衡器功能要复杂得多,包括但不限于处理实际的网络请求、动态添加或移除服务器、进行健康检查以及根据不同的算法(如权重、最少连接数等)进行请求分发。在生产环境中,通常会使用成熟的负载均衡解决方案如Nginx、HAProxy或云服务提供商提供的负载均衡服务。

6.2.3 拓展案例1:数据库读写分离

在一个数据库密集型的应用中,读写分离可以显著提高性能。负载均衡器可以用来实现这一目的,将读请求分配给一组只处理读操作的数据库服务器,而写请求则被路由到主数据库服务器。

实现思路

  1. 识别请求类型:基于请求的性质(读或写),负载均衡器需要能够识别并合理分配请求。
  2. 配置服务器组:配置两组服务器,一组处理读请求,另一组处理写请求。
  3. 请求路由:负载均衡器根据请求类型,将请求路由到合适的服务器组。

Python 脚本示例

在这个案例中,我们将模拟一个简单的读写分离逻辑,将读请求和写请求分别路由到不同的服务器组。为了简化,我们不会实际连接数据库,而是通过打印消息来模拟请求的路由过程。

read_servers = ['ReadServer1', 'ReadServer2']
write_servers = ['WriteServer1']
read_server_cycle = itertools.cycle(read_servers)def route_request(request_type, query):"""根据请求类型路由到读或写服务器"""if request_type == 'read':server = next(read_server_cycle)print(f"Routing read request '{query}' to {server}")elif request_type == 'write':server = write_servers[0]  # 假设只有一个写服务器print(f"Routing write request '{query}' to {server}")else:print(f"Unknown request type: {request_type}")if __name__ == "__main__":queries = [('read', 'SELECT * FROM table'), ('write', 'UPDATE table SET column=value')]for query in queries:route_request(*query)

这个简单的示例演示了如何根据请求的类型(读或写)将请求路由到不同的服务器组。在实际应用中,你可能需要考虑更复杂的逻辑,比如写请求后的读请求一致性保证、读服务器的负载均衡等。

6.2.4 拓展案例2:使用健康检查提高服务可用性

负载均衡的另一个重要功能是通过定期的健康检查来确保后端服务器的可用性。如果检测到某个服务器失效,负载均衡器可以自动将其从服务器池中移除,直到它再次变为健康状态。

实现步骤

  1. 配置健康检查:为每个后端服务器配置健康检查端点。
  2. 定期检查:负载均衡器定期向每个服务器的健康检查端点发送请求。
  3. 更新服务器状态:根据健康检查的结果,更新服务器的健康状态,并据此调整流量分配。

Python 脚本示例

在这个案例中,我们将模拟一个简单的健康检查过程,定期检查服务器的健康状态,并根据检查结果更新服务器列表。

import randomservers = ['Server1', 'Server2', 'Server3']
healthy_servers = servers.copy()def health_check():"""模拟健康检查"""for server in servers:if random.choice([True, False]):  # 随机决定服务器是否健康print(f"{server} is healthy.")if server not in healthy_servers:healthy_servers.append(server)else:print(f"{server} is down.")if server in healthy_servers:healthy_servers.remove(server)def dispatch_request(request):"""根据健康检查结果分发请求"""if healthy_servers:server = random.choice(healthy_servers)  # 从健康服务器中随机选择print(f"Dispatching request '{request}' to {server}")else:print("No healthy servers available to dispatch the request.")if __name__ == "__main__":# 模拟定期健康检查for _ in range(3):  # 模拟三次检查过程print("\nPerforming health check...")health_check()dispatch_request("Request1")time.sleep(2)  # 假设每次检查间隔2秒

这个示例通过模拟服务器的随机健康状况,展示了如何根据健康检查结果来动态更新可用的服务器列表,并据此分发请求。在生产环境中,健康检查通常包括检查服务器的响应时间、错误率、资源利用率等指标,以确保请求只被路由到健康的服务器上。

在这里插入图片描述


6.3 网络监控与管理 - 网络的守护者

网络监控与管理是确保网络健康、性能最优化和安全的关键组成部分。它涉及到对网络组件(如路由器、交换机、服务器等)和服务(如HTTP、DNS等)的性能、可用性和故障进行实时监控、分析和调整。

6.3.1 基础知识

网络监控的核心目标是提供网络透明度,以便网络管理员可以理解网络的当前状态和表现,并在必要时进行优化或故障排除。常见的监控项包括带宽使用率、延迟、丢包率、设备状态和日志等。

网络管理则更加全面,不仅包括监控,还包括配置管理、故障管理、性能管理、安全管理和计费管理。网络管理的目的是确保网络资源得到有效利用,并满足服务质量(QoS)的要求。

常用的网络监控和管理工具有SNMP(简单网络管理协议)、NetFlow(网络流量分析)、Syslog(系统日志)等。

6.3.2 重点案例:使用 Python 进行基本的网络性能监控

在这个案例中,我们将使用Python来监控网络的基本性能指标,如带宽使用率和延迟。我们将使用psutil库来获取网络接口的统计信息,以及使用ping命令来测试网络延迟。

实现步骤

  1. 监控带宽使用率:定期检查特定网络接口的发送和接收字节,计算带宽使用率。
  2. 测试网络延迟:对特定目标执行ping操作,记录延迟时间。

为了实现主案例中提到的网络性能监控,我们将编写一个Python脚本,这个脚本将同时监控网络的带宽使用情况和测试网络延迟。我们将使用psutil库来监控带宽使用,以及使用subprocess模块执行ping命令来测试延迟。

安装所需库

确保你已安装psutil库。如果未安装,可以通过运行以下命令来安装:

pip install psutil

Python 脚本示例

import psutil
import subprocess
import timedef monitor_bandwidth(interval=1):"""监控带宽使用情况"""old_stats = psutil.net_io_counters()time.sleep(interval)new_stats = psutil.net_io_counters()sent_bytes = new_stats.bytes_sent - old_stats.bytes_sentrecv_bytes = new_stats.bytes_recv - old_stats.bytes_recvprint(f"Sent: {sent_bytes} bytes, Received: {recv_bytes} bytes in the last {interval} second(s).")def ping_host(host="google.com"):"""测试网络延迟"""# Windows系统使用'ping -n 1',而Linux系统使用'ping -c 1'command = ['ping', '-c', '1', host]try:output = subprocess.check_output(command, stderr=subprocess.STDOUT, universal_newlines=True)print(f"Ping {host} successful:\n{output}")except subprocess.CalledProcessError as e:print(f"Ping {host} failed:\n{e.output}")if __name__ == "__main__":print("Starting network performance monitoring...")while True:monitor_bandwidth()ping_host()time.sleep(10)  # 间隔10秒进行下一轮监控

脚本说明

  • monitor_bandwidth函数计算了指定间隔时间内的网络带宽使用情况,包括发送和接收的字节数。
  • ping_host函数执行一个ping操作到指定的主机(默认为"google.com")来测试网络延迟。它使用subprocess.check_output来执行命令,并捕获输出。
  • 在主函数中,脚本会无限循环,每10秒钟执行一次带宽监控和ping测试。

请注意,ping命令在不同的操作系统中可能有所不同(例如,Windows中是ping -n 1,而在Linux和MacOS中是ping -c 1)。根据你的操作系统,你可能需要调整命令参数。

这个脚本提供了一个基础的示例,展示了如何使用Python进行网络性能监控。在实际的网络管理和监控应用中,可能需要更复杂的逻辑来处理多种性能指标和网络条件,以及更高级的错误处理和用户界面。

6.3.3 拓展案例1:实现网络设备的健康检查

在这个案例中,我们将使用Python脚本定期检查网络设备(如路由器和交换机)的健康状态,包括设备的可达性和关键服务的状态。

实现步骤

  1. 设备可达性检查:通过ping命令检查设备的可达性。
  2. 关键服务状态检查:使用特定的协议(如HTTP、SSH)检查设备上关键服务的状态。

Python 脚本示例

这个脚本将使用 Python 来进行简单的网络设备健康检查,包括检查设备的可达性(通过 ping)和关键服务的状态(通过尝试建立 TCP 连接)。

import subprocess
import socketdef ping_device(device_ip):"""检查设备的可达性"""try:output = subprocess.check_output(['ping', '-c', '1', device_ip], stderr=subprocess.STDOUT, universal_newlines=True)print(f"{device_ip} is reachable.")except subprocess.CalledProcessError:print(f"{device_ip} is not reachable.")def check_service_port(device_ip, port):"""检查设备上的特定端口服务状态"""sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.settimeout(1)  # 设置超时时间result = sock.connect_ex((device_ip, port))if result == 0:print(f"Service on {device_ip}:{port} is up.")else:print(f"Service on {device_ip}:{port} is down.")sock.close()if __name__ == "__main__":devices = ['192.168.1.1', '192.168.1.2']  # 假设的设备IP列表service_ports = [80, 22]  # 常见的Web服务和SSH服务端口for device in devices:ping_device(device)for port in service_ports:check_service_port(device, port)

6.3.4 拓展案例2:构建实时网络流量分析工具

在这个案例中,我们将构建一个简单的网络流量分析工具,使用Python捕获网络流量,并进行基本的分析,如识别流量类型和统计各类型流量的比例。

实现步骤

  1. 捕获网络流量:使用scapy库捕获网络接口上的流量。
  2. 流量分析:分析捕获的数据包,识别流量类型(如HTTP、DNS)。
  3. 统计分析:统计各类型流量的数量或比例。

Python 脚本示例

为了实现实时网络流量分析,我们需要使用scapy库来捕获和分析网络包。这个案例将展示如何使用scapy捕获流量,并简单分类统计 HTTP 和 DNS 请求的数量。

首先,确保安装了scapy库:

pip install scapy

然后,使用以下脚本进行流量捕获和分析:

from scapy.all import sniff
from scapy.layers.http import HTTPRequest
from scapy.layers.inet import IP, TCP
from scapy.layers.dns import DNSdef packet_callback(packet):if packet.haslayer(HTTPRequest):print("HTTP Request: {} -> {}".format(packet[IP].src, packet[IP].dst))elif packet.haslayer(DNS):print("DNS Request: {} -> {}".format(packet[IP].src, packet[IP].dst))if __name__ == "__main__":print("Starting network traffic analysis...")sniff(filter="tcp", prn=packet_callback, store=False, count=0)

脚本说明

  • 拓展案例1的脚本使用ping命令和socket库来检查网络设备的可达性和服务状态。这是网络管理中常见的健康检查方法之一。
  • 拓展案例2的脚本使用scapy库来捕获网络流量,并通过检查数据包层来识别HTTP和DNS请求。这个简单的示例演示了如何对网络流量进行基本的实时分析。

这些脚本提供了实现网络监控与管理功能的基础,可根据实际需求进行进一步的开发和扩展。在生产环境中,这些任务可能需要更复杂的逻辑和错误处理,以及对性能和安全的考虑。

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

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

相关文章

STM32CAN2进入bus off 模式

工作遇到的问题记录 无人机CAN2整个进不了中断,通过查看寄存器判定出CAN节点进入了bus off mode 为何进入bus off ,最后通过示波器看到整个CAN2总线波形就不对,总线出现了错误 Busoff的产生是一定是因为节点自身识别到自己发送错误&#xff…

Latex学习记录

目录 1.Latex各种箭头符号总结 2.[Latex]公式编辑,编号、对齐 3.Latex公式编号: 多行公式多编号,多行公式单编号 4.LaTex中输入空格以及换行 1.Latex各种箭头符号总结 箭头符号 - ➚ (piliapp.com)https://cn.piliapp.com/symbol/arrow/Latex各种箭头…

面试150 二进制求和 位运算

Problem: 67. 二进制求和 文章目录 思路复杂度Code 思路 👨‍🏫 参考 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( n ) O(n) O(n) Code class Solution {public String addBinary(String a, String b){StringBuilder ans new Stri…

STM32--USART串口(1)串口协议

一、通信接口 全双工:通信双方能够同时进行双向通信; 半双工:通信双方能够进行双向通信,但不能同时通信; 单工:只能从一个设备到另一个设备; 同步:接收方可以在时钟信号的指引下进…

Python爬虫某云免费音乐——多线程批量下载

重点一:每首音乐的下载地址 重点二:如何判断是免费音乐 重点三:如何用线程下载并保存 重点四:如何规避运行错误导致子线程死掉 重点五:如何管理子线程合理运行 需要全部代码的私信 运行效果: 歌手文…

睿尔曼6自由度机械臂ROS驱动包功能拓展之查询指令

1:主要环境预览 1:系统:Ubuntu 20.04 2:ROS:noetic 3:对于系统要求需根据相关手册完成机械臂相关依赖安装,能够运行机械臂本身基本功能, 包括 moveit。 4:准备资料…

指针详解(3)

各位少年,大家好,我是博主那一脸阳光,今天介绍 二级指针 指针数组,还有个指针数组模拟二维数组。 前言:在浩瀚的C语言编程宇宙中,指针犹如一把打开内存世界大门的独特钥匙,它不仅是理解程序运行…

PXIe-5842第三代PXI矢量信号收发器简介

内容 简介​PXIe-5842 VST的主要特性PXI VST软件工具PXI VST应用结论下一步 简介 NI于2012年引入了矢量信号收发器(VST)的概念。VST将RF信号发生器、RF信号分析仪和功能强大的FPGA集成在单个PXI模块上。PXIe-5842 VST是首款提供30 MHz到26.5 GHz连续频率覆盖范围的VST。PXIe…

RT-Thread线程管理(使用篇)

layout: post title: “RT-Thread线程管理” date: 2024-1-26 15:39:08 0800 tags: RT-Thread 线程管理(使用篇) 之后会做源码分析 线程是任务的载体,是RTT中最基本的调度单位。 线程执行时的运行环境称为上下文,具体来说就是各个变量和数据&#xff0c…

【云原生】docker-compose单机容器集群编排工具

目录 一、docker-compose容器编排的简介 二、docker-compose的使用 1、docker-compose的安装 2、docker-compose的配置模板文件yaml文件的编写 (1)布尔值类型 (2)字符串类型 (3)一个key有多个值 &am…

Qt应用开发(安卓篇)——调用ioctl、socket等C函数

一、前言 在 Qt for Android 中没办法像在嵌入式linux中一样直接使用 ioctl 等底层函数,这是因为因为 Android 平台的安全性和权限限制。 在 Android 中,访问设备硬件和系统资源需要特定的权限,并且需要通过 Android 系统提供的 API 来进行。…

单片机学习笔记---定时器/计数器(简述版!)

目录 定时器的介绍 定时计数器的定时原理 定时计数器的内部结构 两种控制寄存器 (1)工作方式寄存器TMOD (2)控制寄存器TCON 定时计数器的工作方式 方式0 方式1 方式2 方式3 定时器的配置步骤 第一步,对…

Github 上传项目(个人令牌token)

1.点击 github头像 : setting -> Developer Settings -> Personal access tokens 2.在要上传的文件夹下运行以下命令: git init git commit -m "first commit" git branch -M main 利用以下命令模…

【01】Linux 基本操作指令

带⭐的为重要指令 🌈 01、ls 展示当前目录下所有文件🌈 02、pwd 显示用户当前所在路径🌈 03、cd 进入指定目录🌈 04、touch 新建文件🌈 05、tree 以树形结构展示所有文件⭐ 06、mkdir 新建目录⭐ 07、rmdir 删除目录⭐…

telnet笔记

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、场景二、介绍1.测试端口2.访问百度3. 简单的爬虫 前言 最近telnet命令用的比较多,所以记录一下。 一、场景 ping应该是大家最常用的命令&…

Linux开发工具

前言:哈喽小伙伴们,经过前边的学习我们已经掌握了Linux的基本指令和权限,相信大家学完这些之后都会对Linux有一个更加深入的认识,但是Linux的学习可以说是从现在才刚刚开始。 这篇文章,我们将讲解若干个Linux的开发工…

事务、MVCC、锁

目录 事务MVCC锁 事务 四大特性:ACID 脏读:事务A读取到未提交事务B修改的数据 不可重复读:事务A修改了未提交事务B读取的数据 幻读:事务A增删了未提交事务B读取的数据 不可重复读与幻读都是读取的结果不同,前者侧重于…

数据结构+算法(第11篇) :无死角“盘”它!二分查找树

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 学习必须往深处挖&…

05 MyBatis之表关系的声明+事务+SqlSession三件套的作用域

MyBatis 支持一对一,一对多,多对多查询。XML 文件和注解都能实现关系的操作。多对多实质就是一对多 1. 表关系的维护 1.1 One一对一 一对一查询和多表(两表)查询很相似, 都能查询两表的全部属性 区别是一对一可以在对象中嵌套对象, 呈现包含关系; 多表…

在Linux中对Nginx进行安全加固

准备工作 在IP为x.x.x.x的服务器上安装nginx,确保Linux系统为nginx环境。 检查nginx是否配置nginx账号锁定策略 配置nginx账号锁定策略,降低被攻击概率。 第一步,查看nginx的锁定状态。 命令:passwd -S nginx 若结果出现“P…