端口是我们开发各类应用时绕不开的一个概念。操作系统中端口的作用是使运行的应用进程能够互相通信。
每种应用程序使用不同的端口号的原因主要是为了实现通信的唯一性和安全性。每个端口号都代表着特定的服务或应用程序,因此,只有知道正确的端口号,才能实现正确的数据传输和通信。
通常在Linux
服务器中,1024
以下的端口都是给系统应用预留的。比如,我们熟知的HTTP协议使用的端口号是80
,HTTPS则是443
,一些服务比如文件传输协议(FTP),它通常在端口21
上进行,23
端口,它通常用于Telnet服务。
一般来说,对于1024
以下的端口,常常是看到端口号就能猜出是什么系统应用。而1024
以上的端口,是给用户自己开发的应用程序使用的,并没有强制什么样的应用使用哪些端口。
不过,随着某些开源应用的流行,它们所使用的端口也成了它们的一个名片。下面从端口的角度来看看1024
以上的端口都被哪些知名应用占据了。
1. Web服务
随着互联网的兴起,各种Web
框架如雨后春笋,层出不穷。使用每种Web
框架开发时,都会有一个默认的开发端口,比如:
- 3000端口:做过前端开发的都知道,Ruby on Rails,Express.js, Meteor, Create React App, NextJS, SvelteJS, Astro, Remix等等,都用它作为默认端口,看到它就能让你回忆起前端开发的日子。
- 4000端口:Phoenix框架(基于Elixir语言)和Jekyll框架的默认端口
- 8080端口:Apache Tomcat的默认端口,看到它就能想起
Java
- 8888端口:Jupyter的默认端口,它是一个交互式的开发环境,支持实时代码、数学方程、可视化和markdown
- 4200端口:AngularJS的默认端口,Google出品的知名的前端框架
- 4567端口:Sinatra的默认端口,
Ruby
的一个Web框架 - 5000端口:Flask的默认端口,
Python
的一个Web框架 - 8000端口:很多Web框架在开发时用的默认端口,比如
Django
- 9000端口:也是各种Web框架常用的默认端口
2. 数据库
稍具规模的应用基本都会用到数据库,各种流行的数据库服务都有一个默认的对外端口,随着这个数据库名气的提升,这个端口也逐渐成为这个数据库服务的代名词,比如:
- 3306端口:MySql的默认端口
- 4001端口:etcd的默认端口
- 5432端口:PostgreSql的默认端口,
PostgreSql
和MySql
算是最知名的2个开源数据库了 - 6379端口:Redis的默认端口
- 8983端口:Apache Solr的默认端口,开源的搜索服务器,基于
Java
语言开发 - 27017端口:MongoDB的默认端口
3. 其他
其他一些有趣的应用对应的默认端口如下,试试你能根据端口猜出几个应用来。
- 1080端口:SOCK Proxy的默认端口,用过某些代理的都知道
- 2049端口:
NFS
(Network File System)的端口,Linux
系统之间共享文件常用 - 2181端口:Apache ZooKeeper的默认端口
- 2375端口:Docker REST API(http)
- 2376端口:Docker REST API(https)
- 3478端口:NAT穿透的默认端口(STUN, TURN)
- 5222端口:XMPP的默认端口,这是一个可扩展的消息处理协议,基于XML格式
- 5349端口:STUN, TURN的TLS版本
- 5353端口:Multicast DNS的默认端口,DNS作为系统应用使用的是53端口
- 5900端口:VNC的默认端口,远程连接服务器的图形界面时会用到
- 6000端口:X11的默认端口,用于
Linux
上的图形显示系统 - 6660端口:IRC的默认端口,IRC是Internet Relay Chat,是一种网络聊天协议
- 6881端口:BT的默认端口,BitTorrent,一种点对点的网络协议
- 8333端口:比特币使用的默认端口
- 25565端口:知名游戏Minecraft的默认端口
- 51820端口:WireGuard的默认端口,一种轻量级的虚拟专用网(VPN)协议
4. 总结
本篇整理了自己平时接触到或至少是听说过的各类端口,限于自己的知识面,肯定是不完整的。
整理的目的主要是为了好玩,想看看那些知名的应用到底占用了哪些端口,如果说有一点点作用的话,那就是我们部署自己服务的时候,尽量避开这些端口,免得服务运行时造成不必要的端口冲突。