Где я могу найти исходный код TCP New Reno и запустить его на NS3 - PullRequest
1 голос
/ 06 апреля 2020

Я планировал выполнить некоторую настройку управления перегрузкой на существующем протоколе транспортного уровня. В этом случае я выбрал TCP New Reno. В основном у меня есть две проблемы, связанные с этим.

1) Основная проблема заключается в том, как я могу найти исходный код TCP New Reno.

2) Другое дело, даже если я нашел исходный код как я могу использовать его внутри NS3 между двумя узлами (в седьмом. cc, они не указали протокол. Он принимает протокол по умолчанию. Мне нужно использовать TCP New Reno)

Я попытался найти, но очень мало информации, касающейся проблемы. Я нашел какой-то исходный код из документации NS3. Но я не думаю, что это настоящий исходный код для TCP New Reno.

tcp-newreno.h >> взят из https://www.nsnam.org/docs/release/3.18/doxygen/tcp-newreno_8h_source.html

tcp- newreno. cc >> взято из https://www.nsnam.org/docs/release/3.18/doxygen/tcp-newreno_8cc_source.html#l00247

1 Ответ

2 голосов
/ 08 апреля 2020
  1. Предоставленные вами ссылки содержат фактический исходный код TcpNewReno, но они относятся к версии 3.18. Текущая версия 3.30.1. Итак, код, который вы нашли, устарел. Если вы используете последнюю версию ns-3 (которую я рекомендую), то TcpNewReno реализуется в ./src/internet/model/tcp-congestion-ops.cc. Если вы посмотрите на документацию API TcpNewReno, вы найдете ссылки на исходный код для каждого члена / функции. Документация по API обязательна.

  2. Протокол по умолчанию - TcpNewReno, поэтому устанавливать его не нужно. Вы можете проверить значение по умолчанию двумя способами:

    1. В документации по модели TCP сказано, что "поддерживается несколько алгоритмов управления перегрузкой, с NewReno по умолчанию" в ns-3 TCP section.

    2. Вы можете убедиться, что по умолчанию TCP SocketType установлен как TcpNewReno в ./src/internet/model/tcp-l4-protocol.cc в GetTypeId function.

При этом, если вы хотите изменить значение по умолчанию, вы можете сделать это, вызвав Config::SetDefault в главной функции вашего скрипта следующим образом

Config::SetDefault ("ns3::TcpL4Protocol::SocketType", StringValue ("ns3::TcpNewReno"));

Продолжение

Если мне нужно отредактировать алгоритм вычисления CWND в TCPNewReno, где мне нужно внести изменения?

Если вы хотите создать новый алгоритм управления перегрузкой, я предлагаю вам НЕ изменять существующий код TcpNewReno. Вместо этого создайте подкласс TcpNewReno. Определите и объявите этот подкласс в новых файлах ./src/internet/model/tcp-placeholder.{h,cc}. Затем вам нужно добавить эти новые файлы в ./src/internet/wscript. После этого эти новые файлы должны скомпилироваться при сборке с ./waf. Опять же, чтобы фактически использовать этот новый алгоритм управления перегрузкой, вам нужно сделать Config::SetDefault вызов выше.

Поскольку позже, после разработки, мне нужно получить измененный исходный код TCPNewReno и поместите это в фактическое устройство. Как я могу это сделать?

Это, вероятно, не происходит. Хотя ns-3 пытается имитировать c реальных реализаций того, как они работают, код, который вы пишете в ns-3 , почти наверняка не будет работать как есть на любой операционной системе , Если вы хотите протестировать новый алгоритм управления перегрузкой на реальных устройствах, вам нужно научиться программировать это устройство специально.

В зависимости от того, что вы делаете, вам может пригодиться Network Simulation Cradle .

...