2024年4月20日发(作者:)
bps和pps详解
===========================bps====================
=========
在计算 机科学中,bit是表示信息的最小单位,叫做二进制位;一般用0和1表示。
Byte叫做字节,由8个位(8bit)组成一个字节(1Byte),用于表示 计算机中的一个字符。
bit(比特)与Byte(字节)之间可以进行换算,其换算关系为:1Byte=8bit(或简写为:
1B=8b);在实际应用中一 般用简称,即1bit简写为1b(注意是小写英文字母b),1Byte
简写为1B(注意是大写英文字母B)。
在计算机网络或者是网络运营商中,一般,宽带速率的单位用bps(或b/s)表示;bps
表示比特每秒即表示每秒钟传输多少位信息,是bit per second的缩写。在实际所说的
1M带宽的意思是1Mbps(是兆比特每秒Mbps不是兆字节每秒MBps)。
建议用户记住以下换算公式:
1B=8b 1B/s=8b/s(或1Bps=8bps)
1KB=1024B 1KB/s=1024B/s
1MB=1024KB 1MB/s=1024KB/s
规范提示:
实际书写规范中B应表示Byte(字节),b应表示bit(比特),但在平时的实际书写中有
的把bit和Byte都混写为b ,如把Mb/s和MB/s都混写为Mb/s,导致人们在实际计算
中因单位的混淆而出错。切记注意!!!
实例:
在我们实际上网应用中,下载软件时常常看到诸如下载速度显示为128KBps(KB/s),
103KB/s等等宽带速率大小字样,因为ISP提供的线路带宽使用的单位是比特,而一般下
载软件显示的是字节(1字节=8比特),所以要通过换算,才能得实际值。
然而我们可以按照换算公式换算一下:
64KB/s=64×8(Kb/s)=512Kb/s=0.5Mb/s即64KB/s=0.5Mb/s
128KB/s=128×8(Kb/s)=1024Kb/s=1Mb/s即128KB/s=1Mb/s
特别提示:
(1) 关于bit(比特)/second(秒)与Byte(字节)/s(秒)的换算说明:线路单位是bps,表
示bit(比特)/second(秒),注意是小 写字母b;用户在网上下载时显示的速率单位往往是
Byte(字节)/s(秒),注意是大写字母B。字节和比特之间的关系为1Byte=8Bits;再加上 IP
包头、HTTP包头等因网络传输协议增加的传输量,显示1KByte/s下载速率时,线路实际
传输速率约10kbps。例如:下载显示是 50KByte/s时,实际已经达到了500Kbps的速
度。切记注意单位!!!
(2)用户申请的宽带业务速率指技术上所能达到的最大理论速率值,用户上网时还受到
用户电脑软硬件的配置、所浏览网站的位置、对端网站带宽等情况的影响,故用户上网时
的速率通常低于理论速率值。
(3) 理论上:2M(即2Mb/s)宽带理论速率是:256KB/s(即2048Kb/s),实际速
率大约为103--200kB/s;(其原因是受用户计算机 性能、网络设备质量、资源使用情况、
网络高峰期、网站服务能力、线路衰耗,信号衰减等多因素的影响而造成的)。4M(即4Mb/s)
的宽带理论速率 是:512KB/s,实际速率大约为200---440kB/s。
===========================pps====================
=========
包 转发率标志了交换机转发数据包能力的大小。单位一般位pps(包每秒),一般交
换机的包转发率在几十Kpps到几百Mpps不等。包转发速率是指交换机每 秒可以转发多
少百万个数据包(Mpps),即交换机能同时转发的数据包的数量。包转发率以数据包为单
位体现了交换机的交换能力。
交换机的 背板带宽,是交换机接口处理器或接口卡和数据总线间所能吞吐的最大数据
量。背板带宽标志了交换机总的数据交换能力,单位为Gbps,bps(bits per second,
每秒数据的位数,也叫交换带宽,一般的交换机的背板带宽从几Gbps到上百Gbps不等。
一台交换机的背板带宽越高,所能处理数据的能力就 越强,但同时设计成本也会越高。所
以一般来说二层能力用bps,三层能力用pps,支持第三层交换的设备,厂家会分别提供
第二层转发速率和第三层转发速 率。
另外,讲一下PPS是如何计算的
我们知道1个千兆端口的线速包转发率是1.4881MPPS,
百兆端口的线速包转发率是0.14881MPPS,这是国际标准,但是如何得来的呢?
具 体的数据包在传输过程中会在每个包的前面加上64个(前导符)preamble也就
是一个64个字节的数据包,原本只有512个bit,但在传输过程中实 际上会有
512+64+96=672bit,也就是这时一个数据包的长度实际上是有672bit的千兆端口线速包
转发 率=1000Mbps/672=1.488095Mpps,约等于1.4881Mpps,百兆除于10为
0.14881Mpps (包 转发线速的衡量标准是以单位时间内发送64byte的数据包(最
小包)的个数作为计算基准的。对于千兆以太网来说,计算方法如 下:
1,000,000,000bps/8bit/(64 + 8 + 12)byte=1,488,095pps 说明:当以太网帧为64byte
时,需考虑8byte的帧头和12byte的帧间隙的固定开销。故一个线速的千兆以太网端口
在转发64byte包时的包转 发率为1.488Mpps。快速以太网的线速端口包转发率正好为
千兆以太网的十分之一,为148.8kpps。*对于万兆以太网,一个线速端口的包转发率 为
14.88Mpps。*对于千兆以太网,一个线速端口的包转发率为1.488Mpps。*对于快速以
太网,一个线速端口的包转发率为 0.1488Mpps。)
那么以后很简单了,其实直接用设备参数中的pps数值乘以672那么就转化成我们比
较能理解的大众化的bps概念了。
一般销售为了方便大家计算和整数化的理解就改672为500。
(包 转发线速的衡量标准是以单位时间内发送64byte的数据包(最小包)的个数作
为计算基准的。对于千兆以太网来说,计算方法如 下:1,000,000,000bps/8bit/(64 + 8
+ 12)byte=1,488,095pps 说明:当以太网帧为64byte时,需考虑8byte的帧头和
12byte的帧间隙的固定开销。故一个线速的千兆以太网端口在转发64byte包时的包转 发
率为1.488Mpps。快速以太网的线速端口包转发率正好为千兆以太网的十分之一,为
148.8kpps。
*对于万兆以太网,一个线速端口的包转发率为14.88Mpps。
*对于千兆以太网,一个线速端口的包转发率为1.488Mpps。
*对于快速以太网,一个线速端口的包转发率为0.1488Mpps。)
理解了这个后忽然发现网络设备选型原来是那么的简单,我只需要预计网络中的总节
点数和带宽需求及流量需求,那么需要的交换机性能型号和路由器型号就呼之欲出了。
注:
现在的设备很多是三层交换机,我们看到的参数是分别针对三层模块和二层模块来说
的。
例如6509就是这样了。
数据交换能力是720Gbps,但是路由包转发能力是400Mpps。这里没有矛盾。因为
两个数据都不是描述一件事情。
为 什么一个数据包定为512个bit,为什么不是1024个bit再加上64个字节的
preamble?因为根据Ethernet中的标准,以太网最小的包 大小为64个字节(即512bit),
IP报头固定有20个字节的开销,如果负载小于44个字节的话,在发出数据包前会自动填
充至44字节,以保证最少达 到64字节IP包
目前,很多X86的防火墙厂商都宣称,64bytes小包线速转发,94%……,呵呵,让
我们来看看kola关于这个的经典论述:
===========================SUMMERY================
===========
一. 线速
线速转发是对一个网络中转设备的理想要求。但平时大多数人都关注着设备的bps
(bits per second,每秒数据的位数),很少人会想到fps(frame per second,每秒数
据的帧数)实际上更考验设备的转发能力。
简单的说,bps是指每秒钟有多少字节的数据经过,fps是每秒钟有多少个数据包经
过。
以10Mb的网络来说,线速时bps为10M,fps最大值为14880。
那么这个14880是怎么计算出来的呢?
首先我们要知道几个规定:
1. 以太网内最小的数据包的大小为64字节,它包括4字节的CRC,2字节的以太网
类型(或长度),6字节的源Mac地址,6字节的目的Mac地址以及46字节的负荷。
2. 以太网帧与帧之间至少要有96位(12字节)的帧间隙(IFP,inter frame gap)
以确保区分两个数据包。
3. 每个数据帧开始之间必须要有8字节的Mac地址前导位(MAC preamble)以确
保发送方接收方同步数据位。
因此,以太网内最小的数据包实际上是64+12+8=84字节=672位。
于是,10M网络环境下pps的最大值就是
10M位每秒 / 672 位每包 = 14480 包每秒。
同理,我们可以算出10M网络环境下fps的最大值为
10M位每秒 / ( ( 1518+12+8 ) * 8 ) 位每帧 = 812 帧每秒
而100M网络环境下这两个值分别为148809和8127。
二. 处理能力
我们已经知道了线速情况下最大的fps值,现在我们看看要达到线速所需要的处理能
力。
假设市面上某防火墙的是X86架构的CII 900Mhz 的CPU,即每秒钟可以分成900M
个时钟周期。
于是,在100M的网络环境下,处理一个数据帧所允许的最大时钟周期为:
900M 时钟周期每秒 / 148809 帧每秒 = 6048 时钟周期每帧
也就是说,要达到线速转发,900Mhz的CPU平均要在6048个时钟周期内完成对一
个数据包的处理。
这 只是理想情况,基于x86架构的系统里CPU还要负责各类中断(如系统时钟)的
处理,每次中断时都要保存当前的运行状态,切换到中断处理程序,等中断处理 完后,再
恢复当前状态,切换回原来的处理流程。光是这个切换过程至少都要费上500个时钟周期,
还不包括中断处理程序所用的时钟周期。好在这类中断还”不 算“频繁,扣除系统这部分
开销后,真正分摊到每个数据包的处理时间平均大约还有5500个时钟周期。
虽然Intel P3以上级的CPU如CII在设计指令集时已经将大量常用的指令(如两个寄
存器相加/减)优化到可以在一个时钟周期内完成,但做为防火墙,更常用的是读 /写内存
数据(比如要比较源地址,计算IP的校验和等)这类多时钟周期的指令,所以5500个时
钟周期内大约只能执行2000条指令。
对一个数据 包的处理,从为这个数据包分配内存起,依次要检查以太网络协议(如果
是RFC1042格式的数据包还要跳过LLC头找真正的以太网络协议),检查IP头、 校验和
(如果是TCP/UDP协议还要计算对应的校验和),DoS防御,状态检测,NAT规则,安
全/统计规则,更新ARP/路由表,选择转发网卡,直到 最终把这个数据包添加到发送队列
中才算完成。
你认为2000条x86的指令能完成这一切吗?
另外的一种说法先看看操作系统如何处理包:
一 般对于高效处理,很少是一个包一个中断的,都是通过轮询方式,比如在freebsd
下,高负载情况下,可以设置5000次/s(intel百兆卡,一般够 用,至于怎么够用,自己
算吧)甚至更高,网卡会将收到的包存放于队列中,等待cpu的主动处理。这样中断数会极
大降低。一般好的网卡比如常见的intel 百兆卡,(如果没有记错的话,队列大小是32,而
8139才4),可以缓冲大量的包,这样cpu的一次中断可以处理多个包。在纯路由模式下,
即使有少量的 规则,包转发的速度是非常快的,基本可以达到线速的,当然不是100M,
所有的网络节点设备都会有延时的,只是多少而已。在防火墙中,消耗cpu的是 nat和复
杂的规则检测,其他的基本功能消耗cpu比较少, 速度非常快,拿过一个包,通过指针定
位ip头,根据ip头定位动态规则表(hash检索),比较一下要么丢弃,要么直接送到下
层。如果对协议栈了解的话, 会知道一个包从网络进入协议栈,大部分流程都是条件判断。
arp表,路由表之类的处理也非常快的,记得是3跳命中。再说了还有高速缓冲的,
在freebsd中还可以
打开fastforward。mbuf使用起来也不像应用层的内存申请使用,不用担心那么耗费
指令。对于包效验和,汇编指令编写的,一般需要几十条指令,不会超过百条。
三. 现实数据
2000条指令看起来很多,实际上并不多,举个例子,要完成最简单的 A = A + B 这
个算式最优化的指令也要用上两条:
mov eax, [val_B]
add [val_A], eax
未优化的会用上四条:
mov eax, [val_A]
mov ebx, [val_B]
add eax, ebx
mov [val_A], eax
目前的防火墙的开发大多是在Unix/Linux上完成的,以GCC编译器为例,它的优化
效果比商业的编译器如VC/BC差了大概20%,也就是说同一段C代码,用商业编译器能
编译成100条指令的话,GCC最好的情况下只能编译成120条指令。
实际上,在没有任何包过滤规则或其它配置的情况下,完整的处理一个数据包需要大
约14000条指令。
所以,根据上面的计算,目前许多X86架构防火墙(PIII 800)在100M网络环境下的
结果是64byte的情况下达到42%的线速转发能力,即62000fps的处理能力。至于100%,
95%,90%以上……
发布评论