Network Devices and Sockets

socket 有比較現實的描述

Basic Concept

Network device 的 I/O 行為和 disk 很不一樣。Disk I/O 通常可以用 read()write()seek() 來描述,因為資料有明確 block / offset;network I/O 則需要處理 remote address、connection、packet、protocol stack、latency、以及「哪個 socket 現在可讀可寫」這些問題。

因此 OS 通常不把 network device 暴露成一般 block interface,而是提供 socket interface。Socket 可以想成 application 和 network protocol stack 之間的端點:application 把資料送進 socket,kernel 負責包成 packet、交給 network driver、再交給 network controller。

Socket as an Endpoint

Socket 的直覺類比是牆上的插座。插座本身不是電器,但它提供一個標準端點,讓電器可以接到電力系統。類似地,socket 不是 network 本身,而是 application 接入 network communication 的端點。

常見 socket operations 包含:

  • create socket:建立本地 communication endpoint。
  • connect:把本地 socket 連到 remote address。
  • listen / accept:等待 remote application 連進來。
  • send / receive:在 connection 上送收資料。

這些 operation 封裝了底層 network card、driver、protocol stack 的差異。

Relationship to IPC

Network socket 是一種跨 machine communication interface,但 socket 這個抽象也常被 OS 用於 local IPC。UNIX 中除了 sockets,還有 pipes、FIFOs、message queues、STREAMS 等多種 communication mechanism。它們共同的重點是:application 不直接面對 network card,而是面對 kernel 提供的 communication endpoint。