UNIX网络编程笔记:TCP、UDP、SCTP编程的区别

一、核心特性对比

特性TCPUDPSCTP
连接方式面向连接(三次握手)无连接面向连接(四次握手)
可靠性可靠传输(重传、确认机制)不可靠传输可靠传输(多路径冗余)
传输单位字节流(无边界)数据报文(有边界)消息流(有边界,支持多流传输)
流量控制支持(滑动窗口)不支持支持(改进的窗口机制)
拥塞控制支持不支持支持(动态适应网络)
头部开销较大(20字节)较小(8字节)较大(12字节基础+扩展)
多宿主支持不支持不支持支持(多网络接口容灾)
有序性数据按序到达无序到达支持按序或部分无序传输
延迟高(需握手、重传)极低(无连接开销)中等(握手优化,但功能复杂)
吞吐量高(拥塞控制优化)依赖应用层设计高(多路径聚合带宽)
CPU消耗较高(重传、滑动窗口计算)较高(多流管理、路径检测)
内存占用高(维护连接状态)低(无状态)高(多宿主、多流状态)

二、编程差异

一、编程模型差异
1. TCP 编程

特点:可靠性优先,适合文件传输、HTTP 等场景。
关键步骤

# 服务端
socket() -> bind() -> listen() -> accept() -> recv()/send() -> close()
# 客户端
socket() -> connect() -> send()/recv() -> close()

问题:粘包问题需处理(需自定义协议如长度前缀)。

2. UDP 编程

特点:低延迟,适合实时音视频、DNS 查询。
关键步骤

# 服务端/客户端
socket() -> bind() (可选) -> sendto()/recvfrom() -> close()

注意:需自行处理丢包、乱序(如 QUIC 协议基于 UDP 实现可靠性)。

3. SCTP 编程

特点:多流传输、抗网络故障,适合 VoIP、金融交易。
关键步骤(Linux 示例):

// 服务端
socket(AF_INET, SOCK_SEQPACKET, IPPROTO_SCTP);
bind() -> listen() -> sctp_recvmsg()/sctp_sendmsg() -> close();
// 客户端
socket() -> connect() -> sctp_sendmsg()/sctp_recvmsg() -> close();

高级功能:多流(Multi-Streaming)、多宿主(Multi-Homing)。

二、编程模型与 API 差异
1. 套接字创建
协议套接字类型代码示例(C/Python)
TCPSOCK_STREAMsocket(AF_INET, SOCK_STREAM, IPPROTO_TCP)
UDPSOCK_DGRAMsocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)
SCTPSOCK_SEQPACKETSOCK_STREAMsocket(AF_INET, SOCK_SEQPACKET, IPPROTO_SCTP)

2. 连接管理
操作TCPUDPSCTP
服务端bind()listen()accept()bind() 即可接收数据bind()listen()sctp_recvmsg()
客户端connect() 建立单一路径连接无连接,直接 sendto()connect() 支持多宿主(Multi-Homing)
关闭连接close()shutdown()无关闭操作shutdown() 或发送 SHUTDOWN chunk

3. 数据传输 API
操作TCPUDPSCTP
发送数据send()/write()sendto()sctp_sendmsg()(支持指定流 ID)
接收数据recv()/read()recvfrom()sctp_recvmsg()(可获取流 ID 和上下文)
消息边界无边界(需应用层处理)保留边界保留边界(消息模式)

三、关键编程问题对比
1. 连接与状态管理

TCP
• 需处理 accept() 后的新套接字(多线程/IO 多路复用)。
• 维护连接状态(如 ESTABLISHEDTIME_WAIT)。

UDP
• 无连接状态,需自行跟踪客户端地址(如维护 {源IP: 源Port} 映射表)。

SCTP
• 管理多宿主地址(sctp_bindx() 绑定多个 IP)。
• 处理动态地址变更(ADD_IP/DEL_IP 事件)。


2. 数据传输处理
问题TCPUDPSCTP
粘包问题需自定义协议(如长度前缀)无(数据报自带边界)无(消息边界保留)
乱序问题内核保证顺序需应用层排序(如 RTP 序列号)可配置按序或部分乱序(PR-SCTP 扩展)
最大报文长度MSS 限制(典型 1460 字节)理论 65507 字节(实际受 MTU 限制)支持分片重组(类似 TCP,但更高效)

