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 TCP事务花费的时间越来越长_Sockets_Networking_Tcp_Wireshark - Fatal编程技术网

Sockets TCP事务花费的时间越来越长

Sockets TCP事务花费的时间越来越长,sockets,networking,tcp,wireshark,Sockets,Networking,Tcp,Wireshark,我有一台设备,我想通过TCP和它通话。它非常简单,下面的(python)代码正是我在实践中想要做的 我应该发送一个数据包请求设备更改设置,然后它应该收到一个“操作完成数据包”(仅为“1”) 我已经用C实现了下面的代码,并且得到了相同的结果,所以我相信这不是Python的问题 import numpy as np import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # Set some values to

我有一台设备,我想通过TCP和它通话。它非常简单,下面的(python)代码正是我在实践中想要做的

我应该发送一个数据包请求设备更改设置,然后它应该收到一个“操作完成数据包”(仅为“1”)

我已经用C实现了下面的代码,并且得到了相同的结果,所以我相信这不是Python的问题

import numpy as np
import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Set some values to send to the device
values = np.arange(0.2, 1.0, 0.02)

sock.connect(('192.168.1.147', 9221))

for value in values:
    # This string sets a value, then requests an operation complete output.
    sock.sendall('I1 %1.3f; *OPC?'.encode('utf-8') % (value, ))
    print(sock.recv(32)) # Prints out '1', or b'1\r\n' in python 3
我实际体验到的是输出是预期的输出,但是发送和接收之间的延迟会逐渐变长,直到我不得不终止程序

结果wireshark输出很有趣:

