#networking #tcp
#сеть #tcp
Вопрос:
У меня есть приложение, которое отправляет веб-запросы, и через некоторый переменный промежуток времени мы начинаем получать ошибки тайм-аута соединения. Анализ пакетов TCP / IP показывает следующее, происходящее при каждой попытке подключения:
Нет. Информация о протоколе назначения источника времени
98635 2011-04-21 10:13:47.192237 172.22.3.250 172.22.3.100 TCP [повторно используемые номера портов TCP] httpx > http-alt [SYN] Seq = 0 Win = 65535 Len = 0 MSS = 1460
98639 2011-04-21 10:13:47.192397 172.22.3.100 172.22.3.250 TCP http-alt > httpx [SYN, ACK] Seq = 0 Ack = 1 Win = 5840 Len = 0 MSS = 1460
98641 2011-04-21 10:13:47.192425 172.22.3.250 172.22.3.100 TCP httpx > http-alt [ACK] Seq = 1 Ack = 1 Win = 65535 Len = 0
98646 2011-04-21 10:13:47.192502 172.22.3.250 172.22.3.100 TCP httpx > http-alt [RST, ACK] Seq = 1 Ack = 1 Win = 0 Len = 0
Как только это произойдет, клиентский компьютер необходимо перезагрузить, чтобы устранить проблему. Перезапуск клиентского или серверного приложения или перезагрузка сервера не имеют никакого эффекта. Сравнение сведений о пакете между рабочими и нерабочими сообщениями не выявляет различий по флагам и т.д.
Спасибо,
Нил
Комментарии:
1. Забыл упомянуть, что мы используем классы MFC: CInternetConnection, CHttpConnection, CHttpFile
2. Здесь нет никаких доказательств тайм-аута, если только вы не используете патологически низкое значение тайм-аута. Клиент решил сбросить соединение через 77 мс после того, как он решил завершить его. Что-то не так с оборудованием этого клиента или операционной системой.
Ответ №1:
TCP Port numbers reused
это подсказка. Возможно, ваш клиент повторно использует номера портов старого соединения, которое должно было быть закрыто.
Привязывается ли ваш клиент к статическому исходному порту? Если да, возможно, операционная система клиента отклоняет пакеты с сервера, поскольку считает, что они принадлежат старому соединению. Операционная система отклоняет пакеты, поэтому проблему решает только перезагрузка клиента. (В качестве альтернативы попробуйте подождать пару минут).
При открытии соединения на клиенте не назначайте порт источника.
Комментарии:
1. Мы используем HTTP-классы MFC, поэтому у меня нет контроля над назначением порта. Мы также видим, что он работает в течение некоторого периода времени даже для повторно используемых портов, несколько раз прокручивая доступные порты, прежде чем начнется сбой.