Services (網絡服務設定檔)

Service檔案是現代作業系統在etc目錄下的一個設定檔,記錄網絡服務名對應的埠號與協定。

service檔案的用途是:

  • 通過TCP/IP的API函數(聲明在netdb.h中)直接查到網絡服務名與埠號、使用協定的對應關係。如getservbyname("serve","tcp")取得埠號;[1]getservbyport(htons(port),“tcp”)取得埠和協定上的服務名。[2]
  • 如果用戶在這個檔案中維護所有使用的網絡服務名字、埠、協定,那麼可以一目了然的獲悉哪些埠號用於哪個服務,哪些埠號是空閒的。

介紹

IP協定的埠號,可用於區分伺服器提供的不同服務。值得範圍是0至65535. IP位址、埠號、TCP/UDP協定,這三者合起來稱為通訊端(socket)。

前1000個被保留用於特定應用,被稱為著名埠(well known ports)。細節見RFC 1340。並寫在service檔案中。[3]

歷史

最初在Internet的前身ARPANET中,其成員SRI International手動維護並分享了一個名為SERVICES.TXT的檔案,其中就包括網絡服務名對應的埠號與協定。[4]

埠號和標準服務之間的對應關係在RFC 1700 「Assigned Numbers」中有詳細的定義。

Linux作業系統

檔案位置是/etc/services

只有「root」用戶才有權限修改這個檔案。檔案中的每一行由4個欄位組成,用TAB或空格分隔,分別表示「服務名稱」、「使用埠」、「協定名稱」以及「別名」。例如:

http      80/tcp      www

Windows作業系統

檔案位置是C:\WINDOWS\system32\drivers\etc\services

只有「administrator」用戶才有權限修改這個檔案。檔案中的每一行由5個欄位組成,用TAB或空格分隔,分別表示「服務名稱」、「使用埠」、「協定名稱」、「別名」、「註釋」。[5]例如:

qotd               17/tcp    quote                  #Quote of the day
qotd               17/udp    quote                  #Quote of the day

Winsock的API函數WSAConnectByName的第三個參數servicename,其官方文件解釋是:服務名是埠號的字串別名。[6]

參見

參考文獻及註釋

  1. ^ MSDN:getservbyname function. [2017-09-08]. (原始內容存檔於2017-07-06). 
  2. ^ MSDN:getservbyport function. [2017-09-08]. (原始內容存檔於2017-09-20). 
  3. ^ TCP and UDP port numbers (/etc/services) quick reference. [2017-09-08]. (原始內容存檔於2017-09-13). 
  4. ^ Internet Systems Consortium. The Most Widely Used Name Server Software: BIND. History of BIND. [28 July 2013]. (原始內容存檔於2016-01-02). 
  5. ^ MSDN:Add or Edit a Service
  6. ^ MSDN: WSAConnectByName function, "A service name is a string alias for a port number.". [2017-09-08]. (原始內容存檔於2017-09-11).