軟體劃分為兩類角色:
在特定時刻,雙方角色嚴格區分,不可同時為客戶端(否則無伺服端處理請求)。雖存在 P2P 等對等模型,但 C/S 因簡單、符合直覺、工具鏈成熟,仍是主流網路程式設計模型。
bind() 綁定 IP:Port → listen() 監聽 → accept() 阻塞等待。connect() 主動發起三次交握建立連線。send()/recv()(或 Java OutputStream/InputStream)進行全雙工位元組流交換。close() 四次揮手斷開連線。sendto() 發送資料報至伺服端 IP:Port。bind() 後直接 recvfrom() 接收,可從同一 Socket 收發多客戶端資料。單執行緒循環 → 多進程 → 多執行緒 → 線程池 → NIO Reactor → 多 Reactor + 業務線程池(現代高併發標準)。| 協議/服務 | 標準端口 | 傳輸層 |
|---|---|---|
| Telnet | 23 | TCP |
| SMTP (郵件發送) | 25 | TCP |
| HTTP | 80 | TCP |
| POP3 (郵件接收) | 110 | TCP |
| HTTPS | 443 | TCP |
| DNS | 53 | UDP/TCP |
| DHCP | 67/68 | UDP |
客戶端透過「IP + Port」定位伺服端;伺服端透過「本地 Port」識別服務實例。同一台機器可運行多個服務,靠端口區分。
這些機制在作業系統核心協議棧實現,Java 開發者透過 Socket 獲得類檔案 I/O 體驗(InputStream/OutputStream),極大降低認知負擔。
C/S 範式定義了網路軟體的角色邊界;TCP 提供了可靠位元組流抽象,屏蔽了封包傳輸複雜性;端口號實現了多服務共存與定位。理解這三者協作關係,是網路程式設計的「第一性原理」。