Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 如何使用AT命令可靠地拆卸和重新连接TCP/IP套接字_Sockets_Networking_Tcp_At Command_3g - Fatal编程技术网

Sockets 如何使用AT命令可靠地拆卸和重新连接TCP/IP套接字

Sockets 如何使用AT命令可靠地拆卸和重新连接TCP/IP套接字,sockets,networking,tcp,at-command,3g,Sockets,Networking,Tcp,At Command,3g,我有一个问题,我觉得我已经几乎解决了,但我被困在“最后一条腿”。 我已经做了几天了,虽然有了突破,但我觉得 由于一些盲点,我离一个可行的解决方案还有一段路要走 我有一个嵌入式移动固件应用程序(我不能直接编辑),它有问题 通过TCP/IP/UMTS/GSM重新连接到我们的服务器。固件仅使用AT命令来启动和 通过调制解调器控制连接。我们的产品的原始版本已经过测试 在生产环境中工作了大约10年,然而一个“新”版本的硬件正在开发中 遇到间歇性问题 有很多变数,但我排除了除一个以外的所有变数:调制解调器芯

我有一个问题,我觉得我已经几乎解决了,但我被困在“最后一条腿”。 我已经做了几天了,虽然有了突破,但我觉得 由于一些盲点,我离一个可行的解决方案还有一段路要走

我有一个嵌入式移动固件应用程序(我不能直接编辑),它有问题 通过TCP/IP/UMTS/GSM重新连接到我们的服务器。固件仅使用AT命令来启动和 通过调制解调器控制连接。我们的产品的原始版本已经过测试 在生产环境中工作了大约10年,然而一个“新”版本的硬件正在开发中 遇到间歇性问题

有很多变数,但我排除了除一个以外的所有变数:调制解调器芯片

  • 我们有新版本的固件和各种变化,但广泛的A/B 测试表明所有固件都遇到相同的问题,所以我排除了它
  • 我们有一个传统的VB6服务器,使用Winsock。我最近编写了一个更简单的Node.js 这个版本也几乎相同地证明了同样的问题(令人惊讶的是)
  • 我们使用各种电信:Optus、沃达丰、电信。他们似乎再次与这个问题无关
  • 我们使用直接电信公司,或拥有自己专用网络(APN)的经销商。事实再次证明,这是无关紧要的
  • 我们有不同的主机/网络安装,但我再次测试了许多配置 包括我们的公司网络、生产托管、AWS dev EC2s,它们都可以执行 差不多
  • 我们还使用硬件/固件的模拟/模拟版本进行自动化测试 这表明,各种服务器和网络似乎都运行良好,类似
  • 显示出显著(实际上是绝对)差异的最后一个变量是 Telit UC864调制解调器和HE910。前者较旧的调制解调器工作正常,但较新的HE910工作正常 总是遇到问题。我已经测试了所有可能的排列,并且解决了这个问题 遵循HE910
当然,我一直在阅读Telit文档(特别是“Easy IP”,以及 AT命令和软件引用),但看不出有多大区别 在这两种产品之间。HE910是在一个物理包由格林,但我不相信 这影响了它的行为

问题是:

我们的固件应用程序通过特定端口/地址连接到服务器。服务器 启动固件必须响应的出站应用程序协议。(真的吗 固件是“服务器”,但这并不重要。)它非常轻量级和简单, 每个命令/响应的字节数为10秒

当固件因事件“在”现有固件的“顶部”重新连接时,会出现问题 插座连接。固件始终遵循相同的过程:拆卸、配置、, 连接-无论是否存在现有连接(这是由于 TCP和3G上“已连接”的模糊性,最好要么“尝试发送数据”,要么 重新连接以确保连接)。正如我所说,我不能改变这种行为在F/W

