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


 
english
обо мне
 
sysoev.ru
 
nginx
 
mod_accel
mod_realip
mod_deflate
программирование
всякая всячина
windows
freebsd
apache
pppd
unix
web
 
 

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

 

22.01.1999

Способ сжатия заголовков TCP/IP-пакетов был предложен Van-Jacobson в RFC 1144 и 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) Игорь Сысоев
http://sysoev.ru