我试图创建一个从嵌入式控制器到Windows Vista服务器的TCP连接。我正在编写Windows服务器应用程序的一部分。Windows TCP握手问题
当控制器尝试连接时,可能需要很多次尝试来建立连接。我已经使用Wireshark来调试该问题,并且看起来Windows TCP堆栈没有遵循正确的握手协议。
Wireshark的转储:
"No","Time","Source","Destination","Protocol","Info"
Try1:
"39","9.025322","10.0.0.252","10.0.0.92","TCP","49153 > xinuexpansion4 [SYN] Seq=0 Win=127 Len=0"
"40","9.025377","10.0.0.92","10.0.0.252","TCP","xinuexpansion4 > 49153 [ACK] Seq=1 Ack=1 Win=2048 Len=0"
"47","10.031750","10.0.0.252","10.0.0.92","TCP","49153 > xinuexpansion4 [RST] Seq=0 Win=127 Len=0"
尝试2:
"55","12.193941","10.0.0.252","10.0.0.92","TCP","49154 > xinuexpansion4 [SYN] Seq=0 Win=127 Len=0"
"56","12.194045","10.0.0.92","10.0.0.252","TCP","xinuexpansion4 > 49154 [ACK] Seq=1 Ack=1 Win=2048 Len=0"
"57","13.200431","10.0.0.252","10.0.0.92","TCP","49154 > xinuexpansion4 [RST] Seq=0 Win=127 Len=0"
尝试3:
"67","18.529871","10.0.0.252","10.0.0.92","TCP","49156 > xinuexpansion4 [SYN] Seq=0 Win=127 Len=0"
"68","18.529957","10.0.0.92","10.0.0.252","TCP","xinuexpansion4 > 49156 [SYN, ACK] Seq=0 Ack=1 Win=8192 Len=0 MSS=1460"
"69","18.536318","10.0.0.252","10.0.0.92","TCP","49156 > xinuexpansion4 [ACK] Seq=1 Ack=1 Win=127 Len=0"
10.0.0.252是控制器启动连接,10.0.0.92是Windows PC。
据我所知,正确的序列是SYN,SYN + ACK,SYN。我大部分时间得到的是SYN,ACK,RST(即Windows用ACK而不是SYN + ACK来响应)。在上面的转储中显示3次连接尝试,第3次连接尝试。
有什么我可以做'修复'Windows以便它正确响应?
编辑 - 2分组捕获
- shows the embedded controller taking 4 attempts to connect.
- shows the windows client connecting and disconnecting twice without problem.
安迪,我认为你在那里。我已经将我的服务器代码更改为在关闭“丢失”的套接字连接时更积极。现在,客户端第一次或第二次连接。它看起来像Vista缓存连接,并假定客户想重置消息编号。我正在开发客户端软件,因此经常重启嵌入式控制器,因此重置了消息编号。非常感谢您的帮助。保罗 – 2010-11-02 09:35:29