实验环境

命令

dd命令

  • 用于读取、转换并输出数据。
  • 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。
    参数:
    if=文件名:输入文件名,默认为标准输入。即指定源文件。
    bs=bytes:同时设置读入/输出的块大小为bytes个字节。
    count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。

nc命令

  • netcat的简写,有着网络界的瑞士军刀美誉。一款功能强大的网络工具
    参数:
    l 用于指定nc将处于侦听模式。该参数意味着nc被当作server,侦听并接受连接。

ls -l 出来的单位是B
ls - lh 出来的单位是KB
time命令 - “time a simple command or give resource usage”,即测量命令的执行时间,或者给出系统资源的使用情况

测试

下面我们使用 netcat 来测试一下在千兆网中 tcp 可以达到的吞吐量

在 atom 机器 发送到 e6400 机器:

  • e6400: 在5001端口监听,收数据。
  • atom:从 /dev/sero 读一千兆数据,发送到5001端口(注:/dev/zero文件代表一个永远输出 0的设备文件,使用它作输入可以得到全为空的文件。因此可用来创建新文件和以覆盖的方式清除旧文件)
  • 带宽 118MB/s

本地测试:从 atmo 发送到 atom

  • 第一次测量:从 dev/zero 读取数据10G数据测带宽为 580MB/s

  • 第二次测量:从本地读取数据1G左右数据文件,运行时间为 9.4s,测带宽为 115.720MB/s【1087774720(文件大小) / 9.4(运行时间) / 1000000】。因为该步测试从磁盘加载文件,测试结果内含磁盘读取时间消耗,作为网络带宽结果不准确,因此再进行第三次测量。

  • 第三次测量:从本地读取数据1G左右数据文件,测带宽为 1074.876MB/s。由于步骤2测试时,已经将文件数据加载进内存中了,该步测试可以认为是直接从内存中加载数据。

在 atom 机器 发送到 e350 机器:

  • 可以看出为 118 MB/s,tcp 协议栈开销不大

结果

  • 在 atom 和 {e6400,e350} 千兆网测试出的结果吞吐量是 118MB/s
  • 在 atom 这台机器上,如果用 dd 重定向到 nc ,用 nc 测,是 580 MB/s
  • 在 atom 这台机器上,改用文件重定向是 1074 MB/s
  • 可以看到,2 与 3 的测试结果差异很大。原因是 2 在测试时使用 dd 命令也有一定的资源消耗
  • 下面我们测试 dd
    atom发送端:使用 dd + nc 测试
    atom接收端:使用 nc + pv 测试

    可以看到此次测试结果约为 455MB/s , 弱于第 3 次测试的1074.876MB/s
  • 原因分析:该atom机器为双核,在本次测试中可视为启动了四个进程,他们之间会有一定的争用。而第 3 次测试中使用了 time + nc 两个进程,他们刚好充分的利用了CPU,因此测试结果较优。
  • 如果此时我们使用 top 命令可以看到他们占用CPU的情况

原因

  • 当只有 nc -> tcp -> nc 为 118MB/s
  • 当 dd -> pipe -> nc -> tcp -> nc -> tcp 为 580 ≈ 118 * 3
  • 最后 1074Mb/s 是从缓存在内存中的文件开始读的
  • 在 atom 上使用 dd 命令工具测试的结果实际上并不只是 tcp 上的开销,在发送端,包含有从内核 /dev/zero 拷贝到用户态 dd , 由 dd 拷贝到内核管道中,通过管道拷贝到 nc 中, 通过 nc 将数据发送给 tcp ;在接收端, 从tcp 接收数据到 nc 中, 在由 nc 拷贝到 dev/null
  • 因此,我们看到 580MB/s 并不是真的测出的 tcp 的传输速率
  • 由此,我们发现影响网络传输速率的不只由网络环境决定,也与程自身所占资源利用率有关(比如CPU占用率等)

