- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这与 C# UDP packetloss though all packets arrive (WireShark) 相同的问题,但我确实设置了 ReceiverBuffer
到 10MB,我还监控 Socket.Available
这表明缓冲区甚至没有达到 200k 的利用率。
在一个简单的测试案例中,使用 tcpreplay 以 40Mbps 的速率发送相同的小(多播)UDP 数据包(净数据大小:137)25,000 次,通常不是所有数据包都到达我的程序,尽管所有数据包都到达了 Wireshark,我在那个盒子上同时运行。有时只丢失一个数据包,有时大约十几个,有时更多。
代码
static void Main()
{
int udpPacketsReceived = 0;
var bindAddress = IPAddress.Parse("192.168.20.54");
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
socket.ReceiveBufferSize = 10485760; // 10M
socket.Bind(new IPEndPoint(bindAddress, 51001));
socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse("239.193.1.1")));
Console.WriteLine("Effective ReceiveBuffer size: " + socket.GetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveBuffer));
var t = new Thread(ipAndClient =>
{
var buffer = new byte[2000];
int maxAvail = 0;
while (true)
{
socket.Receive(buffer);
Interlocked.Increment(ref udpPacketsReceived);
var available = socket.Available;
if (available > maxAvail)
{
Console.WriteLine("available new max: " + available);
maxAvail = available;
}
}
});
t.Start();
int lastValue = -1;
while (true)
{
var newValue = Thread.VolatileRead(ref udpPacketsReceived);
if (newValue != lastValue)
{
Console.WriteLine("Total UDP packets received: {0}", newValue);
lastValue = newValue;
}
Thread.Sleep(1000);
}
}
Effective ReceiveBuffer size: 10485760
Total UDP packets received: 0
available new max: 685
available new max: 3288
available new max: 3836
available new max: 6165
available new max: 8220
available new max: 10960
Total UDP packets received: 14307
available new max: 18632
available new max: 140425
available new max: 141521
available new max: 143439
Total UDP packets received: 24996
最佳答案
Wireshark 在数据包被传递到协议(protocol)栈之前获取数据包,而接收缓冲区位于内核协议(protocol)栈的末尾。有很多内存分配和其他处理正在进行,在高负载时,它可能会在一些数据包到达接收缓冲区之前简单地丢弃它们。
这是MS support had to say :
Winsock layer sits on top of the transport layer. Datagrams may be dropped at various layers within the networking stack.
关于.Net UDP 数据包丢失,尽管所有数据包都到达(Wireshark) - ReceiveBuffer 不是问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26540513/
Wireshark 何时对数据包加时间戳?完全接收一帧后?或者已经在接收帧的第一个字节?我阅读了以下关于 Wireshark timestamps 的描述但该文本仅说明:“在捕获数据包时,每个数据包在
在我们的团队中,我们有一个标准化的开发设置,我们有一个 Win8 工作站,在 Hyper-V 上运行各种虚拟机。所有开发都在虚拟机上进行。 我遇到了一个问题,我无法使用 VS2012 从 Team F
我对 Wireshark 中的抖动计算方法有疑问。 Wireshark 根据 RFC3550 (RTP) 计算抖动: 如果 Si 是数据包 i 的 RTP 时间戳,Ri 是数据包 i 在 RTP 时间
我正在尝试使用以下选项从 cli 启动 wireshark... wireshark -k -i eth2 -a filesize:1000000 -f 我遇到的问题是我想使用预定义的wiresha
我们通过 WireShark 使用 JN5148EK010 节点捕获流量。收到的数据包显示在提供的屏幕截图中。 我想知道如何解码数据 捕获几个数据包后发生错误,还提供了屏幕截图。如何解决此错误? 列表
我正在尝试自动化我使用 WireShark 的重复手动过程: 1) 加载给定的 pcap 文件 2) 为给定协议(protocol)应用一个简单的过滤器 3) 使用导出对话框将显示的数据包导出为 CS
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 8年前关闭。 Improve this qu
有没有办法清除 Wireshark 中的捕获窗口,而无需重新启动捕获或重新应用过滤器?如果不仔细查看时间戳,很难区分一组流量和另一组流量。 最佳答案 我没有找到清除窗口的方法,但点击“重新启动正在运行
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 3 年前。 Improve this ques
我想知道wireshark 是如何工作的。可以监听给定机器所有端口上的流量的应用程序的设计是什么?这样的应用程序会产生什么样的窃听?编写一个监控流量的应用程序的好方法是什么? 谢谢 最佳答案 Wire
我想构建一个自己的 Wireshark 数据包解析器,并按照https://www.wireshark.org/docs/wsdg_html_chunked/ChDissectAdd.html中给出的
假设我有这样的模式 01:02:(anything):04:05 如何在wireshark中构造一个显示过滤器来过滤掉它? 我必须这样做吗? data[0:2]==01:02 and data[3:2
我想构建一个自己的 Wireshark 数据包解析器,并按照https://www.wireshark.org/docs/wsdg_html_chunked/ChDissectAdd.html中给出的
假设我有这样的模式 01:02:(anything):04:05 如何在wireshark中构造一个显示过滤器来过滤掉它? 我必须这样做吗? data[0:2]==01:02 and data[3:2
是否可以在 Wireshark 中重新编号。例如,我已将数据包过滤到一侧: 所以数字是(由于过滤它们没有按顺序排列): 416,419,420,423,424,426,427。 但我想像这样一行一行地
我想使用 Opus-48 编解码器捕获和解码 VoIP 对话。我正在使用 Wireshark 来捕获数据包。网上有免费的解码器吗?? Wireshark 不保存双向对话,因为它适用于 G-729 等其
tshark中的-Y、-2和-R选项让我困惑了很久。 看了说明书,我知道-Y用在单通滤波,-2用在2通滤波(万一我们不能在第一遍过滤器结束之前获取一些信息) 但我还是不明白 -2 -Y 'blabla
如果我想编写一个使用 Wireshark 功能的脚本,我会使用 tshark。我听说还有一个 libwireshark 可以在用 C 编写程序时使用,但是,就我的一生而言,我找不到任何文档!我尝试隔离
我有一个正在分析的 Wi-Fi 捕获 (.pcap),并且遇到了在我看来 802.11 规范与 Wireshark 对数据的解释之间的不一致之处。具体来说,我想要拆分的是 2 字节的 802.11 帧
有没有办法过滤或关注 TCP/SSL使用 Wireshark 基于特定进程 ID 的流? 最佳答案 以防万一您正在寻找替代方法并且您使用的环境是 Windows,Microsoft 的 Network
我是一名优秀的程序员,十分优秀!