我在同一个子网上有两台服务器。我安装了一个应用程序,它使用多播 UDP 在两台服务器之间传播事件并使它们保持同步。
这似乎没有发生,所以我想确保多播 UDP 消息能够通过作为我的第一步。
服务器运行的是 Windows 2008 R2。
如何测试两台服务器之间的多播 UDP 连接?
根据这里的表格,它说 MTU = 1500 字节,有效载荷部分是 1500 - 42 字节或 1458 字节(<- 这实际上是错误的!)。现在最重要的是您必须添加 IPv4 和 UDP 标头,它们是 28 个字节(20 个 IP + 8 个 UDP)。这使我的最大可能应用程序消息为 1430 字节!但是通过在互联网上查找这个数字,我看到的是 1472。我在这里计算错误吗?
我想知道的是我可以通过网络发送的最大应用程序消息,而不会产生碎片风险。它绝对不是 1500,因为它包括帧头。有人可以帮忙吗?
令人困惑的是 PAYLOAD 实际上可以大到 1500 字节,这就是 MTU。那么现在有效载荷为 1500 的线内尺寸是多少?从该表中,它可以大到 1542 字节。
所以我可以发送的最大应用程序消息是 1472 (1500 - 20 (ip) - 8 (udp)) 最大线径为 1542。当事情实际上很简单时,事情会变得如此复杂,这让我感到惊讶。而且我不知道如果表上写的是 1542,那么有人是如何想出数字 1518 的。
让我们看看这两个经常用于允许传出 DNS 的 iptables 规则:
iptables -A OUTPUT -p udp --sport 1024:65535 --dport 53
-m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp --sport 53 --dport 1024:65535
-m state --state ESTABLISHED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
我的问题是:我究竟应该如何理解 UDP 中的 ESTABLISHED 状态?UDP 是无状态的。
这是我的直觉 - 我想知道这是否或哪里不正确:
手册页告诉我:
状态
该模块与连接跟踪结合使用时,允许访问 此数据包的连接跟踪状态。 - 状态 ...
因此,iptables 基本上会记住用于传出数据包的端口号(对于 UDP 数据包,它还能记住什么?),然后允许在短时间内发回的第一个传入数据包?攻击者必须猜测端口号(这真的太难了吗?)
关于避免冲突:
内核会跟踪哪些端口被阻止(被其他服务或先前传出的 UDP 数据包),以便这些端口不会在时间范围内用于新的传出 DNS 数据包?(如果我不小心尝试在时间范围内在该端口上启动服务会发生什么 - 该尝试会被拒绝/阻止吗?)
请找出以上文本中的所有错误:-) 谢谢,
克里斯
我有一个应用程序的文件描述符用完了,显然是通过打开套接字,但我无法确切地找出这些套接字的作用。这些出现在 lsof 输出中
java 9689 appuser 1010u sock 0,5 263746675 can't identify protocol
java 9689 appuser 1011u sock 0,5 263746676 can't identify protocol
java 9689 appuser 1012u sock 0,5 263746677 can't identify protocol
java 9689 appuser 1014u sock 0,5 263746678 can't identify protocol
java 9689 appuser 1015u sock 0,5 263746679 can't identify protocol
java 9689 appuser 1016u sock 0,5 263746681 can't identify protocol
Run Code Online (Sandbox Code Playgroud)
并在 /proc/$PID/fd 中
lrwx------ 1 appuser appuser 64 Jun 23 11:49 990 -> socket:[263732085]
lrwx------ 1 appuser …Run Code Online (Sandbox Code Playgroud) 根据我的理解,DNS 使用 UDP 和端口 53。如果未阻止传入端口号 53 的 UDP 数据包,会发生什么不良情况?
更新:将允许来自或发往大学运营的本地 DNS 服务器或大学运营的权威 DNS 服务器的数据包。
我在 Ubuntu 16.04 上安装了来自 ppa 的最新 NGINX。
nginx 版本:nginx/1.12.1
根据我的理解,它应该支持流和 UDP 负载均衡。
但我收到此错误消息:
nginx: [emerg] "stream" directive is not allowed here in /etc/nginx/conf.d/load-balancer.conf:3
Run Code Online (Sandbox Code Playgroud)
这是我的配置 /etc/nginx/conf.d/load-balancer.conf
stream {
upstream backend {
least_conn;
server 172.31.9.51 fail_timeout=10s;
server 172.31.20.140 fail_timeout=10s;
}
server {
listen 500 udp;
listen 4500 udp;
proxy_pass backend;
proxy_timeout 1s;
proxy_responses 1;
error_log logs/dns.log;
}
}
Run Code Online (Sandbox Code Playgroud) 惠普关于其 QLogic (fka Broadcom) NetXtreme II 适配器的白皮书(其中包括我正在测试的特定 NIC)指出(第 7 页),它们对于高达 256 字节/数据包的数据包的小数据包性能高于 5,000,000 数据包/秒。
在我对一个应用程序的测试中,我禁用了除 UDP 接收部分之外的所有处理,我只能达到 120,000 个数据包/秒。数据包均匀分布在 12 个多播组上。
我注意到当我提高 UDP 发送速率并在 120,000 左右达到最大值时,有一个内核(2 个插槽上的每个内核中有 12 个内核)其负载逐渐增加。但我不知道那个核心在做什么以及为什么。这不是我的应用程序中的单线程瓶颈,因为我是否为所有多播组运行应用程序的单个实例或每个处理 1 个多播组的 12 个实例都没有关系。所以瓶颈不是我的接收器应用程序。
MSI 已启用(通过设备管理器中的“资源类型”视图进行验证)并且 RSS 也在 NIC 设置中启用,具有 8 个队列。那么是什么执着于那个核心呢?所有 NIC 卸载功能当前都处于开启状态,但将它们关闭并没有帮助。
那么瓶颈可能在哪里呢?
系统详情:
我使用的是 100 Mbps 的快速以太网,其帧大小小于 1500 字节(根据我的教科书,有效载荷为 1472 字节)。在那,我能够发送和接收消息大小为 65507 字节的 UDP 数据包,这意味着数据包大小为 65507 + 20(IP 标头)+ 8(UDP 标头)= 65535。
如果帧的有效载荷大小本身最大为 1472 字节(根据我的教科书),IP 的数据包大小怎么会大于这里的 65535?
我使用发件人代码作为
char buffer[100000];
for (int i = 1; i < 100000; i++)
{
int len = send (socket_id, buffer, i);
printf("%d\n", len);
}
Run Code Online (Sandbox Code Playgroud)
接收器代码为
while (len = recv (socket_id, buffer, 100000))
{
printf("%d\n". len);
}
Run Code Online (Sandbox Code Playgroud)
我观察到send returns -1上i > 65507和recv打印或接收的分组maximum of length 65507。
我正在为一个非常大的网络(大约 5000 个网络设备)实施网络监控解决方案。我们希望网络上的所有设备都将 SNMP 陷阱发送到单个盒子(从技术上讲,这可能是一对 HA 盒子),然后让该盒子将 SNMP 陷阱传递到真正的处理盒子。这将允许我们有多个后端盒处理陷阱,并在这些后端盒之间分配负载。
我们需要的一个关键功能是能够根据陷阱的源地址将陷阱转发到特定的框。有关处理此问题的最佳方法的任何建议?
我们考虑过的事情包括:
我们目前已经实施并正在测试最后一个解决方案,使用一个配置了 IPTables 的 Linux 机器来接收陷阱,然后根据陷阱的源地址,用目标 nat (DNAT) 重写它,以便数据包被发送到合适的服务器。例如:
# Range: 10.0.0.0/19 Site: abc01 Destination: foo01
iptables -t nat -A PREROUTING -p udp --dport 162 -s 10.0.0.0/19 -j DNAT --to-destination 10.1.2.3
# Range: 10.0.33.0/21 Site: abc01 Destination: foo01
iptables -t nat -A PREROUTING -p udp --dport 162 -s 10.0.33.0/21 …Run Code Online (Sandbox Code Playgroud) 我想知道 HP-UX 机器是否可以使用 UDP 与特定端口上的远程机器(我无法控制)进行通信。
我试过 telnet,但它看起来不支持 UDP。我会使用 netcat,但我找不到任何包。这台机器正在生产中,所以我不想过多地编译或安装东西......(nmap,来自源代码的netcat......)
有什么简单的方法可以做到这一点?