Где я могу найти исходный код TCP New Reno и запустить его на NS3

Я планировал выполнить некоторую настройку управления перегрузкой для существующего протокола транспортного уровня. В данном случае я выбрал 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

1 ответ

Решение
  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.

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

При этом, если вы хотите изменить значение по умолчанию, вы можете сделать это, позвонив 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 пытается имитировать реальные реализации в том, как они работают, код, который вы пишете в ns-3, почти наверняка не будет работать как есть в любой операционной системе. Если вы хотите протестировать новый алгоритм управления перегрузкой на реальных устройствах, вам нужно научиться программировать именно это устройство.

В зависимости от того, что вы делаете, вам может быть полезно использовать подставку для сетевого моделирования.

Другие вопросы по тегам