下午验证一个高流量发包问题时,发现了一个值得记录的问题:socket的收发buffer尺寸是会影响收发包的效率的,高流量通讯时,若socket的收发buffer尺寸过小会一定程度降低收发包效率. 自己先分别获取了一下Windows/Linux系统中默认的收发包尺寸值在x86 Win7环境里实际程序验证结果为 $ ./sockopt.exe UDP socket options: receive buffer: 0x2000 send buffer: 0x2000 TCP socket optio…
1.修订单个socket的缓冲区大小:通过setsockopt使用SO_RCVBUF来设置接收缓冲区,该参数在设置的时候不会与rmem_max进行对比校验,但是如果设置的大小超过rmem_max的话,则超过rmem_max的部分不会生效:2.修订linux系统udp缓冲区大小:通过rmem_max来设置系统中udp缓存的上限,该值可通过如下方式查看:root@ubuntu:/mnt/hgfs/vm-shared/socket# cat /proc/sys/net/core/rmem_max131…
交换芯片支持:报文.计数.表项3种DMA类型,其中报文DMA包括系统从芯片到接收报文或发送报文到交换芯片,计数DMA用来从片上获取统计计数,表项DMA功能分为SLAM DMA(系统内存DMA到片上交换芯片表项内)和TABLE DMA(从芯片的表项内获取内容DMA到系统内存),是ram和交换芯片之间的两个方向上的操作. 交换芯片包含的每一个CMIC控制器都有4个DMA通道,其中CMIC1和2控制器只在内部使用,只有CMIC0控制器的4个DMA通道可以被用来收发报文,CMIC0内的3个DMA通道用于…
本文将介绍网络连接建立的过程.收发包流程,以及其中应用层.tcp层.ip层.设备层和驱动层各层发挥的作用. 应用层 对于使用socket进行网络连接的服务器端程序,我们会先调用socket函数创建一个套接字: fd = socket(AF_INET, SOCK_STREAM, ); 以上指定了连接协议,socket调用返回一个文件句柄,与socket文件对应的inode不在磁盘上,而是存在于内存. 之后我们指定监听的端口.允许与哪些ip建立连接,并调用bind完成端口绑定: server_add…
一: 多队列及中断信息收集 [root@T185 ~]# ethtool -g eth0 Ring parameters for eth0: Pre-set maximums: RX: RX Mini: RX Jumbo: TX: Current hardware settings: RX: RX Mini: RX Jumbo: TX: [root@T185 ~]# ls /sys/class/net/eth0/queues/ rx- rx- rx- rx- rx- rx- rx- rx- rx…
前言:DPDK收发包是基础核心模块,从网卡收到包到驱动把包拷贝到系统内存中,再到系统对这块数据包的内存管理,由于在处理过程中实现了零拷贝,数据包从接收到发送始终只有一份,对这个报文的管理在前面的mempool内存池中有过介绍.这篇主要介绍收发包的过程. 一.收发包分解 收发包过程大致可以分为2个部分 1.收发包的配置和初始化,主要是配置收发队列等. 2.数据包的获取和发送,主要是从队列中获取到数据包或者把数据包放到队列中. 二.收发包的配置和初始化 收发包的配置 收发包的配置最主要的工作就是配置…
本文实例讲述了C#实现的UDP收发请求工具类.分享给大家供大家参考,具体如下: 初始化: ListeningPort = int.Parse(ConfigurationManager.AppSettings["ListeningPort"]); SendingPort = int.Parse(ConfigurationManager.AppSettings["SendingPort"]); SendingIp = ConfigurationManager.AppSe…
DebugLog 可以用来查看收发包的情况,比较有意思,现特意记录下来: Sample: import urllib2 httpHandler = urllib2.HTTPHandler(debuglevel=1) httpsHandler = urllib2.HTTPSHandler(debuglevel=1) opener = urllib2.build_opener(httpHandler, httpsHandler) urllib2.install_opener(opener) resp…
花了几天看了一下ppp/pppoe有关的东西,画了一下用户态pppoe收发包的示意图.…
UDP数据包长度 UDP数据包的理论长度 udp数据包的理论长度是多少,合适的udp数据包应该是多少呢?从TCP-IP详解卷一第11章的udp数据包的包头可以看出,udp的最大包长度是2^16-1的个字节.由于udp包头占8个字节,而在ip层进行封装后的ip包头占去20字节,所以这个是udp数据包的最大理论长度是2^16-1-8-20=65507. 然而这个只是udp数据包的最大理论长度.首先,我们知道,TCP/IP通常被认为是一个四层协议系统,包括链路层.网络层.运输层.应用层.UDP属于运输…
转自:https://blog.csdn.net/xy010902100449/article/details/47362787 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/xy010902100449/article/details/47362787函数接口设备初始化函数 网络设备驱动在 Linux 内核中是以内核模块的形式存在的,对应于模块的初始化,需要提供一个初始化函数来初始化网络设备的硬件寄存器.配置 DMA 以及初始化相关内核变量等…
UDP数据包长度 UDP数据包的理论长度 udp数据包的理论长度是多少,合适的udp数据包应该是多少呢?从TCP-IP详解卷一第11章的udp数据包的包头可以看出,udp的最大包长度是2^16-1的个字节.由于udp包头占8个字节,而在ip层进行封装后的ip包头占去20字节,所以这个是udp数据包的最大理论长度是2^16-1-8-20=65507. 然而这个只是udp数据包的最大理论长度.首先,我们知道,TCP/IP通常被认为是一个四层协议系统,包括链路层.网络层.运输层.应用层.UDP属于运输…
三层包测试 发包方式:192.168.20.205 发包工具:pktgen 发包网卡:i350 收包设备:1922.168.20.185 CPU:Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz 收包方式:网卡ixgeb驱动,单队列,promisc计数 收包网卡: 82599EB 传输链路:千兆RJ45网线直连 发包方法: Pktgen:/> set 0 size 500 Pktgen:/> set 0 count 1000000 Pktgen:/> se…
ref: Dpdk programmer’s guide 1.  概述 dpdk不仅提供针对物理和虚拟网卡的pmd驱动(Poll Mode Drivers),还提供两个纯软件的pmd驱动,libpcap pmd就是其中之一.Libpcap pmd使用libpcap库读写报文,读写的源可以是文件,也可以是使用Linux内核驱动的物理网卡. 在没有或不方便配置物理网卡的机器上,使用libpcap pmd可以帮助dpdk应用开发人员进行功能性测试或代码调试:更重要的是,EAL(Environment…
多线程socket收发数据 from threading import Thread from socket import * def sendData(): while True: sendInfo = input('<<') udpSocket.sendto(sendInfo.encode('gb2312'),(destIp,destPort)) def recevData(): while True: recvInfo = udpSocket.recvfrom(1024) print('…
一个网络报文从网卡接收到被应用处理,中间主要需要经历两个阶段: 阶段一:网卡通过其DMA硬件将收到的报文写入到收包队列中(入队)阶段二:应用从收包队列中读取报文(出队)由于目前正在使用vpp/dpdk 优化waf引擎的工作,所以就看看ixgbe网卡在dpdk框架下是怎么工作的.下面分别介绍一下 收包队列结构 初始化(使能) 收包流程 收发包的配置和初始化,主要是配置收发队列等. 收发包的配置最主要的工作就是配置网卡的收发队列,设置DMA拷贝数据包的地址等.使用数据包时,只要去对应队列取出指定地址…
目前昨天查一个线上问题:""dns服务器在我们的设备, 有大量的终端到设备上请求解析域名,但是一直是单线程,dns报文处理不过来", 然而设备是多核,dns服务器一直不能利用多核资源,所以能不能使用多线程进行处理呢? udp不像tcp那样,udp没有连接的概念,也就是没有通过建立多个连接来提高对dns服务器并发访问,然而在多核环境下那就只能通过多线程来访问一个共享的udp socket,但是还是一个socket , 会涉及到多线程抢占资源问题. 来看一下内核协议栈udp收到包…
psutil模块介绍 psutil是一个开源切跨平台的库,其提供了便利的函数用来获取才做系统的信息,比如CPU,内存,磁盘,网络等.此外,psutil还可以用来进行进程管理,包括判断进程是否存在.获取进程列表.获取进程详细信息等.而且psutil还提供了许多命令行工具提供的功能,包括:ps,top,lsof,netstat,ifconfig, who,df,kill,free,nice,ionice,iostat,iotop,uptime,pidof,tty,taskset,pmap. psut…
psutil模块介绍 psutil是一个开源切跨平台的库,其提供了便利的函数用来获取才做系统的信息,比如CPU,内存,磁盘,网络等.此外,psutil还可以用来进行进程管理,包括判断进程是否存在.获取进程列表.获取进程详细信息等.而且psutil还提供了许多命令行工具提供的功能,包括:ps,top,lsof,netstat,ifconfig, who,df,kill,free,nice,ionice,iostat,iotop,uptime,pidof,tty,taskset,pmap. psut…
反思C++面向对象与虚函数 C++语言学习可以看<C++ Primer>这本书; 在C++中进行面向对象编程会遇到其他语言中不存在的问题, 其本质原因是C++ class是值语义, 而非对象语义; 朴实的C++设计 实用当头, 朴实为贵, 好用才是王道; C++ 是一门(最)复杂的编程语言, 语言虽复杂, 不代表一定要用复杂的方式来使用它; 不一定非得有基类和派生类的设计才是好设计; 一个类代表一个概念; 让代码保持清晰, 给我们带来了显而易见的好处; 不要因为某个技术流行而去用它, 除非它确…
1.Python编写的监控工具 1).多功能系统资源统计工具dstat dstat是一个用Python编写的多功能系统资源统计工具,用来取代Linux下的vmstat,iostat,netstat和ifstat等命令 dstat可以在一个界面上展示非常全面的监控信息 # yum install dstat # dstat 2 10 dstat的强大之处不仅仅是因为它聚合了很多种工具的监控结果,还因为它能通过附带的插件实现一些高级功能,如找出占用资源最高的进程和用户 dstat的--top-(io…
目录 psutil 简介 psutil的功能函数 cpu memory_内存 disk_磁盘 net_网络 pid_进程管理 sensors_传感器 其他(用户,启动时间) psutil简介 psutil是一个开源切跨平台的库,其提供了便利的函数用来获取才做系统的信息,比如CPU,内存,磁盘,网络等.此外,psutil还可以用来进行进程管理,包括判断进程是否存在.获取进程列表.获取进程详细信息等.而且psutil还提供了许多命令行工具提供的功能,包括:ps,top,lsof,netstat,if…
psutil是Python中广泛使用的开源项目,其提供了非常多的便利函数来获取操作系统的信息. 此外,还提供了许多命令行工具提供的功能,如ps,top,kill.free,iostat,iotop,pidof,pmap等等. 1. CPU 1.1 获取逻辑CPU和物理CPU个数. 1.2 查看CPU的利用率 percpu参数获取每个cpu的利用率,默认获取整体cpu利用率. interval:获取interval时间范围内的cpu利用率. 1.3 以命名元组的形式返回cpu的时间花费 也可以指定…
这几天写GB28181平台接入层代码,对收到的PS包进行解包时,总是出现误码,最终导致rtsp点播服务中画面花屏. 分析了码流抓包数据之后,发现网络上没有丢包,遂认为PS流解包代码有bug,于是埋头分析了2个小时的解包函数后,没有发现问题.将抓包RTP负载中的PS包数据导出之后,专门利用PS解包代码写了一个小程序,对导出的数据进行处理,又没有问题——后来事实证明解包代码的确没有问题,而且这部分的代码是在其他项目中用过的.自己有些迷糊了,一时想不明白问题出在哪里. 冷静后分析一下,认为抓包结果中的…
网卡流量 1.iftop命令 iftop可以用来监控网卡的实时流量(可以指定网段).反向解析IP.显示端口信息.TCP/IP连接等官网:http://www.ex-parrot.com/~pdw/iftop/ 安装iftop: [root@Super ~]# yum install flex byacc libpcap ncurses ncurses-devel libpcap-devel -y [root@Super ~]# wget http://www.ex-parrot.com/~pdw…
基于个人兴趣,决定实现一个和方案公司提供的uboot收发广播的功能.记录笔记如下. SDK版本:Hi3518E_V100R001C01SPC081 1. 由于我手头的板子的Phy是RMII模式,因此先按这篇帖子进行将uboot默认的网络驱动改为RMII模式. http://blog.csdn.net/skdkjzz/article/details/39931915 2. 然后设置好Phy的CONFIG_PHY_ADDR_U和CONFIG_PHY_ADDR_D,这个我不太懂是为什么,估计和硬件有关…
本文为作者原创或翻译,转载请注明,不得用于商业用途. 作者:rellikt@gmail.com 首发链接:http://blog.csdn.net/rellikt/archive/2010/08/21/5829020.aspx   这篇教程让我们就从最基本的网络数据收发开始谈起吧.其实这部分才是网络程序员应该做的最基础最简单的部分,但是这部分如果想要做好相对来说还是很有技巧和困难的.而且如果这部分你没做好,在多人对战类游戏中它带来的影响是极其恶劣的. 你可能听说过端口这个概念,也可能知道TCP和…
C# code namespace UDPServer { class Program { static void Main(string[] args) { int recv; byte[] data = new byte[1024]; //构建TCP 服务器 //得到本机IP,设置TCP端口号 IPEndPoint ipep = new IPEndPoint(IPAddress.Any , 8001); Socket newsock = new Socket(AddressFamily.In…
Linux查看实时网卡流量的几种方式 来源  https://www.jianshu.com/p/b9e942f3682c 在工作中,我们经常需要查看服务器的实时网卡流量.通常,我们会通过这几种方式查看Linux服务器的实时网卡流量. 1. sar -n DEV 1 2 sar命令包含在sysstat工具包中,提供系统的众多统计数据.其在不同的系统上命令有些差异,某些系统提供的sar支持基于网络接口的数据统计,也可以查看设备上每秒收发包的个数和流量. sar –n DEV 1 2 命令后面1 2…
1. sar -n DEV 1 2 sar命令包含在sysstat工具包中,提供系统的众多统计数据.其在不同的系统上命令有些差异,某些系统提供的sar支持基于网络接口的数据统计,也可以查看设备上每秒收发包的个数和流量. 格式:sar –n DEV 1 2命令后面1 2 意思是:每一秒钟取1次值,取2次. DEV显示网络接口信息 另外,-n参数很有用,他有6个不同的开关:DEV | EDEV | NFS | NFSD | SOCK | ALL 其代表的含义如下: 1.DEV显示网络接口信息. 2.…