Linux C/C++网络编程实战-陈硕-笔记2-一个TCP的简单实验相关推荐

  1. Linux C/C++网络编程实战-陈硕-笔记15-如何正确使用 TCP

    netcat netcat 除了读取 socket 描述符,还要读取 stdin 和 stdout 并发模型 thread-per-connection IO 复用和非阻塞 IO 配合 如何安全的关闭 ...

  2. Linux C/C++网络编程实战-陈硕-笔记3-回顾基础的 Sockets API

    性能指标 带宽(Bandwidth):每秒收发的数据量,MB/s.(只关注数据量,不关注消息数) 吞吐量(Throughput):消息/s.查询/s(QPS).事物数/s(TPS) 延迟(Latenc ...

  3. Linux C/C++网络编程实战-陈硕-笔记20-使用非阻塞IO

    基于IO复用(非阻塞IO)实现的 netcat 使用非阻塞IO可以有效避免上述情况的发生.但非阻塞IO在编程上要比阻塞IO更难,并且在程序的维护上比较痛苦.一般使用非阻塞IO编程时建议使用一些封装好的 ...

  4. Linux C/C++网络编程实战-陈硕-笔记10-网络时间同步

    网络时间同步(NTP)原理 Device A发送一个NTP报文给Device B,该报文带有它离开Device A时的时间戳,该时间戳为10:00:00am(T1). 当此NTP报文到达Device ...

  5. Linux C/C++网络编程实战-陈硕-笔记11-Roundtrip代码分析

    代码 UDP, two threads recipes/tpc/roundtrip_udp.cc UDP with muduo, single thread muduo/examples/roundt ...

  6. Linux C/C++网络编程实战-陈硕-笔记17-多个版本的Netcat概览

    操作模式 对于 netcat 程序,存在两种模式,即 服务端 和 客户端, 它们的区别在于连接建立的方式. 一旦连接建立,客户端/服务器 的行为都是一样的,使用两个并行的循环处理: 从标准输入,写到 ...

  7. Linux C/C++网络编程实战-陈硕-笔记7-TCP自连接

    TCP 自连接 tcp连接两段使用了同一端口进行连接,而tcp并没有报错并且连接成功.即localhost:x --> localhost:x 只存在于 tcp 本地通信,而且客户端先于服务端启 ...

  8. 网络编程实践陈硕笔记零

    1.理查德森的unix网络编程有两样不足:一消息格式处理,特别是非阻塞IO上处理TCP分包问题:二是并发模型稍显陈旧,传统高并发采用事件驱动加非阻塞IO方式. 2.程序员面对的网络术语 Etherne ...

  9. 陈硕《网络编程实战》 02 一个TCP的简单实验

    [稿] 陈硕<网络编程实战> 02 一个TCP的简单实验 站在巨人的肩膀之上. 按照录像整理,部分专有名词不太肯定,版权归陈硕大神. 实验用的是我家里的几台计算机,第一台的主机名叫atom ...

最新文章

  1. R函数:交集intersect、并集union、找不同setdiff、判断相同setequal
  2. 【Groovy】map 集合 ( map 集合操作符重载 | + 操作符重载 | 代码示例 )
  3. Opencv2.4.9源码分析——HoughLinesP
  4. Zju2112 Dynamic Rankings(树状数组套可持久化权值线段树)
  5. 本地方法(JNI)——编码签名
  6. 浅谈进程间的消息传递
  7. 移动app测试的多样性_做移动APP功能测试,这些因素你得都考虑到~
  8. 【Pytorch神经网络理论篇】 20 神经网络中的注意力机制
  9. vue2.0 唤起百度地图app_开车选高德,出门靠百度,高德百度地图APP对比
  10. WIN10 VMWARE 虚拟机安装WIN10 64系统
  11. Linux kernel中网络设备的管理
  12. Windows中使用Netsh Winsock Reset命令解决网络连接问题
  13. VSCode创建Vue项目完整教程
  14. [洛谷P3376题解]网络流(最大流)的实现算法讲解与代码
  15. LaTeX之非英语字母输入
  16. 【SCENIC】Single Cell rEgulatory Network Inference and Clustering
  17. 前端异步解决方案大全(2021版)
  18. 手机号码界面输入数字查看手机信息
  19. SQL Server 题库
  20. I2C 连接 12864 OLED 屏幕

热门文章

  1. linux系统下复制粘贴不了怎么办,VirtualBox 导致 Linux 桌面环境下无法复制粘贴
  2. Java基础-xml解析
  3. 以JLable特性实现坦克大战(1)
  4. gcCov:全球冠状病毒研究知识图谱数据库
  5. Py的docx库:Python操作docx文件的详细教程
  6. Python变量的命名要求和规则(全面版)
  7. 2021年2月27日
  8. OrCAD Capture CIS与PADS layout如何联合绘图
  9. 国产无线蓝牙耳机什么牌子好一点?国产无线蓝牙耳机排名
  10. 视频编解码 — 卡顿与花屏