В 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
. Если так, как я могу изменить это?