问题描述
有一个SMB的代理程序,大多数情况下能正常运行,但是,有时候会出现传输速度降为0的情况(持续一分钟左右,恢复正常)
排查是代理程序中socket的send()函数执行成功,但是抓包发现没有发出数据包。
说明: 这个现象不是经常出现,我传了1000左右文件出现一两次。
问题出现的环境背景及自己尝试过哪些方法
语言:C
环境:Debian 8.8
使用抓包软件抓客户端,代理,服务器的协议包。
1.1、客户端发送Request后没有收到Response,但是从SMB服务端的抓包看,服务端发送了Response的。
1.2、然后我在代理程序中套接字发送数据部分加了打印。send(),显示已经成功运行了。可是代理程序的抓包中没有抓到Response信息。
也就是说代理收到了Request后也转发了Response。
结论: 出现速度为0的原因应该是smb客户端收不到Response导致超时,重新和smb端连接。而恢复了连接。
2、在速度变为0时,执行了netstat -tnap 并没有发现发送队列里没有未发送出去的数据。
你期待的结果是什么?实际看到的错误信息又是什么?
请教这个问题到这该从哪里下手。。。。
完整代码不方便贴出来,贴出了简化的部分代码。省掉了日志,smb协议处理的配置。
程序是使用的TCP传输。
1.
我发现如果把smb内容处理函数注释掉,只是透传的话是完全正常的。
但是deal_with_smb()这个函数只是处理了收发字符串。
2.
再次复现问题,抓包。这次抓所有tcp包。看是不是有处理错误的协议,导致客户端解释不了丢掉了。结果代理这边并没有发出异常的tcp包。
有思路么,有思路么,有思路么,
谁能提供个查错的思路,感谢