那么,你了解数据在网络传输中的一些原理和动机吗?比如存储转发、流量控制、带宽和响应时间等,通常它们看似顺理成章,因为大多数开发者生活在应用层,这些似乎与他们毫无关系,然而一旦当你开始将注意力转向站点性能时,这些基础知识便是你不能不知道的。

1.分层网络模型

应用层、传输层、网络层、数据链路层、物理层。

五层协议只是OSI和TCP/IP的综合,实际应用还是TCP/IP的四层结构。为了方便可以把下两层称为网络接口层。

《构建高性能Web站点》第二章 数据的网络传输
《构建高性能Web站点》第二章 数据的网络传输
1、物理层:比特
主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。   
物理层(physical layer):在物理层上所传数据的单位是比特。物理层的任务就是透明地传送比特流。

2、数据链路层:帧
定义了如何让格式化数据以进行传输,以及如何让控制对物理介质的访问。这一层通常还提供错误检测和纠正,以确保数据的可靠传输。

数据链路层(data link layer):常简称为链路层,我们知道,两个主机之间的数据传输,总是在一段一段的链路上传送的,也就是说,在两个相邻结点之间传送数据是直接传送的(点对点),这时就需要使用专门的链路层的协议。

在两个相邻结点之间传送数据时,数据链路层将网络层交下来的IP数据报组装成帧(framing),在两个相邻结点之间的链路上“透明”地传送帧中的数据。
每一帧包括数据和必要的控制信息(如同步信息、地址信息、差错控制等)。典型的帧长是几百字节到一千多字节。

注:”透明”是一个很重要的术语。它表示,某一个实际存在的事物看起来却好像不存在一样。”在数据链路层透明传送数据”表示无力什么样的比特组合的数据都能够通过这个数据链路层。因此,对所传送的数据来说,这些数据就“看不见”数据链路层。或者说,数据链路层对这些数据来说是透明的。
(1)在接收数据时,控制信息使接收端能知道一个帧从哪个比特开始和到哪个比特结束。这样,数据链路层在收到一个帧后,就可从中提取出数据部分,上交给网络层。
(2)控制信息还使接收端能检测到所收到的帧中有无差错。如发现有差错,数据链路层就简单地丢弃这个出了差错的帧,以免继续传送下去白白浪费网络资源。如需改正错误,就由运输层的TCP协议来完成。

3、网络层:数据报
在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择。Internet的发展使得从世界各站点访问信息的用户数大大增加,而网络层正是管理这种连接的层。

网络层(network layer)主要包括以下两个任务:
(1) 负责为分组交换网上的不同主机提供通信服务。在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组或包进行传送。在TCP/IP体系中,由于网络层使用IP协议,因此分组也叫做IP数据报,或简称为数据报。
(2) 选中合适的路由,使源主机运输层所传下来的分组,能够通过网络中的路由器找到目的主机。
协议:IP,ICMP,IGMP,ARP,RARP

4、运输层:报文段/用户数据报

运输层(transport layer):负责向两个主机中进程之间的通信提供服务。由于一个主机可同时运行多个进程,因此运输层有复用和分用的功能:
1.复用,就是多个应用层进程可同时使用下面运输层的服务。
2.分用,就是把收到的信息分别交付给上面应用层中相应的进程。

定义了一些传输数据的协议和端口号(WWW端口80等),如:
TCP(transmission control protocol –传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据)
UDP(user datagram protocol–用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)。 主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段。

5、应用层:报文
是最靠近用户的OSI层。这一层为用户的应用程序(例如电子邮件、文件传输和终端仿真)提供网络服务。在因特网中的应用层协议很多,如支持万维网应用的HTTP协议,支持电子邮件的SMTP协议,支持文件传送的FTP协议,DNS,POP3,SNMP,Telnet等等。.

《构建高性能Web站点》第二章 数据的网络传输

参考文章:
https://www.cnblogs.com/wxd0108/p/7597216.html
https://blog.csdn.net/qq_22238021/article/details/80279001
https://www.cnblogs.com/xtu123/p/6386940.html
https://blog.csdn.net/weixin_39554266/article/details/80065785
https://www.cnblogs.com/qishui/p/5428938.html
https://blog.csdn.net/chenliguan/article/details/80548081

另外一些可以参考文章:
http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html
https://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html
https://www.cnblogs.com/liyiran/p/9102791.html
http://www.cnblogs.com/TankXiao/archive/2012/02/06/2337728.html
https://www.cnblogs.com/TankXiao/archive/2012/02/13/2342672.html

2.带宽

3.响应时间

下载速度:传输的数据字节数,除以这些数据从服务器开始发送直到完全到达用户PC的时间。

数据从服务器开始发送直到完全到达用户PC的这段时间,我们称为“响应时间”。

响应时间:发送时间+传播时间+处理时间

发送时间很容易计算,即“数据量/带宽”。比如要发送100Mbit的数据,而且发送速度为100Mbit/s,也就是带宽为100M,那么发送时间便为1s(这个可以类比比较长的火车出战需要一段时间,那么数据出站也要一段时间)【发送是指服务器物理层面对封装好的数据进行发送(进入发送线路,射频等),和传播概念不一样】。

