TCP RST сразу после FIN/ACK

У меня самая странная проблема: веб-сервер, который иногда, только по очень конкретным запросам, отправляет RST клиенту после отправки дейтаграммы FIN. Сначала описание настройки:

  • Сервер: гостевая виртуальная машина Ubuntu 12.04.1 LTS на хосте Win7 x64, мостовой режим, на хосте отключен ufw
  • Клиент: iOS-симулятор в гостевой виртуальной машине Mountain Lion (hackintosh) на хосте Win7 x64, мостовой режим.
  • Оба находятся в одной локальной сети. Один подключен к роутеру через Ethernet, другой через WiFi.

Журналы HTTP на сервере указывают, что клиенты иногда выдают несколько повторяющихся идентичных запросов. Клиент просто повторяет попытку после получения RST-пакета от сервера.

Я прилагаю несколько tcpdumps:

  • Good1 - tcpdump на стороне сервера для хорошего сеанса ("хороший" означает, что RST не был сгенерирован).
  • Good3 - еще один tcpdump на стороне сервера хорошей сессии.

Разница между Good1 и Good3 заключается в порядке, в котором ACK были отправлены с сервера, ACK'запрос клиента. Запрос поступает в 2 этапа. Один для заголовков HTTP и второй для тела, содержащего пустой объект JSON: "{}",

В Good1 сервер ACK запрашивает оба после получения второго запроса. В Good3 сервер подтверждает каждый запрос, как только он поступает. Не то чтобы это имело значение.

  • Bad1 - это дамп как на клиентской, так и на серверной стороне плохого сеанса.
  • Bad2 - еще один плохой сеанс, на этот раз только на стороне сервера.

Обратите внимание, что во всех "плохих" сеансах сервер подтверждает каждый запрос сразу после его получения. Ситуация такая же в нескольких других плохих сессиях, которые не включены. Любопытно, что такое же поведение проявляется в "Good3", что делает это наблюдение несколько бессмысленным. Я не понимаю, как это может иметь значение.

Суть в том, что я не могу точно определить существенную разницу между хорошими и плохими сессиями.

Мой вопрос: почему генерируются эти RST?
Или, по крайней мере: как я могу отладить это или предоставить более полезную информацию здесь?

Редактировать Два новых факта, которые я узнал:

  • В разделе 4.2.2.13 RFC (1122) (и в Википедии, в статье "TCP" в разделе "Завершение соединения") говорится, что приложение TCP на одном хосте может закрыть соединение, прежде чем оно прочитает все данные в своем сокете. буфер, и в этом случае TCP на хосте отправит RST на другую сторону, чтобы сообщить, что не все данные, которые он отправил, были прочитаны.

Я не уверен, что полностью понимаю это, поскольку закрытие моей стороны соединения все еще позволяет мне читать, нет? Это также означает, что я больше не могу писать.

Я не уверен, что это актуально, так как я вижу RST после FIN.

  • Есть много жалоб на то, что это происходит с wsgiref (HTTP-сервер Python в режиме dev-mode), который я и использую.

Я буду обновлять, как я узнаю больше.

Спасибо!

Good1 - серверная часть

