我的个人博客:www.moonkite.cn
大家好,我是风筝
每台计算机上都有 0~65535 共 65536 个端口,我们耳熟能详的web服务的80端和443端口,FTP 的21端口、SSH的22端口,还有MySQL 的默认的3306、Redis 默认的6379端口等等。
计算机的三类端口
计算机中分三大类端口,公认端口、常用端口和动态端口。
公认端口
从 0 到 1023 ,这1024个端口是由 IANA 这个机构统一分配的,IP地址、域名也是这个机构统一管理的。
现在这一区间的端口已经被分配完了,所以能分到这个区间端口的应用,除了命好外,还有就是生的早。
这一区间的端口不能随便被占用,比如说你在一台服务器上启动一个 Spring Boot 服务,能不能分配到22端口呢,按道理也是可以的。但是必须保证当前没有SSH服务在跑着,且启动Spring Boot 服务的比如是 root 账号。当你的服务把22端口占了,那正常的SSH服务就用不了了,你这台机器就没办法远程登录了。
如果你用过云服务器的话,在安全组设置里面,都会给 SSH、FTP、80、443这些专门列一个组出来,开启SSH服务,就默认是在防火墙中开启了 22 端口。但是,如果你想开放个19999这样的端口,就得自己设置了。
常用端口
1024 到 49151,这个区间内的端口任意一个应用程序都可以用。比如MySQL 默认是 3306,Redis 默认是6379,这一区间的端口哪个服务都可以随便用。
比如我做了一个服务也想用 6379端口可以不,当然可以,就看我的服务和 Redis 服务哪个先启动了,谁抢到是谁的,后面启动的那个只能改端口了。
动态端口
它们通常由操作系统动态分配给客户端应用程序,用于短期或临时通信。例如,当你打开一个浏览器访问网站时,操作系统会从这个端口范围内选择一个可用的端口来建立连接。
但其实和常用端口效果差不多。
SSH 如何抢到22端口的
SSH应用的作者 Tatu Ylonen 曾经讲述了他在 1995年获取这个端口的过程。
以下是 Tatu Ylonen 在1995年7月10日发给 IANA 组织的一封请求端口号的邮件。
“1995年7月10日 11:45:48 发件人: Tatu Ylonen 收件人: Internet Assigned Numbers Authority 主题: 请求分配端口号
尊敬的先生,我编写了一款程序,用于在不安全的网络上安全地从一台机器登录到另一台机器。与现有的telnet和rlogin协议及实现相比,它在安全性和功能上有了显著的提升。特别是,它可以防止IP、DNS和路由欺骗。我的计划是将这款软件免费发布在互联网上,以便尽可能广泛地使用。我希望为这款软件获得一个注册的特权端口号。
这个端口号最好在1-255的范围内,以便可以在名称服务器的WKS字段中使用。下方我会附上协议的RFC草案。这款软件在本地已经使用了几个月,除了端口号之外,已经准备好发布。如果端口号分配能及时安排,我希望本周就能发布这款软件。我目前在测试版本中使用的端口号是22。
如果这个号码可以使用,那将是很好的(目前在列表中显示为未分配)。这款软件的服务名称是"ssh"。
”
第二天,他就收到了来自Joyce的电子邮件,Joyce 是当时 IANA 负责分配端口的大佬,同时也是IP (RFC 791)、ICMP (RFC 792) 和 TCP (RFC 793) 等次要协议标准的编辑。
“日期: 1995年7月10日 15:35:33 发件人: jkrevy@ISI.EDU 收件人: ylo@cs.hut.fi 主题: Re: 请求分配端口号 抄送: iana@ISI.EDU Tatu,我们已经将端口号22分配给ssh,您是联系点。Joyce
我们成功了!SSH的端口号是22!!!
”
应该是两地有时差,实际上是不到24小时就收到了回复,22端口就这样和 SSH 协议紧紧的绑在一起了。
看看这效率,比我在公司提个OA流程快得多。比这更快的,恐怕只有 PDD 的「退款不退货」了。
端口本来都是一样的,只是因为不同的应用赋予了端口不同的意义,有些端口因与其绑定的应用很伟大而令人心生好感,有些端口呢,因为使用绑定它们的服务给我们挖过坑而印象深刻。
我印象很深的一个端口是 Nacos 的 9849 端口, Nacos 默认主端口是 8848 ,而客户端RPC 请求服务端口是在主端口的基础上+1000,也就是9848端口。刚开始用 Nacos 的时候就在这上面踩过坑,明明8848已经开了,为什么还是不行,后来才发现9849这个问题。当然了,这也怪不得别人,只能怪自己没有提前好好读官方文档。
还可以看看风筝往期文章
用这个方法,免费、无限期使用 SSL(HTTPS)证书,从此实现证书自由了
古时的风筝,一个程序员,一个写作者。