主從式模型(client-server model)
想像一家餐廳。廚房總是在那裡、隨時待命、等著接單。客人來來去去,他們點餐,廚房回應。沒有人走進餐廳是想替廚房下廚的。主從式模型(client-server model)正是網際網路上這種不對稱關係:一方(伺服器,server)是一支永遠開著、擁有已知固定位址、靜候請求的程式;另一方(用戶端,client)則是發起對話、提出要求的程式。
具體來說,一個伺服器行程啟動後,會在一個眾所周知的連接埠上開一個通訊端(網頁伺服器用 TCP port 80 或 443),然後阻塞、等待。一個用戶端——你的瀏覽器——知道伺服器的位址與連接埠,連上去、送出請求、讀回回應。永遠是用戶端先開口;伺服器只負責回答。一台伺服器通常同時服務許多用戶端,每個各透過自己的連線;而用戶端之間從不直接交談——所有通訊都經由中間的伺服器流動。
這種模型主宰了網頁、電子郵件與大多數線上服務,因為它易於建構、也易於掌控:資料與邏輯都集中在一個由業者經營並負責保護的可信處所。它的弱點正是強處的反面——伺服器是單一故障點,也是瓶頸。如果一百萬個用戶端同時想要同一個檔案,那一台伺服器(或它所在的資料中心)必須通通服務到,而這正是點對點(peer-to-peer)設計與內容傳遞網路(CDN)想要避開的擴展難題。
當你載入一個新聞網站時,你的瀏覽器是用戶端,新聞公司的機器是伺服器。同一時刻還有數千名其他讀者也是同一台伺服器的用戶端,但你們彼此之間並不交換任何東西——每位讀者的請求都送往那台中央伺服器,每個頁面也都從它而來。
用戶端發起請求,永遠開著的伺服器回應;用戶端之間從不直接交談。
「用戶端」和「伺服器」指的是單一對話中的角色,而不是電腦的種類。同一台機器在某個連線中是伺服器,在另一個連線中可以是用戶端(網頁伺服器在查詢名稱時,就是 DNS 的用戶端)。