client sends a PSH,ACK and then the
server sends a PSH,ACK and a
FIN,PSH,ACK
有一个FIN,那么可能是Python版本的服务器在初始读取后立即关闭连接吗?在
如果您没有明确关闭服务器的套接字,那么服务器的远程套接字变量可能超出范围,从而关闭它(并且这个bug在C++版本中不存在)?在
假设是这种情况,我可以为服务器生成一个非常相似的TCP序列:# server.py
import socket
from time import sleep
def f(s):
r,a = s.accept()
print r.recv(100)
s = socket.socket()
s.bind(('localhost',1234))
s.listen(1)
f(s)
# wait around a bit for the client to send it's second packet
sleep(10)
这是给客户的:
^{pr2}$
启动包嗅探器,然后运行服务器.py然后,客户端.py. 以下是tcpdump -A -i lo的输出,与您的观察结果相符:tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 96 bytes
12:42:37.683710 IP localhost:33491 > localhost.1234: S 1129726741:1129726741(0) win 32792
E..
&3..........
12:42:37.684049 IP localhost.1234 > localhost:33491: S 1128039653:1128039653(0) ack 1129726742 win 32768
E..<..>
&3..&3......
12:42:37.684087 IP localhost:33491 > localhost.1234: . ack 1 win 257
E..4R.@.@...............CVC.C<......1......>
&3..&3..
12:42:37.684220 IP localhost:33491 > localhost.1234: P 1:8(7) ack 1 win 257
E..;R.@.@...............CVC.C<.......>
&3..&3..hello 1
12:42:37.684271 IP localhost.1234 > localhost:33491: . ack 8 win 256
E..4.(@.@...............C<..cvc.....1>
&3..&3..
12:42:37.684755 IP localhost.1234 > localhost:33491: F 1:1(0) ack 8 win 256
E..4.)@.@...............C<..cvc.....1>
&3..&3..
12:42:37.685639 IP localhost:33491 > localhost.1234: . ack 2 win 257
E..4R.@.@...............CVC.C<......1x.....>
&3..&3..
12:42:42.683367 IP localhost:33491 > localhost.1234: P 8:15(7) ack 2 win 257
E..;R.@.@...............CVC.C<.......>
&3%W&3..hello 2
12:42:42.683401 IP localhost.1234 > localhost:33491: R 1128039655:1128039655(0) win 0
E..(..@.@.<.............c>
9 packets captured
27 packets received by filter
0 packets dropped by kernel