歡迎來到 TCP/IP 的世界!
你有沒有想過,一段貓咪影片是如何從地球另一端的伺服器,傳送到你手機螢幕上的?這並不是魔法,而是 TCP/IP 協定堆疊 (TCP/IP protocol stack) 的功勞。你可以把它想像成網際網路的「通用語言」。無論你用的是 Mac、PC 還是智慧冰箱,大家都遵守這些規則,我們才能互相溝通。如果一開始覺得術語太多不用擔心,我們會把它拆解開來,逐一為你講解!
1. 四層協定堆疊
為了保持井然有序,TCP/IP 協定被劃分為四個層級。當你傳送資料時,它會從上層向下傳遞(從第 4 層到第 1 層);當你接收資料時,則會向上傳遞。
類比:寄送生日卡片
1. 應用層 (Application Layer): 你在卡片裡寫上想說的話。
2. 傳輸層 (Transport Layer): 你把卡片放入信封,並決定是否需要「掛號」遞送。
3. 網路層 (Network Layer): 你在信封上寫下收件人和寄件人地址。
4. 連結層 (Link Layer): 信封透過貨車、單車或飛機實際進行運送。
各層詳細介紹:
- 應用層: 這是軟體運作的地方(例如你的網頁瀏覽器)。它使用 HTTP 或 FTP 等協定來格式化資料,讓接收端能夠識別內容。
- 傳輸層: 這一層負責在兩個主機之間建立連線。它將資料分割成 封包 (packets),並給予編號。如果封包遺失,這一層會要求對方重新傳送。
- 網路層: 也稱為網際網路層。它會加上寄件人和收件人的 IP 位址,並處理 路由 (routing)——找出網路上傳輸資料的最佳路徑。
- 連結層: 這是實體連線。它處理如何將資料轉換成電訊號或無線電波。它使用 MAC 位址 在同一個區域網路內的裝置之間傳輸資料。
快速複習: 記住這個順序:All Technology Needs Links (Application 應用層, Transport 傳輸層, Network 網路層, Link 連結層)。
2. IP 位址、Socket 與連接埠 (Ports)
為了將資料傳送到正確的地方,我們需要特定的「數位地址」。
MAC 位址與 IP 位址
MAC (Media Access Control) 位址 是燒錄在你網卡中的唯一識別碼,它永遠不會改變。而 IP 位址 則是一個邏輯地址,會根據你連接的網路而變動。
連接埠與 Socket
你可以把 IP 位址想像成一棟公寓大廈的地址。但郵差怎麼知道信要送到哪一戶呢?這就是 連接埠 (Port) 的作用。
- 熟知連接埠 (Well-known ports): (0–1023) 這些是保留給特定服務使用的(例如 HTTP 使用 Port 80)。
- 客戶端連接埠 (Client ports): (1024–65535) 當你開啟連線時,你的電腦會使用這些臨時連接埠。
- Socket: 由 IP 位址 加上 連接埠號碼 組成(例如:192.168.0.1:80)。這定義了兩個程式之間的特定連線。
重點摘要: IP 位址負責將資料送到裝置,而連接埠負責將資料送到特定的應用程式。
3. 標準應用層協定
這些是堆疊最頂層所使用的特殊「語言」:
- HTTP/HTTPS: 用於網頁。HTTPS 是 安全 (secure) 版本。
- FTP (檔案傳輸協定): 用於搬移檔案。可以是 非匿名 (non-anonymous)(需要使用者名稱/密碼)或 匿名 (anonymous)(任何人都能存取)。
- SMTP: 用於 傳送 (sending) 電子郵件。
- POP3: 用於從伺服器 接收 (retrieving) 電子郵件。
- SSH (Secure Shell): 用於遠端登入並管理電腦。它經過加密,因此比舊有的方法安全得多。
你知道嗎? 你可以使用 SSH 客戶端 來傳送指令給遠端伺服器,例如要求它使用 HTTP 指令「GET」一個網頁,或者透過 SMTP 指令發送郵件。
4. IP 位址標準 (IPv4 與 IPv6)
電腦需要地址才能找到彼此,但我們遇到了瓶頸。
- IPv4: 使用 32 位元地址(例如:192.168.1.1)。它大約能提供 40 億個位址。因為現在裝置數量太多,我們已經 用光了!
- IPv6: 為了應對位址短缺而引入。它使用 128 位元地址(以十六進位編寫),提供數萬億兆個唯一位址——足以讓地球上的每一粒沙子都擁有自己的 IP!
IP 位址的結構
IP 位址分為兩部分:網路識別碼 (Network Identifier) 和 主機識別碼 (Host Identifier)。子網路遮罩 (Subnet Mask) 則是用來告知電腦,位址中的哪些位元代表網路,哪些代表個別裝置(主機)。
5. 路由與網路技巧
管理數十億台裝置需要一些巧妙的捷徑:
DHCP (動態主機設定協定)
不需要手動輸入 IP 位址,DHCP 會在你加入網路時,自動為你的裝置分配一個 IP 位址的「租期」。這就像你在辦理入住時,飯店櫃檯給你房卡一樣。
NAT (網路位址轉換)
大多數家庭只有一個「公開 (Public)」可路由的 IP 位址。NAT 透過給予屋內所有裝置私有的「不可路由 (non-routable)」位址,讓所有裝置共享那一個公用 IP。
連接埠轉發 (Port Forwarding)
如果你在家中架設遊戲伺服器,外部的人需要穿過你的路由器。連接埠轉發 會告訴路由器:「任何經由 Port 25565 進來的流量,請直接傳送到我的遊戲電腦。」
常見錯誤: 學生常會混淆 DHCP(分配 IP)與 NAT(共享一個公用 IP)。記住:DHCP Delivers(發送)位址;NAT Navigates(導航)內部流量到外部。
6. 客戶端-伺服器模型與 CRUD
網際網路大部分運作在 客戶端-伺服器 (Client-Server) 模型上。你的瀏覽器(客戶端)發送 請求 (request),而 伺服器 則發送 回應 (response)。
CRUD 概念
當與伺服器上的資料庫互動時,我們通常執行四種稱為 CRUD 的動作。我們使用一種稱為 REST 的程式設計風格,將這些動作對應到 HTTP 指令:
- Create (建立): 對應 POST(新增資料)
- Retrieve (讀取): 對應 GET(查看資料)
- Update (更新): 對應 PUT(修改現有資料)
- Delete (刪除): 對應 DELETE(移除資料)
JSON 與 XML
當伺服器與客戶端對話時,需要將資料格式化。JSON 現在比 XML 更受歡迎,因為它:
1. 對人類而言更容易閱讀。
2. 更簡潔(使用較少的資料量)。
3. 電腦解析(處理)的速度更快。
7. 胖客戶端 (Thick Client) 與 瘦客戶端 (Thin Client)
你的電腦與伺服器相比,分別承擔了多少工作?
- 胖客戶端: 大部分的運算發生在你的本機裝置上(例如安裝在你電腦上的大型高畫質遊戲)。優點:離線時運作較好,反應非常靈敏。
- 瘦客戶端: 大部分的運算發生在伺服器上(例如在瀏覽器中使用 Google Docs)。優點:易於更新,可在低階硬體裝置上運作。
快速複習: 如果軟體大多「在雲端」運作,它就是 瘦客戶端。如果你需要安裝一個 50GB 的檔案才能執行它,那它就是 胖客戶端。
8. WebSocket
標準 HTTP 就像寄信一樣——你詢問,對方回答,然後連線關閉。WebSocket 則完全不同。它提供一種 持續的 (persistent)、全雙工 (full-duplex) 連線。這意味著「電話線」一直保持暢通,雙方可以同時說話。這非常適合即時聊天或多人連線遊戲!
重點摘要: 當你需要不需要不斷重新整理頁面的 即時 (real-time) 資料傳輸時,請使用 WebSocket。