No.     Time           Source                Destination           Protocol Length Info
      4 2.970271597    192.168.1.106         192.168.1.147         TCP      74     49938 → 9221 [SYN] Seq=0 Win=26880 Len=0 MSS=8960 SACK_PERM=1 TSval=26446953 TSecr=0 WS=128
      5 2.971102415    192.168.1.147         192.168.1.106         TCP      60     9221 → 49938 [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1460
      6 2.971118924    192.168.1.106         192.168.1.147         TCP      54     49938 → 9221 [ACK] Seq=1 Ack=1 Win=26880 Len=0
      7 2.971152591    192.168.1.106         192.168.1.147         TCP      69     49938 → 9221 [PSH, ACK] Seq=1 Ack=1 Win=26880 Len=15
      8 2.977589098    192.168.1.147         192.168.1.106         TCP      60     9221 → 49938 [PSH, ACK] Seq=1 Ack=1 Win=5840 Len=3
      9 2.977597172    192.168.1.106         192.168.1.147         TCP      54     49938 → 9221 [ACK] Seq=16 Ack=4 Win=26880 Len=0
     10 2.977948459    192.168.1.147         192.168.1.106         TCP      60     9221 → 49938 [ACK] Seq=1 Ack=16 Win=5840 Len=0
     11 2.977952056    192.168.1.106         192.168.1.147         TCP      54     [TCP Dup ACK 9#1] 49938 → 9221 [ACK] Seq=16 Ack=4 Win=26880 Len=0
     12 3.167593066    192.168.1.106         192.168.1.147         TCP      69     [TCP Spurious Retransmission] 49938 → 9221 [PSH, ACK] Seq=1 Ack=4 Win=26880 Len=15
     13 3.168475846    192.168.1.147         192.168.1.106         TCP      60     [TCP Dup ACK 10#1] 9221 → 49938 [ACK] Seq=4 Ack=16 Win=5840 Len=0
     14 3.168487149    192.168.1.106         192.168.1.147         TCP      69     49938 → 9221 [PSH, ACK] Seq=16 Ack=4 Win=26880 Len=15
     15 3.174457755    192.168.1.147         192.168.1.106         TCP      60     9221 → 49938 [PSH, ACK] Seq=4 Ack=16 Win=5840 Len=3
     16 3.174481722    192.168.1.106         192.168.1.147         TCP      54     49938 → 9221 [ACK] Seq=31 Ack=7 Win=26880 Len=0
     17 3.174817948    192.168.1.147         192.168.1.106         TCP      60     9221 → 49938 [ACK] Seq=4 Ack=31 Win=5840 Len=0
     18 3.567587105    192.168.1.106         192.168.1.147         TCP      69     [TCP Spurious Retransmission] 49938 → 9221 [PSH, ACK] Seq=16 Ack=7 Win=26880 Len=15
     19 3.568540028    192.168.1.147         192.168.1.106         TCP      60     [TCP Dup ACK 17#1] 9221 → 49938 [ACK] Seq=7 Ack=31 Win=5840 Len=0
     20 3.568551611    192.168.1.106         192.168.1.147         TCP      69     49938 → 9221 [PSH, ACK] Seq=31 Ack=7 Win=26880 Len=15
     21 3.574509787    192.168.1.147         192.168.1.106         TCP      60     9221 → 49938 [PSH, ACK] Seq=7 Ack=31 Win=5840 Len=3
     22 3.574533527    192.168.1.106         192.168.1.147         TCP      54     49938 → 9221 [ACK] Seq=46 Ack=10 Win=26880 Len=0
     23 3.574857577    192.168.1.147         192.168.1.106         TCP      60     9221 → 49938 [ACK] Seq=7 Ack=46 Win=5840 Len=0
     24 3.574870866    192.168.1.106         192.168.1.147         TCP      54     [TCP Dup ACK 22#1] 49938 → 9221 [ACK] Seq=46 Ack=10 Win=26880 Len=0
     25 4.367591502    192.168.1.106         192.168.1.147         TCP      69     [TCP Spurious Retransmission] 49938 → 9221 [PSH, ACK] Seq=31 Ack=10 Win=26880 Len=15
     26 4.368487116    192.168.1.147         192.168.1.106         TCP      60     [TCP Dup ACK 23#1] 9221 → 49938 [ACK] Seq=10 Ack=46 Win=5840 Len=0
     27 4.368498284    192.168.1.106         192.168.1.147         TCP      69     49938 → 9221 [PSH, ACK] Seq=46 Ack=10 Win=26880 Len=15
     28 4.374526599    192.168.1.147         192.168.1.106         TCP      60     9221 → 49938 [PSH, ACK] Seq=10 Ack=46 Win=5840 Len=3
     29 4.374558188    192.168.1.106         192.168.1.147         TCP      54     49938 → 9221 [ACK] Seq=61 Ack=13 Win=26880 Len=0
     30 4.374881659    192.168.1.147         192.168.1.106         TCP      60     9221 → 49938 [ACK] Seq=10 Ack=61 Win=5840 Len=0
     31 4.374896303    192.168.1.106         192.168.1.147         TCP      54     [TCP Dup ACK 29#1] 49938 → 9221 [ACK] Seq=61 Ack=13 Win=26880 Len=0
     32 5.971603454    192.168.1.106         192.168.1.147         TCP      69     [TCP Spurious Retransmission] 49938 → 9221 [PSH, ACK] Seq=46 Ack=13 Win=26880 Len=15
     33 5.972478351    192.168.1.147         192.168.1.106         TCP      60     [TCP Dup ACK 30#1] 9221 → 49938 [ACK] Seq=13 Ack=61 Win=5840 Len=0
     34 5.972490012    192.168.1.106         192.168.1.147         TCP      69     49938 → 9221 [PSH, ACK] Seq=61 Ack=13 Win=26880 Len=15
     35 5.978397699    192.168.1.147         192.168.1.106         TCP      60     9221 → 49938 [PSH, ACK] Seq=13 Ack=61 Win=5840 Len=3
     36 5.978418493    192.168.1.106         192.168.1.147         TCP      54     49938 → 9221 [ACK] Seq=76 Ack=16 Win=26880 Len=0
     37 5.978754841    192.168.1.147         192.168.1.106         TCP      60     9221 → 49938 [ACK] Seq=13 Ack=76 Win=5840 Len=0
     38 5.978768499    192.168.1.106         192.168.1.147         TCP      54     [TCP Dup ACK 36#1] 49938 → 9221 [ACK] Seq=76 Ack=16 Win=26880 Len=0
     43 7.134413907    192.168.1.106         192.168.1.147         TCP      69     49938 → 9221 [FIN, PSH, ACK] Seq=76 Ack=16 Win=26880 Len=15
     44 7.140478879    192.168.1.147         192.168.1.106         TCP      60     9221 → 49938 [PSH, ACK] Seq=16 Ack=76 Win=5840 Len=3
     45 7.140515226    192.168.1.106         192.168.1.147         TCP      54     49938 → 9221 [RST] Seq=76 Win=0 Len=0
     46 7.140822269    192.168.1.147         192.168.1.106         TCP      60     9221 → 49938 [ACK] Seq=16 Ack=91 Win=5840 Len=0
     47 7.140838249    192.168.1.106         192.168.1.147         TCP      54     49938 → 9221 [RST] Seq=91 Win=0 Len=0
(当时我杀了它)

它给我的启示是,ACK正在发送,但由于某种原因被忽略了(某种形式的错误?)。然后,原始数据包以逐渐延长的延迟再次发送(我怀疑这是丢失数据包的正确行为),这导致传输缓冲区被备份,因此新数据包不会被发送。Wireshark似乎认为重发是虚假的,正如“虚假重发”所证明的那样

设备在第一次发送数据包时就对其做出响应,我可以从它的显示器上看到这一点

可能存在协议错误,但我不知道如何诊断问题。我很高兴能找到解决这个问题的办法——这不是现阶段的生产


(仅供参考,该设备是一个TTi电源)。

因此,原来问题是硬件上的固件问题。我很好奇ACK数据包中有什么不正确的地方导致了重发,但就我而言,问题已经解决了

对于完整性和遇到相同问题的任何人,电源为TTi PL303QMD。我从固件版本3.02升级到4.06,问题解决了