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%以上……