2011-02-17 78 views
1

最近我正在用模拟器进行网络实验。我发现,当MAC层的队列已满时,上层(例如IP)仍然向下转发数据包,此实现选择丢弃这些数据包。我想知道的是,在真实世界的实现中,就像Linux内核中的协议栈一样,如果MAC层的队列(接口的缓冲区?)已满,并且有更多来自套接字的数据包,选择放弃它们还是分配更多内存?为什么?当MAC层队列满时,现实世界会发生什么?下降?

谢谢。

回答

1

正确的做法应该是流失。这会将IP堆栈推回套接字层。 sendsendto API将阻塞或失败,从而建立流量控制(套接字不应该能够比MAC层发送更快)。

数据包应该被丢弃的唯一时间是在一个解复用点上。在有两个分支要发送并且其中一个分支被阻止的情况下。在这里,您必须丢弃数据包,因为不会阻止流量沿着一个分支流动,因为另一个分支被阻塞。但是只有一个发送分支的情况下,您总是流出。

相关问题