传播时间主要依赖于传播距离,因为传播速度我们可以近似认为约等于2.0×108m/s,那么传播时间便等于传播距离除以传播速度。比如两个交换节点之间线路的长度为1000km,相当于北京到上海的直线距离,那么一个比特信号从线路的一端到另一端的传播时间为0.005s。

简单地说,处理时间就是指数据在交换节点中为存储转发而进行一些必要的处理所花费的时间,其中的重要组成部分就是数据在缓冲区队列中排队所花费的时间,注意,准确地说应该是“你的数据”在队列中排队所花费的时间,因为在队伍中还有其他与你毫不相干的数据。

那么,我们可以将响应时间的计算公式整理为:
响应时间 = (数据量比特数 / 带宽) + (传播距离 / 传播速度) + 处理时间

另外,下载速度的计算公式如下:
下载速度 = 数据量字节数 / 响应时间

来一次实地计算

假设这样一个场景,我们的Web服务器托管在北京的某互联网数据中心(IDC),以10M独享带宽的方式接入互联网。位于西安的一位用户通过小区提供的1M独享带宽的方式接入互联网,他通过PC的浏览器下载该Web服务器上的一个100MB大小的文件,换算成比特也就是800Mb,响应时间和下载速度是多少呢?

在计算之前,我们首先得清楚数据在整个传输过程中流过的路径,也就是经过了多少交换节点,这些节点分别提供多大的带宽。要知道数据流过的路径,一般我们使用Linux的traceroute命令或者Windows的tracert命令,它通过IP包头部的TTL数值,在默认情况下分别发送40字节的测试数据到沿路的每一个交换节点,以此来追踪数据经过的路由路径,同时测算数据到达每一个交换节点的响应时间。但是由于40字节的默认测试数据量比较小,最多也只能设置几KB,而且这种测算机制的实现容易受网络不确定因素影响,所以它的测算结果一般用于检测故障,而对于我们这里计算整个过程的响应时间意义不大,我们的目的是通过前面基于带宽的计算模型来了解响应时间在理论上的决定因素,并希望以此来帮助我们认识到影响下载速度的关键环节。

首先,假设Web服务器直接连接在交换节点A,那么从Web服务器到交换节点A,因为使用了10M独享带宽,所以数据发送速度为10Mbit/s,所以这部分发送时间为:
800Mbit / (10Mbit/s) = 80s

然后,用户的接入方式为1M独享带宽,所以用户PC接入的交换节点B到用户PC的发送速度为1Mbit/s,所以这部分发送时间为:
800Mbit / (1Mbit/s) = 800s

而至于以上两个交换节点A和B,我们假设它们都是所在城市的城域网顶级节点,而且它们直接通过光缆相连,带宽假设为40G,那么这部分发送时间为:
800Mbit / (40Gbit/s) = 0.02s

以上的发送时间相加就是总的发送时间。

接下来,我们计算传播时间,由于北京到西安的高速公路距离大约为1000km,所以我们假设Web服务器到用户PC的线路距离总和为1000km,传播速度我们统一按照2.0×108m/s计算,那么传播时间为:
1000km / (2.0×108m/s) = 0.005s

这样一来,忽略处理时间,响应时间便为:
80s + 800s + 0.02s + 0.005s = 880.025s

而下载速度便为:
100MByte / 880.025s = 113.63KB/s
看来非常不错,我们终于算出了下载速度,但这并不是实际的情况,因为我们忽略了太多其他的交换节点。

我们还要考虑一些非理想因素:
1.在共享带宽以及网络通信数据量过大时,交换节点中数据在转发队列中的等待时间便不能忽略,这部分时间往往也是影响下载速度的重要部分。
2.有时候我们下载的数据需要直接写入磁盘,比如下载几百兆的文件到某文件目录下。我们知道,PC网卡接收到的数据进入内存后,便完成了数据接收,但是下载进程一般要将这些数据即时写入磁盘后,才会进行下一次接收数据的系统调用,而写入磁盘的过程需要经历位于内核态内存中磁盘高速缓冲区的转发,而且有些下载进程(如IE的文件下载)为了减少磁盘写操作的压力,会在每次接收数据的系统调用之间进行休眠停顿,这样一来,实际上单线程的下载过程中接收数据并不是绝对连贯的,所以我们一般喜欢用多线程下载工具来加速下载,就是因为多个执行流可以使得下载过程在单位时间内执行相对更多次数的数据接收系统调用,充分占用带宽。
3. 在一些长距离的传播线路(如跨城光缆)中必须使用中继器,以此防止电磁波信号在传播中过分衰减,所以这些中继器需要对信号进行接收和转发,也存在发送时间的消耗,但是不多。

4.互联互通

主要介绍运营商之间的通信。

相关文章:

  • 2021-11-19
  • 2022-12-23
  • 2022-02-07
  • 2022-01-15
猜你喜欢
  • 2021-08-11
  • 2021-06-12
  • 2021-03-31
  • 2021-10-25
  • 2021-12-16
  • 2021-11-22
  • 2021-12-24
相关资源
相似解决方案