目录
网络端口的定义及作用
运输层的作用
运输层的两个主要协议
用户数据报协议UDP (User Datagram Protocol)
传输控制协议TCP (Transmission Control Protocol)
运输层的端口及分类
按照端口号分类
按照协议类型分类
BSD端口
网络端口的定义及作用
在网络技术中,端口(port)包括逻辑端口(logic port)和物理端口(physical port)两种类型。
物理端口是用于连接物理设备之间的接口,如ADSL Modem、集线器、交换机、路由器上用于连接其他网络设备的接口。
逻辑端口是指逻辑意义上用于区分服务的端口,比如用于浏览网页服务的80端口,用于FTP服务的21端口等。
本文所说的端口是指逻辑端口。
端口的主要作用是实现网络服务的多路复用。网络中的计算机是通过IP地址来代表其身份的,它只能表示某台特定的计算机,但是一台计算机上可以同时提供很多个服务,如数据库服务、FTP服务、Web服务等,我们就通过端口号来区别相同计算机所提供的这些不同的服务。当数据包从客户端发送到服务器时,包含目标端口号,服务器根据端口号将数据包路由到相应的服务程序进行处理,从而确保数据能够准确无误地送达目的地。
运输层的作用
进行通信的实体是在主机中的进程,是这台主机的一个进程和另一台主机的进程在交换数据。因此,两台主机进行通信就是两台主机的应用进程相互通信。虽然IP协议进行分组分发给目的主机,但是这个分组还停留在主机的网络层而没有交付主机中的应用进程。所以常说,端到端的通信就是应用进程之间的通信。
运输层具有复用和分用的功能:
复用:是指在发送方不同的应用进程都可以使用同一个运输层协议传送数据。主机A的AP1进程和AP2进程都可以使用运输层协议进行传递数据。
分用:是指接收放在剥去报文的首部后能后把这些数据正确交付目的应用进程。在主机B中,同一个运输层协议将数据分别交付给进程AP3和进程AP4。
网络技术中有一个关键问题,运输层怎么明确指明哪些数据是来自哪些进程,哪些数据又要传递给哪些进程?
运输层具有屏蔽功能,运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道。
运输层的两个主要协议
两个对等运输实体在通信时传送的数据单位叫作运输协议数据单元 TPDU (Transport Protocol Data Unit)。 面向连接的协议TCP传送的数据单位协议是 TCP 报文段 (segment)。无连接的协议UDP传送的数据单位协议是UDP报文或用户数据报。
用户数据报协议UDP (User Datagram Protocol)
用户数据报协议UDP传送数据之前不需要先建立连接。
收到UDP报后,不需要给出任何确认。
UDP协议不提供可靠交付,但是一种最有效的工作方式。
传输控制协议TCP (Transmission Control Protocol)
传输控制协议TCP提供可靠的、面向连接的运输服务。
不提供广播或多播服务。
但TCP协议开销较多。
运输层的端口及分类
为了解决上面哪些数据来自哪些进程,哪些收据又要传送给哪些进程的问题,我们首先要考虑以下几个问题:
- 进程的创建和撤销都是动态的,因此发送方几乎无法识别其他机器上的进程。
- 我们往往需要利用目的主机提供的功能来识别终点,而不需要知道具体实现这个功能的进程是哪一个。
- 有时我们会改换接收报文的进程,但并不需要通知所有的发送方。
为了解决这些问题,在运输层使用协议端口号 (protocol port number),或通常简称为端口 (port)。把端口设为通信的抽象终点。
这些端口用一个16位端口号进行标志,允许有 65,535 个不同的端口号。端口号只具有本地意义,只是为了标志本计算机应用层中的各进程。在互联网中,不同计算机的相同端口号没有联系。A主机的8888端口和B主机的8888端口没有什么关系。
由此可见,两个计算机中的进程要互相通信,不仅必须知道对方的IP地址,而且还要知道对方的 端口号。
按照端口号分类
0~49151是服务端使用的端口号,49152~65535是客户端使用的端口号。
- 公认端口(熟知端口):0~1023。这些端口号是全球通用端口号,由IANA负责分配,它们紧密绑定于一些服务,通常这些端口的通讯明确表明了某种服务的协议,如:80端口对应与HTTP通信,21端口绑定与FTP服务,25端口绑定于SMTP服务,135端口绑定与RPC(远程过程调用)服务。
- 注册端口(登记端口):1024~49151。这些端口号在IANA登记,它们松散的绑定于一些服务,也就是说有许多服务绑定于这些端口,这些端口同样用于其他许多目的,如:许多系统处理端口从1024开始
- 动态或私有端口(短暂端口):49152~65535。这些端口号是客户端使用的端口号,在通信结束后,被系统收回。理论上,不应为服务分配这些端口,通常机器从1024开始分配动态端口。例外:SUN的RPC端口从32768开始。
按照协议类型分类
按协议类型划分可分为TCP端口、UDP端口、IP端口、ICMP。
-
TCP端口:即传输控制协议端口,需要在客户端和服务器之间建立连接,这样可以提供可靠的数据传输。常见的包括FTP的21端口,Telnet的23端口,SMTP的25端口,HTTP的80端口。
-
UDP端口:即用户数据报协议端口,无需在客户端和服务器端建立连接,安全性得不到保障。常见的DNS的53端口,SNMP(简单网络管理协议)的161端口,QQ使用的8000和4000端口。
-
保留端口:UNIX有保留端口号的概念,只有超级用户特权的进程才允许给它自己分配一个保留端口号。这些端口号介于1~1023之间,一些应用程序将它作为客户与服务器认证的一部分。
在这里,大家还要思考一个问题:TCP和UDP端口能不能同时使用同一端口?
其实,尽管它们的操作在同一个网络层级,但TCP和UDP是完全独立的协议,拥有不同的端口号空间。这意味着TCP和UDP可以使用相同的端口号,而不会发生冲突。
该部分参考【计算机网络】端口详解【概念、作用、分类、常见端口】
BSD端口
- 0不使用,1-1023为系统端口,也叫BSD保留端口。
- 0-1023: BSD保留端口,也叫系统端口,这些端口只有系统特许的进程才能使用
- 1024~65535为用户端口,其中:
- 1024-5000: BSD临时端口,一般的应用程序使用1024到4999来进行通讯;
- 5001-65535:BSD服务器(非特权)端口,用来给用户自定义端口。
- IANA建议49152至65535作为“动态或私有端口”。
- 许多Linux内核使用32768至61000范围。
配置文件/proc/sys/net/ipv4/ip_local_port_range有当前系统设定。
:~$ cat /proc/sys/net/ipv4/ip_local_port_range
32768 60999