ttcp测试网络吞吐量

2024-04-27 06:12
文章标签 吞吐量 网络 测试 ttcp

本文主要是介绍ttcp测试网络吞吐量,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

计算机网络中的几个性能指标

带宽:用来表示网络的通信线路传送数据的能力,通常是指单位时间内从网络中的某一点通过另一点的最高数据率,即网络设备所支持的最高速度
吞吐量:表示单位时间内通过某个网络(或信道、接口)的数据量。

代码位置及分析

ttcp代码位置:muduo-master/examples/ace/ttcp

ttcp_blocking.cc就是简单的客户端服务端通信(阻塞IO),通信的过程中加入测试的逻辑

客户端主要函数

void transmit(const Options& opt)
{struct sockaddr_in addr = resolveOrDie(opt.host.c_str(), opt.port);printf("connecting to %s:%d\n", inet_ntoa(addr.sin_addr), opt.port);int sockfd = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);assert(sockfd >= 0);int ret = ::connect(sockfd, reinterpret_cast<struct sockaddr*>(&addr), sizeof(addr));if (ret){perror("connect");printf("Unable to connect %s\n", opt.host.c_str());::close(sockfd);return;}printf("connected\n");muduo::Timestamp start(muduo::Timestamp::now());	// 发送前记录时间struct SessionMessage sessionMessage = { 0, 0 };sessionMessage.number = htonl(opt.number);sessionMessage.length = htonl(opt.length);if (write_n(sockfd, &sessionMessage, sizeof(sessionMessage)) != sizeof(sessionMessage)){perror("write SessionMessage");exit(1);}const int total_len = static_cast<int>(sizeof(int32_t) + opt.length);PayloadMessage* payload = static_cast<PayloadMessage*>(::malloc(total_len));assert(payload);payload->length = htonl(opt.length);for (int i = 0; i < opt.length; ++i){payload->data[i] = "0123456789ABCDEF"[i % 16];}// 发送的数据总量double total_mb = 1.0 * opt.length * opt.number / 1024 / 1024;printf("%.3f MiB in total\n", total_mb);for (int i = 0; i < opt.number; ++i){int nw = write_n(sockfd, payload, total_len);assert(nw == total_len);int ack = 0;int nr = read_n(sockfd, &ack, sizeof(ack));assert(nr == sizeof(ack));ack = ntohl(ack);assert(ack == opt.length);}::free(payload);::close(sockfd);// 计算出时间差double elapsed = timeDifference(muduo::Timestamp::now(), start);	// 数据总量/时间,单位 mb\sprintf("%.3f seconds\n%.3f MiB/s\n", elapsed, total_mb / elapsed);
}

服务端的主要函数

void receive(const Options& opt)
{int sockfd = acceptOrDie(opt.port);struct SessionMessage sessionMessage = { 0, 0 };if (read_n(sockfd, &sessionMessage, sizeof(sessionMessage)) != sizeof(sessionMessage)){perror("read SessionMessage");exit(1);}sessionMessage.number = ntohl(sessionMessage.number);sessionMessage.length = ntohl(sessionMessage.length);printf("receive number = %d\nreceive length = %d\n",sessionMessage.number, sessionMessage.length);const int total_len = static_cast<int>(sizeof(int32_t) + sessionMessage.length);PayloadMessage* payload = static_cast<PayloadMessage*>(::malloc(total_len));assert(payload);for (int i = 0; i < sessionMessage.number; ++i){payload->length = 0;if (read_n(sockfd, &payload->length, sizeof(payload->length)) != sizeof(payload->length)){perror("read length");exit(1);}payload->length = ntohl(payload->length);assert(payload->length == sessionMessage.length);if (read_n(sockfd, payload->data, payload->length) != payload->length){perror("read payload data");exit(1);}int32_t ack = htonl(payload->length);if (write_n(sockfd, &ack, sizeof(ack)) != sizeof(ack)){perror("write ack");exit(1);}}::free(payload);::close(sockfd);
}

还有非阻塞IO版的,也就是ttcp.cc,大部份依照回调函数的方式实现

测试

环境:两条桥联的虚拟机(Centos)

阻塞io

[wang@localhost bin]$./ttcp_blocking -t ip -l 1024000
port = 5001
buffer length = 1024000
number of buffers = 8192
8000.000 MiB in total
40.412 seconds
197.960 MiB/s

非阻塞io

[wang@localhost bin]$ ./ttcp_muduo -t ip -l 1024000
port = 5001
buffer length = 1024000
number of buffers = 8192
INFO  payload bytes 8388608000 - ttcp.cc:69
8000.000 MiB transferred
198.619 MiB/s

