Почему я получаю tcp сегмент, который сжимает окно? - PullRequest
1 голос
/ 03 апреля 2019

Я собирал пакеты с помощью Wireshark на моем ноутбуке и обнаружил, что пакет, отправленный сервером, сократил его окно приема.Это соединение из моего ubuntu18.04 с «connectivity-check.ubuntu.com».

Я прочитал rfc793 и TCPIP Illustrated volumn1, оба говорят: «Настоятельно не рекомендуется сокращать окно».

Вот вывод Wireshark.Я отключаю рассечение HTTP в Wireshark, чтобы отвлечь внимание.

   4198 0.026547255    2019-04-03 12:27:48.870761715 192.168.3.141         35.222.85.5           TCP      74     53846 → 80 [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=3960112411 TSecr=0 WS=128
   4199 0.281380222    2019-04-03 12:27:49.152141937 35.222.85.5           192.168.3.141         TCP      74     80 → 53846 [SYN, ACK] Seq=0 Ack=1 Win=28160 Len=0 MSS=1412 SACK_PERM=1 TSval=2281826280 TSecr=3960112411 WS=128
   4200 0.000092140    2019-04-03 12:27:49.152234077 192.168.3.141         35.222.85.5           TCP      66     53846 → 80 [ACK] Seq=1 Ack=1 Win=29312 Len=0 TSval=3960112693 TSecr=2281826280
   4201 0.000191823    2019-04-03 12:27:49.152425900 192.168.3.141         35.222.85.5           TCP      153    53846 → 80 [PSH, ACK] Seq=1 Ack=1 Win=29312 Len=87 TSval=3960112693 TSecr=2281826280
   4202 0.306769219    2019-04-03 12:27:49.459195119 35.222.85.5           192.168.3.141         TCP      66     80 → 53846 [ACK] Seq=1 Ack=88 Win=26112 Len=0 TSval=2281826585 TSecr=3960112693
   4203 0.000076022    2019-04-03 12:27:49.459271141 35.222.85.5           192.168.3.141         TCP      214    80 → 53846 [PSH, ACK] Seq=1 Ack=88 Win=26112 Len=148 TSval=2281826586 TSecr=3960112693
   4204 0.000028644    2019-04-03 12:27:49.459299785 192.168.3.141         35.222.85.5           TCP      66     53846 → 80 [ACK] Seq=88 Ack=149 Win=30336 Len=0 TSval=3960113000 TSecr=2281826586
   4205 0.000045328    2019-04-03 12:27:49.459345113 35.222.85.5           192.168.3.141         TCP      66     80 → 53846 [FIN, ACK] Seq=149 Ack=88 Win=26112 Len=0 TSval=2281826586 TSecr=3960112693
   4206 0.000183562    2019-04-03 12:27:49.459528675 192.168.3.141         35.222.85.5           TCP      66     53846 → 80 [FIN, ACK] Seq=88 Ack=150 Win=30336 Len=0 TSval=3960113000 TSecr=2281826586
   4207 0.245163856    2019-04-03 12:27:49.704692531 35.222.85.5           192.168.3.141         TCP      66     80 → 53846 [ACK] Seq=150 Ack=89 Win=26112 Len=0 TSval=2281826890 TSecr=3960113000

Как показывает захваченный результат, кадр 4199 с сервера объявляет окно размером 28160, но после получения 87 байтов данных в 4201 окно сжимается до 26112 в 4202, что в точности равно 2048 (это то, чтопотому что сервер просто выгружает страницу памяти?)

Я хочу знать, что может быть причиной того, что сервер сократил свое окно приема TCP?RFC не одобряет это, я думал, что такое поведение не будет реализовано в стеке TCPIP в ОС.

1 Ответ

2 голосов
/ 13 апреля 2019

Это нормальное поведение.Когда Сервер получает данные в своем буфере и не может немедленно отправить их на прикладной уровень, он уменьшает объявленный размер окна, чтобы предотвратить отбрасывание полученных пакетов. Вы путаете это ожидаемое поведение с проблемой Сокращения окна, которая возникает, когда мы смещаем правый край буфера отправителя влево.

Вы можете сослаться на это для более подробного руководства по проблеме Сокращения окна:http://www.tcpipguide.com/free/t_TCPWindowManagementIssues.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...