zoukankan      html  css  js  c++  java
  • 数据封装

     在进行数据传递的过程中需要学习这个

    转自:http://www.clxp.net.cn/article/1233.html

    当主机跨越网络向其他设备传输数据时,就要进行数据封装,就是在OSI模型的每一层加上协议信息。每一层只与接受设备上相应的对等层进行通信。
    为了实现通信并交换信息,每一层都使用协议数据单元(Protocol Data Units,PDU)。在模型中的每一层,这些含有控制信息的PDU被附加到数据上。

    他们通常被附加到数据字段的报头中。但它们也可以附加在数据字段的报尾中。

    在OSI模型的每一层,通过封装使每个PDU被附加到数据上,而且每个PDU都有特定的名称(物理层:比特流;链路层:数据帧;网络层:数据包;传输层:数据段;

    其名称取决于在每个报头中所提供的信息。

    这种PDU信息只能由接收方设备中的对等层读取,在读取之后,报头就被剥离,然后把数据交给上一层。
    图1.28显示了PDU,以及PDU怎样给每一层附加控制信息。这个图演示了上层用户数据怎样被转换,以便在网络上进行传输。数据流被送到传输层,通过发送报头,

    传输层能够建立一条到接收方设备的虚电路。然后数据流被分割成更小的块,并且根据协议创建一个传输层报头(PDU),将它附加到数据字段的报头中。

    现在这种数据块就称为数据段。每个数据段要进行排序,以便数据流能够在接收方精确地重现,与它在发送时的顺序完全一样。

    2008-06-26_122245-0.gif

    图1.28数据封装。


    然后,每个数据段被交到网络层,以便通过互联网实现网络寻址和路由选择。在网络层,使用逻辑寻址(比如IP)将每个数据段送到正确的网络中。

    网络层协议向来自传输层的数据段中添加控制报头,现在所得到数据块就称为数据包或数据报

    记住传输层和网络层一起工作,以在接收方主机中重建数据流,但他们并不将他们的PDU放在本地网段上——这时得到由关路由器或主机信息的唯一方式。


    链路层负责从网络层接收数据包并将它们放到网络介质(有线或无线)上。数据链路层将每个数据包封装成帧,帧的报头中包含了源和目的主机的硬件地址。

    如果目的设备在以个远程网络中,帧就会被送往路由器,以通过互联网络传送到目的地。一旦它达到了目的网络,就会使用以个新的帧将数据包送往目的主机。

    在传输过程中,帧会变,但是数据包不会变。
    为了将帧送到网络上,它首先必须被转换成数字信号的形式。帧实际上时1和0的逻辑组,物理层负责将这些数值封装为数字信号,在同1个本地网络中就可以直接传输了。

    接收方设备将使数字信号实现同步(靠时钟频率Clock Rate)并从数字信号中提取出1和0,这是设备就可以构建帧,执行循环冗余效验(CRC),并根据帧的FCS字段中的结果来检验数据是否被正确传送。

    如果他们匹配,就从阵中提取出数据包,然后丢弃剩余的部分。这个过程就称为解封装

    数据包被提交到网络层,在这里对地址进行检查。如果地址匹配,就从数据包中取出数据段。然后丢弃剩余的部分。在传输层对数据段进程处理,这里将重建数据流,并向发送方站点去确认它收到了每个数据块。

    然后,它将数据流送往高层的应用程序。


    在发送方设备中,数据封装过程如下:
    1.用户信息转换为数据,以便在网络上传输。
    2.数据转换为数据段,并在发送方和接收方主机之间建立以条可靠的连接。
    3.数据段转换为数据包或数据报,并且在报头中放上逻辑地址,这样,每以个数据包都可以通过互联网进行传输。
    4.数据包或数据报转换为帧,以便在本地网络中传输。在本地网段上,使用硬件(以太网)地址唯一表示每一台主机。
    5.帧转换为比特流,并采用数字编码和时钟方案。
    6.为了详细说明这个过程,用图1.29来详细解释分层寻址的概念。


    请记住,数据流是从高层送往传输层的。作为技术员,我们确实不用关心数据流时从那里来的,因为那时程序员关心的问题。我们的工作时可靠地重建是数据流,并将它送往接收方设备的高层。
    在进一步讨论图1.29之前。我们先讨论端口号的概念。传输层使用端口号来等译虚电路和上层进程,如图1.30所示。
    传输层接收到数据流,将它们组合成段。并通过创建虚电路来建立可靠的绘画,然后它将每个段排序(编号),并使用确认技术和流量控制。如果你正在使用TCP,虚电路就由源端口号定义。

    记住,主机的源端口号时从1024开始分配的 (0~1023是为周知端口保留的)。当数据流在接收方主机中可靠的重建时,目的端口号就定义了准备接收数据流的上层进程(应用程序)。

    图1.29

    2008-06-26_122245-1.gif


    既然我们了解了端口号的概念,以及它们时怎样用在传输时的,现在让我们再回到图1.30

    图1.30

    2008-06-26_122245-2.gif


    一旦传输层数据头信息被加到数据片中,它就变成了数据段并交给网络层,一起交付的还由目的IP地址(目的IP地址随数据流一起从上层交给传输层,它时通过位于高层的名字解析方法——可能时DNS来找到的。)

    网络层在每个数据段的前面添加报头,并加上逻辑地址(IP地址)。一旦在数据段前面添加了报头,PDU就称为数据包。在数据包中由以个协议字段,用来描述数据时从哪里来的(即上层协议的类型,可能时UDP或TCP),

    当数据包到达接收方主机时,这会使网络层将数据段交给正确的传输协议。

    网络层负责找到目的地址和硬件地址,这个硬件地址指示了数据包将被送到本地网络的哪一台主机中。通过使用地址解析协议ARP就可以做到这一点。网络层的IP协议将查看目的IP地址,并将此地址与它自己的源IP地址和子网掩码进行比较,

    如果时以个本地网络请求,本机主机的硬件地址就会通过ARP请求来得到:如果数据包时被送往远程主机的,IP协议就查找默认网关(路由器)的IP地址。

    然后,数据包就与本地主机或默认网关的目的硬件地址一起被送交给数据链路层。数据链路层将在数据包的前面添加1个报头,并添加其他一些数据,从而将数据包变成了帧(我们称之为帧,时因为在数据包中添加了报头和报尾,这使得数据就像书挡或帧)

    ,这一切就如图1.29所示。帧使用Ether类型字段来描述数据包来自网络层的哪一个协议。现在,对帧运行循环冗余效验CRC,运行CRC的结果就放在帧的“帧效验序列FCS”字段中,FCS就是帧的报尾。

    现在帧 就可以交给物理层了,一次一位,这里将使用位定时规则来对数字信号中的数据进行编码。网段中的每台设备将与时钟同步,并从数字信号中抽取1和0来构建一帧。在重建出以帧之后,就运行CRC,以确保帧时正确无误的。

    如果一切正常,主机就检查目的地址,看帧是不是给它们的。

  • 相关阅读:
    利用docker搭建rtmp服务器(1)
    ES6转换为ES5
    一些乱七八糟的东西
    xss攻击和sq注入
    python asyncio笔记
    图解密码技术一些笔记
    做网页前端遇到的一些问题
    错误处理的一些想法
    吐槽下国内的云笔记
    python的编码问题
  • 原文地址:https://www.cnblogs.com/taotaomajia/p/4565276.html
Copyright © 2011-2022 走看看