У меня есть клиентское / серверное приложение, которое обменивается данными по HTTP. Сервер находится на другом конце Земли от некоторых клиентов. Трафик, которым обмениваются сервер и клиент, имеет очень низкую пропускную способность.
Ночью связь работает достаточно хорошо, не очень хорошо, из любой точки планеты, но днем зарубежная связь работает плохо. Только пользователи, живущие внутри страны, могут подключаться, а все остальные получают таймауты TCP, повторные передачи и т. Д. Я думаю, что это из-за увеличения сетевого трафика в часы пик, вызывающего задержки.
Перенести сервер - дорогой вариант. Я хотел бы предоставить удобное решение для моих пользователей, запускающих клиент, не требуя от них перенастраивать таймауты Windows и т. Д. Я подумал, что одним из решений может быть прокси-сервер рядом с пользователями, который может принимать TCP-соединение и быть более терпеливым, когда подключение к серверу. А может перейти на UDP. (Однако UDP был бы проблемой.)
Может у меня все не так? Что может привести к тому, что соединение HTTP будет хорошим с 0: 00UTC до 9-11 UTC, а затем будет нестабильным в остальную часть дня? В Wireshark я вижу много повторяющихся ACK, повторных передач TCP, потерянных сегментов и т. Д. Клиенты из той же страны, что и сервер, не жалуются. Я тестировал подключение к своему серверу локально и через некоторые онлайн-прокси (hidemyass.com), и первый всегда работает, а второй зависит от времени суток.
редактировать: Я переключился с порта 8080 на порт 80 для HTTP-трафика, и, похоже, это помогло! Возможно ли, что один из маршрутизаторов по пути обрабатывает трафик порта 80 иначе, чем порт 8080? Я также пробовал порт 81, у него тоже плохая связь. Кто-нибудь когда-нибудь слышал о таком?
Если использование полосы пропускания вашего сервера не достигает пика в самое худшее время подключения,
проблема может быть не на вашем сервере, а скорее всего в пути; как вы предлагаете.
Вы уточняли у своего интернет-провайдера?
Если у вас есть общее соединение, которое достигает максимума в общей области, вы можете терять доступную пропускную способность и по-прежнему не показывать пиковое использование в измерениях вашего сервера.
Поскольку вы обнаруживаете плохое соединение в дневное время, я ожидаю, что кто-то еще рядом с вашим восходящим каналом задушит его - звучит очень похоже на ссылку для общего доступа, активно используемую вашими соседями.
Обновление: чтобы ответить на ваш вопрос в комментарии,
Вам нужна дополнительная информация.
В качестве шага по устранению неполадок я предлагаю непрерывный сброс tracert в файл. Запустите его в несколько пунктов назначения (города, континенты), чтобы изолировать основные пути к Интернету. Если вам доступны удаленные сетевые ресурсы, вы можете запустить или запланировать тесты пропускной способности, чтобы увидеть, как выглядит производительность в разное время дня из разных точек мира. iPerf - хороший инструмент для такого рода тестов.
Затем на следующий день просмотрите / нанесите на график результаты, чтобы увидеть, есть ли закономерности, указывающие, где может возникнуть проблема. Конечно, поскольку маршрут трассировки является трафиком с низким приоритетом и блокируется многими брандмауэрами, следует ожидать некоторого количества потерь или потерь на определенных переходах. Если возможно, проведите тот же тест и в обратном направлении. Вы можете столкнуться с асимметричными путями или другими странными условиями маршрутизации. Обладая этой информацией, вы могли бы более конкретно общаться со своим интернет-провайдером.
Возможно, Интернет-провайдер, которого вы используете, не владеет международным соединением, и это могут быть другие Интернет-провайдеры, которые создают проблему. Возможно, будет целесообразно переключить интернет-провайдеров на одного, в котором им будет принадлежать весь путь к ключевым странам / континентам.
Нил