两种方式吞吐量差不多

这篇关于ttcp测试网络吞吐量的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/939711

相关文章

【Altium】查找PCB上未连接的网络

【更多软件使用问题请点击亿道电子官方网站】 1、文档目标: PCB设计后期检查中找出没有连接的网络 应用场景:PCB设计后期,需要检查是否所有网络都已连接布线。虽然未连接的网络会有飞线显示,但是由于布线后期整板布线密度较高,虚连,断连的网络用肉眼难以轻易发现。用DRC检查也可以找出未连接的网络,如果PCB中DRC问题较多,查找起来就不是很方便。使用PCB Filter面板来达成目的相比DRC

通信系统网络架构_2.广域网网络架构

1.概述          通俗来讲,广域网是将分布于相比局域网络更广区域的计算机设备联接起来的网络。广域网由通信子网于资源子网组成。通信子网可以利用公用分组交换网、卫星通信网和无线分组交换网构建,将分布在不同地区的局域网或计算机系统互连起来,实现资源子网的共享。 2.网络组成          广域网属于多级网络,通常由骨干网、分布网、接入网组成。在网络规模较小时,可仅由骨干网和接入网组成

Toolbar+DrawerLayout使用详情结合网络各大神

最近也想搞下toolbar+drawerlayout的使用。结合网络上各大神的杰作,我把大部分的内容效果都完成了遍。现在记录下各个功能效果的实现以及一些细节注意点。 这图弹出两个菜单内容都是仿QQ界面的选项。左边一个是drawerlayout的弹窗。右边是toolbar的popup弹窗。 开始实现步骤详情: 1.创建toolbar布局跟drawerlayout布局 <?xml vers

将一维机械振动信号构造为训练集和测试集(Python)

从如下链接中下载轴承数据集。 https://www.sciencedirect.com/science/article/pii/S2352340918314124 import numpy as npimport scipy.io as sioimport matplotlib.pyplot as pltimport statistics as statsimport pandas

编译测试后出现“发现不明确的匹配”错误

原文链接:http://blog.163.com/zhaoyanping_1125/blog/static/201329153201204218533/ 错误提示: 【“/”应用程序中的服务器错误。  分析器错误 说明: 在分析向此请求提供服务所需资源时出错。请检查下列特定分析错误详细信息并适当地修改源文件。  分析器错误信息: 发现不明确的匹配。】   这个问题发生原因一般情况是

RODNet安装测试

项⽬地址: GitHub - yizhou-wang/RODNet: RODNet: Radar object detection network 搭建环境并配置RODNet 1. 参考README.md搭建并配置环境 准备数据集 1. 本实验使⽤ ROD2021 dataset. 百度⽹盘链接:百度网盘 请输入提取码 密码:slxy 2. 使⽤这个script来重新组织文件。 具体形

使用 GoPhish 和 DigitalOcean 进行网络钓鱼

配置环境 数字海洋VPS 我创建的丢弃物被分配了一个 IP 地址68.183.113.176 让我们登录VPS并安装邮件传递代理: ssh root@68.183.113.176apt-get install postfix 后缀配置中的点变量到我们在 DigitalOcean 中分配的 IP:mynetworks nano /etc/postfix/main.cf

Mockito测试

Mockito 一 mockito基本概念 Mock测试是单元测试的重要方法之一,而Mockito作为一个流行的Mock框架,简单易学,且有非常简洁的API,测试代码的可读性很高。 Mock测试就是在测试过程中,对于一些不容易构造(如HttpServletRequest必须在Servlet容器中才能构造出来)或者说获取比较复杂的对象(如JDBC中的ResultSet对象)

jmeter测试https请求

公司最近在搞全站HTTPS改造,进一步提高网站的安全性,防止运营商劫持。那么,改造完成后,所有前后端的URL将全部为https。 So ,研究下怎么用Jmeter访问https请求呢。 其实很简单, 第一步在jmeter中创建HTTP请求,如下图进行配置,https端口为443; 第二步,在本机浏览器,如Chrome中导入该域名证书,在更多工具-设置-管理证书的地方,找到该证书,导出到本地。然后在

Linux网络编程之循环服务器

1.介绍 Linux网络循环服务器是指逐个处理客户端的连接,处理完一个连接后再处理下一个连接,是一个串行处理的方式,比较适合时间服务器,DHCP服务器.对于TCP服务器来说,主要阻塞在accept函数,等待客户端的连接。而对于UDP服务器来说,主要阻塞在recv函数. 2.循环服务器模型 TCP循环服务器: 算法如下:          socket(...);