IP、IP 位址、主機與連接埠(IP, IP address, host, and port)
/ IP -> EYE-PEE /
要把信送給某個人,你需要兩樣東西:那棟建築的街道地址,以及裡頭的公寓號碼。在網路上,建築是機器,靠它的 IP 位址找到;公寓則是那台機器上的某個特定程式,靠它的連接埠號碼找到。網際網路協定(IP)是替機器之間的封包定址與選路的規則書;IP 位址則是某台機器在這套規則書下的號碼。
IP 位址識別一台主機(host)——網路上任何可達的機器。較舊的形式 IPv4 是四個 0 到 255 的數字,例如 93.184.216.34(32 位元,約 40 億個可能位址,如今已近用罄)。較新的形式 IPv6 是八組十六進位數字,例如 2606:2800:220:1:248:1893:25c8:1946(128 位元,實際上用之不竭)。IP 位址把封包送到正確的機器。但一台機器同時跑著許多程式——網頁伺服器、郵件伺服器、ssh 伺服器——所以封包還帶著一個連接埠號碼(0 到 65535),說明它要給哪個程式。位址與連接埠這一對(IP 位址, 連接埠)指名了一個你可以交談的具體端點。
為何重要:你建立的每一條連線,根本上都是「這個 IP、這個連接埠」。當你寫伺服器時,你選一個連接埠來聆聽;當你寫客戶端時,你必須知道伺服器的 IP 與連接埠。把兩者搞混是經典的新手錯誤:IP 帶你到正確的電腦,連接埠帶你到那台電腦上正確的程式。一台主機可以有好幾個 IP 位址,而一個 IP 也能同時承載成千上萬個連接埠。
在 93.184.216.34:443 這個位址裡,冒號之前的部分(93.184.216.34)是挑出機器的 IP 位址;之後的部分(443)是挑出程式的連接埠,這裡是安全網頁伺服器。兩者的組合,正好指名了一個可以送位元組過去的地點。
IP 位址=哪台機器;連接埠=那台機器上的哪個程式。兩者合起來指名一個端點。
IP 位址不等於網域名稱。example.com 是人類友善的名稱,必須先(透過 DNS)查出它的 IP 位址;網路本身只靠 IP 選路,從不靠名稱。