Windows上对于不同源端口的UDP数量限制问题

问题描述

最近在做Windows上UDP服务端的性能测试,发现这样一个事情,如果模拟发包的程序源端口在不停的变化,那么接收端就会大量丢包(大概5k每秒的发包速度只能收到3k每秒),如果源端口不变化则不丢包。请问下各位高手,是不是由于源端口变化会新建socket,而Windows是对socket数量有什么限制么?怎么突破这个限制?谢谢!

解决方案

解决方案二:
补充下,在Linux上是没有这个问题的,同样的发包程序,同样的收包程序,收包程序非常简单,就是收到一个包记一个数,不做任何业务逻辑处理。代码如下:IPEndPointRemoteIpEndPoint=newIPEndPoint(IPAddress.Any,portNumber);recvClient=newUdpClient(portNumber);recvClient.Ttl=100;recvClient.Client.ReceiveBufferSize=1500*1024*1024;while(!isShouldReceiveStop){try{byte[]b=recvClient.Receive(refRemoteIpEndPoint);Interlocked.Increment(refCount);}catch(Exceptionex){Logger.Error(ex.Message);recvClient.Close();recvClient=null;}}
解决方案三:
只谈.net中的udp封装:udpClient是可以绑定本地端口的。如果不绑定,才会由系统去随机分配端口。而不绑定发送端口,其实对保证通讯性能是有好处的。你遇到的问题可能跟你的“极端”测试有关。udp本身是不可靠的,而你可能放大到一个单机客户端根本不可能达到的并发量去测试,那么这种不可靠性就真正爆发出来了。这种测试,反而不真实了。
解决方案四:
这么说吧,如果一个不可靠的通讯,在一个极端不真实的并发量下去测试,得到的结果是有序的,那么说明它性能极端低下,才可能不丢数据。
解决方案五:
udp接收这块要绑定端口,这个定下来就够了,发送方都往这个端口发,发送方的端口本来就是随机的,没必要指定,windows对发udp没有限制。tcp从xp版本以后没连接限制了。udp是无连接的,只管发。
解决方案六:
同样的发包程序,同样的收包程序是什么意思,操作系统都换了怎么还会一样?
解决方案七:
引用3楼sp1234的回复:

这么说吧,如果一个不可靠的通讯,在一个极端不真实的并发量下去测试,得到的结果是有序的,那么说明它性能极端低下,才可能不丢数据。

五千个包每秒的数据量非常小,就像您说的,不绑定发送端口才是真实情况,所以这种情况下如此小的数据量是不应该丢包的,而且同样在linux上是非常稳定的,所以我才觉得windows应该是有什么限制
解决方案八:
引用4楼sinodzh的回复:

udp接收这块要绑定端口,这个定下来就够了,发送方都往这个端口发,发送方的端口本来就是随机的,没必要指定,windows对发udp没有限制。tcp从xp版本以后没连接限制了。udp是无连接的,只管发。

是的,所以这种情况下出现丢包是不可接受的
解决方案九:
引用5楼shingoscar的回复:

同样的发包程序,同样的收包程序是什么意思,操作系统都换了怎么还会一样?

我的意思是同样的处理逻辑,我用go语言实现了一份,同样的代码,两个操作系统跑出来windows大量丢包,linux非常稳定
解决方案十:
windows非服务器系统有最大连接数,超过就拒绝连接。
解决方案十一:
引用9楼xomix的回复:

windows非服务器系统有最大连接数,超过就拒绝连接。

我是在WindowsServer2008上试的,而且是UDP,不是TCP
解决方案十二:
引用10楼ruiruirui971的回复:

Quote: 引用9楼xomix的回复:
windows非服务器系统有最大连接数,超过就拒绝连接。

我是在WindowsServer2008上试的,而且是UDP,不是TCP

抓不到丢包的实际情况的时候,没法明白分析,有高级点的交换机或者网卡能抓包吗,抓全部数据包看看
解决方案十三:
引用8楼ruiruirui971的回复:

Quote: 引用5楼shingoscar的回复:
同样的发包程序,同样的收包程序是什么意思,操作系统都换了怎么还会一样?

我的意思是同样的处理逻辑,我用go语言实现了一份,同样的代码,两个操作系统跑出来windows大量丢包,linux非常稳定

发送方的程序是一样的吗?另外不知道你有没有试过直接在交换机上抓包,看是否真丢了按微软的说法,原生的winsock只受到内存的限制
解决方案十四:
引用11楼xomix的回复:

Quote: 引用10楼ruiruirui971的回复:
Quote: 引用9楼xomix的回复:
windows非服务器系统有最大连接数,超过就拒绝连接。

我是在WindowsServer2008上试的,而且是UDP,不是TCP

抓不到丢包的实际情况的时候,没法明白分析,有高级点的交换机或者网卡能抓包吗,抓全部数据包看看

感谢提供新的思路哈,确实没有在交换机上抓包。但是我发现一个事情,丢包的同时,一个CPU占用率非常高,看起来基本上可以确定是由于CPU处理不过来导致的丢包。但是还是没搞清楚为什么源端口变化,这么小的数据量能把CPU占满
解决方案十五:
引用12楼shingoscar的回复:

Quote: 引用8楼ruiruirui971的回复:
Quote: 引用5楼shingoscar的回复:
同样的发包程序,同样的收包程序是什么意思,操作系统都换了怎么还会一样?

