通讯端口

計算機主機操作系統中的通信端點
(重定向自端口

计算机网络中,通讯端口(英语:port),又称为连接端口协议端口(protocol port),是一种经由软件建立的服务,在电脑操作系统中扮演通信的端点(endpoint)。每个通讯端口都会与主机的IP地址及通信协议关联。通讯端口以16比特数字来表示,这被称为端口号(port number),有时也直接简称端口

“port”的各地常用译名
中国大陆端口
台湾通讯埠、连接埠、协定埠

位于传输层的通信协议通常需要指定端口号,例如在TCP/IP协议族之下的TCPUDP协议。在应用层中,使用主从式架构的通信协议,在每个通讯端口上提供多路复用服务(multiplexing service)。经由公认端口号(well-known port numbers),通常可以辨认出这个连线使用的通信协议,其中具代表性的是最基础的1024个公认端口号(well-known port numbers),例如Telnet协议默认使用23端口来连线,Secure Shell协议默认使用22端口,HTTP协议默认使用80端口,HTTPS协议默认使用443端口。

技术细节 编辑

传输层协议,如传输控制协议(TCP)与用户资料包协议(UDP),在分组表头中,定义了来源端口号与目的端口号。一个端口号使用16位无符号整数(unsigned integer)来表示,其范围介于0与65535之间。在TCP协议中,端口号0是被保留的,不可使用。1--1023 系统保留,只能由root用户使用。1024---4999 由客户端程序自由分配。5000---65535 由服务器端程序自由分配。在UDP协议中,来源端口号是可以选择要不要填上,如果设为0,则代表没有来源端口号。

在操作系统中,一个进程可以通过网络套接字将它的输入与输出与一个特定的传输协议、一个通讯端口、一个IP地址关系起来。这个关系动作,称为綁定(binding),在这之后,就可以通过网络提交与接收资料。

在操作系统上运行的网络软件,可以透过操作系统,利用各个不同的通讯端口,将资料发送到网络上;操作系统也可以根据数据包的IP地址以及端口号,将这些数据包转送到符合的进程去。

虽然使用同样传输协议,但是特定的IP地址以及通讯端口的组合,只会被綁定到单一的特定进程上。当使用同样协议的多个程序,尝试着綁定在同一个IP地址下的相同通讯端口,就会产生一个常见的应用程序错误,这个错误有时候被称为通讯端口冲突(port conflicts)。

存储文件 编辑

在Linux的 /etc/services文件,Windows的 C:\Windows\system32\drivers\etc\services文件,记录了网络服务名、端口号、协议、别名。

C语言 编辑

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

用途 编辑

端口号有两种用途:

  • 标识服务器上提供特定网络服务的进程。客户机可以按照服务器IP与端口号与相应的服务器进程建立网络连接,获得相应的网络服务。例如,通常使用80端口号提供http服务,使用23端口号telnet服务。服务器的这种功能叫做listening。客户机通常使用动态指定的端口号与服务器建立连接。
  • 由本机地址、本机端口号、目标机地址、目标机端口号、通信协议组成的五元组,用于唯一确定正在使用的网络链接。因此,对于不同的协议、不同的目标机地址,本机的不同地址(如果本机使用多个网卡)等多种情形,同一个端口号可以复用。因此对于1对1通信,且本机与目标机之间只能建立一个通信连接,则不需要使用端口号。

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

参见 编辑