数据的网络传输学习笔记
数据的网络传输学习笔记
两台主机通信,数据从一台主机传到另一台主机主要有以下三步工作:
1、主机A发送的数据进入线路
2、数据在线路中传输
3、数据从线路的另一端进入主机B中
其实第3步与第1步所做的事正好相反,先来看第1步中数据是怎么流动的?这个过程主要经过了以下步骤:
1、应用程序将要发送的数据写到进程的地址空间(用户态内存区);
2、应用程序通过系统调用将数据从用户态的内存区复制到内核维护的一段内核缓冲区中,由于内核缓冲区通常是有限的,所以这个过程需要排队。内核缓冲区的数据可能来自于多个进程;
3、内核通知网卡控制器来取数据,网卡驱动器根据网卡驱动程序得到内核缓冲的地址,并将数据复制到网卡缓冲区,这个过程按连接两端的内部总线宽度来复制,比如32位总线每次复制32位比特;
4、网卡缓冲区将数据发送到线路中,释放缓冲区准备下一轮复制,这些数据在这步都会转为2进制,因为只有2进制的数字信号才可以在线路中传输。发送时,网卡会根据介质产生各种信号。
数据在线路中的传播速度取决于传播介质,光纤的速度快于铜线,一般接近光速。
并不是进入线路有多少数据,介质中就传播多少数据,这里有出口带宽的限制。众所周知,运营商在所有的基础交换节点上会设置关卡,用于限制数据从主机流入路由器转发队列的速度,只要流入路由器转发队列的数据,都会按路由器的出口带宽,流入其他网络。这种关卡设置实际上限制了你的主机发送数据的速度,也就是限制了主机的出口带宽。所以虽然主机发送数据的速度很快,但由于出口带宽的限制,这些数据要分批发送出去。
这些数据不会直接到达目的地,而是要通过多次排队转发到达目的地,转发之前可能要先排队。如果两主机在同一个城市或者接入的是同一个运营商,转发的次数或许会少一点。如果城市不同,会进入骨干网进行转发;如果接入不同的运营商(电信或者网通),这些数据必须进入骨干网再进入互联互通网络,由互联互通网络的交换机进行转发。
什么是带宽
带宽一般指出口带宽或者入口带宽,指的是路由器或者交换机接收数据的能力,往往受运营商控制,价格昂贵。如果拿高速公路来做比喻,带宽类似调整公路的收费站,要知道收费人员也不是免费干活的。
共享带宽与独享带宽
共享带宽,顾名思义,多台主机共用一定量的带宽。比如小区共享10M带宽,如果只有一台主机接入,这台主机数据出口速度理论上可达到10Mbit/s,换算成字节是1.25MB/s,即便只有一台主机接入,交换机对于共享带宽也会限制最高峰值的,所以实际速度要低于1.25MB/s。如果多台主机接入,这些主机输出数据之和接近1.25MB/s,这些数据不分你我地夹杂在一起从主机进入路由器,分别前往不同的目的地。
如果使用的是独享带宽,交换机会以这个速度(比如1Mbit/s)来接收来自主机的数据。这个交换机上的数据都来自同一主机,当然这些数据也是要排队的。
互联互通
如果把互联网比做高速公路,电信和网络是两条不相连的高速公路,两大运营商早实现了互联互通,但是带宽少得可怜,所以如果你是网通用户在下载资源的时候选择网通服务站点下载,理论上速度会快点。
响应时间
响应时间=发送时间+传播时间+处理时间
发送时间取决于带宽=数据量/带宽,比如发送100Mbit的数据,带宽为10Mbit/s,大约需要10s;
传播时间取决于主机间的距离=传播距离/传播速度;
处理时间包括排队转发时间(包括运营商互联互通的排队转发时间,骨干网上的排队转发时间,交换机排队转发时间等)
推荐阅读
-
html5中canvas学习笔记1-画板的尺寸与实际显示尺寸
-
我在学习网络营销的体会和收获
-
Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
-
python网络编程学习笔记(10):webpy框架
-
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
-
linux使用tcpdump命令监视指定网络数据包的方法
-
JavaScript中的Number数字类型学习笔记
-
python网络编程学习笔记(六):Web客户端访问
-
python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
-
python网络编程学习笔记(五):socket的一些补充