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.pswp.cn/diannao/75552.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/75552.shtml
英文地址,請注明出處:http://en.pswp.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 實現…