網絡編程是現代分布式系統的基石。本文系統梳理網絡編程的核心模型,重點解析 Socket 接口統一不同協議操作的機制,並通過圖解詳細展示 TCP 面向連接與 UDP 無連接的完整交互流程,為網絡應用開發提供清晰的架構視角。
應用層通過 Socket API 與傳輸層(TCP/UDP)交互,屏蔽了網絡層及數據鏈路層的細節。Socket 的本質是一組標準化接口,使開發者能以統一的函數調用方式操作不同協議,協議差異由內核協議棧內部處理。
socket() 創建通信端點,bind() 綁定地址,listen()/connect() 建立連接,send()/recv() 傳輸數據。AF_INET)與類型(SOCK_STREAM/SOCK_DGRAM)。服務端流程:
socket() → bind() → listen() 進入被動監聽狀態。accept() 阻塞等待客戶端連接,返回新連接套接字。recv()/send() 處理業務邏輯。close() 關閉連接。客戶端流程:
socket() → connect() 主動發起三次握手建立連接。關鍵特性:三次握手建立連接、四次揮手釋放、流量控制、擁塞控制、保序可靠交付。
雙向通信流程:
socket() → bind() 綁定本地端口(客戶端可選)。sendto() 指定目標地址發送,recvfrom() 接收並獲取發送方地址。適用場景:即時音視頻、DNS 查詢、廣播組播、高併發短消息。
| 維度 | TCP | UDP |
|---|---|---|
| 連接性 | 面向連接 | 無連接 |
| 可靠性 | 可靠(ACK/重傳) | 不可靠(盡力而為) |
| 有序性 | 保證順序 | 無序 |
| 開銷 | 較大(頭部 20+ 字節、狀態機) | 極小(頭部 8 字節) |
| 典型場景 | 文件傳輸、Web、郵件、SSH | 直播、遊戲、IoT、DNS |
epoll/IOCP)或異步 I/O 替代阻塞模型。理解網絡編程模型不僅是調用 API,更是掌握協議語義與系統資源權衡。合理選擇 TCP/UDP 並配合適當的並發模型,是構建健壯高效網絡應用的關鍵。