有些時(shí)候,一個(gè)IP地址并不足以完整標(biāo)識(shí)一個(gè)服務(wù)器。這是由于在一臺(tái)物理性的機(jī)器中,往往運(yùn)行著多個(gè)服務(wù)器(程序)。由IP表達(dá)的每臺(tái)機(jī)器也包含了“端口”(Port)。我們?cè)O(shè)置一個(gè)客戶(hù)機(jī)或者服務(wù)器的時(shí)候,必須選擇一個(gè)無(wú)論客戶(hù)機(jī)還是服務(wù)器都認(rèn)可連接的端口。就象我們?nèi)グ輹?huì)某人時(shí),IP地址是他居住的房子,而端口是他在的那個(gè)房間。注意端口并不是機(jī)器上一個(gè)物理上存在的場(chǎng)所,而是一種軟件抽象(主要是為了表述的方便)?蛻(hù)程序知道如何通過(guò)機(jī)器的IP地址同它連接,但怎樣才能同自己真正需要的那種服務(wù)連接呢(一般每個(gè)端口都運(yùn)行著一種服務(wù),一臺(tái)機(jī)器可能提供了多種服務(wù),比如HTTP和FTP等等)?端口編號(hào)在這里扮演了重要的角色,它是必需的一種二級(jí)定址措施。也就是說(shuō),我們請(qǐng)求一個(gè)特定的端口,便相當(dāng)于請(qǐng)求與那個(gè)端口編號(hào)關(guān)聯(lián)的服務(wù)。“報(bào)時(shí)”便是服務(wù)的一個(gè)典型例子。通常,每個(gè)服務(wù)都同一臺(tái)特定服務(wù)器機(jī)器上的一個(gè)獨(dú)一無(wú)二的端口編號(hào)關(guān)聯(lián)在一起?蛻(hù)程序必須事先知道自己要求的那項(xiàng)服務(wù)的運(yùn)行端口號(hào)。
系統(tǒng)服務(wù)保留了使用端口1到端口1024的權(quán)力,所以不應(yīng)讓自己設(shè)計(jì)的服務(wù)占用這些以及其他任何已知正在使用的端口。本書(shū)的第一個(gè)例子將使用端口8080(為追憶我的第一臺(tái)機(jī)器使用的老式8位Intel 8080芯片,那是一部使用CP/M操作系統(tǒng)的機(jī)子)。