TCP 核心考點
- 三次握手 / 四次揮手:狀態遷移圖、TIME_WAIT 作用、半連接隊列攻擊(SYN Flood)。
- 可靠傳輸機制:序號、確認號、滑動窗口、流量控制、拥塞控制(慢啟動、拥塞避免、快速重傳、快速恢復)。
- 粘包/拆包:原因(流式傳輸無邊界),解決(定長、分隔符、長度前綴、協議如 Protobuf)。
- Socket API:
socket/bind/listen/accept/connect/send/recv、非阻塞 fcntl/epoll/kqueue。
即時通訊(IM)架構
- 長連接保活:心跳包(Ping/Pong)、TCP Keepalive(系統級,間隔長)、應用層心跳(業務級,可攜帶狀態)。
- 消息路由:單聊(用戶 ID → Gateway → Message Server → 目標 Gateway → 客戶端)、群聊(扇出/多播/群組服務)。
- 離線消息:消息持久化(Kafka/Redis/RocketMQ),上線推送(APNs/FCM/自建推送通道)。
- 序列化協議:Protobuf/FLatBuffers 比 JSON 體積小 50%+,解析快。
- 高可用:Gateway 無狀態水平擴展、一致性哈希路由、多機房容災。
iOS 實現要點
- 使用
NWConnection (Network.framework) 或 GCDAsyncSocket 封裝 TCP 長連接。
- App 進入後台 3 分鐘後系統切斷 Socket,需結合
VoIP Push / Background Modes → Voice over IP 維持或快速重連。
- 自動重連策略:指數退避 + 抖動,避免驚群效應。
面試回答模板
「TCP 提供可靠有序的位元組流,三次握手建立連接,四次揮手釋放。IM 基於 TCP 長連接,應用層心跳保活,Protobuf 序列化,Gateway 無狀態路由,離線消息經消息隊列持久化並推送。iOS 用 Network.framework 管理連接,後台依賴 VoIP Push 重連。」