Я пытаюсь создать TCP-соединение от встроенного контроллера к серверу Windows Vista. Я пишу серверную часть Windows приложения.
Когда контроллер пытается установить соединение, может потребоваться много попыток установить соединение. Я использовал Wireshark для отладки проблемы, и кажется, что стек Windows TCP не соответствует правильному протоколу квитирования.
Свалка проволочной акулы:
"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.
Насколько я понимаю, правильная последовательность: SYN, SYN + ACK, SYN. В большинстве случаев я получаю SYN, ACK, RST (то есть Windows отвечает ACK, а не SYN + ACK). В приведенном выше дампе показано 3 попытки подключения, третья работает.
Могу ли я что-нибудь сделать, чтобы «исправить» Windows, чтобы она правильно реагировала?
РЕДАКТИРОВАТЬ -
2 захвата пакета