nApoBo3, Задача состоит в том, чтобы можно было подключиться по SSH к Linux машине из любой программы типа Putty, WinSCP... Еще должна грузиться веб-страница устройства через это соединение.
Вообще после подключения USB к Windows образуется сетевое соединение, а дальше с ним можно делать все, что угодно.
Судя по описанию, размер окна TCP должен это решать. Но пока не получил какой-либо положительный результат.
Можете ниже посмотреть, что по этому поводу писали, там и проблема описана подробнее.
DDwrt100, максимальный размер MSS = MTU − размер заголовка IP − размер заголовка TCP.
То есть, ограничивая MTU, я ограничивал и MSS. При этом длина всех пакетов при передаче равнялась этому максимальному MSS.
График окна для MTU 900 байт.
Здесь зеленая линия - размер окна, он не меняется.
А с синей странности. Отправляется по два пакета, приходит подтверждение. Так несколько раз происходит. Потом почему-то отправляется не 2, а 3 пакета, затем поднимаемся на следующую ступеньку.
Почему он отправляет иногда по три пакета?
pfg21, MTU и размер окна не путаю, пробовал менять именно размер окна.
Да, нужно что-то делать с размером окна. Буду думать в этом направлении.
Но простая подмена, как я описал выше, не дала положительного результата.
Получатель отправляет подтверждение, в котором указывает размер окна 32000 (например), на ретрансляторе это значение подменяется на количество свободных байт - 4000.
После этого отправитель знает, что может отправить 2 пакета по 1500 байт.
НО! Получатель думает, что ему могут отправить 32000 байт.
В ТСР подтверждения шлются сначала на каждый пакет, потом на каждый второй, потом на каждый третий итд, если не возникает никаких проблем.
Получается, что отправитель может отправить только два пакета из-за размера окна, а получатель ждет третий пакет, чтобы отправить подтверждение. Но его нет и все подвисает до какого-то таймаута.
Может быть нужно ограничить размер окна у получателя.
А без каких-то изменений получается так. Размер окна сначала растет от нуля, а потом всегда приходит ~3000 и не меняется. Потому что получатель значительно быстрее обрабатывает байты, чем они приходят по медленному каналу и буфер всегда свободен на момент отправки подтверждения.
SysAn, с 750 проблема остается.
В WireShark-е есть график количества байтов, отправленных в сеть, но еще не подтвержденных. Этот график представляет собой лесенку в моем случае. При уменьшении MTU изменяется высота ступенек и их количество. А после переполнение, ретрансмитт и все заново.
SysAn, Автоматом должен меняться MTU?
Могу попробовать, но буфер на STM все равно переполнится через какое-то количество пакетов. И потери уменьшатся, но все равно будут.
В обратную сторону работает без единой ошибки, с равномерной скоростью и все такое. Кажется, что как-то должно быть можно сделать аналогичное качество канала и в прямом направлении.
pfg21, Так ведь размер окна может меняться в процессе передачи и отправляется в каждом пакете.
Я менял его на ретрансляторе в каждом пакете в обе стороны и вот, что получилось:
Сначала идет 1 подтверждение на 1 пакет, потом ТРС разгоняется и отправляет подтверждения на каждый второй пакет. До этого момента все работает хорошо (как и ожидалось). Потом подтверждение начинает отправляться на каждый третий пакет, а физический размер окна позволяет отправить только два.
В итоге получается очень долгий простой и итоговая скорость очень маленькая.
А как значение MTU связано с общей пропускной способностью?
Сейчас оно 1500, если уменьшить, то будет та же проблема, но через большее количество маленьких пакетов.
Я пробовал подменять размер окна на STM, но это вызвало еще больше ошибок. Размер окна должен задавать Linux.
Надо попробовать ограничивать размер окна на Линуксе. Но он поддерживает несколько интерфейсов, поэтому могут быть проблемы с другими.
Wexter, Я не могу контролировать отправку пакетов. Скорость отправки как-то высчитывается из скорости установленного соединения и, по идее, времени ответа на TCP пакеты.
В том и вопрос, как использовать не всю пропускную способность USB или ее понизить?
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.
Вообще после подключения USB к Windows образуется сетевое соединение, а дальше с ним можно делать все, что угодно.
Судя по описанию, размер окна TCP должен это решать. Но пока не получил какой-либо положительный результат.
Можете ниже посмотреть, что по этому поводу писали, там и проблема описана подробнее.