python socket 收到fin 后发送数据(卡在LAST_ACK)

python socket send data after receiving fin (stuck in LAST_ACK)

我有一个 python 程序,它应该接收一些任意字节并在接收到 fin 后将它们发回。正如您在下面看到的那样,我已经能够实现它。

我遇到的问题是连接从未正确关闭。使用 ss -tan 我可以看到连接一直卡在 LAST_ACK 状态。尽管从 Wireshark 数据包跟踪来看,连接似乎已正确关闭。我附上了 Wireshark 数据包跟踪的图像,它是首先发送“AAAAA”,然后是乱序的“BBB”,然后用“CCC”填充漏洞的结果。

查看 Wireshark 数据包,我认为所有数据包都应该被正确确认,并且连接应该正常终止而不会卡在 LAST_ACK 状态并且不会在底部进行重传。但是我仍然会猜测连接关闭数据包有问题。

# Echo server program
import socket

HOST = ''                 # Symbolic name meaning all available interfaces
PORT = 6000              # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)

conn, addr = s.accept()
print ('Connected by', addr)
data_acc = b''
while 1:
  data = conn.recv(1024)
  if not data: break
  data_acc += data
  print(data)
print("send data back")
conn.sendall(data_acc)
conn.close()

我找到了问题的答案。截图中第56行ACK的序号需要加1。通过这样做,Wireshark 也停止将其解释为保持活动数据包。