sockets - RAW套接字发送: packet loss

标签 sockets send loss

在基于 RAW 套接字的数据包发送测试期间,我发现了非常恼人的症状。 使用默认的 RAW 套接字设置(尤其是 SO_SNDBUF 大小), 原始套接字发送 100,000 个数据包没有问题,但花了大约 8 秒 发送所有数据包,并且数据包被接收进程正确接收。 这意味着默认设置可实现约 10,000 pps(每秒数据包)。 (我认为这个数字太小了,与我的预期相反。)

无论如何,为了增加 pps 值,我增加了数据包发送缓冲区大小 通过调整/proc/sys/net/core/{wmem_max, wmem_default}。 增加两个系统参数后,我发现了令人恼火的症状。 10万个包发送很快,但只有3000个包被发送 由接收进程(位于远程节点)接收。

在发送 Linux 机器(Centos 5.2)上,我执行了 netstat -a -s 和 ifconfig。 Netstat 显示发送了 100,000 个请求,但 ifconfig 显示 仅发送了 3,000 个数据包。

我想知道为什么会出现这种情况,我也想知道 我该如何解决这个问题(当然我不知道这是否真的是一个问题)。

有人能给我一些关于这个问题的建议、例子或引用吗?

最诚挚的问候, bjlee

最佳答案

您没有说明数据包的大小,也没有说明网络、NIC、硬件的任何特征,或者有关接收数据的远程计算机的任何信息。

我怀疑您不应该使用/proc/sys 的东西,而应该使用 ethtool调整环形缓冲区的数量,但不一定调整这些缓冲区的大小。

此外,this page是个好资源。

关于sockets - RAW套接字发送: packet loss,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13172023/

相关文章:

python - Tensorflow:如何在调用 tf.reduce_sum 时忽略数组的一部分

php - 如何在 1and1 共​​享服务器上激活 php 扩展?

c - 将 "struct sockaddr_in"传递给方法

java - Java中从客户端socket中提取GET和POST参数

android - 单击android将数据发送到数据库

Java - 下载和发送文件

machine-learning - 噪声训练损失

c# - 具有同步全双工通信的 TCPServer

java - 在java中发送帧

keras - Keras 中验证集的不同损失函数