记一次数据发送问题排查过程

由于采用UDP传输协议,不能如TCP在确保连接建立的情况下就能保障数据的传输,因此对从服务器A到B的数据传输过程进行逐段排查。

###使用netstat检查程序端口

$ sudo netstat -aunp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
udp        0      0 0.0.0.0:68              0.0.0.0:*                           712/dhclient        
udp        0      0 0.0.0.0:57461           0.0.0.0:*                           712/dhclient   

netstat 能够查看本机的所有网络端口连接情况,使用-p选项能够将端口与进程pid关联起来。 其他一些有用的选项包括:

  • -n 不对端口号进行解析,例如80被解析为http,443被解析为https
  • -a 查看所有端口,否则只显示已连接的端口,例如处于listen状态的端口就不显示了。
  • -t 查看TCP协议的端口。
  • -u 查看UDP协议的端口。
  • -p 查看端口对应的进程信息。

因此在当前问题中,使用netstat -aunp命令来查看所有打开的UDP端口,并检查是否有我们所期望的进程打开了UDP端口。注意,由于UDP socket可以使用sendto来指定发送的目的地址,因此在netstat中不一定能否看到UDP连接的远端地址及端口。

###使用nc检查网络间的联通性

有关 netcat 命令的使用说明请参见:Linux Netcat 命令——网络工具中的瑞士军刀

在此例中主要使用-l-u选项来启动UDP服务端及客户端来确认跨网的UDP通信是否正常。

在服务端运行:

$ nc -ul 60032

在客户端运行:

$ nc -nu 220.181.57.217 60032

再在两端输入字符,看是否能够发送至对端判断是否跨网段UDP通信正常。

###使用tcpdump查看端口数据包接收情况

在排除了程序端口异常及数据跨网段发送异常之后,尝试在服务端的接收端口上抓包,看是否接收到指定IP及端口发送的数据包。

使用命令:

$ tcpdump -nn -v -i eno33554984 'udp port [serverport] and src port [srcport] and src host [src ip address]'

抓取到特定客户程序发送的数据包,还可以使用-w选项将抓取到得数据包存储在文件中,转存后使用wireshark等工具进行分析。

###总结

此次传输问题的排查过程算是一个小白的Linux网络工具的学习过程,记录下来以备后续回顾。很可惜的是,在第三步排查过程中,依然可以使用tcpdump抓取到相应的数据包,证明服务端的程序端口收到了(当前服务器使用iptables进行包过滤的概率较小)特定客户端发送的数据。未能呈现相应数据很大概率可能是其他配置问题。有待进一步排查。

转载于:https://my.oschina.net/ureyishere/blog/843172

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值