我仍然是套接字编程的初学者,我遇到过几个基于TCP/UDP协议的代码,其中使用了不同的端口号,但它们看起来都很随机,而且,我已经在虚拟机上设置了客户端和服务器,每个代码都运行良好。
使用的端口号为8080、22000、45434等。
我对8080端口有一个有意义的解释,但其他端口都是随机的,我似乎在谷歌上找不到它们的用途。
它们本质上是随机的,没有内在的意义。TCP协议并不关心您使用的端口。
有几个约定:
- 有效的端口号介于1到65535之间
- 端口49152-65535由操作系统在进行传出连接时(随机(选择,而不是自己选择端口。连接的两端都有一个端口号,但通常我们只关心服务器的端口号,客户端操作系统会随机选择一个
- 在类似Linux的操作系统上,只有管理员用户("
root
"(可以绑定到端口1-1023。Windows没有这样的限制
大多数类型的服务器都具有";默认";客户端默认使用的端口。HTTP是80,HTTPS是443,SMTP是25,Minecraft是25565,Counter Strike是27015。您通常可以使用不同的端口,但必须告知客户端端口是什么。如果您想转到端口443上的堆栈溢出,可以键入https://stackoverflow.com/但如果您想要端口444,您必须键入https://stackoverflow.com:444/-当然,它不起作用,因为它们确实使用了443端口。
像HTTP这样的重要互联网服务是在互联网号码分配机构注册的。像游戏这样的非重要服务通常只是在1024到49151之间随机挑选。如果你想在同一台服务器上运行两个游戏,而它们都使用同一个端口,你必须更改其中一个,但这种情况并不常见。人们往往想要令人难忘的,所以如果你想运行两个网络服务器,那么8080、8000和81是很受欢迎的。1234和12345是玩具程序的热门选择。这没什么区别。
端口1025及以上基本上是开放的,可供任何用户空间程序使用,但这里有一些约定。在POSIX类型的系统上,通常会有类似/etc/services
的东西,它概述了任何给定端口号的意图。
将自己的端口分配给正在创建的服务时,可以根据自己的意愿进行选择,但最佳做法是避免使用已知的服务,以防止出现任何混淆。
端口1-1024通常被限制为具有特定访问权限的进程,这里的目的是防止普通用户伪造SSH或HTTP服务器。虽然您可以选择较低的端口号,但请记住,这可能会给希望使用您的程序的用户带来不便。