什么是网络端口?TCP、UDP 与开放端口
网络端口是 TCP、UDP 等传输协议使用的一个编号,用来把流量交给正确的服务。协议、IP 地址和端口三者合在一起,就构成了一个连接的实际端点。端口是逻辑上的标识,并不是路由器上的物理接口。
端口号与常见用途
端口号是 16 位数值,范围从 0 到 65535。IANA 把它们分为系统端口 0–1023、用户端口 1024–49151 以及动态或私有端口 49152–65535。HTTP 通常使用 TCP 80,HTTPS 使用 TCP 443,但服务也可以配置在其他端口上。
TCP 和 UDP 各有一套独立的端口空间。因此,同一个端口号在两种协议下可以有不同的用途。客户端连接服务器正在监听的目的端口时,通常会临时选用一个源端口。看到客户端使用了一个高位端口号是正常现象,并不意味着有公共服务对外开放。
“开放”是什么意思
对于 TCP,如果外部测试能与监听程序建立连接,通常就会判定该端口开放。返回关闭响应、数据包被丢弃或连接超时,各自含义不同,而防火墙可能让它们难以区分。UDP 测试的结论则没那么确定,因为一个静默的服务可能根本不回应探测。
在本地地址上监听的程序,并不会自动就能从互联网访问。主机防火墙、路由器端口转发、运营商过滤以及运营商级 NAT 都会影响结果。请先检查监听地址和协议,再从局域网外部进行测试。
负责任地开放端口
只开放确实需要的服务。配置身份验证,及时更新软件,并在可行时限制来源地址。连接测试成功,并不能说明应用是安全的或配置正确。反过来,测试失败本身也无法确定究竟是哪一层拦截了连接。
如果某项服务只打算在本地使用,请把它绑定到回环地址或私有接口上,避免不必要的端口转发。修改防火墙规则之前,先记下预期的协议和目的端口。修改完成后,从另一个网络重新检测;服务停用后,请删除过时的规则。
记录问题时,请写明服务名称、传输协议、目的端口和测试地点。在家庭网络内部测得的结果,可能与通过移动数据测得的不同,因为路由器处理指向自身公网地址的流量的方式可能不一样。在要求运营商做出变更之前,请先从真正的外部网络重新测试一遍。
TCP 和 UDP 需要分别测试
同一个端口号在 TCP 和 UDP 中都可能存在,但它们是不同的传输协议。TCP 连接成功,并不能说明该端口号上的 UDP 服务情况如何。请参阅 TCP 与 UDP 对比以及开放、关闭与被过滤的端口。