如何判断tcp连接是哪一方问题导致断开?

ysu108 2014-06-21 04:29:17
与其他厂家对接,tcp连接异常断开,但是不知道是哪方的问题。问题是如何确定是哪方原因造成主动断开的呢?
1)在windows用netstat查看连接信息,如果A机器上状态是ESTABLISH而B机器显示没有连接信息,是不是可以确定是B机器上的问题呢?
2)连接应该是异常断开,用wireshark抓包,只有A机器到B机器的FIN,但是后来发现是B方的问题。抓包数据没保存,突然想起来的。用的是window下的完成端口。

场景有点模糊了~~
...全文
820 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-06-26
  • 打赏
  • 举报
回复
引用 7 楼 SKATE11 的回复:
不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊!
http://bbs.csdn.net/topics/380167545
赵4老师 2014-06-26
  • 打赏
  • 举报
回复
引用 4 楼 my3439955 的回复:
需要抓包分析 比如a向b发数据,b收到数据解析,认为不合法,于是断开连接。那么是谁的问题? b虽然主动断开了,但是a先发了错误的数据,不好定论。 因此,抓包,看谁先断开的(FIN或RST),然后从包的内容看为什么断开。
支持!
mujiok2003 2014-06-26
  • 打赏
  • 举报
回复
引用 8 楼 ysu108 的回复:
[quote=引用 5 楼 mujiok2003 的回复:] A,B之间有没有路由器?
有路由,但问题最终不是路由器的原因,是代码问题,后来改好了。 我问题的就是想通过抓包来判断是哪方先断开连接,不知道是否通过wireshark两方抓包所有情况都可以判断出来呢? [/quote] 一般情况下, 可以分析出来, 看谁先发的fin/rst
mujiok2003 2014-06-26
  • 打赏
  • 举报
回复
引用 8 楼 ysu108 的回复:
[quote=引用 5 楼 mujiok2003 的回复:] A,B之间有没有路由器?
有路由,但问题最终不是路由器的原因,是代码问题,后来改好了。 我问题的就是想通过抓包来判断是哪方先断开连接,不知道是否通过wireshark两方抓包所有情况都可以判断出来呢? [/quote] 很难准确, 因为有可能是同时主动断开的,但是两个主机的时间没有同步。
oiooooio 2014-06-26
  • 打赏
  • 举报
回复
不是有WSAGETLASSTERROR这个函数么, 不能用这个函数获取错误代码?
ysu108 2014-06-25
  • 打赏
  • 举报
回复
引用 5 楼 mujiok2003 的回复:
A,B之间有没有路由器?
有路由,但问题最终不是路由器的原因,是代码问题,后来改好了。 我问题的就是想通过抓包来判断是哪方先断开连接,不知道是否通过wireshark两方抓包所有情况都可以判断出来呢?
SKATE11 2014-06-25
  • 打赏
  • 举报
回复
不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊!
碼上道 2014-06-25
  • 打赏
  • 举报
回复
引用 3 楼 ysu108 的回复:
[quote=引用 1 楼 jerry_dqh 的回复:] 1)不能确认,有可能B机器发送了fin报文,但是A机器没有收到,过一段时间,B机器就将连接重置了,网络不好的情况下可能出现这种现象。 2) 第二个我有些不太明白。
谢谢回答,如果是B机器将连接重置,那么是不是B发rst复位报文呢,如果这样的话用wireshark抓包可以抓到么?[/quote] 最好两端均能抓包分析,B发rst可以复位。
mujiok2003 2014-06-25
  • 打赏
  • 举报
回复
A,B之间有没有路由器?
  • 打赏
  • 举报
回复
需要抓包分析 比如a向b发数据,b收到数据解析,认为不合法,于是断开连接。那么是谁的问题? b虽然主动断开了,但是a先发了错误的数据,不好定论。 因此,抓包,看谁先断开的(FIN或RST),然后从包的内容看为什么断开。
ysu108 2014-06-25
  • 打赏
  • 举报
回复
引用 1 楼 jerry_dqh 的回复:
1)不能确认,有可能B机器发送了fin报文,但是A机器没有收到,过一段时间,B机器就将连接重置了,网络不好的情况下可能出现这种现象。 2) 第二个我有些不太明白。
谢谢回答,如果是B机器将连接重置,那么是不是B发rst复位报文呢,如果这样的话用wireshark抓包可以抓到么?
碼上道 2014-06-21
  • 打赏
  • 举报
回复
第二个问题没有讲清楚 ,如果A发出了fin,还处理establish状态,就不对了
碼上道 2014-06-21
  • 打赏
  • 举报
回复
1)不能确认,有可能B机器发送了fin报文,但是A机器没有收到,过一段时间,B机器就将连接重置了,网络不好的情况下可能出现这种现象。 2) 第二个我有些不太明白。

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