Персональный
сайт
Игоря
Сысоева



sysoev.ru
mod_accel
mod_deflate
программирование
windows
freebsd
apache
pppd
unix
web

для писем

Сжатие заголовков TCP/IP-пакетов

 

22.01.1999

Способ сжатия заголовков TCP/IP-пакетов был предложен Van-Jacobson в RFC 1144 и RFC 1332. Суть его состоит в следующем. В каждом TCP/IP-пакете IP- и TCP-заголовки составляют в сумме 40 байт, и половина из них в пределах одного TCP/IP-соединения меняется достаточно редко. При низкоскоростном соединении число одновременных TCP/IP-соединений не велико и обычно не превышает двух десятков. Поэтому для каждого TCP/IP-соединения можно выделить слот, который будет содержать всю информацию о состоянии соединения. Это позволяет заменить 20 неизменных байт одним байтом, равным номеру слота. При использовании такой схемы ещё 2 поля по 2 байта каждое становятся избыточными и их можно убрать без потери функциональности. Оставшиеся поля обычно меняются незначительно и для кодирования их изменения требуется меньше байт, чем для кодирования значений этих полей. Кроме того, эти поля обычно меняются не одновременно. Всё это в результате позволяет уменьшить размеры заголовка более половины пакетов до размеров от 3 до 16 байт. Единственное поле, передаваемое всегда в неизменном виде, – это 2 байта контрольной суммы, находящейся в заголовке TCP.

pppd поддерживает до 16 слотов и до недавних пор этого было вполне достаточно, но сейчас скорости модемных соединений существенно выросли и этого уже не хватает. Например, у меня при соединении по протоколу v.90 и скоростью 49333/28800 существует, как правило, около десяти соединений, а в пике их число достигает двадцати.

(C) Igor Sysoev
http://sysoev.ru