Почему заголовки этого образца SPDY SYN_STREAM явно не сжаты?

Я экспериментирую с протоколом SPDY и наткнулся на образец протокола SPDY (который можно загрузить, используя ссылку " вложение").

Вот как я это посмотрел:

  1. Откройте файл pcapng в Wireshark 1.12.2 (или новее)
  2. Щелкните правой кнопкой мыши на любом фрейме SSL/TLS и перейдите в Настройки протокола -> Список ключей RSA...
  3. Нажмите новый и введите IP-адрес 0.0.0.0, порт 443, протокол Spdy и путь к этому файлу ключа,
  4. Щелкните правой кнопкой мыши на любом кадре SPDY, перейдите в Настройки протокола -> Разархивировать заголовки SPDY, чтобы отключить распаковку заголовка SPDY.
  5. Перейдите к кадру 45 и обратите внимание, что в слое "SPDY: SYN_STREAM" после выделения "Блок заголовка" шестнадцатеричный дамп ниже доступен для чтения.

Согласно спецификации SPDY, это должно быть сжато. Почему я вижу это? Есть ли способ отключить сжатие заголовка в протоколе SPDY? Я использую Wireshark неправильный путь?

1 ответ

Решение

О спецификации

Проект, на который вы ссылаетесь, гласит:

Все содержимое блока заголовка "имя / значение" сжимается с помощью zlib. Существует один поток zlib для всех пар имя-значение в одном направлении соединения. SPDY использует SYNC_FLUSH между каждым сжатым кадром.

Замечания по реализации: механизм сжатия может быть настроен на скорость или размер. Оптимизация по размеру увеличивает использование памяти и использование процессора. Поскольку блоки заголовков обычно невелики, разработчики могут захотеть уменьшить размер окна механизма сжатия с 15 бит по умолчанию (окно 32 КБ) до более чем 11 бит (окно 2 КБ). Точная настройка выбирается компрессором, декомпрессор будет работать с любой настройкой.

Это не обеспечивает какого-либо уровня сжатия. Фактически, вы можете использовать zlib вообще без сжатия, это поддерживается форматом zlib:

Уровень 0 на самом деле вообще не сжимает и фактически немного расширяет данные, создавая формат zlib (это не побайтная копия входных данных).

О образце

Я связался с автором образца. Оказывается, он использовал nginx для своего эксперимента. В предоставленных им документах nginx был настроен так:

 # SPDY
 server {
     listen       443 ssl spdy;
     server_name  localhost;
     ssl_certificate      cert.pem;
     ssl_certificate_key  key.pem;
     ssl_session_cache    shared:SSL:1m;
     ssl_session_timeout  5m;
     ssl_ciphers  DES-CBC3-SHA;
     ssl_prefer_server_ciphers  on;
     location / {
         root   html;
         index  index.html index.htm;
     }

Однако в документации nginx говорится, что сжатие заголовков должно быть указано явно:

Syntax: spdy_headers_comp level;
Default : spdy_headers_comp 0;

Устанавливает уровень сжатия заголовка. [...] Специальное значение 0 отключает сжатие заголовка.

Это означает, что сжатие заголовков, скорее всего, не было включено для эксперимента.

Мой вывод

  • Да, вы можете отключить сжатие заголовков в SPDY, но вы должны сохранить формат zlib с уровнем сжатия 0
  • Вы используете Wireshark правильно. Используемый вами образец был создан с уровнем сжатия 0
Другие вопросы по тегам