带宽的单位是“bit/s”,也就是单位时间的比特数。
我们常说的比如100M带宽,全称应该是100Mbit/s,或者100Mbps。
数据的发送一般经过以下几个环节:
1) 应用程序首先将要发送的数据写入该进程的内存地址空间中。通常在程序开发中这只需要一般的运行时变量赋值即可。
2) 应用程序通过系统函数库接口(比如send函数)向内核发出系统调用,系统内核随后将这些数据从用户态内存复制到由内核维护的一段称为内核缓冲区的内存地址空间。这块地址空间的大小通常是有限的,所有要发送的数据将以队列的形式进入这里,这些数据可能来自多个进程,每块数据都有一定的额外记号来标记他的去向。
3) 当数据写入内核缓冲区后,内核会通知网卡控制器前来取数据,同时CPU转而处理其他进程。网卡控制器接到通知后,便根据网卡驱动信息得知对应内核缓冲区的地址,将要发送的数据复制到网卡的缓冲区。
4) 网卡缓冲区的数据需要发送到线路中,同时释放缓冲区来获得更多要发送的数据。但是只有二进制的数字信号才可以在线路中传输,所以这时候需要对数据进行字节到位的转换,然后将数据的每个位按照顺序依次发出。
5) 发送时网卡会使用内部特定的物理装置来生成可以传播的各种信号。比如在使用铜线线路时,网卡会根据“0”与“1”的变化产生不同的电信号;而使用光纤线路时,网卡会产生不同的光信号。
下载速度就是指单位时间里从服务器到达用户PC的数据量的多少,一般用数据量的字节数多少来描述,所以下载速度的单位为“B/s”。
下载速度的计算公式:下载速度 = 数据量字节数 / 响应时间
响应时间 = 发送时间(数据量比特数 / 带宽) + 传播时间(传播距离 / 传播速度) + 处理时间
发送时间需要计算两台主机之间的多个交换节点的每次数据转发花费的发送时间,总的发送时间即为这些转发所花费的时间的总和。
传播时间主要依赖于传播距离,因为传播速度可以近似为2.0*m/s。
处理时间就是指数据在交换节点中为存储转发而进行一些必要的处理所花费的时间,其中的重要组成部分就是数据在缓冲区队列中排队所花费的时间。
计算实例:
假设我们的web服务器托管在北京的某互联网数据中心(IDC),以10MB独享带宽的方式接入互联网。位于西安的一位用户通过小区提供的1MB独享带宽的方式接入互联网,他通过PC的浏览器下载一个100MB大小的文件,换算成比特也就是800Mb,响应时间与下载速度是多少?
首先,我们的web服务器使用了千兆网卡(千兆网卡是服务器的主流配置,大多数服务器的主板都集成双千兆网卡,分别用于外网网卡和内网网卡),即发送速度为1000Mbit/s,那么100MB的文件流出网卡时的发送时间为:800Mb / 1000Mbps = 0.8s。
接下来,假设web服务器直接连接在其所在机柜的交换节点A,交换节点A对接入的端口设置了10MB的独享带宽限制,即通过交换节点A时的发送速度为10Mbps,这样100MB的文件通过交换节点A的发送时间为:800Mb / 10Mbps = 80s。
再看用户端,用户的接入方式为1M独享带宽,假设用户PC直接接入到运营商的交换节点B,那么冲交换节点B到用户PC的发送速度为1Mbit/s,所以100MB的文件通过交换节点B的发送时间为:800Mbit / (1Mbit/s) = 800s。
下载数据通过用户PC的网卡(网卡需要将线路中的电信号或光信号转换为计算机可以识别的字节流)。假设PC使用了百兆网卡,那么发送速度为100Mbps,这样计算出的发送时间为:800Mbit / (100Mbit/s)= 8s。
另外两个交换节点A和B,我们假设他们都是所在城市的城域网顶级节点,而且他们直接通过光缆接入到国家骨干节点,骨干节点带宽假设为40G,那么100MB文件通过骨干节点的发送时间为:800Mbit / (40Gbit/s)= 0.02s。
以上计算出了100MB文件通过每个交换节点的发送时间,但实际上,总的发送时间并不等于他们的总和。因为100 MB文件在实际传输中,并不是完全通过一个交换节点后才进入下一个交换节点,而是作为比特流连续的流过各个交换节点,所以这些分别计算出的发送时间存在重叠部分,不能简单累加。
通常,总的发送时间取决于带宽最小的那个交换节点,并且通过TCP的流量控制机制,带宽较大的其他交换节点也会将发送速度与其保持一致。比如40G带宽的国家骨干节点,当100MB文件实际通过时,发送速度最多也不会超过1Mbps,而其它的带宽当然是在发送其它数据,别忘了40G带宽可是全国共享的。
所以,总的发送时间我们近似的认为是800s。
接下来,计算传播时间。假设web服务器到用户PC的线路距离为1000km,传播速度为2.0*m/s,那么传播时间为:1000km / (2.0*m/s)= 0.005s。
所以,
响应时间为:800s + 0.005s = 800.005s。
下载速度为:100MB / 800.005s = 124.999KB/s