Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Медленно передаются пакеы по Ethernet
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Интерфейсы
ruslannd
Использую библиотеку TCP/IP библиотеку от Keil. Есть следующая проблема:
Мое устройство на LPC2388 является сервером. Комп - клиент. Соединено все через Ethernet.
Есть проблема: от клиента пакеты могу принимать десятками за секунду. А от меня могу передать не более 3-4.
Затык происходит при ожидании, когда функция tcp_check_send кейловской библиотеки разрешит передать следующий пакет.
От длины пакета ничего не зависит. С чем это может быть связано?
ruslannd
Посмотрел монитором Ehternet'a.

Получилось что клиент (комп) отсылает пакет подтверждения (ACK) через 0,2 секунды. Я так понимаю, что это связано с флагами Ethernet пакета. Вот только какими? Или я что-то путаю?
:-)
Я не профессионал в этой области. но раз других комментариев нет, выскажусь. На сколько я понимаю, смотреть надо в сторону 'delayed ack'. Основной смысл такой:

Винда, посылает подстверждение получения пакета либо по истечении 200 мс, либо если сразу же после первого пакета был отправлен второй пакет без получения подтверждения доставки первого пакета (т.е. отправляется один ack на два пакета). Т.е. чтобы не загружать сеть мелкими пакетами винда посылает подтверждение на каждый второй принятый пакет. Видимо, применяемы вами, tcp/ip стек не поддерживает 'delayed ack'.

ЗЫ Кажется, на форуме уже поднимались подобные вопросы.
ruslannd
Я на форуме порылся, про delayed ack нашел, но применительно к кейловской реализации ничего не обнаружил. В настройках TCP ничего нет.
VslavX
Цитата(ruslannd @ Oct 31 2009, 15:51) *
Получилось что клиент (комп) отсылает пакет подтверждения (ACK) через 0,2 секунды. Я так понимаю, что это связано с флагами Ethernet пакета.

Нет, это с флагами Ethernеt не связано. Это связано с особенностями протокола TCP, которые называются delayed ACK и Nagle Algorithm, причем эти особенности в Вашем случае "срабатывают" на стороне PC. Если у Вас клиент - самописная программа, то подавить эти "TCP features" для конкретного сокета можно при помощи функции setsockopt(TCP_NODELAY) или глобально (для всей системы): http://msdn.microsoft.com/en-us/library/aa505957.aspx
ruslannd
Цитата(VslavX @ Nov 1 2009, 00:00) *
Нет, это с флагами Ethernеt не связано. Это связано с особенностями протокола TCP, которые называются delayed ACK и Nagle Algorithm, причем эти особенности в Вашем случае "срабатывают" на стороне PC. Если у Вас клиент - самописная программа, то подавить эти "TCP features" для конкретного сокета можно при помощи функции setsockopt(TCP_NODELAY) или глобально (для всей системы): http://msdn.microsoft.com/en-us/library/aa505957.aspx


Спасибо. Проблема решена.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.