目录
4、一个进程是否可以有多个端口号?一个端口号是否可以被多个进程占用?
假设我们使用QQ给对方发送一条消息,为了传到对方的电脑上,我们需要知道对方电脑的IP地址。传到对方电脑上以后,QQ凭什么认为这条消息是发给自己的,而不是发给微信的呢?答案是因为有端口号。
端口号可以唯一地标识一台主机上的应用程序,从而实现消息的精准送达。站在传输层的角度,收到的数据包在解包以后,需要向上交付给应用层,要交付给应用层的哪一个应用程序,就需要目的端口号。
我们平时在模拟实现TCP/UDP的时候,使用的端口号只能限制在一定的范围内,这是因为一些端口号已经被一些常见协议占用了。
这个范围的端口号我们称为知名端口号。如HTTP、FTP、SSH等常见协议的端口号都是固定的。
OS给客户端程序分配的端口号,都是从这个范围里分配的,这个范围分配的端口号,没有固定之说。我们在模拟TCP/UDP的时候,程序提示端口号被占用了,就是因为这个范围的端口号没有固定分配给哪个应用程序的。
端口号要唯一的标识一台主机上的应用程序,所以一个端口号不可以被多个进程使用。但是一个进程可以拥有多个端口号,因为只要通过端口号可以找到对应的应用程序就行。
我们如果需要查看某个服务绑定的端口号所处的状态,,这个时候我们就可以使用netstat指令,netstat指令是查看网络状态的重要工具。
- n 拒绝显示别名,能显示数字的全部显示数字
- l 仅列出监听状态的服务
- p 显示建立相关连接的程序名
- t 仅显示tcp相关选项
- u 仅显示udp相关选项
- a 显示所有的选项,默认不显示listen状态相关的
n 可以理解为number。因为在标明远程服务器的时候,为了便于记忆和认知,一般不会显示具体的IP,如果需要显示具体的IP就会用到该选项。
l 可以理解为 listen。最后一列的stat 表明当前服务的状态,是 已经建立连接(established)还是监听中(listen)
p 可以理解为 process或者 program。使用以后,就会显示当前服务所属进程的 PID
t 代表 tcp,u代表udp。表明当前服务所使用的协议。