❤关注我一起讨论和学习Linux系统
在计算机网络中,端口号扮演着至关重要的角色。尤其在传输层,端口号成为了区分不同应用程序或服务的唯一标识。通过端口号,操作系统能够准确地将数据流分配给相应的进程或服务。这种机制保证了网络数据的准确传输和高效处理。
端口号(Port)标识了一个主机上进行通信的不同的应用程序;
在TCP/IP协议中, 用 "源IP", "源端口号", "目的IP", "目的端口号", "协议号" 这样一个五元组来标识一个通信(可以通过netstat -n查看);
端口号的范围被划分为几个不同的区间,每个区间都有其特定的用途和权限要求。通常,0到1023的端口号被称为知名端口号或系统端口号,这些端口号被预留给一些特定的服务使用,如HTTP、FTP等。而1024到49151的端口号被称为注册端口号,这些端口号可以由用户自行定义,但需要确保不与已有的服务冲突。49152到65535的端口号则被称为动态端口号或私有端口号,这些端口号通常用于临时性的通信需求。
有些服务器是非常常用的, 为了使用方便, 人们约定一些常用的服务器, 都是用以下这些固定的端口号:
- ssh服务器, 使用22端口
- ftp服务器, 使用21端口
- telnet服务器, 使用23端口
- http服务器, 使用80端口
- https服务器, 使用443
执行下面的命令, 可以看到知名端口号
cat /etc/services
我们自己写一个程序使用端口号时, 要避开这些知名端口号.
1.一个进程是否可以bind多个端口号?
答案是肯定的。一个进程可以绑定多个端口号,以提供不同的服务或处理不同的通信需求。例如,一个Web服务器进程可能同时监听80端口(用于HTTP服务)和443端口(用于HTTPS服务)。
2.一个端口号是否可以被多个进程bind?
通常情况下,一个端口号在同一时刻只能被一个进程绑定。这是为了确保数据传输的准确性和一致性。如果有多个进程试图绑定同一个端口号,操作系统通常会抛出错误或拒绝绑定请求。然而,在某些特殊情况下,如使用了端口共享技术或某些特定的网络编程模式,可能会实现多个进程共享同一个端口号的情况。但这种情况相对较少见,且需要谨慎处理以避免潜在的问题。
在Linux系统中,
netstat
和pidof
是两个非常实用的命令,分别用于查看网络状态和查找进程的进程号。以下是这两个命令的基本用法和一些示例。
netstat
命令用于显示网络连接、路由表、接口统计等网络相关信息。其基本语法为:
netstat [选项]
下面是一些常用的选项:
-a
:显示所有连接和监听端口。-t
:显示TCP连接。-u
:显示UDP连接。-n
:以数字形式显示IP地址和端口号,而不是主机名和服务名。-p
:显示每个连接的进程ID和进程名称。-l
:显示监听状态的连接。-r
:显示路由表。-s
:显示网络接口统计信息。
显示所有连接和监听端口:
netstat -a
显示TCP连接:
netstat -t
显示UDP连接:
netstat -u
显示与连接相关的进程:
netstat -p
以数字形式显示IP地址和端口号:
netstat -n
你可以根据需要组合这些选项,以便查看所需的信息。例如,如果你想查看所有TCP连接以及与之相关的进程,你可以使用:
netstat -tp
pidof
命令用于查找指定名称的进程的进程号(PID)。其基本语法为:
pidof [选项] 进程名称
下面是一些常用的选项:
-s
:仅返回一个进程号。-c
:仅显示具有相同“root”目录的进程。-x
:显示由脚本开启的进程。-o
:指定不显示的进程ID。
查找名为“gedit”的进程的PID:
pidof gedit
仅返回名为“firefox”的一个进程号(如果有多个):
pidof -s firefox
请注意,
pidof
命令只返回与指定进程名称匹配的PID,如果有多个进程具有相同的名称,它会返回所有这些进程的PID(除非使用了-s
选项)。