3. 错误处理

TCP
• 自动重传,编程时需处理 ECONNRESETEPIPE 错误(连接中断)。

UDP
• 需手动实现超时重传(如设置 select() 超时或使用 SO_RCVTIMEO)。
• 处理 EMSGSIZE(报文过大)和 EAGAIN(非阻塞模式)。

SCTP
• 监听 SCTP_COMM_LOST 事件(连接中断)。
• 处理多路径故障(自动切换到备用路径)。


四、代码示例对比
1. TCP 服务端(Python)
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0', 8080))
s.listen()
conn, addr = s.accept()
data = conn.recv(1024)  # 可能读到不完整的数据块
conn.send(b"ACK")
conn.close()
2. UDP 服务端(Python)
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(('0.0.0.0', 8080))
data, addr = s.recvfrom(1024)  # 每次接收完整报文
s.sendto(b"ACK", addr)
3. SCTP 客户端(C语言)
#include <netinet/sctp.h>
int fd = socket(AF_INET, SOCK_SEQPACKET, IPPROTO_SCTP);
struct sctp_initmsg init = { .sinit_num_ostreams = 10 }; // 支持 10 个流
setsockopt(fd, IPPROTO_SCTP, SCTP_INITMSG, &init, sizeof(init));struct sockaddr_in addr = { .sin_port=htons(8080), .sin_family=AF_INET };
inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);
sctp_sendmsg(fd, "Hello", 5, NULL, 0, 0, 0, 0, 0, 0); // 发送到流 0

五、高级功能编程
1. 多播/广播(仅 UDP 支持)
# UDP 多播发送
s.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2)
s.sendto(b"Data", ('224.0.0.1', 8080))
2. 多流传输(SCTP 专属)
// 发送到流 1(流 ID 从 0 开始)
sctp_sendmsg(fd, "Stream1 Data", 12, NULL, 0, 0, 0, 1, 0, 0);
3. 非阻塞 IO(TCP/UDP)
s.setblocking(False)  # 设置非阻塞模式
try:data = s.recv(1024)
except BlockingIOError:pass  # 无数据可读

三、协议设计与数据传输方式

1. 数据组织与边界

TCP
字节流模式:数据被视为连续的字节流,无明确消息边界(需应用层处理粘包问题)。
示例:发送 "Hello""World",接收方可能一次性读到 "HelloWorld"

UDP
数据报模式:每个 sendto() 对应一个完整的数据报,接收方通过 recvfrom() 读取整条消息,保留边界。
示例:发送两个数据报 "Hello""World",接收方会分两次读取。

SCTP
消息流模式:结合TCP和UDP特性,支持有边界的消息传输,同时允许多个消息流(Multi-Streaming)并行传输。
示例:可同时传输视频流和音频流,且每个流内部的消息保序。

2. 错误处理机制

TCP
自动重传:通过ACK确认和超时重传保证数据可靠。
丢包处理:触发拥塞控制算法(如慢启动、快速恢复)。

UDP
无重传机制:应用层需自行处理丢包(如音视频中使用前向纠错/FEC)。

SCTP
选择性重传:仅重传丢失的报文块(通过SACK机制),而非整个数据流。
路径冗余:多宿主(Multi-Homing)支持自动切换到备用网络路径。


四、网络层交互与多路复用

1. 连接与多路复用

TCP
单连接单流:一个连接对应一个数据流,需多线程/多端口实现并发。
端口限制:标准HTTP/1.1的队头阻塞(Head-of-Line Blocking)问题。

UDP
无连接状态:无需维护连接,单端口可同时处理多个客户端请求。
应用层多路复用:如QUIC协议在UDP上实现多流传输。

SCTP
原生多流支持:单连接内支持多个独立的消息流(避免队头阻塞)。
多宿主绑定:一个端点可绑定多个IP地址,提升容灾能力。

2. NAT与防火墙穿透

TCP
NAT友好:基于连接的端口映射,大多数防火墙默认放行。

UDP
NAT穿透复杂:需要STUN/TURN/ICE等协议辅助(如WebRTC)。
防火墙限制:某些网络可能屏蔽UDP端口。

