Embedded 世卫组织';是什么弄乱了TCP连接?
我负责一些嵌入式软件,这些软件必须与客户的专有TCP接口(也是嵌入式的,但运行在一个众所周知和公认的RTOS下)一起工作,但它不能通过三方握手,即使HTTP接口等都可以正常工作,我可以使用自定义协议与PC上运行的程序进行通信 查看WireShark捕获的内容,他的一方通过发送SYN来启动,我发送SYN-ACK,然后他立即发送RST,所以看起来问题就在他这边。我的分析正确吗 下面是一个典型的三包问题示例,MAC ID是匿名的(真正的MAC ID是有效的)。很抱歉粘贴原始十六进制,如果有人对如何捕捉线鲨有更好的想法,我当然愿意接受Embedded 世卫组织';是什么弄乱了TCP连接?,embedded,tcp,Embedded,Tcp,我负责一些嵌入式软件,这些软件必须与客户的专有TCP接口(也是嵌入式的,但运行在一个众所周知和公认的RTOS下)一起工作,但它不能通过三方握手,即使HTTP接口等都可以正常工作,我可以使用自定义协议与PC上运行的程序进行通信 查看WireShark捕获的内容,他的一方通过发送SYN来启动,我发送SYN-ACK,然后他立即发送RST,所以看起来问题就在他这边。我的分析正确吗 下面是一个典型的三包问题示例,MAC ID是匿名的(真正的MAC ID是有效的)。很抱歉粘贴原始十六进制,如果有人对如何捕捉
63 2009-06-29 13:07:49.685057 10.13.91.2 10.13.92.3 TCP 1024 > 49151 [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=0 TSV=194 TSER=0
0000 f1 f1 f1 00 03 09 ab ab ab 60 10 89 08 00 45 00
0010 00 3c 00 68 40 00 40 06 6f 35 0a 0d 5b 02 0a 0d
0020 5c 03 04 00 bf ff 7d b3 81 44 00 00 00 00 a0 02
0030 20 00 9c 2f 00 00 02 04 05 b4 01 03 03 00 01 01
0040 08 0a 00 00 00 c2 00 00 00 00
64 2009-06-29 13:07:49.685375 10.13.92.3 10.13.91.2 TCP 49151 > 1024 [SYN, ACK] Seq=0 Ack=1 Win=1460 Len=0
0000 ab ab ab 60 10 89 f1 f1 f1 00 03 09 08 00 45 00
0010 00 28 00 02 00 00 64 06 8b af 0a 0d 5c 03 0a 0d
0020 5b 02 bf ff 04 00 d4 ff ff ff 7d b3 81 45 50 12
0030 05 b4 47 07 00 00 00 00 00 00 00 00
65 2009-06-29 13:07:49.685549 10.13.91.2 10.13.92.3 TCP 1024 > 49151 [RST] Seq=1 Win=0 Len=0
0000 f1 f1 f1 00 03 09 ab ab ab 60 10 89 08 00 45 00
0010 00 28 00 6a 00 00 40 06 af 47 0a 0d 5b 02 0a 0d
0020 5c 03 04 00 bf ff 7d b3 81 45 00 00 00 00 50 04
0030 00 00 21 c9 00 00 00 00 00 00 00 00
首先,这些不是有效的MAC地址;高阶字节&0x1表示它是多播MAC。首先,这些都不是有效的MAC地址;高阶字节&0x1表示它是多播MAC。请参见如果您没有使用定制tcp堆栈或原始套接字之类的花哨东西,我会怀疑“专有tcp接口” 这对那个客户有用吗?
它能与其他客户端一起工作吗?如果您没有使用定制tcp堆栈或原始套接字等奇特的东西,我会怀疑“专有tcp接口” 这对那个客户有用吗?
它与其他客户端一起工作吗?如果双方都使用标准RTOS实现,则TCP堆栈不太可能出现问题。或者,你是说TCP是本地实现的吗 如果他的客户正确地发送了
SYN
,并且您可以用SYN+ACK
回复,似乎您的
SYN+ACK
格式不正确(但是,我还看不出有什么不对),或者,
正如您所怀疑的,他的TCP堆栈没有正确地接受
SYN+ACK
。然而,如果这些是标准实现,那就不太可能了 那么,你还能做什么呢
- 因为我们正在检查的是TCP握手,所以您可以让他连接到您端正在监听所需端口的任何其他机器
- 这将检查他的实现(如果三向完成,这将很好)
- 您可以使用从另一台本地计算机连接到端口的
检查TCP堆栈TELNET
- 这将检查您的实现(如果三向完成,则良好)
- 如果这两种情况都正常,我们需要怀疑网络路径
- 例如,是否存在不允许通信并主动向您发送RST的防火墙
SYN
,并且您可以用SYN+ACK
回复,似乎您的
SYN+ACK
格式不正确(但是,我还看不出有什么不对),或者,
正如您所怀疑的,他的TCP堆栈没有正确地接受
SYN+ACK
。然而,如果这些是标准实现,那就不太可能了 那么,你还能做什么呢
- 因为我们正在检查的是TCP握手,所以您可以让他连接到您端正在监听所需端口的任何其他机器
- 这将检查他的实现(如果三向完成,这将很好)
- 您可以使用从另一台本地计算机连接到端口的
检查TCP堆栈TELNET
- 这将检查您的实现(如果三向完成,则良好)
- 如果这两种情况都正常,我们需要怀疑网络路径
- 例如,是否存在不允许通信并主动向您发送RST的防火墙