在 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
。如果是这样我怎么能改变它?