我们这里主要介绍网络端口(虚拟端口)。打开Windows的任务管理器可以看到很多进程正在同时运行,我们设想下有一条数据请求过来主机是如何判断这条请求是发送给哪个进程处理的呢,这里就要引入端口机制。操作系统会给有需求的进程分配协议端口,这个端口都是用正整数标识(如80,21,443)。当有请求过来时主机会根据数据包中的目的端口号将请求发送给对应端口的进程进行处理。
在不考虑细节的情况下我们可以把主机想象成呼叫中心,端口就是各种专线(如个人专线、企业专线、投诉专线等)。当你说出投诉时,呼叫中心就转到投诉专线;个人业务时就转到个人专线。
按照协议类型分类,端口可以分为TCP端口和UDP端口两类。(两者的区别有兴趣的可以百度)
按照端口号分类,可以分成固定端口(公认端口)、动态端口、私有端口。端口号的范围是:0-65535。
1、固定端口(公认端口):0-1023
是有IANA机构指派这些端口固定绑定一些服务,如TCP的21端口是FTP,TCP80端口是http,TCP25是邮件服务等。
2、动态端口:1024-49151
这些端口不是固定捆绑与某一服务,操作系统会将这些端口动态的分配给各个进程,同一个进程会出现前后两次分配到不同的端口。基于上述的原因,一些应用程序因为不想由操作系统分配随机的端口号,他们会指定使用一些固有端口号,久之大家也默认其端口为"固定端口"。例如SqlServer的1433端口,MYSQL的3306端口,远程桌面的3389端口等。
3、私有端口:49152-65535
这些端口号理论上是不分配给服务使用的,一般保留给客户端临时使用。例如本地电脑去访问服务端的HTTP服务,本地操作系统就会随机分配个端口用来与服务端通信,结束后就收回,下次在打开时会再随机分配一个新的端口。
三、常用的端口
21(FTP)、22(SSH)、25(SMTP)、80(http)、110(POP3)、1433(mssql)、3306(MYSQL)、3389(win远程)等。
四、扩展阅读
1、常用端口有些不是固定不可变动的。例如FTP、mysql有时会因为安全性的问题改用其它端口;
2、http://www.abc.com:88,通过看前缀http就能知道是web地址,不要误认为88是FTP端口;
3、在很多情况下常用端口是不用输入的。例如web使用80端口,浏览器地址栏是不用在域名后加:80,如果改用其它端口就需要;
4、有时候我们可以通过修改默认端口来实现服务器同时安装不同版本的软件,例如在一台服务器上安装5.0和5.6两个版本的mysql。