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 也停止将其解释为保持活动数据包。
我有一个 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 也停止将其解释为保持活动数据包。