Где я могу найти исходный код 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 ответ
Предоставляемые вами ссылки содержат фактический исходный код TcpNewReno, но они относятся к версии 3.18. Текущая версия - 3.30.1. Итак, найденный вами код устарел. Если вы используете последнюю версию ns-3 (которую я рекомендую), то
TcpNewReno
реализуется в./src/internet/model/tcp-congestion-ops.cc
. Если вы посмотрите документацию по APITcpNewReno
, вы найдете ссылки на исходный код для каждого члена / функции. Без документации API не обойтись.Протокол по умолчанию
TcpNewReno
, поэтому устанавливать его не нужно. Проверить значение по умолчанию можно двумя способами:В документации модели TCP говорится, что "поддерживаются несколько алгоритмов управления перегрузкой, с NewReno по умолчанию" в разделе ns-3 TCP.
Вы можете проверить, что 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, почти наверняка не будет работать как есть в любой операционной системе. Если вы хотите протестировать новый алгоритм управления перегрузкой на реальных устройствах, вам нужно научиться программировать именно это устройство.
В зависимости от того, что вы делаете, вам может быть полезно использовать подставку для сетевого моделирования.