SCTP
兼容性问题:NAT设备对SCTP支持较差,实际部署较少(多用于专网)。


五、高级功能与扩展性

1. 安全性支持

TCP
TLS加密:通过TLS/SSL实现端到端加密(如HTTPS)。

UDP
DTLS加密:基于UDP的TLS变种(如WebRTC使用DTLS-SRTP)。

SCTP
原生支持TLS:可通过SCTP over DTLS加密。

2. 协议扩展能力

TCP
扩展有限:协议头部固定,新功能需通过选项字段(如TCP Fast Open)。

UDP
高度灵活:作为底层传输层,可承载自定义协议(如QUIC、DNS-over-HTTPS)。

SCTP
模块化设计:支持通过Chunk扩展协议功能(如动态地址配置)。


六、实际应用中的典型协议

TCP协议栈
• HTTP/1.1、HTTPS、FTP、SMTP、SSH。

UDP协议栈
• DNS、QUIC(HTTP/3)、SNMP、TFTP、实时音视频(RTP/RTCP)。

SCTP协议栈
• 4G/5G核心网(S1-MME、Diameter协议)、SIP(VoIP信令)、航空通信系统(如FANS)。


七、开发复杂度对比

TCP
• 需处理粘包、连接状态管理(如心跳包)、慢启动优化。

UDP
• 需实现可靠性(如重传队列)、乱序重组、防DDos攻击(无状态易被伪造)。

SCTP
• 需处理多流调度、多宿主切换,且跨平台支持不足(需Linux/专用库)。


八、报文结构与协议头深度对比

1. 协议头设计

核心差异
TCP/UDP头固定长度(20字节 vs 8字节),SCTP采用分块结构(基础头12字节+可变长度Chunk)
SCTP头部含流标识符(多路复用依据)和路径管理字段(多宿主支持)


九、连接建立与终止机制

1. 三次握手 vs 四次握手

TCP 三次握手

Client ---SYN----> Server  
Client <--SYN+ACK-- Server  
Client ---ACK----> Server  

SCTP 四次握手(增加Cookie机制防DoS攻击):

Client ---INIT-----> Server  
Client <--INIT+ACK-- Server (携带加密Cookie)
Client ---COOKIE-ECHO-> Server  
Client <--COOKIE-ACK--- Server  

优势:抵抗SYN Flood攻击,支持多IP地址协商(INIT包可携带多个目的IP)。

2. 连接终止

TCP 四次挥手:需FIN/ACK分段确认(TIME_WAIT状态存在以处理延迟报文)。
UDP:无连接,无需挥手。
SCTP:支持优雅关闭(SHUTDOWN分块)和强制终止(ABORT分块)。


十、传输控制机制的细微区别

1. 滑动窗口 vs 信用机制

TCP滑动窗口
• 接收方通告窗口大小,发送方不能超过此窗口发送数据。
问题:长肥管道(Long Fat Networks)下效率低。

SCTP信用机制
• 接收方向发送方授予"信用值"(Credit),表示可接收的字节数(类似TCP窗口,但更灵活)。
优势:通过多流独立授予信用值,避免单个流阻塞整体传输(多流并发性能更优)。

2. 拥塞控制算法差异
协议默认拥塞算法核心逻辑
TCPCUBIC(Linux默认)基于丢包判断,窗口呈三次函数增长
UDP无内置算法依赖应用层实现(如QUIC使用BBR算法)
SCTPCMT(并发多路径传输)多路径间动态分配流量,结合带宽、延迟优化路径选择

十一、多播与广播支持

协议多播(Multicast)广播(Broadcast)
TCP不支持(仅单播)不支持
UDP支持支持(受限网络)
SCTP支持部分扩展不支持

编程示例(UDP多播)

# 发送端
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2)
sock.sendto(b"Multicast Message", ('224.0.0.1', 5000))# 接收端
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('0.0.0.0', 5000))
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, socket.inet_aton('224.0.0.1') + socket.inet_aton('0.0.0.0'))
data, addr = sock.recvfrom(1024)

十二、极端场景下的行为差异

1. 高延迟网络(如卫星通信)

TCP:受限于RTT(Round Trip Time),窗口增长缓慢,吞吐量下降明显。
UDP:恒定速率发送(可能加剧网络拥塞)。
SCTP:多路径传输可绕过高延迟链路(若配置多条路径)。

