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