
- Unix套接字教程
- Unix套接字 - 首頁
- Unix套接字 - 什麼是套接字?
- Unix套接字 - 網路地址
- Unix套接字 - 網路主機名
- Unix套接字 - 客戶端伺服器模型
- Unix套接字 - 結構
- Unix套接字 - 埠和服務
- Unix套接字 - 網路位元組序
- Unix套接字 - IP地址函式
- Unix套接字 - 核心函式
- Unix套接字 - 輔助函式
- Unix套接字 - 伺服器示例
- Unix套接字 - 客戶端示例
- Unix套接字 - 總結
- Unix套接字有用資源
- Unix套接字 - 快速指南
- Unix套接字 - 有用資源
- Unix套接字 - 討論
Unix套接字 - 埠和服務
當客戶端程序想要連線伺服器時,客戶端必須有一種方法來識別它想要連線的伺服器。如果客戶端知道伺服器所在主機的32位Internet地址,它就可以聯絡該主機。但是,客戶端如何識別在該主機上執行的特定伺服器程序呢?
為了解決識別主機上執行的特定伺服器程序的問題,TCP和UDP都定義了一組眾所周知的埠。
出於我們的目的,埠將定義為1024到65535之間的整數。這是因為所有小於1024的埠號都被認為是眾所周知的——例如,telnet使用埠23,http使用80,ftp使用21,等等。
網路服務的埠分配可以在檔案/etc/services中找到。如果您正在編寫自己的伺服器,則必須小心地為您的伺服器分配埠。您應該確保此埠未分配給任何其他伺服器。
通常的做法是分配大於5000的任何埠號。但是,許多組織已經編寫了埠號大於5000的伺服器。例如,雅虎通執行在5050埠,SIP伺服器執行在5060埠,等等。
埠和服務示例
這是一個服務和相關埠的小列表。您可以在IANA - TCP/IP埠分配找到最新的Internet埠和相關服務的列表。
服務 | 埠號 | 服務描述 |
echo | 7 | UDP/TCP傳送回它接收到的內容。 |
discard | 9 | UDP/TCP丟棄輸入。 |
daytime | 13 | UDP/TCP返回ASCII時間。 |
chargen | 19 | UDP/TCP返回字元。 |
ftp | 21 | TCP檔案傳輸。 |
telnet | 23 | TCP遠端登入。 |
smtp | 25 | TCP電子郵件。 |
daytime | 37 | UDP/TCP返回二進位制時間。 |
tftp | 69 | UDP簡單檔案傳輸。 |
finger | 79 | TCP使用者資訊。 |
http | 80 | TCP全球資訊網。 |
login | 513 | TCP遠端登入。 |
who | 513 | UDP不同的使用者資訊。 |
Xserver | 6000 | TCP X視窗(注意:>1023)。 |
埠和服務函式
Unix提供以下函式來從/etc/services檔案中獲取服務名稱。
struct servent *getservbyname(char *name, char *proto) − 此呼叫獲取服務名稱和協議名稱,並返回該服務的相應埠號。
struct servent *getservbyport(int port, char *proto) − 此呼叫獲取埠號和協議名稱,並返回相應服務名稱。
每個函式的返回值是指向具有以下形式的結構的指標−
struct servent { char *s_name; char **s_aliases; int s_port; char *s_proto; };
以下是成員欄位的描述−
屬性 | 值 | 描述 |
---|---|---|
s_name | http | 它是服務的官方名稱。例如,SMTP、FTP POP3等。 |
s_aliases | 別名 | 它儲存服務別名的列表。大多數情況下,它將設定為NULL。 |
s_port | 80 | 它將包含關聯的埠號。例如,對於HTTP,它將是80。 |
s_proto |
TCP UDP |
它設定為使用的協議。Internet服務使用TCP或UDP提供。 |
廣告