端口到底是什么?(新手必看)
服务是给系统提供功能的,在系统中除了系统服务,还有网络服务。而每个网络服务都有自己的端口,一般端口号都是固定的。
那么,什么是端口呢?
我们知道,IP 地址是计算机在互联网上的地址编号,每台联网的计算机都必须有自己的 IP 地址,而且必须是唯一的,这样才能正常通信。也就是说,在互联网上是通过 IP 地址来确定不同计算机的位置的。
大家可以把 IP 地址想象成家庭的门牌号码,不管你住的是大杂院、公寓楼还是别墅,都有自己的门牌号码,而且门牌号码是唯一的。
如果知道了一台服务器的 IP 地址,我们就可以找到这台服务器。但是这台服务器上有可能搭建了多个网络服务,如 WWW 服务、FTP 服务、mail 服务,那么到底需要服务器为我们提供哪个网络服务呢?这时就要靠端口(Port)来区分了,
因为每个网络服务对应的端口都是固定的,例如,WWW 服务对应的端口是 80,FTP 服务对应的端口是 20 和 21,mail 服务对应的端口是 25 和 110(或 143)。也就是说,IP 地址可以想象成门牌号码,而端口可以想象成家庭成员,找到了 IP 地址只能找到你家,只有找到了端口,在寄信时才能找到真正的收件人。
为了统一整个互联网的端口和网络服务的对应关系,以便让所有的主机都能使用相同的机制来请求或提供服务,同一个服务应使用相同的端口,这就是协议。
计算机中的协议主要分为两大类:
这两种协议都支持 216 个端口,也就是 65535 个端口。这么多端口怎么记忆呢?系统给提供了服务与端口的对应文件 /etc/services,查看一下:
因此,除非能确认此服务不需要被普通用户访问,只给内部人员使用,否则不推荐修改服务的默认端口。
虽然判断服务器中开启的服务还有其他方法(如通过 ps 命令),但是通过端口来查看最为准确。
借助 nestat 和 ss 两个命令都可以查看本机网络状态,当然也可以看到本机已经启动的端口。此处不再详细介绍此命令,只查看命令的结果:
通过查询本机端口可以确定本机开启的服务,判断网络连接状态,进行网络故障诊断等,这是常用的网络命令。
那么,什么是端口呢?
我们知道,IP 地址是计算机在互联网上的地址编号,每台联网的计算机都必须有自己的 IP 地址,而且必须是唯一的,这样才能正常通信。也就是说,在互联网上是通过 IP 地址来确定不同计算机的位置的。
大家可以把 IP 地址想象成家庭的门牌号码,不管你住的是大杂院、公寓楼还是别墅,都有自己的门牌号码,而且门牌号码是唯一的。
如果知道了一台服务器的 IP 地址,我们就可以找到这台服务器。但是这台服务器上有可能搭建了多个网络服务,如 WWW 服务、FTP 服务、mail 服务,那么到底需要服务器为我们提供哪个网络服务呢?这时就要靠端口(Port)来区分了,
因为每个网络服务对应的端口都是固定的,例如,WWW 服务对应的端口是 80,FTP 服务对应的端口是 20 和 21,mail 服务对应的端口是 25 和 110(或 143)。也就是说,IP 地址可以想象成门牌号码,而端口可以想象成家庭成员,找到了 IP 地址只能找到你家,只有找到了端口,在寄信时才能找到真正的收件人。
为了统一整个互联网的端口和网络服务的对应关系,以便让所有的主机都能使用相同的机制来请求或提供服务,同一个服务应使用相同的端口,这就是协议。
计算机中的协议主要分为两大类:
- 一类是面向连接的可靠的 TCP 协议(Transmission Control Protocol,传输控制协议);
- 另一类是面向无连接的不可靠的 UDP 协议(User Datagram Protocol,用户数据报协议)。
这两种协议都支持 216 个端口,也就是 65535 个端口。这么多端口怎么记忆呢?系统给提供了服务与端口的对应文件 /etc/services,查看一下:
[root@localhost ~]# vi /etc/services ..省略部分输出.. ftp-data 20/tcp ftp-data 20/udp # 21 is registered to ftp, but also used by fsp ftp 21/tcp ftp 21/udp fsp fspd # FTP 服务的端口 ..省略部分输出... smtp 25/tcp mail smtp 25/udp mail # 邮件发送信件的端口 ..省略部分输出... http 80/tcp www www-http # WorldWideWeb HTTP http 80/udp www www-http # HyperText Transfer Protocol # WWW 服务的端口 ..省略部分输出... pop3 110/tcp pop-3 pop3 110/udp pop-3 # 邮箱接收信件的端口 ..省略部分输出...网络服务的默认端口能够修改吗?当然是可以的,不过一旦修改了端口,就只有修改了端口的管理员知道被改后的端口是什么,客户机无法得知,也就不能正确地获取服务了。
因此,除非能确认此服务不需要被普通用户访问,只给内部人员使用,否则不推荐修改服务的默认端口。
查询系统中已经启动的服务
既然每个网络服务对应的端口是固定的,那么是否可以通过查询服务器中开启的端口,来判断当前服务器开启了哪些服务呢?当然是可以的。虽然判断服务器中开启的服务还有其他方法(如通过 ps 命令),但是通过端口来查看最为准确。
借助 nestat 和 ss 两个命令都可以查看本机网络状态,当然也可以看到本机已经启动的端口。此处不再详细介绍此命令,只查看命令的结果:
[root@localhost ~]# netstat -tlunp # 列出系统中所有已经启动的服务(已经监听的端口),但不包含已经连接的网络服务 Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 724/sshd: /usr/sbin tcp6 0 0 :::22 :::* LISTEN 724/sshd: /usr/sbin udp 0 0 127.0.0.1:323 0.0.0.0:* 652/chronyd udp6 0 0 ::1:323 :::* 652/chronyd由于我们安装的 Linux 系统版本相对简洁,所以本机默认只开启了 22(SSH 远程连接服务)和 323(chrony 时间同步服务)两个端口。
通过查询本机端口可以确定本机开启的服务,判断网络连接状态,进行网络故障诊断等,这是常用的网络命令。