13:28:2.308319 IP 192.168.1.51.51479 > 192.168.1.132.5000: Flags [S], seq 94268074, win 65535, опции [mss 1460,nop,wscale 4,nop,nop,TS val 943308864 ecr 0,sackOK,eol], длина 0
13:28:2.308336 IP 192.168.1.132.5000 > 192.168.1.51.51479: Flags [S.], seq 1726304574, ack 94268075, win 14480, варианты [mss 1460,sackOK,TS val 326480982 ecr 943308864,nop,wscale 3], длина 0
13:28:2.309750 IP 192.168.1.51.51479 > 192.168.1.132.5000: Flags [.], Ack 1, win 8235, опции [nop,nop,TS val 943308865 ecr 326480982], длина 0
13:28:2.310744 IP 192.168.1.51.51479 > 192.168.1.132.5000: Флаги [P.], сек. 1: 351, кв. 1, выигрыш 8235, опции [нет, нет, TS val 943308865 ecr 326480982], длина 350
13:28:2.310766 IP 192.168.1.51.51479 > 192.168.1.132.5000: Flags [P.], seq 351:353, ack 1, win 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, варианты [nop,nop,TS val 326480983 ecr 943308865], длина 0
13:28:2.310918 IP 192.168.1.132.5000 > 192.168.1.51.51479: Flags [.], Ack 353, win 1944, варианты [nop,nop,TS val 326480983 ecr 943308865], длина 0
13:28:2.315931 IP 192.168.1.132.5000 > 192.168.1.51.51479: Флаги [P.], сек. 1:18, кв. 353, победа 1944 г., опции [nop,nop,TS val 326480984 ecr 943308865], длина 17
13:28:2.316107 IP 192.168.1.132.5000 > 192.168.1.51.51479: Flags [FP.], Seq 18:684, ack 353, win 1944, варианты [nop,nop,TS val 326480984 ecr 943308865], длина 666
13:28:2.317651 IP 192.168.1.51.51479 > 192.168.1.132.5000: Flags [.], Ack 18, win 8234, варианты [nop,nop,TS val 943308872 ecr 326480984], длина 0
13:28:2.318288 IP 192.168.1.51.51479 > 192.168.1.132.5000: Flags [.], Ack 685, win 8192, опции [nop,nop,TS val 943308872 ecr 326480984], длина 0
13:28:2.318640 IP 192.168.1.51.51479 > 192.168.1.132.5000: Flags [F.], seq 353, ack 685, win 8192, опции [nop,nop,TS val 943308872 ecr 326480984], длина 0
13:28:2.318651 IP 192.168.1.132.5000 > 192.168.1.51.51479: Flags [.], Ack 354, win 1944, варианты [nop,nop,TS val 326480985 ecr 943308872], длина 0

Good3 - серверная часть

    
13:28:3.311143 IP 192.168.1.51.51486 > 192.168.1.132.5000: Flags [S], seq 1982901126, win 65535, опции [mss 1460,nop,wscale 4,nop,nop,TS val 943309853 ecr 0,sackOK,eol], длина 0
13:28:3.311155 IP 192.168.1.132.5000 > 192.168.1.51.51486: Flags [S.], seq 2245063571, ack 1982901127, win 14480, опции [mss 1460,sackOK,TS val 326481233 ecr 943309853,nop,wscale 3], длина 0
13:28:3.312671 IP 192.168.1.51.51486 > 192.168.1.132.5000: Flags [.], Ack 1, win 8235, опции [nop,nop,TS val 943309854 ecr 326481233], длина 0
13:28:3.313330 IP 192.168.1.51.51486 > 192.168.1.132.5000: флаги [P.], сек. 1: 351, кв. 1, выигрыш 8235, опции [nop,nop,TS val 943309855 ecr 326481233], длина 350
13:28:3.313337 IP 192.168.1.132.5000 > 192.168.1.51.51486: флаги [.], ack 351, победа 1944 г., опции [nop,nop,TS val 326481234 ecr 943309855], длина 0
13:28:3.313342 IP 192.168.1.51.51486 > 192.168.1.132.5000: Flags [P.], seq 351:353, ack 1, win 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, варианты [nop,nop,TS val 326481234 ecr 943309855], длина 0
13:28:3.327942 IP 192.168.1.132.5000 > 192.168.1.51.51486: Флаги [P.], сек. 1:18, кв. 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: Флаги [FP.], Сек. 18: 684, кв. 353, победа 1944 г., опции [nop,nop,TS val 326481237 ecr 943309855], длина 666
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 943309868 ecr 326481237], длина 0
13:28:3.329688 IP 192.168.1.51.51486 > 192.168.1.132.5000: Flags [.], Ack 685, win 8192, варианты [nop, nop, TS val 943309868 ecr 326481237], длина 0
13:28:3.330361 IP 192.168.1.51.51486 > 192.168.1.132.5000: Флаги [F. ], seq 353, ack 685, win 8192, варианты [nop,nop,TS val 943309869 ecr 326481237], длина 0
13:28:3.330370 IP 192.168.1.132.5000 > 192.168.1.51.51486: Флаги [.], ack 354, победа 194 4, опции [nop,nop,TS val 326481238 ecr 943309869], длина 0

