Socket 是使用標準 Unix 檔案描述符(file descriptor)與其他程式通訊的介面。Unix 哲學:「一切皆檔案」——網路連線、管道、終端、磁碟檔案,對程式來說都是讀寫一個整數描述符。
呼叫 socket() 系統呼叫,回傳 socket descriptor,再用 send()/recv() 或 read()/write() 收發資料。send/recv 提供更多控制旗標(如 MSG_DONTWAIT)。
| 類型 | 常數 | 特性 | 協定 | 典型應用 |
|---|---|---|---|---|
| 流式套接字 | SOCK_STREAM | 可靠、雙向、有序、無錯誤、連線導向 | TCP | Telnet, HTTP, SSH, FTP |
| 資料報套接字 | SOCK_DGRAM | 不可靠、無序、無連線、保留邊界 | UDP | DNS, TFTP, BOOTP, 即時影音 |
telnet www.example.com 80 後輸入 GET / HTTP/1.0 即可拿到網頁原始碼。sendto(),無連線建立過程。資料從應用層下發,每層加上標頭:
Application (TFTP) → Transport (UDP) → Network (IP) → Link (Ethernet) → Physical
接收端反向剝離。程式設計師只需關注應用層資料,下層由核心與硬體處理。