IP
主機在網路上的位址。它回答的是「要把封包送到哪一台電腦」。
當你在瀏覽器輸入網址時,畫面上只看到一個網頁,但背後其實是一條經過 網路位址、連線埠、傳輸協定與應用層服務 的完整路徑。 本章的任務,就是把這條路徑中的底層角色先認清楚。
很多人一開始學網頁會直接從 HTML 或 JavaScript 開始,但一旦碰到「為什麼 localhost 可以打開?」 「為什麼要用 80、443、3000、8000 這些 port?」就會開始混亂。原因是頁面只是 Web 技術最上層的呈現, 真正讓資料流動的底層,是整套 TCP/IP 協定族。
| 層級 | 主要工作 | 常見協定 / 技術 | 與 Web 的關係 |
|---|---|---|---|
| Application Layer | 處理應用程式的資料格式與服務邏輯 | HTTP、HTTPS、DNS、SMTP | Web server 就在這一層提供服務 |
| Transport Layer | 端到端傳輸、排序、重送、連線控制 | TCP、UDP | HTTP/1.1 與 HTTP/2 通常建立在 TCP 之上 |
| Internet Layer | 位址與封包路由 | IP、ICMP | 負責讓資料包知道要送去哪一台主機 |
| Link / Hardware Layer | 實體媒介、網卡、區域網路傳輸 | Ethernet、Wi-Fi、MAC | 負責資料在實際硬體上的移動 |
主機在網路上的位址。它回答的是「要把封包送到哪一台電腦」。
同一台電腦中的「服務入口」。它回答的是「資料進來後要交給哪個程式」。
把 IP 與 Port 綁在一起後,用來建立網路通訊端點的介面。
在背景持續執行、等待請求的服務程式,例如 Nginx、Apache、資料庫服務。
主動發出要求的一方,最常見的例子就是瀏覽器。
被動等待連線、接到要求後回應的一方,也就是 Web server。
Client-Server 架構的核心很簡單:Client 主動請求,Server 被動等待並回應。 但實際上,這個「請求」會先經過 DNS 找到主機、經過 TCP 建立連線,最後才輪到 HTTP 傳送資料。
這個範例不是完整 Web server,但能幫你看到「程式綁定 IP / Port 並等待連線」的本質。
import socket
server = socket.socket()
server.bind(("127.0.0.1", 9000))
server.listen(1)
print("Server is listening on 127.0.0.1:9000")
client, address = server.accept()
print("Connected by", address)
client.sendall(b"hello from socket server")
client.close()
server.close()
bind() 把程式綁到某個 IP 與 Port。listen() 讓伺服器進入等待連線的狀態。accept() 表示真的有 client 連進來了。請說明網址 http://127.0.0.1:8000/index.html 中,IP、Port、Path 分別是什麼。
如果同一台主機上有兩個服務都想用 8000 port,會發生什麼事?為什麼?
| 迷思 | 正確理解 |
|---|---|
| 有網頁就代表有 HTML 檔案 | 不一定,伺服器也可能即時產生內容,回傳動態頁面或 API 資料。 |
| IP 就等於網站名稱 | 網站名稱通常是網域,仍需要 DNS 轉成 IP 才能連線。 |
| Port 是檔案夾 | Port 是服務的入口,不是檔案位置。 |