丢失的数据包仅在第一次运行中发生

lost packets only occur in the first run

本文关键字:运行 第一次 数据包      更新时间:2023-10-16

我正在尝试提高在巨大网络上工作的多播应用程序的性能(以减少其数据包丢失(

我的实验表明,在应用程序的第一次运行中,有一些丢失的数据包。但是,当我在上一个运行后再次运行应用程序(有时也有一点延迟(时,没有数据包丢失。虽然当我在长时间延迟后重新运行应用程序(例如20分钟左右(时,我再次看到数据包丢失。

当我检查他们的时间戳时,我看到丢失的数据包主要是一开始发送的数据包。因此,似乎开关或路由器需要一些热身!或某些东西(我不知道如何称呼这种现象(。

我已经检查了tcpdump的结果,并且接收器应用程序收到的数据包数量完全相同的数据包数量。

我已经尝试了以下技巧:1-在不同的CPU内核和调度策略上更改过程的亲和力2-更改插座描述符的优先级

更改套接字描述符的优先级已经使它变得更好(减少了丢失的数据包(,但是将优先级设置为高,同样有一些丢失的数据包(

// For example
MulticastSender multicast_sender;
multicast_sender.init();
// Here I need a function in order to find out the switch is already warmed up or not

while (some condition)
{
    ////
    multicast_sender.send(something);
    ////
}

我想知道添加一些代码的任何可能的方法是为了找出开关(或路由器(是否已经变热!足够了?

,如果您的开关&路由器是动态多播网络的一部分(例如,基于PIMIGMP(,它确实需要一定的路径设置(取决于M-Cast网络的类型,各个过程可能会影响设置发件人和接收器之间的路径(,,(,,而且您无法控制M-Cast网络配置(以便您可以修复它或设置静态路径(,那么您无能为力。

即使您确实具有控制访问权限,也不是所有导致M-Cast数据包丢失的事件都可以"固定"(其中一些是固有的M-Casting(。例如,就像您的M-Cast在PIM-sparse模式下运行一样,从共享树到最短树的转换可能会导致损失。当会合点(在稀疏模式下找到RP(完成发件人的注册过程时,一些数据包损失是不可避免的,等等。

与您的网络管理员检查 - 查看他们是否可以帮助您在发件人之间设置"静态"路径(这并不总是可能性(和接收器,或者至少最小化数据包丢失(M-casting(。

从应用程序的角度来看:如果您还编写了接收者的部分 - 那么最好采用一些反馈机制,指示数据包丢失并可能重新传输内容。