连接步骤包括:

  • a) 插座在#SH b)处拆卸等待1s
  • 在+CGDCONT处配置PDP上下文
  • 配置TCP/IP堆栈:在#SCFG
  • 激活PDP上下文:AT#SGACT
  • 将TCP/IP连接到服务器:AT#SD
  • (您可能会问为什么每次连接都要执行配置步骤2、3、4:因为 它们可以通过我们的应用程序协议进行更新。但通常设置是恒定的。)

    我们遇到的问题有时是设备连接但无法通信。 连接似乎“卡住了”——有时几个字节通过,有时整个字节通过 命令/响应周期,但通常没有。在connect上,通常有大约10个命令 已服务,如果出现故障,服务器将断开连接

    到目前为止,我发现:

    我使用了一个协议分析器来确定哪里出了问题:这是因为TCP AT#SH的FIN过程与下一个连接的TCP SYN握手重叠 由AT#SD发起。这似乎是由于最终FIN-ACK数据包到达延迟所致 延迟-在启动下一个连接之后

    在下面的跟踪中,您可以看到第8799帧延迟到达,作为对8788的确认,但是它来了 在下一个同步-ACK握手的中间顺序! 发生这种情况后,调制解调器基本上“坏了”。所有后续连接 经历有效负载数据包丢失,多次重传,双方重新发送数据包 有效负载数据包,就好像它们没有接收到有效负载确认一样

    在步骤1之后。(在上海)在F/W中有一个1秒的暂停。由于问题,我们添加了这个 当我们第一次安装HE910时,重新连接(我知道这是一个难题,但它更复杂) 以适应服务器状态下的数据库延迟(而不是TCP/IP)。不管看起来怎么样 从下面的跟踪中可以看出,1s延迟甚至不会影响TPC流量。 ATSH在17:16:51.585“导致”第8786帧,ATSD在第8792帧“导致”SYN 17:16:51.595,但它们之间只有10毫秒。我已经研究了固件和can 确认1s延迟代码看起来正确,并观察终端中的固件-有 这些步骤的调试输出之间有1秒的延迟,但TCP说明了不同的情况

    我可以在固件中以有限的方式发送AT命令-每五个命令中只有一个命令 秒,这显然会使手动测试变得又慢又好。如果我发送+++,在#SH期间 连接A,然后触发连接事件,设备将成功连接。 这很有趣,就像步骤1一样。不管怎么说,连接是在执行AT#SH。 因此,我可以总结两件事中的一件:要么我们需要“更早”发送AT#SH(即。 在连接AT#SD之前,请等待更长时间,或者发送两个(可能性较小)

    我知道这是应用程序中的一个常见问题
    Frame   TIME                REL TIME    SOURCE          DEST    SEQ ACK     FLAGS       WINDOW  PAYLOAD BYTES       
    
    8003    17:15:55.9409634    703.7329764 CLIENT_IP   SERVER_IP   0   0 (0x0) ......S.    65000   0   Flags=......S., SrcPort=17790, DstPort=50008, PayloadLen=0, Seq=316432024, Ack=0, Win=65000 (  ) = 65000    vb6.exe
    8004    17:15:55.9410316    0.0000682   SERVER_IP   CLIENT_IP   0   1       ...A..S.    8192    0   Flags=...A..S., SrcPort=50008, DstPort=17790, PayloadLen=0, Seq=319387462, Ack=316432025, Win=8192 ( Scale factor not supported ) = 8192    vb6.exe
    8016    17:15:58.5707216    2.6296900   CLIENT_IP   SERVER_IP   1   1       ...A....    65000   0   Flags=...A...., SrcPort=17790, DstPort=50008, PayloadLen=0, Seq=316432025, Ack=319387463, Win=65000 (scale factor 0x0) = 65000  vb6.exe
    8037    17:15:58.8632583    0.2925367   SERVER_IP   CLIENT_IP   1 - 14  1   ...AP...    65000   13  Flags=...AP..., SrcPort=50008, DstPort=17790, PayloadLen=13, Seq=319387463 - 319387476, Ack=316432025, Win=65000 (scale factor 0x0) = 65000 vb6.exe
    8039    17:15:59.0105830    0.1473247   CLIENT_IP   SERVER_IP   1   14      ...A....    65000   0   Flags=...A...., SrcPort=17790, DstPort=50008, PayloadLen=0, Seq=316432025, Ack=319387476, Win=65000 (scale factor 0x0) = 65000  vb6.exe
    8041    17:15:59.1006112    0.0900282   CLIENT_IP   SERVER_IP   1 - 7   14  ...AP...    65000   6   Flags=...AP..., SrcPort=17790, DstPort=50008, PayloadLen=6, Seq=316432025 - 316432031, Ack=319387476, Win=65000 (scale factor 0x0) = 65000  vb6.exe
    8068    17:15:59.2997681    0.1991569   SERVER_IP   CLIENT_IP   14  7       ...A....    64994   0   Flags=...A...., SrcPort=50008, DstPort=17790, PayloadLen=0, Seq=319387476, Ack=316432031, Win=64994 (scale factor 0x0) = 64994  vb6.exe
    8071    17:15:59.3590861    0.0593180   SERVER_IP   CLIENT_IP   14 - 19 7   ...AP...    64994   5   Flags=...AP..., SrcPort=50008, DstPort=17790, PayloadLen=5, Seq=319387476 - 319387481, Ack=316432031, Win=64994 (scale factor 0x0) = 64994  vb6.exe
    8076    17:15:59.5106103    0.1515242   CLIENT_IP   SERVER_IP   7   19      ...A....    65000   0   Flags=...A...., SrcPort=17790, DstPort=50008, PayloadLen=0, Seq=316432031, Ack=319387481, Win=65000 (scale factor 0x0) = 65000  vb6.exe
    8078    17:15:59.6005478    0.0899375   CLIENT_IP   SERVER_IP   7 - 28  19  ...AP...    65000   21  Flags=...AP..., SrcPort=17790, DstPort=50008, PayloadLen=21, Seq=316432031 - 316432052, Ack=319387481, Win=65000 (scale factor 0x0) = 65000 vb6.exe
    8100    17:15:59.7989459    0.1983981   SERVER_IP   CLIENT_IP   19  28      ...A....    64973   0   Flags=...A...., SrcPort=50008, DstPort=17790, PayloadLen=0, Seq=319387481, Ack=316432052, Win=64973 (scale factor 0x0) = 64973  vb6.exe
    8110    17:15:59.9164691    0.1175232   SERVER_IP   CLIENT_IP   19 - 37 28  ...AP...    64973   18  Flags=...AP..., SrcPort=50008, DstPort=17790, PayloadLen=18, Seq=319387481 - 319387499, Ack=316432052, Win=64973 (scale factor 0x0) = 64973 vb6.exe
    8114    17:16:00.0005725    0.0841034   CLIENT_IP   SERVER_IP   28  37      ...A....    65000   0   Flags=...A...., SrcPort=17790, DstPort=50008, PayloadLen=0, Seq=316432052, Ack=319387499, Win=65000 (scale factor 0x0) = 65000  vb6.exe
    8120    17:16:00.2005077    0.1999352   CLIENT_IP   SERVER_IP   28 - 34 37  ...AP...    65000   6   Flags=...AP..., SrcPort=17790, DstPort=50008, PayloadLen=6, Seq=316432052 - 316432058, Ack=319387499, Win=65000 (scale factor 0x0) = 65000  vb6.exe
    8127    17:16:00.2509607    0.0504530   SERVER_IP   CLIENT_IP   37 - 42 34  ...AP...    64967   5   Flags=...AP..., SrcPort=50008, DstPort=17790, PayloadLen=5, Seq=319387499 - 319387504, Ack=316432058, Win=64967 (scale factor 0x0) = 64967  vb6.exe
    8131    17:16:00.5004721    0.2495114   CLIENT_IP   SERVER_IP   34  42      ...A....    65000   0   Flags=...A...., SrcPort=17790, DstPort=50008, PayloadLen=0, Seq=316432058, Ack=319387504, Win=65000 (scale factor 0x0) = 65000  vb6.exe
    8132    17:16:00.5004721    0.0000000   CLIENT_IP   SERVER_IP   34 - 43 42  ...AP...    65000   9   Flags=...AP..., SrcPort=17790, DstPort=50008, PayloadLen=9, Seq=316432058 - 316432067, Ack=319387504, Win=65000 (scale factor 0x0) = 65000  vb6.exe
    8160    17:16:00.6603237    0.1598516   SERVER_IP   CLIENT_IP   42 - 49 43  ...AP...    64958   7   Flags=...AP..., SrcPort=50008, DstPort=17790, PayloadLen=7, Seq=319387504 - 319387511, Ack=316432067, Win=64958 (scale factor 0x0) = 64958  vb6.exe
    8162    17:16:00.7505392    0.0902155   CLIENT_IP   SERVER_IP   43  49      ...A....    65000   0   Flags=...A...., SrcPort=17790, DstPort=50008, PayloadLen=0, Seq=316432067, Ack=319387511, Win=65000 (scale factor 0x0) = 65000  vb6.exe
    8168    17:16:00.9005226    0.1499834   CLIENT_IP   SERVER_IP   43 - 55 49  ...AP...    65000   12  Flags=...AP..., SrcPort=17790, DstPort=50008, PayloadLen=12, Seq=316432067 - 316432079, Ack=319387511, Win=65000 (scale factor 0x0) = 65000 vb6.exe
    8197    17:16:01.1093181    0.2087955   SERVER_IP   CLIENT_IP   49  55      ...A....    64946   0   Flags=...A...., SrcPort=50008, DstPort=17790, PayloadLen=0, Seq=319387511, Ack=316432079, Win=64946 (scale factor 0x0) = 64946  vb6.exe
    8786    17:16:51.5853712    50.4760531  CLIENT_IP   SERVER_IP   55  49      ...A...F    65000   0   Flags=...A...F, SrcPort=17790, DstPort=50008, PayloadLen=0, Seq=316432079, Ack=319387511, Win=65000 (scale factor 0x0) = 65000  vb6.exe
    8787    17:16:51.5854172    0.0000460   SERVER_IP   CLIENT_IP   49  56      ...A....    64946   0   Flags=...A...., SrcPort=50008, DstPort=17790, PayloadLen=0, Seq=319387511, Ack=316432080, Win=64946 (scale factor 0x0) = 64946  vb6.exe
    8788    17:16:51.5860033    0.0005861   SERVER_IP   CLIENT_IP   49  56      ...A...F    64946   0   Flags=...A...F, SrcPort=50008, DstPort=17790, PayloadLen=0, Seq=319387511, Ack=316432080, Win=64946 (scale factor 0x0) = 64946  vb6.exe
    8792    17:16:51.5954781    0.0094748   CLIENT_IP   SERVER_IP   0   0 (0x0) ......S.    65000   0   Flags=......S., SrcPort=39522, DstPort=50008, PayloadLen=0, Seq=1817440308, Ack=0, Win=65000 (  ) = 65000   vb6.exe
    8793    17:16:51.5955252    0.0000471   SERVER_IP   CLIENT_IP   0   1       ...A..S.    8192    0   Flags=...A..S., SrcPort=50008, DstPort=39522, PayloadLen=0, Seq=4287314964, Ack=1817440309, Win=8192 ( Scale factor not supported ) = 8192  vb6.exe
    8799    17:16:51.7152606    0.1197354   CLIENT_IP   SERVER_IP   56  50      ...A....    64999   0   Flags=...A...., SrcPort=17790, DstPort=50008, PayloadLen=0, Seq=316432080, Ack=319387512, Win=64999 (scale factor 0x0) = 64999  vb6.exe
    8801    17:16:51.7351969    0.0199363   CLIENT_IP   SERVER_IP   1   1       ...A....    65000   0   Flags=...A...., SrcPort=39522, DstPort=50008, PayloadLen=0, Seq=1817440309, Ack=4287314965, Win=65000 (scale factor 0x0) = 65000    vb6.exe
    8821    17:16:52.0333514    0.2981545   SERVER_IP   CLIENT_IP   1 - 14  1   ...AP...    65000   13  Flags=...AP..., SrcPort=50008, DstPort=39522, PayloadLen=13, Seq=4287314965 - 4287314978, Ack=1817440309, Win=65000 (scale factor 0x0) = 65000  vb6.exe
    8846    17:16:52.4579548    0.4246034   SERVER_IP   CLIENT_IP   1 - 14  1   ...AP...    65000   13  [ReTransmit #8821]Flags=...AP..., SrcPort=50008, DstPort=39522, PayloadLen=13, Seq=4287314965 - 4287314978, Ack=1817440309, Win=65000 (scale factor 0x0) = 65000    vb6.exe
    8855    17:16:53.3003681    0.8424133   SERVER_IP   CLIENT_IP   1 - 14  1   ...AP...    65000   13  [ReTransmit #8821]Flags=...AP..., SrcPort=50008, DstPort=39522, PayloadLen=13, Seq=4287314965 - 4287314978, Ack=1817440309, Win=65000 (scale factor 0x0) = 65000    vb6.exe
    8875    17:16:54.9852348    1.6848667   SERVER_IP   CLIENT_IP   1 - 14  1   ...AP...    65000   13  [ReTransmit #8821]Flags=...AP..., SrcPort=50008, DstPort=39522, PayloadLen=13, Seq=4287314965 - 4287314978, Ack=1817440309, Win=65000 (scale factor 0x0) = 65000    vb6.exe
    8890    17:16:56.6729734    1.6877386   SERVER_IP   CLIENT_IP   1 - 14  1   ...AP...    65000   13  [ReTransmit #8821]Flags=...AP..., SrcPort=50008, DstPort=39522, PayloadLen=13, Seq=4287314965 - 4287314978, Ack=1817440309, Win=65000 (scale factor 0x0) = 65000    vb6.exe
    8909    17:16:58.3734032    1.7004298   SERVER_IP   CLIENT_IP   1 - 14  1   ...AP...    65000   13  [ReTransmit #8821]Flags=...AP..., SrcPort=50008, DstPort=39522, PayloadLen=13, Seq=4287314965 - 4287314978, Ack=1817440309, Win=65000 (scale factor 0x0) = 65000    vb6.exe
    8921    17:17:01.7429692    3.3695660   SERVER_IP   CLIENT_IP   1 - 14  1   ...AP...    65000   13  [ReTransmit #8821]Flags=...AP..., SrcPort=50008, DstPort=39522, PayloadLen=13, Seq=4287314965 - 4287314978, Ack=1817440309, Win=65000 (scale factor 0x0) = 65000    vb6.exe
    8978    17:17:08.4665817    6.7236125   SERVER_IP   CLIENT_IP   1 - 27  1   ...AP...    65000   26  [ReTransmit #8821]Flags=...AP..., SrcPort=50008, DstPort=39522, PayloadLen=26, Seq=4287314965 - 4287314991, Ack=1817440309, Win=65000 (scale factor 0x0) = 65000    vb6.exe
    9016    17:17:12.2738575    3.8072758   SERVER_IP   CLIENT_IP   27  1       ...A...F    65000   0   Flags=...A...F, SrcPort=50008, DstPort=39522, PayloadLen=0, Seq=4287314991, Ack=1817440309, Win=65000 (scale factor 0x0) = 65000    vb6.exe