2. 高丢包率网络(如无线环境)

TCP:误判丢包为拥塞,触发窗口缩减(实际可能是随机链路丢包)。
UDP:应用需添加前向纠错(FEC)或选择性重传(如WebRTC的NACK机制)。
SCTP:选择性确认(SACK)仅重传丢失块,避免全局降速。

3. NAT穿透能力

TCP:依靠STUN或端口预测(如TCP Hole Punching)。
UDP:组合STUN/TURN/ICE实现高效穿透(如WebRTC)。
SCTP:NAT设备支持差,通常需部署在可控网络环境(如运营商核心网)。


十三、操作系统与编程语言支持

协议Linux支持Windows支持Go语言示例
TCP全支持全支持net.Dial("tcp", "host:port")
UDP全支持全支持net.ListenPacket("udp", "host:port")
SCTP内核支持(需安装库)仅Server 2012+原生支持需第三方库(如 github.com/ishidawataru/sctp

:SCTP编程常需系统级配置(如Linux加载模块):

sudo modprobe sctp

十四、协议拓展与自定义能力

1. TCP增强方案

MPTCP(多路径TCP):允许单连接使用多个网络接口(如Wi-Fi和5G并行)。
TCP Fast Open (TFO):在SYN包中携带数据,减少握手延迟。

2. UDP生态演进

QUIC协议:基于UDP实现可靠传输,集成TLS 1.3,解决队头阻塞(HTTP/3标准)。
KCP协议:UDP基础上实现低延迟可靠传输(常用于游戏和实时通信)。

3. SCTP高级功能

Dynamic Address Reconfiguration:动态增删端点IP地址(无需重建连接)。
Partial Reliability Extension:允许选择性丢弃过期数据(如视频中的旧帧)。

十五、底层传输行为与报文处理差异

1. 报文分片与重组

TCP
MSS协商:通过三次握手协商最大报文段大小(MSS),避免IP分片。
重组逻辑:接收端根据序列号严格排序,保证字节流连续性。
问题:若中间网络设备强制分片(如MTU不一致),可能导致性能下降。

UDP
无分片协商:发送方可能生成超过MTU的报文,依赖IP层分片(不推荐,易丢片)。
应用控制:需手动设置 setsockopt(IP_MTU_DISCOVER) 启用PMTUD(路径MTU发现)。

SCTP
路径MTU自适应:自动检测每条路径的MTU,避免分片。
分片策略:报文超过MTU时,在SCTP层分片为多个DATA chunks,接收端透明重组。

2. 心跳检测机制

TCP
应用层心跳:需手动实现(如周期性发送 \x01 字节),无原生支持。
保活选项SO_KEEPALIVE 可启用(默认2小时空闲后触发,不适用实时系统)。

UDP
无心跳:完全依赖应用层设计(如DTLS需实现重传超时逻辑)。

SCTP
原生心跳包:自动发送HEARTBEAT chunks检测路径存活状态。
多路径检测:对每个绑定IP独立发送心跳,快速发现断网故障。


十六、安全机制深度对比

1. 抗攻击能力
攻击类型TCPUDPSCTP
SYN Flood易受攻击(半连接耗尽资源)不适用免疫(COOKIE机制验证合法性)
IP欺骗可能(依赖序列号预测)易受(无连接状态)难(验证标签+动态COOKIE)
DDoS反射放大低风险(需完整握手)高风险(DNS/NTP反射)低风险(需四次握手验证)
2. 加密与完整性校验

TCP
无内置加密:依赖TLS叠加(如HTTPS)。
校验和:强制头部校验,但数据部分无保护。

UDP
DTLS:需显式启用(如WebRTC的SRTP+DTLS组合)。
QUIC加密:在UDP上实现TLS 1.3的零RTT握手。

SCTP
SAIA扩展:支持原生IPsec集成。
数据块签名:每个DATA chunk可单独签名(适用于金融级审计)。


十七、调试与故障排查难点

1. 抓包分析工具(Wireshark)

TCP
流追踪:可完整重组会话(Follow TCP Stream)。
典型问题:重传包([TCP Retransmission])、窗口停滞(Win=0)。

UDP
无状态过滤:需手动关联请求-响应(如DNS事务ID)。
典型问题:校验和错误([Bad UDP Checksum])、响应丢失。

SCTP
Chunk解析:需启用Wireshark的SCTP插件分析多路径交互。
关键事件:HEARTBEAT超时、COOKIE_ECHO验证失败。

2. 连接状态监控

TCP

netstat -tnpo                 # 查看连接状态(ESTABLISHED/TIME_WAIT)
ss -s                         # 统计重传率(retrans)

UDP

netstat -su                   # 显示丢包统计(packet receive errors)

SCTP

sysctl net.sctp | grep path   # 查看多路径状态
sctp_darn -H                  # 专用调试工具(发送测试报文)

十八、协议栈实现复杂度

模块TCPUDPSCTP
状态机复杂度极高
内存数据结构连接控制块(TCB)无状态多路径控制块(PCB)+ 流表
定时器数量6+(重传、保活等)010+(路径检测、心跳、流超时)

十九、与新兴技术的结合

1. 5G网络

TCP
瓶颈:移动边缘计算(MEC)中高切换频率导致频繁连接重建。
优化:MPTCP多路径传输(同时使用5G和Wi-Fi)。

UDP
核心角色:承载5G用户面数据(如NGAP协议),实现低延迟转发。

SCTP
官方标准:3GPP规定SCTP用于5G核心网信令传输(如AMF与gNB间的N2接口)。

2. 物联网(IoT)

TCP
受限设备问题:RAM不足维护大量连接(如NB-IoT采用CoAP over UDP)。

UDP
主流选择:LoRaWAN、MQTT-SN均基于UDP简化实现。

SCTP
工业物联网:用于高可靠PLC通信(如西门子PROFINET RT协议)。


二十、性能调优技巧

1. 缓冲区优化

TCP

setsockopt(sock, SOL_SOCKET, SO_SNDBUF, &buffer_size, sizeof(buffer_size));  
setsockopt(sock, SOL_SOCKET, SO_RCVBUF, &buffer_size, sizeof(buffer_size));  

经验值:BDP(带宽时延积)计算 buffer_size = bandwidth (bps) * RTT (s)

UDP
非阻塞模式:必须设置 fcntl(sock, F_SETFL, O_NONBLOCK) 避免 recvfrom() 阻塞。

SCTP
多流缓冲分离:为不同流(Stream ID)分配独立缓冲区,避免流间竞争。

2. 协议参数调整

TCP(Linux示例):

sysctl -w net.ipv4.tcp_sack=1           # 启用SACK
sysctl -w net.ipv4.tcp_fastopen=3       # 启用TFO(客户端+服务端)

SCTP(多路径优化):

sysctl -w net.sctp.hb_interval=5000     # 心跳间隔5秒
sysctl -w net.sctp.path_max_retrans=3   # 路径最大重试次数

二十一、总结:全维度决策矩阵

需求维度                TCP            UDP               SCTP
——————————————————————————————————————————————————————————————————————
可靠性要求高            ✓               ✗                 ✓
毫秒级延迟容忍度        ✗               ✓                 △(中等)
多网络接口容灾          ✗               ✗                 ✓
跨公网NAT穿透           ✓               ✓                 ✗
协议栈实现复杂度        中              低                高
嵌入式设备适用性        △(内存受限)   ✓                 ✗
5G核心网标准支持        ✗               ✗                 ✓

通过以上扩展,开发者可精准匹配协议特性与业务场景(如金融系统选择SCTP多路径容灾,直播平台用UDP+QUIC优化体验),同时避免协议选型中的隐性成本(如SCTP的运维复杂度)。

三、应用场景

TCP:Web 服务(HTTP/HTTPS)、电子邮件(SMTP)、数据库连接。
UDP:实时通信(Zoom/Skype)、在线游戏、IoT 传感器数据。
SCTP:电信信令(4G/5G 核心网)、航空通信、高可靠性金融系统。


四、选择建议

选 TCP:需可靠传输且对延迟不敏感(如文件下载)。
选 UDP:容忍丢包但追求低延迟(如直播、游戏)。
选 SCTP:需多路径容灾或复杂消息分片(如关键基础设施)。


五、总结

TCP 是“电话通信”——可靠但开销大;
UDP 是“明信片投递”——快速但可能丢失;
SCTP 是“增强版电话”——支持多线路并行,兼顾可靠性与灵活性。根据业务需求权衡选择。

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

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

相关文章

Python爬虫异常处理:自动跳过无效URL

爬虫在运行过程中常常会遇到各种异常情况&#xff0c;其中无效URL的出现是较为常见的问题之一。无效URL可能导致爬虫程序崩溃或陷入无限等待状态&#xff0c;严重影响爬虫的稳定性和效率。因此&#xff0c;掌握如何在Python爬虫中自动跳过无效URL的异常处理技巧&#xff0c;对于…

C++语法学习的主要内容

科技特长生方向&#xff0c;主要学习的内容为 一&#xff0c;《C语法》 二&#xff0c;《数据结构》 三&#xff0c;《算法》 四&#xff0c;《计算机基础知识》 五&#xff0c;《初高中的数学知识》 其中&#xff0c;《C语法》学习的主要内容如下: 1,cout输出语句和键盘…

3、孪生网络/连体网络(Siamese Network)

目的: 用Siamese Network (孪生网络) 解决Few-shot learning (小样本学习)。 Siamese Network并不是Meta Learning最好的方法, 但是通过学习Siamese Network,非常有助于理解其他Meta Learning算法。 这里介绍了两种方法:Siamese Network (孪生网络)、Trplet Loss Siam…

从零构建大语言模型全栈开发指南:第二部分:模型架构设计与实现-2.2.1从零编写类GPT-2模型架构(规划模块与代码组织)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 2.2.1 从零编写类GPT-2模型架构(规划模块与代码组织)1. 模型架构设计规划1.1 架构核心组件2. 模块化设计实现2.1 输入处理模块2.1.1 分词与嵌入2.1.2 位置编码2.2 解码块设计2.2.1 多头注意力子层2.2.…

消息队列(Kafka及RocketMQ等对比联系)

目录 消息队列 一、为什么使用消息队列&#xff1f;消息队列有什么优点/缺点&#xff1f;介绍下Kafka、ActiveMQ、RabbitMQ、RocketMQ有什么优点缺点&#xff0c;如何取舍&#xff1f; 1.公司业务场景是什么&#xff0c;这个业务场景有什么挑战&#xff0c;如果不用MQ有什么麻…

Android 13系统定制实战:基于系统属性的音量键动态屏蔽方案解析

1. 需求背景与实现原理 在Android 13系统定制化开发中&#xff0c;需根据设备场景动态屏蔽音量键&#xff08;VOLUME_UP/VOLUME_DOWN&#xff09;功能。其核心诉求是通过系统属性&#xff08;persist.sys.roco.volumekey.enable&#xff09;控制音量键的响应逻辑&#xff0c;确…

解锁DeepSeek潜能:Docker+Ollama打造本地大模型部署新范式

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《深度探秘&#xff1a;AI界的007》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、什么是Docker 2、什么是Ollama 二、准备工作 1、操…

uv - Guides 指南 [官方文档翻译]

文章目录 Guides 指南概述安装 Python入门安装特定版本重新安装 Python查看 Python 安装自动 Python 下载使用现有的 Python 版本 运行脚本在没有依赖的情况下运行脚本运行带有依赖的脚本创建一个Python脚本声明脚本依赖使用替代包索引锁定依赖提高可重复性使用不同的 Python 版…

根据模板将 Excel 明细数据生成 PDF 文档 | PDF实现邮件合并功能

在日常办公中&#xff0c;我们常常会面临这样的需求&#xff1a;依据特定的模板&#xff0c;把 Excel 里的每一条数据转化为单独的 PDF 文档&#xff0c;且这些 PDF 文档中的部分内容会根据 Excel 数据动态变化。这一功能不仅能高效完成任务&#xff0c;还支持图片的动态替换&a…

apache安装脚本使用shell建立

注意防火墙&#xff0c;yum&#xff0c;网络连接等 以下是具体的apache安装脚本 #!/bin/bash # Set Apache version to install ## author: yuan # 检查外网连接 echo "检查外网连接..." ping www.baidu.com -c 3 > /dev/null 2>&1 if [ $? -eq 0 ]; …

wordpress主题使用中常见错误汇总

在WordPress主题的使用过程中&#xff0c;开发者可能会遇到各种问题。下面是一些常见错误的汇总&#xff0c;并给出了相应的解决方法。 一、主题安装与激活错误 无法激活主题&#xff1a;检查主题文件是否完整&#xff0c;以及是否符合WordPress的主题规范。 激活主题后出现…

如何设计一个订单号生成服务?应该考虑那些问题?

如何设计一个订单号生成服务&#xff1f;应该考虑那些问题&#xff1f; description: 在高并发的电商系统中&#xff0c;生成全局唯一的订单编号是关键。本文探讨了几种常见的订单编号生成方法&#xff0c;包括UUID、数据库自增、雪花算法和基于Redis的分布式组件&#xff0c;并…

Springboot 集成 Flowable 6.8.0

1. 创建 Spring Boot 项目 通过 Spring Initializr&#xff08;https://start.spring.io/ &#xff09;创建一个基础的 Spring Boot 项目&#xff0c;添加以下依赖&#xff1a; Spring WebSpring Data JPAMySQL DriverLombok&#xff08;可选&#xff0c;用于简化代码&#x…

《TCP/IP网络编程》学习笔记 | Chapter 22:重叠 I/O 模型

《TCP/IP网络编程》学习笔记 | Chapter 22&#xff1a;重叠 I/O 模型 《TCP/IP网络编程》学习笔记 | Chapter 22&#xff1a;重叠 I/O 模型理解重叠 I/O 模型重叠 I/O本章讨论的重叠 I/O 的重点不在于 I/O 创建重叠 I/O 套接字执行重叠 I/O 的 WSASend 函数进行重叠 I/O 的 WSA…

搭建Redis哨兵集群

停掉现有的redis集群 因为这篇文章我是在 搭建完redis主从集群之后写的&#xff0c;如果要是没有搭建过这些&#xff0c;可以直接略过。要是从我上一篇 搭建redis主从集群过来的&#xff0c;可以执行下。 docker compose down 查找下redis相关进程 ps -ef | grep redis 可以看…

MySQL中,聚集索引和非聚集索引到底有什么区别?

文章目录 1. 数据存储方式2. 索引结构3. 查询效率4. 索引数量5. 适用场景6. 示例说明7. 总结 在MySQL中&#xff0c;聚集索引和非聚集索引&#xff08;也称二级索引&#xff09;的区别主要体现在数据存储方式、索引结构和查询效率等方面。以下是详细对比&#xff1a; 1. 数据存…

看 MySQL InnoDB 和 BoltDB 的事务实现

BoltDB 事务实现 BoltDB 支持多读单写方式的并发级别 事务操作会锁表 它的 MVCC 为 2 个版本&#xff0c;当前版本和正在写的版本 多读&#xff1a;可以并发读当前版本 单写&#xff08;串行写&#xff09;&#xff1a;写时拷贝当前 B 树&#xff0c;构建新 B 树&#xff…

08_JavaScript数据操作方法_数组

目录 一、创建一个数组 1.1 数组如何创建 字面量创建 构造函数创建 1.2 数组的长度 数组名.length 1.3 数组的索引 1.4 数组如何循环遍历 for 循环遍历 for in for of 二、数组的常用方法 &#xff08;重点 面试&#xff09; push 方法 unshift 方法 pop shif…

2025.3.25总结

工作&#xff1a;这两天工作都没啥产出&#xff0c;主要是工作状态不太好&#xff0c;周日晚上两点睡&#xff0c;周一晚上一点睡。熬夜伤身&#xff0c;但就是控制不住自己&#xff0c;睡前总要刷刷手机。本来想睡前看会书的&#xff0c;但这行为及其不稳定&#xff0c;抖音也…

《Python实战进阶》第33集:PyTorch 入门-动态计算图的优势

第33集&#xff1a;PyTorch 入门-动态计算图的优势 摘要 PyTorch 是一个灵活且强大的深度学习框架&#xff0c;其核心特性是动态计算图机制。本集将带您探索 PyTorch 的张量操作、自动求导系统以及动态计算图的特点与优势&#xff0c;并通过实战案例演示如何使用 PyTorch 实现…