Там, где TCP New Reno устанавливает пороговое значение после отбрасывания пакета в NS3 - PullRequest
1 голос
/ 12 апреля 2020

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

В tcp-l4-protocol.h он использует TcpClassicRecovery в качестве метода восстановления. В фазе ввода TcpClassicRecovery он использует следующий сегмент кода для установки текущего CWND:

void
TcpClassicRecovery::EnterRecovery (Ptr<TcpSocketState> tcb, uint32_t dupAckCount,
                                uint32_t unAckDataCount, uint32_t lastSackedBytes)
{
  NS_LOG_FUNCTION (this << tcb << dupAckCount << unAckDataCount << lastSackedBytes);
  NS_UNUSED (unAckDataCount);
  NS_UNUSED (lastSackedBytes);
  tcb->m_cWnd = tcb->m_ssThresh;
  tcb->m_cWndInfl = tcb->m_ssThresh + (dupAckCount * tcb->m_segmentSize);
}

Затем я предполагаю, что перед вызовом метода EnterRecovery cwnd уже обновлен. Мне нужно найти место, где обновляется cwnd.

Я также обновил TcpNewReno::GetSsThresh и проанализировал вывод. Но это также не тот метод, который мне нужен, так как он не сокращает cwnd до половины.

ПРИМЕЧАНИЕ. Я использую seventh.cc для проверки cwnd. Он всегда сбрасывает cwnd до 1072. График, который я получаю, также включен. Что мне нужно сделать, это сбросить cwnd до половины значения после отбрасывания пакета. Возможно seventh.cc не использует значение по умолчанию tcp-l4-protocol.h. Если так, как я могу изменить это?

enter image description here

1 Ответ

0 голосов
/ 13 апреля 2020

Я нашел ответ. Проблема была с seventh.cc. Он не использует протокол TCP уровня 4 по умолчанию.

Чтобы запустить протокол TCP уровня 4 по умолчанию (TCP New Reno), я нашел пример, который tcp-large-transfer.cc. Он расположен в ns-3.30/examples/tcp/tcp-large-transfer.cc.

...