4. 网络层诊断基础
HSMS 连接建立在 TCP 之上,因此当设备“连不上”时,问题往往不在 SECS/GEM 消息本身,而在更底层的网络路径、端口状态或 TCP 连接行为。网络层诊断的目标不是盲目重启设备,而是用一组由浅入深的工具,把故障范围从“整条链路”逐步缩小到“某一跳、某个端口、某次握手或某个 RST 包”。本节按诊断顺序介绍 ping、telnet、netstat、tcpdump/Wireshark 的用法与判读逻辑。
一、先分清四类典型故障
HSMS 连接失败通常可归为四类:IP 不可达(路由、网段、VLAN 或物理链路问题)、端口未监听(对端 HSMS 服务未启动或绑定错误)、TCP 握手失败(SYN 无响应或被拒绝)、连接被异常中断(RST 或防火墙静默丢包)。这四类的现象和工具选择不同,先判断类型再动手,能避免无效排查。
二、ping:确认 IP 可达性
ping 使用 ICMP 协议,验证的是“IP 层是否可达”,不涉及 TCP 端口。基本用法:
ping -c 4 192.168.10.51
ping -c 4 -s 1472 192.168.10.51 # 测试 MTU 分片
ping -c 4 -I eth0 192.168.10.51 # 指定源接口
判读要点:能 ping 通说明 IP 路由和物理链路基本正常,问题更可能在端口或应用层;ping 不通需区分是“请求超时”还是“目标不可达”。超时可能是防火墙丢弃 ICMP、路由缺失或对端关机;目标不可达通常伴随路由表问题。注意:很多工厂网络为安全考虑禁 ping,因此 ping 不通不能直接判定 IP 不可达,必须结合后续工具。若怀疑 MTU 问题,可用 -s 逐步增大包长,观察是否出现分片失败。
三、telnet:验证端口监听与 TCP 握手
telnet 的价值在于它直接发起 TCP 连接,能验证“端口是否开放、握手是否成功”。HSMS 常用端口为 5000,示例:
telnet 192.168.10.51 5000
# 成功:显示 Connected to 192.168.10.51.
# 失败:Connection refused(RST 拒绝)
# 失败:Connection timed out(SYN 无响应,疑似防火墙丢包)
三种结果对应不同结论:Connected 表示 TCP 三次握手完成,端口在监听,问题应转向 HSMS 层(如 SessionID、DeviceID、Select 报文);Connection refused 表示对端主机可达但该端口无进程监听,通常是 HSMS 服务未启动或绑定到了错误网卡;Connection timed out 表示 SYN 发出后无任何回应,常见于防火墙静默丢弃或路由黑洞。Windows 上若 telnet 客户端未安装,可用 PowerShell 的 Test-NetConnection 192.168.10.51 -Port 5000 替代。
四、netstat:查看本机监听与连接状态
netstat 用于确认本机端口是否处于监听、连接处于哪个 TCP 状态。常用命令:
netstat -ano | findstr :5000 # Windows,查看 5000 端口
netstat -tlnp | grep 5000 # Linux,查看监听进程
ss -tnp state established '( sport = :5000 )' # 查看已建立连接
关键状态判读:LISTEN 表示服务已绑定端口,可接受连接;SYN_SENT 表示本机已发 SYN 但未收到 SYN-ACK,指向对端或中间网络;ESTABLISHED 表示连接已建立;TIME_WAIT 是正常关闭后的等待状态,大量出现说明连接频繁短连;CLOSE_WAIT 堆积则说明应用未正确关闭 socket,是 HSMS 实现常见的资源泄漏信号。若本机作为 Host 却看不到 5000 的 LISTEN,应先检查服务是否真正启动、是否绑定到 0.0.0.0 而非仅 127.0.0.1。
五、tcpdump/Wireshark:抓包定位握手与 RST
当 ping 和 telnet 无法给出足够信息时,抓包是最终手段。Linux 用 tcpdump,Windows 用 Wireshark。抓包命令示例:
tcpdump -i eth0 -nn host 192.168.10.51 and port 5000 -w hsms.pcap
tcpdump -i eth0 -nn 'tcp[tcpflags] & (tcp-syn|tcp-rst) != 0'
在 Wireshark 中打开 pcap 后,用过滤器 tcp.port == 5000 聚焦 HSMS 流量,重点观察三次握手:SYN → SYN-ACK → ACK。若只看到 SYN 反复重传而无 SYN-ACK,说明 SYN 被中间设备丢弃,典型为防火墙未放行;若收到 SYN 后立即返回 RST,说明对端端口未监听或主动拒绝;若握手完成后很快出现 RST,则可能是应用层异常、Keep-Alive 超时或中间设备会话老化。RST 的源 IP 和 TCP 序号能帮助判断是真实对端发出还是防火墙伪造。
六、组合诊断的推荐顺序
实际排障建议按“由外到内、由粗到细”的顺序:先用 ping 判断 IP 层是否可达;再用 telnet 或 Test-NetConnection 验证端口与握手;若握手异常,用 netstat 检查本机监听状态;最后用 tcpdump/Wireshark 抓包确认 SYN、SYN-ACK、RST 的真实走向。例如某次 HSMS 连接失败,ping 通、telnet 显示 Connection timed out,抓包只见 SYN 重传而无 SYN-ACK,即可判定为中间防火墙未放行 5000 端口,而非设备或 HSMS 配置问题。反之,若 telnet 显示 Connected 但 HSMS 仍无法 Select,则问题已不在网络层,应转向 SessionID、DeviceID 与报文格式排查。