Установка окна приема TCP в C и работа с tcpdump в Linux

Я выполняю поле Linux, работающее 2.6.9-55. ELsmp, x86_64.

Я пытаюсь установить окно приема TCP при помощи setsockopt () функция с помощью C. Я пробую следующее:

rwnd = 1024;
setsockopt(sock, SOL_SOCKET, SO_RCVBUF, (char *)&rwnd, sizeof(rwnd));

Сегмент кода выше находится в клиентской программе, которая получает данные из сервера. Когда я начинаю программу, чтобы получить и наблюдать вывод tcpdump, я наблюдаю согласование окна как так:

11:34:40.257755 IP clientReceiver.42464 > serverSender.8991: 
S 1742042788:1742042788(0) win 5840 

Мы видим, что клиентская программа на самом деле согласовывает окно, отличающееся от того, что я установил в клиентской программе. Однако от того, как я могу интерпретировать текст Steven ("Проиллюстрированный TCP/IP, Объем 1") Раздел 20.4, я верю Вам эффект, к чему он обращается во втором блоке цитирования в Разделе 20,4 использования setsockopt () вызов, который я использую (см. выше).

Я хотел бы понять, где я пошел не так, как надо.

Возможно, моя интерпретация того, что говорит Stevens, является неправильной. В этом случае Вы могли указать на меня на корректный способ установить получить размер буфера? Как доказательство моего беспорядка, я отсылаю страницу справочника сокетов TCP Linux по http://linux.die.net/man/7/tcp (см. комментарий к SO_RCFBUF).

Что я пропускаю в этой истории? Как я управляю получить размером буфера (и имею его шоу в выводе tcpdump)? Обратите внимание на то, что я ссылаюсь на здесь установку опции SO_RCFBUF сокета - я понимаю, что это - то, что обнаруживается в согласовании окна в SYN.

Любой вход ценится.

10
задан Sonny 8 February 2010 в 20:23
поделиться

3 ответа

Вам также необходимо использовать TCP_WINDOW_CLAMP

rcvbuf = 2048;
setsockopt(sock, SOL_SOCKET, SO_RCVBUF, (char *)& rcvbuf, sizeof(rcvbuf));
clamp = 1024;
setsockopt(sock, SOL_SOCKET, TCP_WINDOW_CLAMP, (char *)& clamp, sizeof(clamp));

Обратите внимание, что rcvbuf в два раза больше зажима, может быть и больше. Вы можете дать ему автонастройку, оконный зажим все равно будет работать. Это не переносно.

8
ответ дан 4 December 2019 в 03:16
поделиться

Размер приемного буфера можно уменьшить только перед подключением разъема - его можно увеличить в любой момент. В каком порядке вы вызываете sockopt() относительно connect()?

.
4
ответ дан 4 December 2019 в 03:16
поделиться

Существует только одно место в рамку .NET, где у вас есть , чтобы знать IL, классы в пространстве имен System.Reflection.Emit. Он позволяет создавать код на лету, что может быть полезно в выбранных случаях.

Лучший способ получить воздействие IL - это инструмент Ildasm.exe, Reflector тоже может работать. Очень удобный способ его выполнения - добавление в меню «Сервис». Сервис + Внешние инструменты, Добавить.

  • Title = Ildasm
  • Команда = c :\Program Files\Microsoft SDK\Windows\v6.0A\Bin\ildasm.exe
  • Аргументы = $ (TargetPath)
  • Начальный каталог = $ (TargetDir)

Теперь можно записать некоторые управляемые файлы Вам будет довольно легко, если вы уже были подвержены машинному коду. Просто имейте в виду, что IL нетипизирован, тот же код операции используется для любого типа значения.

Следующий шаг - посмотреть, как IL преобразуется в машинный код. Начните отладку, щелкните код правой кнопкой мыши и выберите «Перейти к разборке». Будьте осторожны, что вы не будете смотреть на реальный машинный код, если не запустите сборку Release и не включите оптимизацию JIT. Сервис + Параметры, Отладка, кнопка «Подавить оптимизацию JIT при загрузке модуля».

-121--26694-

Случайные ли зависимости в GAC? Мы столкнулись с подобной проблемой на нашем сервере сборки, когда чей-то сценарий после сборки GAC имел несколько сборок. Наши установщики больше не будут упаковывать эти предметы в установку, поэтому приложение не будет запущено при последующей установке в тесте.

-121--4518433-

Для TCP необходимо передать значение rwnd во время recv.

recv (носок, буф, rwnd, 0);

Это должно принимать 1024 байт.

-6
ответ дан 4 December 2019 в 03:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: