FIN/ACK 之后的 TCP RST

Nit*_*ked 6 tcp rst

我遇到了最奇怪的问题:有时,只有在非常特定的请求上,Web 服务器才会在发送 FIN 数据报后向客户端发送 RST。首先,对设置的描述:

  • 服务器:Win7 x64 主机中的 VM 来宾 Ubuntu 12.04.1 LTS,桥接模式,主机上禁用了 ufw
  • 客户端:Win7 x64 主机上的 Mountain Lion (hackintosh) VM 来宾中的 iOS 模拟器,桥接模式。
  • 两者都在同一个局域网上。一个通过以太网连接到路由器,另一个通过 WiFi 连接到路由器。

服务器上的 HTTP 日志表明客户端有时会发出多个后续相同的请求。客户端只是在收到来自服务器的 RST 数据包后重新尝试。

我附上了几个 tcpdumps:

  • Good1 是良好会话的服务器端 tcpdump(“良好”意味着没有生成 RST)。
  • Good3 是一个良好会话的另一个服务器端 tcpdump。

Good1 和 Good3 之间的区别在于从服务器发送 ACK 的顺序,ACK'ing 客户端的请求。该请求分为 2 个部分。一个用于 HTTP 标头,第二个用于包含空 JSON 对象的正文:"{}".

在 Good1 中,服务器在第二个请求到达后确认这两个请求。在 Good3 中,服务器在请求到达时立即确认每个请求。并不是说它应该有所作为。

  • Bad1 是客户端和服务器端错误会话的转储。
  • Bad2 是另一个坏会话,这次只是服务器端。

请注意,在所有“坏”会话中,服务器在收到每个请求后立即对其进行确认。其他几个糟糕的会话中的情况是一样的,但不包括在内。奇怪的是,在“Good3”中也表现出相同的行为,使得这种观察有点毫无意义。我不明白这有什么关系。

最重要的是,我无法确定好的和坏的会话之间的显着差异。

我的问题是:为什么要生成这些 RST?
或者至少:我如何进一步调试这个,或者在这里提供更多有用的信息?

编辑我学到的两个新事实:

  • RFC (1122) 的第 4.2.2.13 节(和维基百科,在文章“TCP”,在“Connection Termination”下)说,一台主机上的 TCP 应用程序可能会在它读取其套接字中的所有数据之前关闭连接缓冲区,在这种情况下,主机上的 TCP 将向另一端发送 RST,以使其知道并非它发送的所有数据都已被读取。

我不确定我是否完全理解这一点,因为关闭我一侧的连接仍然允许我阅读,不是吗?这也意味着我不能再写了。

不过,我不确定这是否相关,因为我FIN之后看到了 RST 。

  • 关于 wsgiref(Python 的开发模式 HTTP 服务器)发生这种情况的投诉有很多,这正是我正在使用的。

当我发现更多时,我会继续更新。

谢谢!

Good1 -- 服务器端

