端口的理解

1、端口是什么

端口是面向连接服务(TCP)和无连接服务(UDP)的通信协议端口,是一种抽象的软件结构;端口是计算机软件层面与外界通讯交流的出入口。

2、端口的分类

从端口的性质来分,可以分为以下三类: 
1)公认端口(Well Known Ports):这类端口也常称之为”常用端口”。这类端口的端口号从0到1023,它们紧密绑定于一些特定的服务。通常这些端口的通信明确表明了某种服务的协议,这种端口不可再重新定义它的作用对象。例如:80端口实际上总是HTTP通信所使用的,而23号端口则是Telnet服务专用的。这些端口通常不会被像木马这样的黑客程序利用。 
2)注册端口(Registered Ports):端口号从1024到49151。它们松散地绑定于一些服务。也是说有许多服务绑定于这些端口,这些端口同样用于许多其他目的。这些端口多数没有明确的定义服务对象,不同程序可根据实际需要自己定义。 
3)动态和/或私有端口(Dynamic and/or Private Ports):端口号从49152到65535。理论上,不应把常用服务分配在这些端口上。实际上,有些较为特殊的程序,特别是一些木马程序就非常喜欢用这些端口,因为这些端口常常不被引起注意,容易隐蔽。 
从提供的服务方式来分,端口可分为面向连接和无连接,即TCP/UDP,面向连接和无连接服务就类似于打电话和写信,打电话需要连接而写信只需要你把信件投递出去就可以不管了。

3、端口的作用/理解

一台机器上面有很多服务,一个请求端会建立很多请求连接,那怎么区分这些服务和连接呢,所以出现了端口,相对于服务端,端口是用来区分不同服务,每个服务对应一个不同的端口;相对于客户端,端口是用来区分哪个连接,服务端知道回传数据给谁。端口信息会携带在TCP/UDP协议的报文信息中,包括目标IP、目标端口、本地IP、本地端口,所以服务端/客户端之间需要通信,服务端必须有一个对应的开放端口。只有处于listen状态的端口才能接受新的链接请求,当有新的请求到达并且被接受,系统会创建一个处于ESTABLISHED状态的链接。

举个栗子: 
使用以下命令查看当前的连接: 
netstat -a -n -f inet 
我们以结果集中存在的一个端口5900来分析: 
没有连接的时候,结果如下: 
tcp4 0 0 *.5900 *.* LISTEN 
通过telnet 127.0.0.1 5900建立一个连接,结果集变成如下:

tcp4       0      0  127.0.0.1.5900         127.0.0.1.52277        ESTABLISHED
tcp4       0      0  127.0.0.1.52277        127.0.0.1.5900         ESTABLISHED
tcp4       0      0  *.5900                 *.*                    LISTEN   
  • 1
  • 2
  • 3

当再通过telnet 127.0.0.1 5900建立一个连接,结果集变成如下:

tcp4       0      0  127.0.0.1.5900         127.0.0.1.52318        ESTABLISHED
tcp4       0      0  127.0.0.1.52318        127.0.0.1.5900         ESTABLISHED
tcp4       0      0  127.0.0.1.5900         127.0.0.1.52277        ESTABLISHED
tcp4       0      0  127.0.0.1.52277        127.0.0.1.5900         ESTABLISHED
tcp4       0      0  *.5900                 *.*                    LISTEN 
  • 1
  • 2
  • 3
  • 4
  • 5

可以看见服务端端口一直不变,请求端会分配不同的端口号

4、端口常用指令

netstat查看端口使用情况 
常用参数作用: 
n表示不查询dns 
t表示tcp协议 
u表示udp协议 
p表示查询占用的程序 
l表示查询正在监听的程序

查看端口使用情况:

netstat –apn
  • 1

查看进程使用端口:

netstat –apn | grep PID/进程名称
  • 1

查看端口被哪个进程使用

netstat -apn | grep 端口号
lsof -i:端口号
  • 1
  • 2

参考文章:

http://whx4j8.github.io/2016/03/16/tcp%E9%93%BE%E6%8E%A5%E7%AB%AF%E5%8F%A3%E7%9A%84%E7%90%86%E8%A7%A3/ 
http://baike.baidu.com/link?url=jGDV2RyO0U_KoFIKI_dSwrf4qPnhRmwaeC9kFJsvciMcY1S0WbxnI3viJ_88dc463nUa_V829B0ktdUKvkbtfq#2

原文地址:https://www.cnblogs.com/namehou/p/8468634.html