通訊埠












在電腦網路中,通訊埠英语:port),又稱為連接埠端口協定埠(protocol port),是一種經由軟體建立的服務,在一個電腦作業系統中扮演通訊的端點(endpoint)。每個通訊埠都會與主機的IP位址及通訊協定关联。通訊埠以16位元數字來表示,這被稱為通訊埠編號(port number)。


位於傳輸層的通訊協定通常需要指定埠號,例如在TCP/IP协议族之下的TCP與UDP協議。在應用層中,使用主從式架構的通訊協定,在每個通訊埠上提供多路複用服務(multiplexing service)。經由公認通訊埠號(well-known port numbers),通常可以辨認出這個連線使用的通訊協定,其中具代表性的是最基礎的1024個公認通訊埠號(well-known port numbers),例如telnet協定預設使用23埠來連線,HTTP連線預設使用80埠。



技術細節


傳輸層協議,如傳輸控制協議(TCP)與使用者資料包協定(UDP),在封包表頭中,定義了來源埠號與目的埠號。一個通訊埠號使用16位元无符號整數(unsigned integer)來表示,其範圍介於0與65535之間。在TCP協定中,埠號0是被保留的,不可使用。1--1023 系统保留,只能由root用户使用。1024---4999 由客户端程序自由分配。5000---65535 由服务器端程序自由分配在UDP協定中,來源埠號是可以選擇要不要填上,如果設為0,則代表沒有來源埠號。


在Linux的/etc/services文件,Windows的C:/Windows/system32/drivers/etc/services文件,记录网络服务名和它们对应使用的端口号及协议。文件中的每一行对应一种服务,它由4个字段组成,中间用TAB或空格分隔,分别表示“服务名称”、“使用端口”、“协议名称”以及“别名”。


应用程序可以不直接使用端口号,通过函数getservbyname("server","tcp")获取端口号。如果服务想更改端口号只要更改/etc/services中的端口号就可以了,应用程序不需要做任何更改。可以通过函数getservbyport(htons(50),“tcp”)获取对应端口和规约上的服务名。


在作業系統中,一個行程,可以通過internet socket,將它的輸入與輸出,與一個特定的傳輸協定,一個通訊埠,與IP位址,關聯起來。這個關聯動作,稱為綁定(binding),在這之後,就可以通過網路送出與接收資料。


在作業系統上運行的網路軟體,可以透過作業系統,利用各個不同的通訊埠,將資料傳送到網路上;作業系統也可以根據資料封包的IP位址以及埠號,將這些資料封包轉送到符合的行程去。


雖然使用同樣傳輸協定,但是特定的IP位址以及通訊埠的組合,只會被綁定到單一的特定行程上。當使用同樣協定的多個程式,嘗試著綁定在同一個IP位址下的相同通訊埠,就會產生一個常見的應用程式錯誤,這個錯誤有時候被稱為通訊埠衝突(port conflicts)。



用途


端口号有两种用途:



  • 标识服务器上提供特定网络服务的进程。客户机可以按照服务器IP与端口号与相应的服务器进程建立网络连接,获得相应的网络服务。例如,通常使用80端口号提供http服务,使用23端口号telnet服务。服务器的这种功能叫做listening。客户机通常使用动态指定的端口号与服务器建立连接。

  • 由本机地址、本机端口号、目标机地址、目标机端口号、通信协议组成的五元组,用于唯一确定正在使用的网络连结。因此,对于不同的协议、不同的目标机地址,本机的不同地址(如果本机使用多个网卡)等多种情形,同一个端口号可以复用。因此对于1对1通信,且本机与目标机之间只能建立一个通信连接,则不需要使用端口号。


网络防火墙或者网关还可提供端口转发(port forwarding),即NAT。







Comments

Popular posts from this blog

Information security

Volkswagen Group MQB platform

刘萌萌