精华内容
下载资源
问答
  • 对用户来说数据传输是
    万次阅读 多人点赞
    2019-05-28 17:33:29

    简介

    计算机网络是个非常复杂的系统,两个相互通信的计算机必须要能高度协调工作。而且不同网络体系结构的用户都需要通信,而且要做到在全世界范围的计算机都可以高效进行通信。于是OSI(Open Systems Interconnection Reference Model)协议诞生了。只要遵循OSI标准,一个计算机系统就可以和位于世界上也遵循这一标准的其他系统进行通信。

    OSI模型与TCP/IP模型

    OSI的七层分层协议体系结构(如下图所示)的概念和理论相对完整,但是复杂确不实用。而TCP/IP结构在整个计算机网络中得到了大规模的应用。TCP/IP是一个5层的体系结构,它包括物理层数据链路层网络层传输层应用层。下面将简单介绍一下这五层的结构。
    在这里插入图片描述

    1. 物理层
      在物理层所传的数据单位是比特,也就是二进制数据。无论是发送方还是接收方的物理层底层如何使用多大的电压来表示0和1,这些都是物理层的工作。
    2. 数据链路层
      两台设备要进行数据传输,总是在一段一段的链路上进行传送的,数据链路层将网络层传递下来的IP数据或者物理层上传的数据报组装成帧,在两个相邻的节点通过节点的MAC地址进行帧的传送。其中帧包括数据和必要的控制信息,以便让接收端能够知道一个帧从那个比特开始和到那个比特结束,这样以来数据链路层就可以通过这个控制信息提取出数据部分上交给上一层网络层或者传递给物理层。控制信息还可以让接收端在接收到一个数据帧的时候对其进行检测,如果检测的结果显示接收的数据帧不完整或者有错误,将会丢弃这个数据帧。
    3. 网络层
      在发送数据的时候,网络层将运输层的数据报文封装成包进行传送,简单的来说:互联网是大量的异构网络和路由器进行相连的。网络层的协议是无连接的IP协议。
    4. 传输层
      传输层主要使用两种传输协议:TCPUDP。其中TCP是面向连接的,可靠的数据传输服务,数据不会出现丢失的情况。UDP是面向无连接,但是数据传输可能会有丢包的情况出现。
    5. 应用层
      应用层是体系结构中最高层,应用层协议定义的是应用进程间通信和交互的规则。应用层的协议我们比较熟悉,如域名DNS系统协议、以及HTTP协议以及邮件协议SMTP等。

    分层数据传输

    下面以计算机网络这本书里的一副图,可以很好帮助我们理解数据在不同层的传递过程,如下图所示:图中的5,4,3,2,1 分别代表TCP/IP协议的应用层、传输层、网络层、数据链路层、物理层,h5,h4,h3,h2代表相应层的控制信息。

    在这里插入图片描述
    这张图展示的是AP1进程向AP2进程传送数据。首先AP1先将数据交给本主机的应用层(第5层),然后第五层加上必要的控制信息就变成了第四层的数据单元。然后第四层再加上必要的控制信息就变成了第三层的数据单元,以此类推直到第二层(数据链路层),控制信息变成了首部H2(MAC头地址信息)和尾部T2(FCS:帧校验序列)
    当数据离开路由器到达AP2时,就和上面一样,以此向上最终将数据发送到进程AP2。

    总结

    虽然进程的数据交互经历过很多的复杂过程才可以到终点的应用进程。这些复杂的过程对用户是透明的,因为用户无需关心数据传送的过程,整个过程给人的感觉好像是AP1应用程序直接将数据传送给了AP2。以简单的例子便可以理解上述复杂的过程,如生活中常见的快递:当A用户给B用户发送快递,中间会经过不同的快递站点和不同快递车运输,直到快递员将快递送到B手上。正如B无需关心快递的运输过程,只需要关心A发送的快递最终到自己手上即可,网络不同主机之间的数据传输也是一样,对客户来说无需关心底层数据传输过程,只确认数据传输最终的结果即可。

    更多相关内容
  • 有了前两篇文章的基础,相信大家已经物理层有了一定的概念了,那物理层的功能具体怎么实现呢? 这篇文章里,我将一一道: 物理层概述 数据通信基础知识 数据编码技术 信道复用技术 物理层下面的传输媒体 1. 物理层...

    有了前两篇文章的基础,相信大家已经对物理层有了一定的概念了,那物理层的功能具体怎么实现呢?

    这篇文章里,我将一一道来:

    1. 物理层概述
    2. 数据通信基础知识
    3. 数据编码技术
    4. 信道复用技术
    5. 物理层下面的传输媒体

    在这里插入图片描述

    1. 物理层概述

    物理层的主要任务

    网络物理层(Physical Layer,PH)主要任务为:如何利用传输媒体,为数据链路层提供传送和接收二进制比特(bit)流的服务。

    在这里插入图片描述

    物理层的具体功能

    物理层协议的具体功能为:

    1. 确定与传输媒体接口的特性:机械特性 电气特性、功能特性、过程特性。
    2. 比特的表示。
    3. 传输速率:每个比特的传输时间。
    4. 传输方式:单工、双工还是半双工。
    5. 位同步:收发双方的快慢一致。
    6. 线路配置:点对点还是点对多点。

    在这里插入图片描述

    2. 数据通信基础知识

    数据通信系统基本模型

    数据通信是指在不同计算机之间传送表示字符、数字、语音、图像的二进制代码0、1比特序列的过程。 一个数据通信系统包括三大部分,涉及四种通信技术:
    在这里插入图片描述

    常用术语

    • 信息(Infomation)人对现实世界的某种认识。

    • 数据(Data)是信息的表达方式(载体)。其可以是文字、声音和图象等多种不同形式。本课中,数据理解为在网络中存储、处理和传输的二进制数字编码。

    • 信号(Signals)数据传输过程中的电磁波表示形式(光、电信号、无线信号)。
      在这里插入图片描述

    • 模拟信号(analogous signal)是指信号及其振幅、频率、相位等参数随时间连续变化的信号;

    • 数字信号是离散的一系列电脉冲,它的取值是有限的几个离散数值,其强度在某个时间周期内维持一个常量级,然后改变到另一个常量级。
      在这里插入图片描述

    • 码元 (code):是在使用时间域(或简称为时域)的波形表示数字信号时,代表不同离散数值的基本波形。值得注意的是当码元的离散状态有大于2个时(如M大于2个)时,此时码元为M进制码元。即一个码元不一定对应于一个比特。

    • 码元传输速率:是模拟信号的速率,以波形每秒的振荡数来衡量(也称为调制速率、波形速率或波特率)。通常数据传输速率(比特率)大于波特率。
      在这里插入图片描述

    数据通信的基本概念

    数据通信的理论基础

    信号在通信信道上传输时的数学表示可以根据傅立叶(Fourier)分析得出:任何电磁信号可以由若干具有不同振幅、频率和相位的周期模拟信号组成

    在这里插入图片描述

    时域观和频域观

    在网络通信中,计算机信息(数据)是以电磁波(或称信号)的形式传输的。

    • 电磁信号是时间的函数(时域观)
    • 电磁信号也可以看成频率的函数(频域观)

    计算机等终端设备的原始数据信号因为往往包含有较多的低频成分,甚至有直流成分,因此,时域中的数字信号在频域中也称为基带信号(即基本频带信号)。

    在这里插入图片描述

    单工、半双工、全双工

    从信息传送方向和时间的关系角度研究数据通信方式可以分为:

    • 单工通信:只能有一个方向的通信而没有反方向的交互。
    • 半双工通信:通信的双方都可以发送信息,但不能双方同时发送(当然也就不能同时接收)。
    • 全双工通信:通信的双方可以同时发送和接收信息。

    在这里插入图片描述

    并行通信和串行通信

    根据一次传输数据时使用的信道数,可以将计算机和外部通信方式分为:

    • 并行通信
    • 串行通信

    在这里插入图片描述

    而按照串行数据的时钟控制方式,串行通信又可分为同步通信和异步通信两种方式。

    数据通信中的同步方式

    同步指的是通信中的接收双方在时间基准上一致。可分为:位同步、字符同步(异步通信)和报文(比特流)同步(同步通信):

    • 同步通信:信息是以报文为单位传送的;传输开始时,以同步字符使收发双方同步;从传输信息中抽取同步信息,修正同步,保证正确采样。

    • 异步通信:信息是以字符为单位传送的;每个字符由发送方异步产生,有随机性。

    在这里插入图片描述

    信道的极限容量

    任何实际的信道都不是理想的,在传输信号时会产生各种失真以及带来多种干扰。

    码元传输的速率越高,或信号传输的距离越远,或传输媒体质量越差,在信道的输出端的波形的失真就越严重。

    在这里插入图片描述
    信道容量(Channel Capacity)是指通信系统的最大传输速率(bps)。

    把能通过该信道的频率范围定义为信道带宽,显然,信道带宽总是有限的。故信道的数据传输速率受信道带宽的限制

    • 奈奎斯特准则:理想信道的二进制数据信号的最大数据传输速率 C与信道带宽B(Hz)的关系为:在这里插入图片描述
      其中n一个脉冲所表示的有效状态,应用最广的是一个脉冲表示两种状态,即n=2;

    • 香农定理:在有随机热噪声的信道上传输数据信号时,数据传输速率C与信道带宽B,信噪比S/N的关系为
      在这里插入图片描述

    香农公式

    在这里插入图片描述信道的带宽或信道中的信噪比越大,则信息的极限传输速率就越高。

    只要信息传输速率低于信道的极限信息传输速率,就一定可以找到某种办法来实现无差错的传输。

    若信道带宽B 或信噪比 S/N 没有上限(当然实际信道不可能是这样的),则信道的极限信息传输速率 C也就没有上限。

    实际信道上能够达到的信息传输速率要比香农的极限传输速率低不少。

    对于频带宽度已确定的信道,如果信噪比不能再提高了,并且码元传输速率也达到了上限值,那么还有办法提高信息的传输速率。

    这就是用编码的方法让每一个码元携带更多比特的信息量。

    3. 数据编码技术

    计算机数字信号的两种基本传输方式:

    • 基带传输:在数字信道上直接传输基带信号的方法。
      不经转换,效率高。局域网,电缆的带宽足够。
    • 频带传输:在模拟信道上利用调制解调实现基带信号传输的方法。
      解决了数字信号可利用电话系统传输的问题。
      实现多路复用,以提高传输信道的利用率。
      但需要调制解调器。

    数据编码技术研究计算机数据在信号传输过程中如何进行编码(变换)。

    用编码的方法让每一个码元携带更多比特的信息量:
    在这里插入图片描述

    基带传输编码

    在基带传输中,需要对数字信号进行编码以表示数据,即用不同的电平值代表数字信号0或1。常采用以下三种编码方法:

    1. 不归零制编码(NRZ):简单,易实现。但难于位同步,须同时传送同步时钟信号。
    2. 曼彻斯特编码:是一种自同步编码方式。
    3. 差分曼彻斯特编码:是基本曼彻斯特编码的变形。后两种编码应用普遍,已成为局域网标准编码。

    在这里插入图片描述

    频带传输编码

    基带信号往往包含有较多的低频成分,甚至有直流成分,而许多信道并不能传输这种低频分量或直流分量。为了解决这一问题,就必须对基带信号进行调制 (modulation)。 通过改变振幅、频率和相位等载波特性或者这些特性的某种组合,来对数字数据进行编码(调制)。

    在这里插入图片描述 最基本的二元制调制方法有以下几种:

    • 调幅(AM):载波的振幅随基带数字信号而变化。
    • 调频(FM):载波的频率随基带数字信号而变化。
    • 调相(PM) :载波的初始相位随基带数字信号而变化。

    在这里插入图片描述

    4. 信道复用技术

    多路复用技术(Multiplexing) 就是把多路信号在单一的传输线路和用单一的传输设备来进行传输的技术。常用的多路复用技术有三类:

    • 频分多路复用(FDM,Frequency Division Multiplexing)
    • 波分多路复用(WDM,WavelengthDivision Multiplexing )
    • 时分多路复用(TDM,Time Division Multiplexing)

    在这里插入图片描述

    频分多路复用FDM

    每路信道的信号以不同的载波频率进行调制;

    各个载波频率是不重叠的, 一条通信线路就可以同时独立地传输多路信号。

    在这里插入图片描述

    波分多路复用WDM

    是频分多路复用在光纤信道上使用的一个变种。

    在一根光纤上复用80路或更多路的光载波信号称为密集波分复用DWDM;

    在这里插入图片描述

    时分多路复用TDM

    时分多路复用是将信道用于传输的时间划分为若干个时间片;每个用户分得一个时间片在这里插入图片描述
    在这里插入图片描述
    在每个用户占有的时间片内,用户使用通信信道的全部带宽。

    5. 物理层下面的传输媒体

    传输媒体也称为传输介质或传输媒介,它就是数据传输系统中在发送器和接收器之间的物理通路。

    传输媒体可分为两大类,即导引型传输媒体和非导引型传输媒体:

    • 导引型传输媒体中,电磁波被导引沿着固体媒体(铜线或光纤)传播。
    • 非导引型传输媒体就是指自由空间。在非导引型传输媒体中,电磁波的传输常称为无线传输。

    电信领域使用的电磁波的频谱:
    在这里插入图片描述

    导引型(有线)传输媒体

    双绞线

    双绞线是最常用的传输媒体。

    模拟传输和数字传输都可以使用双绞线,其通信距离一般为几到十几公里。可以分为:

    • 屏蔽双绞线 STP (Shielded Twisted Pair)
      带金属屏蔽层
    • 无屏蔽双绞线 UTP (Unshielded Twisted Pair)

    在这里插入图片描述

    双绞线的标准

    1991年,美国电子工业协会 EIA 和电信行业协会联合发布了一个用于室内传送数据的无屏蔽双绞线和屏蔽双绞线的标准 EIA/TIA-568。

    1995年将布线标准更新为 EIA/TIA-568-A。

    此标准规定了 5 个种类的 UTP 标准(从 1 类线到 5 类线)。

    对传送数据来说,现在最常用的 UTP 是5类线(Category 5 或 CAT5)。

    在这里插入图片描述

    同轴电缆

    同轴电缆具有很好的抗干扰特性,被广泛用于传输较高速率的数据。
    同轴电缆的带宽取决于电缆的质量。

    • 50欧同轴电缆 —— LAN / 数字传输常用
    • 75欧同轴电缆 —— 有线电视 / 模拟传输常用

    在这里插入图片描述

    光缆

    光纤是光纤通信的传输媒体。
    由于可见光的频率非常高,约为 10^8 MHz 的量级,因此一个光纤通信系统的传输带宽远远大于目前其他各种传输媒体的带宽。
    在这里插入图片描述
    在这里插入图片描述

    多模光纤与单模光纤

    在这里插入图片描述

    优点

    常用的三个波段的中心分别位于 850 nm, 1300 nm 和 1550 nm。所有这三个波段都具有 25000~30000 GHz 的带宽,可见光纤的通信容量非常大。

    1. 通信容量非常大。
    2. 传输损耗小,中继距离长。
    3. 抗雷电和电磁干扰性能好。
    4. 无串音干扰,保密性好。
    5. 体积小,重量轻。

    非导引型(无线)传输媒体

    将自由空间称为“非导引型传输媒体”。

    无线传输所使用的频段很广。

    短波通信(即高频通信)主要是靠电离层的反射,但短波信道的通信质量较差,传输速率低。

    微波在空间主要是直线传播。传统微波通信有两种方式:

    • 地面微波接力通信
    • 卫星通信

    无线局域网使用的 ISM 频段

    要使用某一段无线电频谱进行通信,通常必须得到本国政府有关无线电频谱管理机构的许可证。但是,也有一些无线电频段是可以自由使用的。例如:ISM。各国的 ISM 标准有可能略有差别。
    在这里插入图片描述

    展开全文
  • 相当于TCP的稳定性来说,UDP因为其数据传输的不可靠性,所以用在某些特定的场合,如直播、广播消息、视频音频流处理等不太需要校验数据完整性的场合。 UDP相对TCP协议而言,其特点就是简洁,它删除了在TCP协议中为了...

    简介

    简单就是美。在网络协议的世界中,TCP和UDP是建立在IP协议基础上的两个非常通用的协议。我们现在经常使用的HTTP协议就是建立在TCP协议的基础上的。相当于TCP的稳定性来说,UDP因为其数据传输的不可靠性,所以用在某些特定的场合,如直播、广播消息、视频音频流处理等不太需要校验数据完整性的场合。

    UDP相对TCP协议而言,其特点就是简洁,它删除了在TCP协议中为了保证消息准确性的各种限制性特征。简洁带来的好处就是快!今天给大家讲解一下,基于UDP的高速数据传输协议UDT。

    UDT协议

    UDP因为其简单的特性,所以可以做到很多TCP做不到的事情,比如进行大数据量的快速传输。这里并不是要将TCP和UDP分个好坏高下,毕竟各个协议的适应场景不同,他们之所以流行,就是因为可以在特定的场景发挥出重要的作用。套用中国的一句谚语就是:不管白猫黑猫,能抓到老鼠的,就是好猫。

    用好UDP协议,我们就可以快速的传递大量的数据,这个协议就是UDT协议。

    话说,像这些基础协议都是老外发明的,而中国的互联网巨头都在抢着做平台、做流量的生意,真的是无话可说…

    UDT项目开始于2001年,是由Yunhong Gu在芝加哥伊利诺伊大学国家数据挖掘中心 (NCDM)读博士期间开发的,并在毕业之后持续的进行维护和升级改进。

    UDP的出现是因为那时候,传输更快更便宜的光纤网络出现了,代替了之前的铜缆线和双绞线,从而极大的提升了信息传输的效率。这时候大家就发现之前使用TCP协议来进行大数据的传输会有很大的问题。从而基于UDP的UDT协议出现了。

    UDT的第一个版本,也称为SABUL(Simple Available Bandwidth Utility Library),UDT通过支持批量数据传输,从而方便在私有网络中进行数据的传输。

    要注意的是UDT的第一个版本SABUL使用UDP协议进行传输数据,同时使用单独的TCP协议连接传输控制消息。

    UDT的初始版本是在超高速网络(1 Gbit/s、10 Gbit/s等)上进行开发和测试的,2003年10月,NCDM实现了从美国芝加哥到荷兰阿姆斯特丹的平均每秒6.8G比特的传输。在30分钟内的测试中,他们传输了大约1.4TB的数据。

    从2004年发布的2.0版本开始,SABUL改名为UDT,UDT的全称是UDP-based Data Transfer Protocol,也就是基于UDP的数据传输协议。

    为什么要改成UDT呢?因为在UDT2.0中,删除了SABUL中的TCP 控制连接,并使用UDP来处理数据和控制信息。 另外,UDT2还引入了一种新的拥塞控制算法,允许协议动态调整UDT和TCP流,实现UDT和TCP流的并发运行。

    在2006年,UDT协议升级到了3版本,该协议不仅是在私有网络中运行了,而是扩展到了商业互联网中。同时UDT3中的拥塞控制可以进行调整优化,可以在低带宽的环境中运行,并且允许用户轻松定义和安装自己的拥塞控制算法。另外,UDT3还显着减少了系统资源(CPU和内存)的使用。

    2007年,UDT4版本在高并发和防火墙穿透方面进行优化和性能的提升。UDT4允许多个UDT连接绑定到同一个UDP端口,它还支持集合连接设置,以便UDP hole punching。

    什么是UDP hole punching呢?

    UDP hole punching通常被用在网络地址转换 (NAT)中。用来维护穿越NAT的用户UDP数据包流。它是一种使用网络地址转换器在专用网络中的Internet主机之间建立双向UDP连接的方法。

    什么是NAT呢?

    大家都知道IPV4地址是有限的,很快IPV4地址就快用完了,那怎么解决这个问题呢?

    当然,一个永久解决的办法是IPV6,不过IPV6推出这么多年了,好像还没有真正的普及。

    不使用IPV6的话还有什么解决办法呢?

    这个办法就是NAT(Network Address Translators)。

    NAT的原理是将局域网的IP和端口和NAT设备的IP和端口做个映射。

    NAT内部维护着一张转换表。这样就可以通过一个NAT的IP地址和不同的端口来连接众多的局域网服务器。

    那么NAT有什么问题呢?

    NAT的问题在于,内部客户端不知道自己外网IP地址,只知道内网IP地址。

    如果是在UDP协议中,因为UDP是无状态的,所以需要NAT来重写每个UDP分组中的源端口、地址,以及IP分组中的源IP地址。

    如果客户端是在应用程序内部将自己的IP地址告诉服务器,并想跟服务器建立连接,那么肯定是建立不了的。因为找不到客户端的公网IP。

    即使找到了公网IP,任何到达NAT设备外网IP的分组还必须有一个目标端口,而且NAT转换表中也要有一个条目可以将其转换为内部主机的IP地址和端口号。否则就可能出现下图的连接失败的问题。

    怎么解决呢?

    第一种方式是使用STUN服务器。

    STUN服务器是IP地址已知的服务器,客户端要通信之前,先去STUN服务器上面查询一下自己的外网IP和端口,然后再使用这个外网IP和端口进行通信。

    但有时UDP包会被防火墙或者其他的应用程序所阻挡。这个时候就可以使用中继器技术Traversal Using Relays around NAT (TURN) 。

    双方都将数据发送到中继器server,由中继器server来负责转发数据。注意,这里已经不是P2P了。

    最后,我们有一个集大成者的协议叫做ICE(Interactive Connectivity Establishment ):

    它实际上就是直连,STUN和TURN的综合体,能直连的时候就直连,不能直连就用STUN,不能用STUN就用TURN。

    在使用STUN和ICE的过程中,我们会有一台网络主机用来建立端口映射和保持其他UDP端口状态,但是UDP的状态通常在几十秒到几分钟的短时间后过期,为了保证NAT中UDP的状态和生命周期,于是有了UDP hole punching的技术。通过定时传输keep-alive数据包,对NAT中的UDP状态进行更新。

    UDT的缺点

    因为UDT是基于UDP协议的,但是UDP协议因为其简洁的特性,所以并不具备安全性的特征。所以基于其上的UDT协议因为缺乏安全特性,所以在商业环境中应用会受到一定的限制。

    不过UDT的新版本已经在开发中,大家可以期待一下。

    总结

    UDT被广泛用于高性能计算,比如光纤网络上的高速数据传输。我们后续会在netty中告诉大家怎么使用UDT协议。

    本文已收录于 http://www.flydean.com/11-udt/

    最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

    欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

    展开全文
  • 数据传输方式(零拷贝)

    千次阅读 2018-09-22 09:06:19
    在介绍零拷贝之前我想下在计算机系统中数据传输的方式。 早期阶段: 分散连接,串行工作,程序查询。 在这个阶段,CPU就像个保姆一样,需要手把手的把数据从I/O接口从读出然后再送给主存。 这个阶段具体...

    目录

    数据传输方式

    早期阶段

    接口模块

    DMA

    具有通道结构的阶段

    具有I/O处理机的阶段

    传统拷贝

    零拷贝


    在介绍零拷贝之前我们先说下在计算机系统中数据传输的方式。

    数据传输方式

    早期阶段

    分散连接,串行工作,程序查询。 在这个阶段,CPU就像个保姆一样,需要手把手的把数据从I/O接口从读出然后再送给主存。 

    这个阶段具体流程是:

    1. CPU主动启动I/O设备
    2. 然后CPU一直问I/O设备老铁你准备好了吗,注意这里是一直询问。
    3. 如果I/O设备告诉了CPU说:我准备好了。CPU就从I/O接口中读数据。
    4. 然后CPU又继续把这个数据传给主存,就像快递员一样。

    这种效率很低,数据传输过程一直占据着CPU,CPU不能做其他更有意义的事。

    接口模块

    在冯诺依曼结构中,每个部件之间均有单独连线,不仅线多,而且导致扩展I/O设备很不容易,我们上面的早期阶段就是这个体系,叫做分散连接。扩展一个I/O设备得连接很多线。所以引入了总线连接方式,将多个设备连接在同一组总线上,构成设备之间的公共传输通道。

    在这种模式下数据交换采用程序中断的方式

    1. CPU主动启动I/O设备。
    2. CPU启动之后不需要再问I/O,开始做其他事,类似异步化。
    3. I/O准备好了之后,通过总线中断告诉CPU我已经准备好了。
    4. CPU进行读取数据,传输给主存中。

    DMA

    虽然上面的方式虽然提高了CPU的利用率,但是在中断的时候CPU一样是被占用的,为了进一步解决CPU占用,又引入了DMA方式,在DMA方式中,主存和I/O设备之间有一条数据通路,这下主存和I/O设备之间交换数据时,就不需要再次中断CPU。

    具有通道结构的阶段

    在小型计算机中采用DMA方式可以实现高速I/O设备与主机之间组成数据的交换,但在大中型计算机中,I/O配置繁多,数据传送平凡,若采用DMA方式会出现一系列问题。

    • 每台I/O设备都配置专用额DMA接口,不仅增加了硬件成本,而且解决DMA和CPU访问冲突问题,会使控制变得十分复杂。
    • CPU需要对众多的DMA接口进行管理,同样会影响工作效率。

    所以引入了通道,通道用来管理I/O设备以及主存与I/O设备之间交换信息的部件,可以视为一种具有特殊功能的处理器。它是从属于CPU的一个专用处理器,CPU不直接参与管理,故提高了CPU的资源利用率

    具有I/O处理机的阶段

    输入输出系统发展到第四阶段,出现了I/O处理机。I/O处理机又称为外围处理机,它独立于主机工作,既可以完成I/O通道要完成的I/O控制,又完成格式处理,纠错等操作。具有I/O处理机的输出系统与CPU工作的并行度更高,这说明IO系统对主机来说具有更大的独立性。

    我们可以看到数据传输进化的目标是一直在减少CPU占有,提高CPU的资源利用率。

    接下来进入拷贝的正题

    传统拷贝

    传统的拷贝方式具体的数据流转图如下

    1. CPU发指令给I/O设备的DMA,由DMA将我们磁盘中的数据传输到内核空间的内核buffer。
    2. 第二阶段触发我们的CPU中断,CPU开始将将数据从kernel buffer拷贝至我们的应用缓存
    3. CPU将数据从应用缓存拷贝到内核中的socket buffer.
    4. DMA将数据从socket buffer中的数据拷贝到网卡缓存。

    总共需要经历四个阶段,2次DMA,2次CPU中断,总共四次拷贝,有四次上下文切换,并且会占用两次CPU。

    优点:开发成本低,适合一些对性能要求不高的,一些管理系统就足够使用了

    缺点:多次上下文切换,占用多次CPU,性能比较低。

    零拷贝

    什么是零拷贝呢?在wiki中的定位:通常是指计算机在网络上发送文件时,不需要将文件内容拷贝到用户空间(User Space)而直接在内核空间(Kernel Space)中传输到网络的方式。

    sendFile实现零拷贝

    sendfile 是 Linux 2.1 内核版本后引入的一个系统调用函数,API 如下:

    ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);
    # out_fd:为待写入内容的文件描述符,一个socket描述符。
    # in_fd:为待读出内容的文件描述符,必须是真实的文件,不能是 socket 和管道。
    # offset:指定从读入文件的哪个位置开始读,如果为 NULL,表示文件的默认起始位置。
    # count:指定在 fdout 和 fdin 之间传输的字节数。

    在java NIO中FileChannal.transferTo()实现了操作系统的sendFile

    1. 调用sendfie(),CPU下发指令叫DMA将磁盘数据拷贝到内核buffer中。
    2. DMA拷贝完成发出中断请求,进行CPU拷贝,拷贝到socket buffer中。sendFile调用完成返回。
    3. DMA将socket buffer拷贝至网卡buffer。

    可以看见我们根本没有把数据复制到我们的应用缓存中,所以这种方式就是零拷贝

    以上虽然减少到了只有三次数据拷贝[磁盘->内核缓冲区->socket缓冲区->网卡],但是还是需要CPU中断复制数据。为啥呢?因为DMA需要知道内存地址我才能发送数据啊。所以在Linux2.4内核中做了改进(sendfile+DMA scatter/gather),将Kernel buffer中对应的数据描述信息(内存地址,偏移量)记录到相应的socket缓冲区当中。 最终形成了下面的过程: 

    可以发现,sendfile+DMA scatter/gather 实现的零拷贝,I/O 发生了 2 次用户空间与内核空间的上下文切换,以及 2 次数据拷贝。其中 2 次数据拷贝都是 DMA 拷贝。这就是真正的 零拷贝(Zero-copy) 技术,全程都没有通过CPU来搬运数据,所有的数据都是通过 DMA 来进行传输的。

    在第三方开源框架中Netty,RocketMQ,kafka中都有类似的代码

    mmap映射

    上面我们提到了零拷贝的实现,但是我们只能将数据原封不动的发给用户,并不能自己使用。于是Linux提供的一种访问磁盘文件的特殊方式,可以将内存中某块地址空间和我们要指定的磁盘文件相关联,从而把我们对这块内存的访问转换为对磁盘文件的访问,这种技术称为内存映射(Memory Mapping)。 我们通过这种技术将文件直接映射到用户态的内存地址,这样对文件的操作不再是write/read,而是直接对内存地址的操作。   

    mmap 使用了虚拟内存,可以把内核空间和用户空间的虚拟地址映射到同一个物理地址,从而减少数据拷贝次数!

    • 用户进程通过 mmap 方法向操作系统内核发起 IO 调用,上下文从用户态切换为内核态。

    • CPU 利用 DMA 控制器,把数据从硬盘中拷贝到内核缓冲区。

    • 上下文从内核态切换回用户态,mmap 方法返回。

    • 用户进程通过 write 方法向操作系统内核发起 IO 调用,上下文从用户态切换为内核态。

    • CPU 将内核缓冲区的数据拷贝到的 socket 缓冲区。

    • CPU 利用 DMA 控制器,把数据从 socket 缓冲区拷贝到网卡,上下文从内核态切换回用户态,write 调用返回。

    可以发现,mmap+write 实现的零拷贝,I/O 发生了 4 次用户空间与内核空间的上下文切换,以及 3 次数据拷贝。其中3次数据拷贝中,包括了 2 次 DMA 拷贝和 1 次 CPU 拷贝。

    mmap 是将读缓冲区的地址和用户缓冲区的地址进行映射,内核缓冲区和应用缓冲区共享,所以节省了一次 CPU 拷贝‘’并且用户进程内存是虚拟的,只是映射到内核的读缓冲区,可以节省一半的内存空间。

    参考链接:

    走进科学之揭开神秘的"零拷贝"!

    展开全文
  • 数据传输安全

    万次阅读 2018-07-25 22:26:06
    数据传输安全的要求 首先我们先明确我们在数据传输时对于安全到底有什么具体要求: 消息的发送方能够确定消息只有预期的接收方可以解密(不保证第三方无法获得,但保证第三方无法解密)。 消息的接收方可以确定消息...
  • 无线网络数据传输的相关知识

    万次阅读 2021-05-28 10:39:38
    关键单位 子载波、物理资源块(PRB)之间的关系详情见LTE中物理资源块的进一步认识 帧 数据发送流程 消息-》信源编码-》信道编码-》调制-》多...对于一次传输,接收端在解调解码之后,如何判断这次接收到的数据
  • 蓝牙之数据传输问题

    万次阅读 2017-01-13 16:43:08
    蓝牙数据传输问题对于蓝牙来说google已经封装好了很多api所以使用起来并不会很难,但是实际开发中蓝牙开发最头疼的问题不是如何去调用api,而是数据的交互方面,如长连接,数据续传,硬件接受速率等问题.打开蓝牙有几种...
  • USB接口具有传输速度快,可以广泛地应用在各类的高速数据传输当中,相比于大家熟悉的串口数据传输要快出不知道多少倍了。 我们最常见的当属USB2.0和USB3.0,这两个之间可以通用,但是也有区别: 1.USB3.0的速率是5...
  • HTTPS是如何保证数据传输的安全

    千次阅读 2018-09-07 17:12:39
    HTTP是明文传输的,也就意味着,介于发送端、接收端中间的任意节点都可以知道你们传输的内容是什么。这些节点可能是路由器、代理等。 举个最常见的例子,用户登陆。用户输入账号,密码,采用HTTP的话,只要在代理...
  • GDPR中的三大主体:用户,数据所有者,以及数据传输
  • 本文所设计的基于FPGA百兆以太网数据传输,是博主自己绘制pcb制作的百兆以太网模块,是通过一片 Realtek 的 RTL8201 以太网 PHY 提供以太网连接的支持,RTL8201 是一片 10M/100M 自适应以太网收发器,提供 MII/SNI...
  • NB-IOT的数据传输流程和双工模式

    千次阅读 2020-06-13 16:38:29
    本文章主要整理了一下NB-IOT的数据传输以及双工模式 其实开始的时候主要目的是想了解一下在NB进入PSM之后云端下发的数据暂时存在了什么地方?没有找到确切的答案。目前个人认为是存在核心网或者基站中,那么最多能存...
  • 网络工作原理及数据传输的封装与解封装过程

    千次阅读 多人点赞 2020-07-13 13:59:25
    网络工作原理及数据传输的封装与解封装过程 计算机网络工作原理:是将地理位置不用的具有独立功能的多台计算机及其外部设备、通过通信线路连接起来 、在网络操作系统、网络管理软件及网络通信协议的管理和调节下,...
  • 网络中数据传输的过程

    万次阅读 多人点赞 2018-05-23 18:17:56
    1. 数据传输的背景(1) 现在互联网中使用的是基于OSI七层模型的TCP/IP模型。TCP/IP模型包括五层,即物理层,数据链路层,网络层,传输层,应用层;其中数据链路层又可以分为两个子层,即LLC(逻辑链路控制层)和MAC...
  • OSI参考模型基本介绍、各层功能及数据传输过程

    万次阅读 多人点赞 2020-10-24 12:27:00
    数据链路层3.网络层4.传输层5.会话层6.表示层7.应用层(Application Layer) OSI参考模型 在前面介绍计算机网络互联阶段的时候,提到了OSI参考模型。这个模型是由国家标准化组织ISO提出,用于解决网络设备互联的...
  • 网络学习day02_OSI七层模型及数据传输过程

    千次阅读 多人点赞 2018-09-04 11:35:15
    我们的七层模型第七层都是应用层,第一层是最底下的物理层。 图中只有物理层之间的线条是实线的,可以将这条线理解为两台主机之间的网线,连接两机实现通讯 模型里的每一层都是独立的,两台主机之间通信,对应...
  • 4G网络数据传输流程 一

    万次阅读 多人点赞 2019-05-30 16:22:28
    本系列5篇文章将围绕4G速率做系统介绍,包括数据传输流程、终端等级、速率计算、如何达到1Gbps。本文是第一篇,讲述用户数据在空口的传输流程。 2009年1月,瑞典运营商TeliaSonera宣布商用4G LTE网络,建成全球首...
  • 【计算机网络】——习题解析:一个UDP用户数据数据字段为8192字节,在数据链路层要使用以太网来传输,试问应当划分为几个IP数据报片?说明每一个IP数据报字段长度和片偏移字段的值 答:6个数据字段的长度:前5个是...
  • https是如何保证数据传输的安全

    万次阅读 2016-03-26 09:09:39
    HTTP是明文传输的,也就意味着,介于发送端、接收端中间的任意节点都可以知道你们传输的内容是什么。这些节点可能是路由器、代理等。 举个最常见的例子,用户登陆。用户输入账号,密码,采用HTTP的话,只要在代理...
  • 数据传输安全性保证

    千次阅读 2018-07-07 17:43:42
    数据传输过程中,安全性十分重要,尤其是对于一些敏感的用户信息,其安全性保证更应当被重视。 现代软件开发中,无论是基于敏捷式的软件开发,或者基于前后端分离的软件开发,都离不开提供对外接口,而请求这些接口...
  • 我们需要了解互联网的本质是一系列的网络协议,这个协议就...实际上这七层是并不存在的,也就是没有这些概念,而我们今天提到的七层概念,只是人为的划分而已。目的只是为了让大家更好地理解这些都是用来做什么的。
  • 如果,传感器是物联网的触觉,那么,无线传输就是物联网的神经系统,将遍布物联网的传感器连接起来。在物联网出现以前,网络的接入需求主要体现在PC、移动终端互联网的接入需求。如今,随着物联网技术的发展,...
  • HTTP协议--几种数据传输方式

    万次阅读 2019-03-11 15:03:33
    不过随着web的不断发展,有时候,需要将这种状态进行保持,随即,就引入了cookie技术,cookie技术通过在请求和响应报文中写入cookie信息控制客户端的状态。 有关cookie的内容后面我们再说。。。 2)持久性 正常...
  • 苹果在10月13日的发布会开完,就引起了全球果粉的好评,截止目前国内在苏宁和京东的预约量高达200万订单,那么对于新款苹果手机用户来说,如何使用?如何数据传送等就需要一个小小指南。设置新iPhone真的很简单,...
  • 局域网快速传输数据(大量文件)

    千次阅读 2022-01-07 10:59:11
    局域网内不同主机数据快传
  • 数据传输加密技术分析

    万次阅读 2015-12-23 21:03:46
    互联网给人们生活带来了极大的便利。然而,人们在享受网络便捷的同时,却往往容易忽视网络暗藏着的安全隐患。...对于企业来说,企业的财政开支状况、项目申请及研发文档等都是非常机密的材料,一些不
  • 使用Java 自带的API开发IO系统时,如果需要对传输的方式进行切换,例如从阻塞传输切换到非阻塞传输, 那么可能会由于两种方式的API不兼容问题需要大面积的修改代码。然而 Netty 则为它所有的传输方式提供了一个通用 ...
  • 而且可以通过抓包软件修改响应数据返回给客户端,这样一来,客户端实际上接收到的数据并不是服务端给我的源数据,而是被第三者修改过的数据,如此一来,数据传输的安全就很有必要了。 那如何保证数据传输的安全呢? ...
  • GSM模块_GPRS数据传输机制和原理

    万次阅读 2016-09-09 16:53:38
    最近在项目中需要使用到GSM模块的GPRS功能,其相关知识进行了整理。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 649,825
精华内容 259,930
热门标签
关键字:

对用户来说数据传输是