Linux系统中如何验证网络端口通不通
我们在 linux 系统网络调试中经常会遇到需要测试验证对应的端口是否正常的场景, 接下来讲解一下常用的方法。
1.telnet命令详解,具体的用法
telnet serverIP port
注意事项是 serverIP 和 port 之间需要用空格分开
具体的操作:
端口不通的时候:
端口通的时候
2.nc 命令
具体用法
nc -v serverIP port
-v 即为将命令执行信息详细输出
端口不通的时候:
[root@VM-4-14-centos ~]# nc -v 150.158.28.239 20 Ncat: Version 7.50 ( https://nmap.org/ncat ) Ncat: Connection timed out.
端口通的时候
[root@VM-4-14-centos ~]# nc -v 150.158.28.239 2093 Ncat: Version 7.50 ( https://nmap.org/ncat ) Ncat: Connected to 150.158.28.239:2093.
命令很强大但是有可能受环境限制。大家看到上面针对 telnet 或者 nc 命令都是在虚拟机上执行的,但是有的时候,排查问题的时候是在开发板上进行的, 正因为在开发板上, 所以我们移植的 busybox 版本有所不同, 因此 telnet 和 nc 支持的命令参数有可能不全或者执行对应的命令之后没有相关的信息可供参考。虽然 telnet 和 nc 功能简配, 但是最基础的功能还是有的, 我们此时可以再结合 netstat 来实现我们的端口测试。
端口不通的时候
telnet 和 nc 都有对应的提示信息, 有这样的提醒我们感到很欣慰,因为这个信息能直观的看到端口是不通的。
端口正常的时候
通过上图可以看出, 执行完命令之后处于阻塞状态, 但是我们此时不能下结论说这个端口没问题,我们需要用真实的证据来证明, 此时就用到了netstat -atpn 命令
注意看红框和黄色箭头的标注, 我们需要在 Foreign Address 和 PID/Program name 找到我们测试的 IP、端口 和对应的进程名称, 然后查看 State 状态是否是 ESTABLISHED状态,如果是ESTABLISHED 表明端口正常,如果不是该状态表示端口不通
简单介绍一下 netstat 命令
该命令是是一个监控 TCP/IP 网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息
netstat 命令参数介绍
- -a: 显示所有连接的 Socket
- -t: 展示 TCP 连接相关的信息
- -p: 就是显示指定协议的信息
- -n: 直接使用 IP, 不经过域名服务器 (优点: 程序响应快, 缺点: 只能看到 IP, 看不到域名信息)
netstat 状态介绍
简单介绍一下 state 几种常见的状态 ,描述的时候 TCP 在各个时期的状态
服务器的监听状态:
- LISTENING: 监听来自客户端的 TCP 的连接请求, 只有 TCP 服务器的时候才会有这样的状态
TCP 连接时候的三次握手状态时候的状态
- 1.SYN-SENT: 发送连接请求后等待匹配的连接请求,客户端发送连接请求
- 2.SYN-RECEIVED: 再收到和发送一个连接请求后等待对方对连接请求的确认,对方发送回来的确认连接信息
TCP 连接成功的状态
- ESTABLISHED: 一个完整的 TCP 连接建立成功
TCP 断开连接四次挥手时候的状态
- 1.FIN-WAIT-1: 等待 TCP 连接中断请求
- 2.FIN-WAIT-2:TCP 等待连接中断请求信息
- 3.CLOSE-WAIT: 等待从本地用户发来的连接中断请求信息
- 4.CLOSING: 等待 TCP 对连接中断的确认信息
- 5.LAST-ACK: 等待原来的发向 TCP 的连接中断请求的确认信息
- 6.TIME-WAIT: 等待一段时间用来确保 TCP 接收到连接中断请求的确认信息
- 7.CLOSED: 没有任何连接状态