精华内容
下载资源
问答
  • UDP丢包测试系统用户数据包说明struct Comm_Client{int iccid;//用户号unsigned char ccstatus;//状态unsigned char citype;//整数类型char ctype[6];//文本类型int iindex;//包号char cdata[1200];//模块数据};用户...

    UDP丢包测试系统

    用户数据包说明

    struct Comm_Client

    {

    int iccid;//用户号

    unsigned char ccstatus;//状态

    unsigned char citype;//整数类型

    char ctype[6];//文本类型

    int iindex;//包号

    char cdata[1200];//模块数据

    };

    用户号在客户端初始化为0…99

    状态、文本类型和模块数据初始化后就不会改变,不影响流程。

    整数类型决定了业务类型,每种业务类型的流量不一样,则每种类型的包数不一样,包多了则占的带宽就多,包的个数决定了流量大小,假设100个包是100个量,1个包就是1个量,100个量肯定比1个量大。

    包号在业务流量发送时,从0开始累加,100个包,则序号表示为:0,1,2….,99。服务器端在收到数据包时,通过当前包号和上个包号差值是否为1,来判断是不是有丢包。

    客户端流程和说明

    初始化数组内数据包和发送策略。

    初始化SOCKET

    发送循环

    按策略发送

    休眠1秒

    关闭SOCKET

    退出

    初始化

    数组内数据包和发送策略流程和说明

    1、初始化用户类型个数

    2、100个用户数据包初始化

    a)、用随机值来生成类型

    b)、用户类型个数统计

    3、用不同类型数据的发送量计算每个用户每次发送多少包,100个用户分为不同类型,把类型总的发送量分到每个类型总的用户上,比如100是类型总量,这个类型有10个用户,则处理某个用户包时,就发10个包,凑够100个包。

    4、退出

    按策略发送

    获取开始时间

    100个用户数据包发送循环

    业务类型包发送循环:用户循环发送内嵌套业务类型数据发送,保证整体的发送量满足要求

    用循环变量来初始化包序号,保证序号自然累加

    调用SendTo发送,发送时指定服务器IP

    获取结束时间,并输出用时

    退出

    服务器端流程

    主函数流程

    定义变量,初始化2个端口值7000和7001

    打开线程1,传入端口1

    打开线程2,传入端口2

    循环让主线程不退出

    线程函数流程

    分配socket

    初始化地址和端口

    绑定bind

    进入接收函数

    接收函数流程

    初始化变量,分配30M内存

    把socket加入到fd_set变量,准备进行socket状态判断

    接收循环看流程图。

    我有几个疑问,请你认真看完我的问题!!!

    1:判断包标志,这个包是对应某种业务信息的报的数量吗:包有3个标志,用户号和业务类型号、和包序号,因为包序号的累加变化是在业务类型范围内,这个在用户数据包说明里有举例。第一次不用判断时只需要保存下来,后面是先判断用户号再判断包序号。

    2:在第一个包:用户ID和包序号进行初始化时干什么?难道不是应该在最开始进行初始化,这个包初始化和那个初始化一样吗?

    客户端的初始化是静态的,在发送端发送时,包序号会自然累加,本业务类型完成,再从0开始。而服务器的初始化是判断用的,在实时变化,不把上次的值保存下来,怎么进行丢包判断。

    3:同一用户对包这个,备份包序号是什么时候产生的?在客户端?是不是当时已经绑定的对应的。

    4:其实同问题3一样,新用户和当前用户ID哪来的。程序刚开始运行不都是才开始吗?这个用户等于才来,他和谁对比。同问题3一样了,刚来的用户哪有备份包序号?

    3和4问题,在2问题理解了就明白了。

    展开全文
  • Socket基础五:基于数据报套接字的网络程序(udp丢包测试) 作者:刘磊 2020.4.27 参考书目:《Windows网络编程》刘琰等著 一、功能函数 1、int udp_server_fun_packetloss(SOCKET s){ int iResult = 0; int ...

    Socket基础五:基于数据报套接字的网络程序(udp丢包测试)

    作者:刘磊 2020.4.27   参考书目:《Windows网络编程》刘琰等著

    一、功能函数

    1int udp_server_fun_packetloss(SOCKET s){	
    	int iResult = 0;	
    	int count = 0;
    	struct sockaddr_in cliaddr;	
    	int addrlen = sizeof(sockaddr_in);	
    	char recvline[MAXLINE];	
    	do {		
    		memset(recvline, 0, MAXLINE);		//接收数据		
    		iResult = recvfrom(s, recvline, MAXLINE, 0, (SOCKADDR *)&cliaddr, &addrlen);		
    		if (iResult > 0)			
    			count++;		
    		else	
    		{			
    			int err = WSAGetLastError();			//当出现非接收超时的错误时打印错误号			
    			if (err != 10060)			
    			{				
    				printf("recvfrom函数调用错误,错误号:%d\n", err);				
    				iResult = -1;			
    			}			
    			else			
    			{				
    				iResult = 0;				
    				break;			
    			}		
    		}	
    	} 
    	while (iResult > 0);
    	if (count > 0)		
    		printf("服务器总共接收到%d个数据报\n", count);	
    	return iResult;
    } 
    
    2int udp_client_fun_packetloss(int times, SOCKET s)    	
       {	
    	int iResult, i = 0;	
    	char sendline[MAXLINE - 1000];	
    	char recvtimes = 0;	
    	memset(sendline, 1, MAXLINE - 1000);	//根据用户输入的发送次数循环发送相同的数据报	printf("\r\n客户端发送%d次数据\r\n", times);	
    	while (i < times)	
    	{		
    		iResult = send(s, sendline, strlen(sendline), 0);		
    		if (iResult == SOCKET_ERROR)		
    		{			
    			printf("send 函数调用错误,错误号:%d\n", WSAGetLastError());			
    			return -1;		
    		}		
    		i++; //printf("\r\n客户端发送%d次数据\r\n", i);	
    	}	
    	return iResult;  
       } 
    
    3int udp_client_fun_packetloss(int times, SOCKET s, SOCKADDR * servaddr, int servlen)
       {	int iResult, i = 0;
       	char sendline[MAXLINE - 1000];	
       	char recvtimes = 0;	
       	memset(sendline, 1, MAXLINE - 1000);	//根据用户输入的发送次数循环发送相同的数据报	
       	printf("\r\n客户端发送%d次数据\r\n", times);	
       	while (i < times)	
       	{		
       		iResult = sendto(s, sendline, strlen(sendline), 0, (SOCKADDR *)servaddr, servlen);		
       		if (iResult == SOCKET_ERROR)		
       		{			
       			printf("send 函数调用错误,错误号:%d\n", WSAGetLastError());			
       			return -1;		
       		}		
       		i++; //printf("\r\n客户端发送%d次数据\r\n", i);	
       	}	
       	return iResult;
       }

    二、主函数

    1、server.c 
    int main(int argc, char* argv[])
    {	int iResult = 0;	
    	SOCKET ServerSocket; 	
    	start_up(); 	
    	ServerSocket = udp_server("127.0.0.1", ECHOPORT);	
    	if (ServerSocket == -1)		
    		return -1; 	
    	int rcvbuf_len;	
    	int len = sizeof(rcvbuf_len);	
    	if (getsockopt(ServerSocket, SOL_SOCKET, SO_RCVBUF, (char *)&rcvbuf_len, &len) < 0)	
    	{		
    		printf("getsockopt error\n");		
    		return -1;	
    	}	
    	printf("系统接收缓存默认大小: %d\n", rcvbuf_len);	//获得用户输入的系统缓存大小并设置 	
    	rcvbuf_len = atoi(argv[1]);	
    	if (setsockopt(ServerSocket, SOL_SOCKET, SO_RCVBUF, (const char *)&rcvbuf_len, len) < 0)	
    	{		
    		printf("setsockopt error\n");		
    		return -1;	
    	}	
    	printf("系统接收缓存被设置为: %d\n", rcvbuf_len);	//设置套接字的接收超时时间	
    	int nTimeOver = TIMEOVER;	
    	if (setsockopt(ServerSocket, SOL_SOCKET, SO_RCVTIMEO, (char *)&nTimeOver, sizeof(nTimeOver)) < 0)	
    	{		
    		printf("setsockopt error\n");		
    		return -1;	
    	}	
    	printf("系统接收超时时间被设置为:%d毫秒\n",nTimeOver);
    	printf("服务器准备好丢包率测试服务\n");	
    	for (; ; )	
    	{		
    		iResult = udp_server_fun_packetloss(ServerSocket);		
    		if (iResult == -1)			
    		printf("当前测试出错\n");
    	}	
    	quit(ServerSocket);
    	return iResult; 
    }    
    
    2、Clinet.c
    int main(int argc, char *argv[])
    { 	int iResult = 0;	
    	SOCKET ClientSocket;	
    	sockaddr_in servaddr;	
    	int times; 	
    	start_up(); 	
    	ClientSocket = udp_client((char *)argv[1], ECHOPORT, true);	
    	if (ClientSocket == -1)		
    		return -1; 	
    		printf("客户端启动成功 \n");	
    	if (set_address((char *)argv[1], ECHOPORT, &servaddr, "udp") == 1)		
    		return 0;	
    	times = atoi(argv[2]);	
    	iResult = udp_client_fun_packetloss(times,ClientSocket, (SOCKADDR *)&servaddr, sizeof(sockaddr_in));	
    	if (iResult == -1)		
    		printf("当前测试出错!\n");	
    		quit(ClientSocket);	return iResult; 
    } 

    三、结果图

    在这里插入图片描述

    展开全文
  • UDP 丢包测试工具

    热门讨论 2013-05-25 19:13:10
    客户端使用UDP发送指定大小数据包,服务端收到后原样返回。客户端判断丢失率。包含工程、源码、可执行文件等
  • iperf测试UDP丢包

    千次阅读 2018-07-25 17:20:57
    在实际的测试中,iperf测试UDP通常会丢包; 尤其是网口物理速率较高的系统;比如10G,40G网口; 1G的网口,如果处理器强劲,使用系统自带协议栈,应该还能处理得过来; 在网上查了一下; 看到有几种办法,汇总...

    在实际的测试中,iperf测试UDP通常会丢包;

    尤其是网口物理速率较高的系统;比如10G,40G网口;

    1G的网口,如果处理器强劲,使用系统自带协议栈,应该还能处理得过来;

    在网上查了一下;

    看到有几种办法,汇总一下,做个mark。

    1.限制突发的带宽

    https://blog.csdn.net/haimianxiaojie/article/details/51077494

    2.增加协议栈的缓冲区

    https://yq.aliyun.com/articles/177813

    3.合理分配中断,增强多核处理能力

    https://blog.csdn.net/cpu1994ghz/article/details/79386190

     

    不想丢包的话,建议使用tcp测试;

    如果确实想提高udp的带宽,需要确认瓶颈出在哪里?

    再做针对性的优化;目前看没有太合理的解决方案。

    有人说可以用dpdk来测。如果使用mellanox或intel的网卡,官网上也会有针对性的优化的实施步骤,记得参考。

     

    后续有变化再更新。

     

    展开全文
  • udp丢包率统计

    2017-07-17 15:31:18
    udp丢包率统计
  • UDP丢包(Linux)并测试

    千次阅读 2019-07-04 18:14:40
    一、UDP丢包现象 UDP丢包是正常现象,因为它是不安全的。 UDP是无连接的,面向消息的数据传输协议,与TCP相比,有两个致命的缺点,一是数据包容易丢失,二是数据包无序。 要实现文件的可靠传输,就必须在上层对...

    一、UDP丢包现象

    UDP丢包是正常现象,因为它是不安全的。

    UDP是无连接的,面向消息的数据传输协议,与TCP相比,有两个致命的缺点,一是数据包容易丢失,二是数据包无序。

    要实现文件的可靠传输,就必须在上层对数据丢包和乱序作特殊处理,必须要有要有丢包重发机制和超时机制。

    常见的可靠传输算法有模拟TCP协议,重发请求(ARQ)协议,它又可分为连续ARQ协议、选择重发ARQ协议、滑动窗口协议等等。

    1、我感觉原因可能有两个:

    (1)、客户端发送过快,网络状况不好或者超过服务器接收速度,就会丢包。

    (2)、原因是服务器收到包后,还要进行一些处理,而这段时间客户端发送的包没有去收,造成丢包。

    2、解决方法:

    (1)、客户端降低发送速度,可以等待回包,或者加一些延迟。

    (2)、服务器部分单独开一个线程,去接收UDP数据,存放在一个缓冲区中,又另外的线程去处理收到的数据,尽量减少因为处理数据延时造成的丢包。

    3、总结:

    如果必须使用UDP,而且丢包又是不能接受的,只好自己实现确认和重传,说白了,就是自己实现TCP(当然是部分和有限的简单实现)。

    二、如何制造UDP丢包?

    如果只是小规模程序,也可以自己实现丢包处理,原理基本上就是给文件分块,每个数据包的头部添加一个唯一标识序号的ID值,当接收的包头部ID不是期望中的ID号,则判定丢包,将丢包ID发回服务端,服务器端接到丢包响应则重发丢失的数据包。

    UDP是面向无连接的,用户在实施UDP编程时,必须制定上层的协议,包括流控制,简单的超时和重传机制,如果不要求是实时数据,我想TCP可能会更适合你!

    三、怎样测试UDP并发性能?

    1、连续把程序跑24个小时。

    2、一般就是在同一个时间段内采用大量的客户端或者一个客户端采用多线程的方式向服务器发送数据,因此也就是多线程或者多进程的的方式来模拟发送数据的形式

    展开全文
  • 大神们好,小弟最近做了一个LINUX网卡驱动,用iperf来测试时候,发现UDP丢包。 用iperf测试UDP,一共测试两次,一次一个小时,速率为1000M,丢包率大概在0.0001%左右 再继续测试时,发现会大量丢包,已经惨不忍睹...
  • 压力测试下,UDP丢包解决方案

    千次阅读 2017-03-20 10:07:14
    udp丢包是指在截获数据包后,linux内核的tcp/ip协议栈在udp数据包处理过程中的丢包,主要原因有两个:udp数据包格式或校验和错误和应用程序来不及处理udp数据包。 首先介绍通用的udp丢包检测方法,使用netstat命令...
  • udp丢包

    千次阅读 2014-09-08 11:45:31
    本文讨论的udp丢包是指网卡接收到数据包后,linux内核的tcp/ip协议栈在udp数据包处理过程中的丢包,主要原因有两个: 1) udp数据包格式错误或校验和检查失败 2) 应用程序来不及处理udp数据包 对于原因1),...
  • Udp数据丢包测试--iperf3

    千次阅读 2020-07-16 15:01:08
    近期需要用UDP来传输大量数据,为了避免出现大量丢包,所以需要对UDP数据丢包进行测试。推动开发减少丢包率。 2.环境 目前demo测试使用的环境是windows环境(后期如有要求可以改为liunx) 3.工具 工具使用iperf3...
  • 使用 iPerf 测试并排查 UDP 丢包问题

    千次阅读 2018-03-21 11:42:20
    转自 https://help.aliyun.com/knowledge_detail/58656.html 现象描述使用高速通道打通同一个地域(Region)下的两台 VPC 网络类型的 ECS 实例后,通过 iPerf 测试两台实例内网之间 UDP 丢包率,测试带宽达到 50 ...
  • VMUDPPing 实现 UDP 数据发包及收包功能,主要用来测试设备和服务器端网络连接情况,及丢包率延迟等情况 server 包下是一个简单的 java server 类,可以直接运行 main 方法
  • python实现监控服务器的UDP丢包情况

    千次阅读 2016-03-16 18:41:22
    python实现监控服务器的UDP丢包情况简介利用python实现udp丢包情况,只能监控到服务器应用程序不能及时处理udp包导致的udp丢包情况。实现原理:1.通过netstat -su 命令周期性的获取服务器启动到当前时间udp丢包情况...
  • UDP丢包分析工具

    2017-11-09 15:47:15
    测试UDP组播流,可以分析丢包,也可以直接播放。播放需要安装vlc播放器,默认安装即可。
  • UDP丢包

    2017-03-31 16:51:43
    UDP主要丢包原因及具体问题分析   一、主要丢包原因   1、接收端处理时间过长导致丢包:调用recv方法接收端收到数据后,处理数据花了一些时间,处理完后再次调用recv方法,在这二次调用间隔里,发过来...
  • Iperf 测试UDP丢包和延迟 warning:did not receive ack of last datagram after 5tries 客户端报错,服务端不能正确显示传输延迟和丢包率
  • UDP丢包原因

    2018-02-09 10:36:28
    UDP丢包原因 一、主要丢包原因1、接收端处理时间过长导致丢包:调用recv方法接收端收到数据后,处理数据花了一些时间,处理完后再次调用recv方法,在这二次调用间隔里,发过来的包可能丢失。对于这种情况可以修改...
  • UDP丢包率 MFC实现 给定定时器,发送特定的包 同时给定接收时间,测试接受的包的个数 程序中有两个线程: 线程1负责套接字的加载、套接字的初始化、绑定、接收进程的创建、发送数据(聊天数据和测试数据)、统计...
  • UDP丢包检测工具

    2015-01-04 12:32:40
    这是一款测试网络的丢包的软件,该软件具有收发软件测试包的功能。
  • 测试udp丢包和乱序.pdf
  • Udp丢包排查过程

    万次阅读 2015-12-23 10:25:27
    1. 查看udp丢包,cat /proc/net/snmp | grep Udp(比netstat –su效果好) 2. 查看网卡丢包(ifconfig 或者ethtool –S eth1) 3. Netstat –alupt 查看队列里现存的包数,如果过多说明有问题。 4. 查看socket队列长度...
  • udp丢包问题排查

    2021-02-01 20:47:47
    背景: 类似于实时语音转译文本的产品,录音软件将客户端的语音流推送至后台服务,由后端服务转译后推送至客户端界面,后端服务使用到了redis,但是不和...后端服务排查发现,录音软件推送过来的udp包有丢失问题..
  • udp丢包分析》

    2020-04-22 10:35:56
    UDP主要丢包原因及具体问题分析 一、主要丢包原因 1、接收端处理时间过长导致丢包:调用recv方法接收端收到数据后,处理数据花了一些时间,处理完后再次调用recv方法,在这二次调用间隔里,发过来的包可能丢失。对于...
  • 本文讨论的udp丢包是指网卡接收到数据包后,Linux内核的tcp/ip协议栈在udp数据包处理过程中的丢包,主要原因有两个:1) udp数据包格式错误或校验和检查失败2) 应用程序来不及处理udp数据包对于原因1),udp数据包本身...
  • UDP丢包的问题

    千次阅读 2016-07-28 21:57:48
    最近在忙着解决一个UDP丢包的问题。 首先说说环境。 网络环境很理想,万兆内网,主机之间使用一台光纤交换机连接并无任何中间节点;环境中的所有主机操作系统均为win2008Server x64 128G,CPU 32核 2.8GHz一台...
  • Netty之UDP丢包解决

    2020-06-16 16:37:45
    通过GC日志对比发现丢包的时间点偶有处于Full GC,说明Java程序接收间歇性stop world的不是根因。 观察Udp的dump 通过watch -n 1 -d 'cat /proc/net/udp >> /usr/udpDump.txt'在发送数据的过程中持续观察Udp...
  • 文章背景: 最近在做40G交换板的TCP带宽和UDP带宽、丢包率、抖动测试...1)iperf3较iperf测试UDP丢包率和带宽,相同硬件条件下,iperf3测试带宽更高,但是存在严重丢包 iperf测试UDP带宽较小,但是不丢包。(x86...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,127
精华内容 5,650
关键字:

udp丢包测试