zoukankan      html  css  js  c++  java
  • 接口与协议学习笔记-Ethernet UDP通信协议(一)

            总线(BUS,即公共汽车,数据的公共传输路线)分类的方式有很多,如被分为外部和内部总线、系统总线和非系统总线等等,下面是几种最常用的分类方法。另外,总线的传输核心思想是多路复用:时分多路复用-TDMA/频分多路复用-FDMA/码分多路复用-CDMA。

    1. 按功能分    
    • (1) 片总线(Chip Bus, C-Bus) 又称元件级总线,是把各种不同的芯片连接在一起构成特定功能模块(如CPU模块)的信息传输通路,它的宽度可以是8、16、32或64位。目前比较流行的几种内部总线技术:I2C总线、SCI总线等。

    • (2) 内总线(Internal Bus, I-Bus) 又称系统总线或板级总线,是微机系统中各插件(模块)之间的信息传输通路。例如CPU模块和存储器模块或I/O接口模块之间的传输通路。常用的有PC总线、AT总线(ISA总线)、PCI总线等。

    • (3) 外总线(External Bus, E-Bus)

      又称通信总线,是微机系统之间或微机系统与其他系统(仪器、仪表、控制装置等)之间信息传输的通路,如EIA RS-232C、IEEE-488等。

      其中的系统总线,即通常意义上所说的总线,一般又含有三种不同功能的总线,即数据总线DB、地址总线AB和控制总线CB。

      地址总线是专门用来传送地址的。在设计过程中,见得最多的应该是从CPU地址总线来选用外部存储器的存储地址。地址总线的位数往往决定了存储器存储空间的大小,比如地址总线为16位,则其最大可存储空间为216(64KB)。

      数据总线是用于传送数据信息,它又有单向传输和双向传输数据总线之分,双向传输数据总线通常采用双向三态形式的总线。数据总线的位数通常与微处理的字长相一致。例如Intel 8086微处理器字长16位,其数据总线宽度也是16位。在实际工作中,数据总线上传送的并不一定是完全意义上的数据。

      控制总线是用于传送控制信号和时序信号。如有时微处理器对外部存储器进行操作时要先通过控制总线发出读/写信号、片选信号和读入中断响应信号等。控制总线一般是双向的,其传送方向由具体控制信号而定,其位数也要根据系统的实际控制需要而定。

         2.按传输方式

          按照数据传输的方式划分,总线可以被分为串行总线和并行总线。从原理来看,并行传输方式其实优于串行传输方式,但其成本上会有所增加。通俗地讲,并行传输的通路犹如一条多车道公路,而串行传输则是只允许一辆汽车通过单线公路。目前常见的串行总线有SPI、I2C、USB、IEEE1394、RS232、CAN等;而并行总线相对来说种类要少,常见的如IEEE1284、ISA、PCI等。

        3.按时钟信号方式分

        按照时钟信号是否独立,可以分为同步总线和异步总线。同步总线的时钟信号独立于数据,也就是说要用一根单独的线来作为时钟信号线;而异步总线的时钟信号是从数据中提取出来的,通常利用数据信号的边沿来作为时钟同步信号。

            总线的带宽指的是单位时间内总线上传送的数据量,即每钞传送MB的最大数据传输率。

      总线的位宽指的是总线能同时传送的二进制数据的位数,或数据总线的位数,即32位、64位等总线宽度的概念;总线的位宽越宽,数据传输速率越大,总线的带宽就越宽。

      总线的工作时钟频率以MHz为单位,它与传输的介质、信号的幅度大小和传输距离有关。在同样硬件条件下,我们采用差分信号传输时的频率常常会比单边信号高得多,这是因为差分信号的的幅度只有单边信号的一半而已。

           UDP协议     UDP 是 User Datagram Protocol(用户数据报协议)的英文缩写。 UDP 只提供一种基 本的、低延迟的被称为数据报的通讯。所谓数据报,就是一种自带寻址信息,从发送端走到接 收端的数据包。 UDP 协议经常用于图像传输、网络监控数据交换等数据传输速度要求比较高 的场合。

    UDP数据报可分为首部和数据共两个部分。首部或者称为报头由四个域组成,每个域占用2个字节,报头共占用8个字节。

    1. UDP源端口号。为不同的应用保留其各自的数据传输通道,数据发送一方将UDP数据报通过源端口发送出去。
    2. UDP目的地端口,数据接收一方通过目标端口接收数据。
    3. 数据报的长度包括报头和数据部分在内的总字节数。用户数据报长度所占域的比特为16位,所以包含报头在内的数据报的最大长度为 65535 字节。不过,一 些实际应用往往会限制数据报的大小,有时会降低到 8192 字节。
    4. 校验值用来保证数据的安全。占两个字节,共16位。在数据发送方通过特殊的算法计算得出,传递到接收方之后还需要重新计算。传输过程中受到损坏,数值不会相符。检测到错误时,只是将损坏的消息段扔掉,或者给应用提供警告信息。

    UDP一般分为三个部分,UDP发送模块,UDP接收模块和CRC校验模块。

    MAC地址  IP地址  端口号

       

    在网络中,按照用途可把网络地址分为如下四类:

    ①    物理地址:即MAC地址,如00-aa-00-62-c9-09。在数据链路层包裹在以太网头部,用来识别同一个链路中的不同计算机。

    ②    逻辑地址:即IP地址,如127.0.0.1。在网络层的IP头部里,用于识别网络中互联的主机和路由器,其实主要是确认子网,通过子网掩码确认某个IP地址所在的子网,而后再在子网内部确认mac地址就能找到准确的用户了。

    ③    端口地址:应用进程端口号。在传输层包含在TCP/UDP头部中的,用于识别应用程序。

    ④    域名地址:万维网地址,取代IP地址方便记忆,如www.google.com。

         

                           主机A向主机B利用发送了一条消息,则在TCP head里包含了发送消息的应用的端口号以及接收方应用的端口号,传递给它的下一层,网络层会将TCP数据包封装起来再加自己的头部,IP头部里包含本地IP以及接收方IP等信息传递给数据链路层。数据链路层会再给加一个以太网头部,这里包含双方的mac地址。

                         以太网数据包会在其子网内部广播,如果接收方在其子网内,则在比对mac地址后直接接收数据。如果不在同一个子网内,以太网协议就不能实现数据传输了,而且因为以太网协议采取广播的方式发送消息,就算没有局限在子网内,如果给非常庞大的主机群广播消息是非常可怕的。这个时候就需要IP地址了,IP地址主要是用来区分哪些mac地址在同一个子网。找到目的主机所在子网之后再根据mac地址确认主机,IP层从IP首部确定数据包所用的协议之后将数据包交给对应的协议,再由协议来确认程序的端口号,从而实现了消息的传递

                       参见:mac地址、IP地址和端口号          https://www.cnblogs.com/Chilly2015/p/5720670.html                                                                        https://blog.csdn.net/guoping16/article/details/6584363

    IP数据报数据格式

    1. 1-4字节   版本IPV4,首部长度占 4 位,可表示的最大数值是 15 个单位(一个单位为 4 字节)因此 IP 的首部长度的最大值 是 60 字节。区分服务一般不使用。总长度占16位,因此数据报的最大长度为65535字节。
    2. 5-8字节   标识占16位,用来产生数据包的标识,标志(flag): 占 3 位,目前只有前两位有意义 MF 标志字段的最低位是 MF (More Fragment) MF=1 表示后面“ 还有分片” 。 MF=0 表示最后一个分片 DF 标志字段中间的一位是 DF (Don't Fragment) 只有当 DF=0 时才允许分片。片偏移: 占 12 位,指较长的分组在分片后某片在原分组中的相对位置.片偏移以 8 个字节为偏移单 位
    3. 9-12字节   生存时间占8位,记为 TTL (Time To Live) 数据报在网络中可通过的路由器数的最大值,TTL 字段 是由发送端初始设置一个 8 bit 字段.推荐的初始值由分配数字 RFC 指定,当前值为 64.发送 ICMP 回显应答时经常把 TTL 设为最大值 255。协议占8位,1 表示为 ICMP 协议, 2 表示为 IGMP 协议, 6 表示为 TCP 协议, 17 表示为 UDP 协议。首部检验和: 占 16 位,只检验数据报的首部不检验数据部分.这里不采用 CRC 检验码而采用简单的计 算方法。
    4. 13-16字节    记录源地址
    5. 17-20字节    记录目的地址

                   

          

  • 相关阅读:
    pointcut通配符
    Java设计模式-建造者(Builder)模式
    mybatis 初步使用(IDEA的Maven项目, 超详细)
    静态代理和动态代理
    Java 多线程(五)之 synchronized 的使用
    Java 多线程(四)之守护线程(Daemon)
    HashMap 源码解析(一)之使用、构造以及计算容量
    Java 多线程(三)之线程状态及其验证
    Java 多线程(二)之 Thread 优先级
    Java 多线程之 Thread 类 和 Runnable 接口初步使用
  • 原文地址:https://www.cnblogs.com/uiojhi/p/9342012.html
Copyright © 2011-2022 走看看