Bad1 - сторона сервера

    
13:28:1.311876 IP 192.168.1.51.51472 > 192.168.1.132.5000: Flags [S], seq 920400580, win 65535, опции [mss 1460,nop,wscale 4,nop,nop,TS val 943307883 ecr 0,sackOK,eol], длина 0
13:28:1.311896 IP 192.168.1.132.5000 > 192.168.1.51.51472: Flags [S.], seq 3103085782, ack 920400581, win 14480, варианты [mss 1460,sackOK,TS val 326480733 ecr 943307883,nop,wscale 3], длина 0
13:28:1.313509 IP 192.168.1.51.51472 > 192.168.1.132.5000: Flags [.], Ack 1, win 8235, опции [nop,nop,TS val 943307884 ecr 326480733], длина 0
13:28:1.315614 IP 192.168.1.51.51472 > 192.168.1.132.5000: Флаги [P.], сек. 1: 351, кв. 1, выигрыш 8235, опции [нет, нет,TS val 943307886 ecr 326480733], длина 350
13:28:1.315727 IP 192.168.1.132.5000 > 192.168.1.51.51472: Флаги [.], Подтверждение 351, победа 1944 года, варианты [nop,nop,TS val 326480734 ecr 943307886], длина 0
13:28:1.316229 IP 192.168.1.51.51472 > 192.168.1.132.5000: Flags [P.], seq 351:353, ack 1, win 8235, варианты [nop,nop,TS val 943307886 ecr 326480733], длина 2
13:28:1.316242 IP 192.168.1.132.5000 > 192.168.1.51.51472: Флаги [.], Подтверждение 353, победа 1944 года, параметры [nop,nop,TS val 326480734 ecr 943307886], длина 0
13:28:1.321019 IP 192.168.1.132.5000 > 192.168.1.51.51472: Флаги [P.], сек. 1:18, кв. 353, победа 1944 г., опции [нет, нет,TS val 326480735 ecr 943307886], длина 17
13:28:1.321294 IP 192.168.1.132.5000 > 192.168.1.51.51472: Флаги [FP.], След. 18: 684, подтверждение 353, победа 1944, варианты [nop,nop,TS val 326480736 ecr 943307886], длина 666
13:28:1.321386 IP 192.168.1.132.5000 > 192.168.1.51.51472: Flags [R.], seq 685, ack 353, win 1944, варианты [nop,nop,TS val 326480736 ecr 943307886], длина 0
13:28:1.322727 IP 192.168.1.51.51472 > 192.168.1.132.5000: Flags [.], Ack 18, win 8234, варианты [nop,nop,TS val 943307891 ecr 326480735], длина 0
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: Flags [.], Ack 685, win 8192, опции [nop,nop,TS val 943307892 ecr 326480736], длина 0
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, выигрыш 65535, опции [mss 1460, nop, wscale 4, nop, nop, TS val 943307883 ecr 0, sackOK, eol ], длина 0
t:11.375764 IP 192.168.1.132.5000 > 192.168.1.51.51472: Флаги [S.], сек. 3103085782, акк 920400581, выигрыш 14480, опции [mss 1460, sackOK, TS val 326480733 ecr 943307883, nop, wscale 3], длина 0
t:11.376352 IP 192.168.1.51.51472 > 192.168.1.132.5000: Flags [.], ack 1, win 8235, опции [nop,nop,TS val 943307884 ecr 326480733], длина 0
t:11.378252 IP 192.168.1.51.51472 > 192.168.1.132.5000: Флаги [P.], сек. 1: 351, кв. 1, выигрыш 8235, опции [nop,nop,TS val 943307886 ecr 326480733], длина 350
t:11.379027 IP 192.168.1.51.51472 > 192.168.1.132.5000: Flags [P.], seq 351:353, ack 1, win 8235, варианты [nop,nop,TS val 943307886 ecr 326480733], длина 2
t:11.379732 IP 192.168.1.132.5000 > 192.168.1.51.51472: Flags [.], ack 351, win 1944, варианты [nop,nop,TS val 326480734 ecr 943307886], длина 0
t:11.380592 IP 192.168.1.132.5000 > 192.168.1.51.51472: Flags [.], ack 353, win 1944, варианты [nop,nop,TS val 326480734 ecr 943307886], длина 0
t:11.384968 IP 192.168.1.132.5000 > 192.168.1.51.51472: флаги [P.], сек. 1:18, кв. 353, победа 1944 г., опции [nop,nop,TS val 326480735 ecr 943307886], длина 17
t:11.385044 IP 192.168.1.51.51472 > 192.168.1.132.5000: Flags [.], ack 18, win 8234, options [nop,nop,TS val 943307891 ecr 326480735], длина 0
t:11.385586 IP 192.168.1.132.5000 > 192.168.1.51.51472: флаги [FP.], сек. 18: 684, подтверждение 353, победа 1944 г., опции [nop,nop,TS val 326480736 ecr 943307886], длина 666
t:11.385743 IP 192.168.1.51.51472 > 192.168.1.132.5000: Flags [.], ack 685, win 8192, опции [nop,nop,TS val 943307892 ecr 326480736], длина 0
t:11.385966 IP 192.168.1.132.5000 > 192.168.1.51.51472: флаги [R.], seq 685, ack 353, победа 1944 г., опции [nop,nop,TS val 326480736 ecr 943307886], длина 0
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, выигрыш 65535, варианты [mss 1460,nop,wscale 4,nop,nop,TS val 943307889 ecr 0,sackOK,eol], длина 0
13:28:1.319197 IP 192.168.1.132.5000 > 192.168.1.51.51473: Flags [S.], seq 2524685719, ack 1631526993, win 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, опции [nop,nop,TS val 943307890 ecr 326480735], длина 0
13:28:1.322219 IP 192.168.1.51.51473 > 192.168.1.132.5000: флаги [P.], сек. 1: 351, кв. 1, выигрыш 8235, опции [nop,nop,TS val 943307890 ecr 326480735], длина 350
13:28:1.322336 IP 192.168.1.132.5000 > 192.168.1.51.51473: Flags [.], ack 351, win 1944, варианты [nop,nop,TS val 326480736 ecr 943307890], длина 0
13:28:1.322689 IP 192.168.1.51.51473 > 192.168.1.132.5000: Flags [P.], seq 351:353, ack 1, win 8235, варианты [nop, nop, TS val 943307890 ecr 326480735], длина 2 13: 28: 1,322700 IP 192.168.1.132.5000 > 192.168.1.51.51473: Flags [.], Ack 353, win 1944, options [nop,nop,TS val 326480736 ecr 943307890], длина 0
13:28:1.326307 IP 192.168.1.132.5000 > 192.168.1.51.51473: Флаги [P.], сек. 1:18, кв. 353, победа 1944 г., опции [nop,nop,TS val 326480737 ecr 943307890], длина 17
13:28:1.326614 IP 192.168.1.132.5000 > 192.168.1.51.51473: Флаги [FP.], Сек. 18: 684, подтверждение 353, победа 1944 г., параметры [nop,nop,TS val 326480737 ecr 943307890], длина 666
13:28:1.326710 IP 192.168.1.132.5000 > 192.168.1.51.51473: Flags [R.], seq 685, ack 353, win 1944, варианты [nop,nop,TS val 326480737 ecr 943307890], длина 0
13:28:1.328499 IP 192.168.1.51.51473 > 192.168.1.132.5000: Flags [.], Ack 18, win 8234, options [nop,nop,TS val 943307896 ecr 326480737], длина 0
13:28:1.328509 IP 192.168.1.132.5000 > 192.168.1.51.51473: Flags [R], seq 2524685737, победа 0, длина 0
13:28:1.328514 IP 192.168.1.51.51473 > 192.168.1.132.5000: Flags [.], Ack 685, победа 8192, опции [nop, nop, TS val 943307896 ecr 32648 0737], длина 0
13:28:1.328517 IP 192.168.1.132.5000 > 192.168.1.51.51473: Флаги [R], seq 2524686404, победа 0, длина 0

0 ответов

Другие вопросы по тегам