我的意思是同样的处理逻辑,我用go语言实现了一份,同样的代码,两个操作系统跑出来windows大量丢包,linux非常稳定

发送方的程序是一样的吗?另外不知道你有没有试过直接在交换机上抓包,看是否真丢了按微软的说法,原生的winsock只受到内存的限制

发送方是一个程序,没有变过。我发现丢包的同时,一个CPU占用率非常高,看起来基本上可以确定是由于CPU处理不过来导致的丢包。但是还是没搞清楚为什么源端口变化,这么小的数据量能把CPU占满

时间: 2025-01-21 07:27:33

Windows上对于不同源端口的UDP数量限制问题的相关文章

急:请教高手在windows下用c#实现基于udp的接收多个端口发送来的数据

问题描述 本人新手,急切请教高手在windows下用c#实现基于udp的接收多个端口发送来的数据,有源代码的提供一下本人感激不尽.现在可以接收到数据可是怎么能够在文本框里连续显示出来,谢谢高手指点!!! 解决方案 解决方案二:关注解决方案三: 解决方案四:用多个socket监听不同端口都收到数据了还不知道怎么显示?

怎么测试Windows系统中的服务器端口是否开放?

  1.我们在工作中经常接触的都是TCP,UDP的端口都是很少用的.检测TCP端口能否在外面访问的方法很简单,telnet可以测试出来结果. 例如 telnet www.baidu.com 80 2.像上面这样子测试百度服务器的80端口,这个可以看到是有反应的,是开放通的.如果没有开放就像下面这样的显示. 例如 telnet www.baidu.com 81 3.本文开始的时候提供给了psping 软件下载,当然你也可以去微软的网站那里下载psping ,这个软件好用,可以测试TCP或者UDP都

windows中关闭135危险端口方法

135端口一般情况下我们是不会去使用的,所以建义大家关闭会比较好 相信去年很多Windows 2000和Windows XP用户都中了"冲击波"病毒,该病毒就是利用RPC漏洞来攻击计算机的.RPC本身在处理通过TCP/IP的消息交换部分有一个漏洞,该漏洞是由于错误地处理格式不正确的消息造成的.该漏洞会影响到RPC与DCOM之间的一个接口,该接口侦听的端口就是135. 下面我们来看135端口关闭各种方法 运行dcomcnfg,展开"组件服务"→"计算机&qu

ftp上传在Windows上可以,部署到Linux上报错

问题描述 ftp上传在Windows上可以,部署到Linux上报错 May 14 2015 9:34:20 AM org.apache.catalina.core.StandardWrapperValve invokeSEVERE: Servlet.service() for servlet spring threw exceptionjava.lang.InstantiationError: sun.net.ftp.FtpClient at com.pactera.util.FtpUpload

PHP 1:在Windows上安装和配置PHP,Apache和My SQL

原文:PHP 1:在Windows上安装和配置PHP,Apache和My SQL如果你Google一把类似的主题,你会发现相关的文章可以塞满你的硬盘.在这里之所以把它再次拿出来,目的是想记录我作为一个新手如何配置的,以及配置期间碰到的一些问题.期望其中的一些问题对大家有用.下载安装文件就不用说了.不过还是提一下版本吧. PHP:5.1.4 Apache 2.2.3 MySQL:5.0.2-community-nt 我安装的顺序如下: 安装PHP 安装Apache 安装MySQL PHP安装   

《PHP、MySQL和Apache入门经典(第5版)》一2.5 在Windows上安装MySQL

2.5 在Windows上安装MySQL PHP.MySQL和Apache入门经典(第5版) Windows上的MySQL安装过程使用一个标准的Microsoft Windows安装程序(Microsoft Windows Installer,MSI)文件来完成在Windows XP. Windows Server 2003.Windows Vista或Windows 7机器上MySQL的安装和配置过程.到位于http://dev.mysql.com/downloads/mysql/5.0.ht

《PHP、MySQL和Apache入门经典(第5版)》一一2.5 在Windows上安装MySQL

2.5 在Windows上安装MySQL PHP.MySQL和Apache入门经典(第5版) Windows上的MySQL安装过程使用一个标准的Microsoft Windows安装程序(Microsoft Windows Installer,MSI)文件来完成在Windows XP. Windows Server 2003.Windows Vista或Windows 7机器上MySQL的安装和配置过程.到位于http://dev.mysql.com/downloads/mysql/5.0.ht

Windows 自带防火墙过滤端口安全图文教程

Windows 自带防火墙过滤端口安全,可以帮助vps主机.服务器托管客户做些服务器的基础安全设置.具体步骤如下:步骤1:网上邻居->(右键)属性->本地连接->(右键)属性->高级->(选中)Internet 连接防火墙->设置 服务器上面要用到的服务端口选中 例如:一台WEB服务器,要提供WEB(80).FTP(21)服务及远程桌面管理(3389)在"FTP 服务器"."WEB服务器(HTTP)"."远程桌面&quo

Windows批量添加防火墙例外端口的批处理代码_DOS/BAT

Windows批量添加防火墙例外端口 复制代码 代码如下: echo off cls set var=30000 set end=30010 :continue set /a var+=1 echo add port %var% netsh firewall add portopening TCP %var% ftp_data_%var% if %var% lss %end% goto continue echo complete pause 下面的文章特色就是,如果是按顺序的可以手工添加,也可