uIP 1.0
|
Базовая реализация uIP TCP разрешает иметь в обработке каждый момент времени только один сегмент TCP на каждое соединение TCP. Подробнее...
Файлы | |
файл | uip-split.h |
Модуль для разделения уходящих сегментов TCP на две части, чтобы обойти delayed ACK и уменьшить деградацию пропускной способности. | |
Функции | |
void | uip_split_output (void) |
Обработка исходящих пакетов. |
Базовая реализация uIP TCP разрешает иметь в обработке каждый момент времени только один сегмент TCP на каждое соединение TCP.
Из-за алгоритма отложенного ACK, реализованного в большинстве приемников TCP, ограничение uIP на количество сегментов TCP в обработке серьезно снижает максимально допустимую пропускную способность, когда uIP передает данные.
Модуль uip-split является хаком, который пытается исправить эту ситуацию. Путем разбиения на две части исходящих сегментов максимального размера алгоритм отложенного ACK не будет задействован в приемниках TCP. Это улучшает быстродействие на порядок при отправке данных из uIP.
Модуль uip-split использует модуль uip-fw (uIP IP packet forwarding, перенаправление пакетов) для отправки пакетов. Таким образом, модуль uip-fw должен быть настроен с походящим сетевым интерфейсом, чтобы этот модуль мог работать.
void uip_split_output | ( | void | ) |
Обработка исходящих пакетов.
Эта функция инспектирует исходящий пакет в буфере uip_buf и отправляет его с использованием функции uip_fw_output(). Если пакет занимает полноразмерный сегмент TCP, то он будет разбит на 2 сегмента, которые будут переданы по отдельности. Эта функция должна быть вызвана вместо действительной выходной функции драйвера устройства, или функции uip_fw_output().
Подразумевается, что заголовки исходящего пакета находятся в буфере uip_buf, и подразумевается, что полезная нагрузка находится в любом месте, куда указывает uip_appdata. Также подразумевается, что длина исходящего пакета находится в переменной uip_len.
См. определение в файле uip-split.c строка 50
Перекрестные ссылки uip_acc32, uip_add32(), uip_appdata, UIP_BUFSIZE, uip_ipchksum(), uip_len, UIP_LLH_LEN и uip_tcpchksum().