13:28:2.308319 IP 192.168.1.51.51479 > 192.168.1.132.5000: 标志 [S], seq 94268074, win 65535, options [mss 1460,49ps,3ps,300p,30000000000 ,eol], 长度 0
13:28:2.308336 IP 192.168.1.132.5000 > 192.168.1.51.51479: 标志 [S.], seq 1726304574, ack 94268075, win options,40s904800000,4080000000000000000000000000000000000000000000000000 ], 长度 0
13:28:2.309750 IP 192.168.1.51.51479 > 192.168.1.132.5000:Flags [.], ack 1, win 8235, options [nop,nop,TS val 94330898264 e, length]
13:28:2.310744 IP 192.168.1.51.51479 > 192.168.1.132.5000:Flags [P.], seq 1:351, ack 1, win 8235, options [nop,nop,TS3083083085308308308308808680880880788683088cr
13:28:2.310766 IP 192.168.1.51.51479> 192.168.1.132.5000:旗[P.],SEQ 351:353,ACK 1,赢得8235,选项[NOP,NOP,TS VAL 943308865 ECR 326480982],长度2
13:28:2.310841 IP 192.168.1.132.5000 > 192.168.1.51.51479:Flags [.], ack 351, win 1944, options [nop,nop,TS val 32648080953] e
13:28:2.310918 IP 192.168.1.132.5000 > 192.168.1.51.51479:Flags [.], ack 353, win 1944, options [nop,nop,TS val 3264809633]
13:28:2.315931 IP 192.168.1.132.5000 > 192.168.1.51.51479:Flags [P.], seq 1:18, ack 353, win 1944, options [nop,nop, nop, 514348043408340808348080800000]
13:28:2.316107 IP 192.168.1.132.5000 > 192.168.1.51.51479:Flags [FP.],seq 18:684,ack 353,win 1944,options [nop,893636363636363636363479]
13:28:2.317651 IP 192.168.1.51.51479 > 192.168.1.132.5000:Flags [.], ack 18, win 8234, options [nop,nop,TS val 94330898642]
13:28:2.318288 IP 192.168.1.51.51479 > 192.168.1.132.5000:Flags [.], ack 685, win 8192, options [nop,nop,TS val 94330808284] e
13:28:2.318640 IP 192.168.1.51.51479 > 192.168.1.132.5000:标志 [F.], seq 353, ack 685, win 8192, options [nop,nop,342308cr 3080val
13:28:2.318651 IP 192.168.1.132.5000 > 192.168.1.51.51479:标志 [.], ack 354, win 1944, options [nop,nop,TS val 3264809735] e

Good3 -- 服务器端

    
13:28:3.311143 IP 192.168.1.51.51486 > 192.168.1.132.5000:标志 [S],seq 1982901126,win 65535,选项 [mss,scale,89ps,3ps,3ps,3ps,39ps,3000 ,eol], 长度 0
13:28:3.311155 IP 192.168.1.132.5000 > 192.168.1.51.51486: 标志 [S.], seq 2245063571, ack 1982901127, win options,309ts,39ts,30405304030403040000000000000000000000000000000000000000000000000002 ], 长度 0
13:28:3.312671 IP 192.168.1.51.51486 > 192.168.1.132.5000:Flags [.], ack 1, win 8235, options [nop,nop,TS val 94330982364 e, 9433098254]
13:28:3.313330 IP 192.168.1.51.51486 > 192.168.1.132.5000:Flags [P.], seq 1:351, ack 1, win 8235, options [nop,nop,3432330val] 长度 [p.], seq 1:351
13:28:3.313337 IP 192.168.1.132.5000 > 192.168.1.51.51486:Flags [.], ack 351, win 1944, options [nop,nop,TS val 32648095354]
13:28:3.313342 IP 192.168.1.51.51486> 192.168.1.132.5000:旗[P.],SEQ 351:353,ACK 1,赢得8235,选项[NOP,NOP,TS VAL 943309855 ECR 326481233],长度2
13:28:3.313346 IP 192.168.1.132.5000 > 192.168.1.51.51486:Flags [.], ack 353, win 1944, options [nop,nop,TS val 326480125354]
13:28:3.327942 IP 192.168.1.132.5000> 192.168.1.51.51486:旗[P.],SEQ 1:18,ACK 353,赢得1944,选项[NOP,NOP,TS VAL 326481237 ECR 943309855],长度为17
13:28:3.328253 IP 192.168.1.132.5000 > 192.168.1.51.51486:Flags [FP.],seq 18:684,ack 353,win 1944,options [nop,892363637363373737]
13:28:3.329076 IP 192.168.1.51.51486 > 192.168.1.132.5000:Flags [.], ack 18, win 8234, options [nop,nop,TS val 94330932664]
13:28:3.329688 IP 192.168.1.51.51486 > 192.168.1.132.5000:Flags [.], ack 685, win 8192, options [nop,nop,TS val 9433093268] e.13267
13:28:3.330361 IP 192.168.1.51.51486 > 192.168.1.132.5000: 标志 [F.], seq 353, ack 685, win 8192, options [nop,nop,TS36823097997979797797979797979797
13:28:3.330370 IP 192.168.1.132.5000 > 192.168.1.51.51486: 标志 [.], ack 354, win 1944, options [nop,nop,TS val 3264819639] e

Bad1 -- 服务器端

    
13:28:1.311876 IP 192.168.1.51.51472 > 192.168.1.132.5000:标志[S],seq 920400580,win 65535,选项[mss,scale,8ps,8ps0,8ps0,4p03p000 ,eol], 长度 0
13:28:1.311896 IP 192.168.1.132.5000 > 192.168.1.51.51472: 标志 [S.], seq 3103085782, ack 920400581, win options,340s,37s,3407s,3407s,3407s,3407s,340800000000000 ], 长度 0
13:28:1.313509 IP 192.168.1.51.51472 > 192.168.1.132.5000:Flags [.], ack 1, win 8235, options [nop,nop,TS val 9433078364 e, length 9433078284]
13:28:1.315614 IP 192.168.1.51.51472 > 192.168.1.132.5000:Flags [P.], seq 1:351, ack 1, win 8235, options [nop,nop,34630733073307330777777777777
13:28:1.315727 IP 192.168.1.132.5000 > 192.168.1.51.51472: 标志 [.], ack 351, win 1944, options [nop,nop,TS val 326480798634]
13:28:1.316229 IP 192.168.1.51.51472> 192.168.1.132.5000:旗[P.],SEQ 351:353,ACK 1,赢得8235,选项[NOP,NOP,TS VAL 943307886 ECR 326480733],长度2
13:28:1.316242 IP 192.168.1.132.5000 > 192.168.1.51.51472:Flags [.], ack 353, win 1944, options [nop,nop,TS val 326480798634]
13:28:1.321019 IP 192.168.1.132.5000> 192.168.1.51.51472:旗[P.],SEQ 1:18,ACK 353,赢得1944,选项[NOP,NOP,TS VAL 326480735 ECR 943307886],长度为17
13:28:1.321294 IP 192.168.1.132.5000 > 192.168.1.51.51472: 标志 [FP.], seq 18:684, ack 353, win 1944, options [nop,876363636363636363]
13:28:1.321386 IP 192.168.1.132.5000 > 192.168.1.51.51472:Flags [R.],seq 685,ack 353,win 1944,options [nop,nop,TS 86363780780780780780780780780780780777777777777772
13:28:1.322727 IP 192.168.1.51.51472 > 192.168.1.132.5000:Flags [.], ack 18, win 8234, options [nop,nop,TS val 94330732614]
13:28:1.322733 IP 192.168.1.132.5000 > 192.168.1.51.51472:标志 [R],seq 3103085800,获胜 0,长度 0
13:28:1.323221 IP 192.168.1.51.51472 > 192.168.1.132.5000: 标志 [.], ack 685, win 8192, options [nop,nop,TS val 943307362], 长度 943307369
13:28:1.323231 IP 192.168.1.132.5000 > 192.168.1.51.51472:标志 [R],seq 3103086467,赢 0,长度 0

Bad1 -- 客户端

    
t:11.374654 IP 192.168.1.51.51472 > 192.168.1.132.5000: 标志 [S], seq 920400580, win 65535, options [mss 1460,nop,30pscal,30ps,300kp30kp98000 ], 长度 0
t:11.375764 IP 192.168.1.132.5000 > 192.168.1.51.51472: 标志 [S.], seq 3103085782, ack 920400581, win 14480,307s,37s,37s,37s,37s,37s,370000000,37长度 0
t:11.376352 IP 192.168.1.51.51472 > 192.168.1.132.5000: 标志 [.], ack 1, win 8235, options [nop,nop,TS val 943307884] ecr 30733
t:11.378252 IP 192.168.1.51.51472 > 192.168.1.132.5000: Flags [P.], seq 1:351, ack 1, win 8235, options [nop,nop,TS val 7032.5000] 70736336364
t:11.379027 IP 192.168.1.51.51472 > 192.168.1.132.5000: Flags [P.], seq 351:353, ack 1, win 8235, options [nop,nop,TS 33807 val val
t:11.379732 IP 192.168.1.132.5000 > 192.168.1.51.51472: Flags [.], ack 351, win 1944, options [nop,nop,TS val 3264807334 ecr length]807
t:11.380592 IP 192.168.1.132.5000 > 192.168.1.51.51472: Flags [.], ack 353, win 1944, options [nop,nop,TS val 3264807334 ecr length]807
t:11.384968 IP 192.168.1.132.5000 > 192.168.1.51.51472: Flags [P.], seq 1:18, ack 353, win 1944, options [nop,nop,TS val, 870737373732]
t:11.385044 IP 192.168.1.51.51472 > 192.168.1.132.5000: Flags [.], ack 18, win 8234, options [nop,nop,TS val 9433078261 ecr 07 长度 3
t:11.385586 IP 192.168.1.132.5000 > 192.168.1.51.51472: Flags [FP.], seq 18:684, ack 353, win 1944, options [nop,nop,TS 366368678686867867867807777777772
t:11.385743 IP 192.168.1.51.51472 > 192.168.1.132.5000: 标志 [.], ack 685, win 8192, options [nop,nop,TS val 9433078264 ecr 长度]7000
t:11.385966 IP 192.168.1.132.5000 > 192.168.1.51.51472: 标志 [R.], seq 685, ack 353, win 1944, options [nop,nop,TS val 30736] 80736
t:11.387343 IP 192.168.1.132.5000 > 192.168.1.51.51472:标志 [R],seq 3103085800,获胜 0,长度 0
t:11.387344 IP 192.168.1.132.5000 > 192.168.1.51.51472:标志 [R],seq 3103086467,获胜 0,长度 0

Bad2 -- 服务器端

    
13:28:1.319185 IP 192.168.1.51.51473 > 192.168.1.132.5000:标志 [S],seq 1631526992,win 65535,选项 [mss 1460,89ps,89ps,3p9ps,30p,30p,30000 ,eol], 长度 0
13:28:1.319197 IP 192.168.1.132.5000> 192.168.1.51.51473:旗[S.],SEQ 2524685719,ACK 1631526993,赢得14480,期权[MSS 1460,sackOK,TS VAL 326480735 ECR 943307889,NOP,wscale 3 ], 长度 0
13:28:1.320692 IP 192.168.1.51.51473 > 192.168.1.132.5000:Flags [.], ack 1, win 8235, options [nop,nop,TS val 94330782590], 长度 94330782598
13:28:1.322219 IP 192.168.1.51.51473 > 192.168.1.132.5000:Flags [P.],seq 1:351,ack 1,win 8235,options [nop,nop,340353075307530773730773730737307777
13:28:1.322336 IP 192.168.1.132.5000 > 192.168.1.51.51473: 标志 [.], ack 351, win 1944, options [nop,nop,TS val 3264807906] length 3264807933
13:28:1.322689 IP 192.168.1.51.51473> 192.168.1.132.5000:旗[P.],SEQ 351:353,ACK 1,赢得8235,选项[NOP,NOP,TS VAL 943307890 ECR 326480735],长度2
13:28:1.322700 IP 192.168.1.132.5000 > 192.168.1.51.51473: 标志 [.], ack 353, win 1944, options [nop,nop,TS val 3264807906] 长度 3264807943
13:28:1.326307 IP 192.168.1.132.5000 > 192.168.1.51.51473:Flags [P.], seq 1:18, ack 353, win 1944, options [nop,nop, nop, 5147370373737073707037070000000000000]
13:28:1.326614 IP 192.168.1.132.5000 > 192.168.1.51.51473:Flags [FP.],seq 18:684,ack 353,win 1944,options [nop,8736373736373737373773]
13:28:1.326710 IP 192.168.1.132.5000 > 192.168.1.51.51473:Flags [R.],seq 685,ack 353,win 1944,options [nop,nop,637307307370737097807078078078070778077377171717171710
13:28:1.328499 IP 192.168.1.51.51473 > 192.168.1.132.5000: 标志 [.], ack 18, win 8234, options [nop,nop,TS val 94330732694]
13:28:1.328509 IP 192.168.1.132.5000 > 192.168.1.51.51473:标志 [R],seq 2524685737,赢 0,长度 0
13:28:1.328514 IP 192.168.1.51.51473 > 192.168.1.132.5000: 标志 [.], ack 685, win 8192, options [nop,nop,TS val 943307364], 长度 943307367
13:28:1.328517 IP 192.168.1.132.5000 > 192.168.1.51.51473:标志 [R],seq 2524686404,获胜 0,长度 0