精华内容
下载资源
问答
  • VRRP帧格式

    千次阅读 2018-02-01 15:04:08
    最近在写一个生成各种网络封包的功能模块,其中写到VRRP时,网上搜到的关于VRRP帧格式的描述,好多都是的,最后在清默网络http://www.023wg.com/kkxpz/78.html搜到的才是正确的。  当然你也可以直接参考RFC文档 ...

          最近在写一个生成各种网络封包的功能模块,其中写到VRRP时,网上搜到的关于VRRP帧格式的描述,好多都是错的,最后在清默网络http://www.023wg.com/kkxpz/78.html搜到的才是正确的。
           当然你也可以直接参考RFC文档
           VRRPv2 参见RFC3768,https://tools.ietf.org/html/rfc3768
           VRRPv3 参见RFC5798,https://tools.ietf.org/html/rfc5798
           

    以下关于VRRP帧格式的描述摘自http://www.023wg.com/kkxpz/78.html:

    目前,VRRP协议包括两个版本:
    VRRPv2和VRRPv3。VRRPv2仅适用于IPv4网络,VRRPv3适用于IPv4和IPv6两种网络。
    基于不同的网络类型,VRRP可以分为VRRP for IPv4和VRRP for IPv6(简称VRRP6)。
    VRRP for IPv4支持VRRPv2和VRRPv3,而VRRP for IPv6仅支持VRRPv3。



    VRRPv2报文结构:
      VRRPv2报文结构.png

     
    VRRPv3报文结构
       VRRPv3报文结构.png

    各字段的含义如下表1所示:

        表1 VRRP报文字段含义

     

    报文字段

    含义

     

    VRRPv2

    VRRPv3

     

    Version

    VRRP协议版本号,取值为2。

    VRRP协议版本号,取值为3。

     

    Type

    VRRP通告报文的类型,取值为1,表示Advertisement。

    VRRP通告报文的类型,取值为1,表示Advertisement。

     

    Virtual Rtr ID(VRID)

    虚拟路由器ID,取值范围是1~255。

    虚拟路由器ID,取值范围是1~255。

     

    Priority

    Master设备在备份组中的优先级,取值范围是0~255。0表示设备停止参与VRRP备份组,用来使备份设备尽快成为Master设备,而不必等到计时器超时;255则保留给IP地址拥有者。缺省值是100。

    Master设备在备份组中的优先级,取值范围是0~255。0表示设备停止参与VRRP备份组,用来使备份设备尽快成为Master设备,而不必等到计时器超时;255则保留给IP地址拥有者。缺省值是100。

     

    Count IP Addrs/Count IPvX Addr

    备份组中虚拟IPv4地址的个数。

    备份组中虚拟IPv4或虚拟IPv6地址的个数。

     

    Auth Type

    VRRP报文的认证类型。协议中指定了3种类型:

    • 0:Non Authentication,表示无认证。
    • 1:Simple Text Password,表示明文认证方式。
    • 2:IP Authentication Header,表示MD5认证方式。

    -

     

    Adver Int/Max Adver Int

    VRRP通告报文的发送时间间隔,单位是秒,缺省值为1秒。

    VRRP通告报文的发送时间间隔,单位是厘秒,缺省值为100厘秒(1秒)。

     

    Checksum

    16位校验和,用于检测VRRP报文中的数据破坏情况。

    16位校验和,用于检测VRRP报文中的数据破坏情况。

     

    IP Address/IPvX Address(es)

    VRRP备份组的虚拟IPv4地址,所包含的地址数定义在Count IP Addrs字段。

    VRRP备份组的虚拟IPv4地址或者虚拟IPv6地址,所包含的地址数定义在Count IPvX Addrs字段。

     

    Authentication Data

    VRRP报文的认证字。目前只有明文认证和MD5认证才用到该部分,对于其它认证方式,一律填0。

     

     

    rsvd

     

    VRRP报文的保留字段,必须设置为0。

     

    由报文结构可以看出,VRRPv2和VRRPv3的主要区别为:

    1、支持的网络类型不同:

    VRRPv3适用于IPv4和IPv6两种网络,而VRRPv2仅适用于IPv4网络。

    2、认证功能不同:

    VRRPv3不支持认证功能,而VRRPv2支持认证功能。

    VRRPv2版本保留报文的认证字段,是为了兼容早期版本(RFC2338),VRRP认证并不能提高安全性。

    发送通告报文的时间间隔的单位不同。VRRPv3支持的是厘秒级,而VRRPv2支持的是秒级。



    展开全文
  • ”--- 泰戈尔前导码(Preamble):最前面时8个字节的前导码,表示一个以太网的开始。 另外,前导码的最后两个比特是“11”,称为SFD(Start Frame Delimiter). 在SFD之后就是 以太网的本体啦。以太网的本体部分...

    “如果错过太阳时你流了泪,那么你也要错过群星了。--- 泰戈尔


    前导码(Preamble):


    最前面时8个字节的前导码,表示一个以太网帧的开始。 另外,前导码的最后两个比特是“11”,称为SFD(Start Frame Delimiter). 在SFD之后就是 以太网帧的本体啦。


    以太网帧的本体部分:


    本体的前端是数据的首部,总共14个字节,包括目标6字节的mac地址,6字节的源mac地址,以及2个字节的上一层(互联网层)协议类型(例如IP,ARP)。紧随首部之后的是数据(这里的数据的首部是互谅网层搞上的首部了),一个数据帧的数据范围是46--1500字节(比46小行吗?),末尾是4字节的FCS(frame check sequence).

    IEEE802.3规定的格式稍微有些不同,先不用管。

    协议类型标志举例:



    Ref:

    《图解TCP/IP》--竹下隆史

    转载于:https://www.cnblogs.com/butterflybay/p/10347973.html

    展开全文
  • 简单修改网上关于ffmpeg的例子,实现提取视频并将其保存为jpeg图像的源程序。 由于ffmpeg0.5不在兼容img_convert函数,使用sws_scale函数修改了实现YUV颜色空间到RGB空间的转换 这里面一定要注意sws_...

    简单修改网上关于ffmpeg的例子,实现提取视频帧并将其保存为jpeg图像的源程序。

    由于ffmpeg0.5不在兼容img_convert函数,使用sws_scale函数修改了实现YUV颜色空间到RGB空间的转换

    这里面一定要注意sws_getCachedContext函数参数的设置问题,一旦设置错了,会出现解码出来的图像出现3个现象!

    直接使用libjpeg库实现图像数据的jpeg压缩

    #include <stdlib.h>
    #include <stdio.h>
    #include <memory.h>//注意要包含此头文件与sprintf函数相关
    extern "C"
    {
     //ffmpeg相关的头文件
     #include "avstring.h"
     #include "avformat.h"
     #include "swscale.h"
     #include "opt.h"
     //libjpeg相关的头文件
     #include "jpeglib.h"
    }
    int framenum=0 ;
    //static int  sws_flags = SWS_BICUBIC ;
    //实现视频帧的jpeg压缩
    void draw_jpeg(AVPicture *pic,int width,int height) 
    {
     char fname[128] ;
    // AVPicture my_pic ;
     struct jpeg_compress_struct cinfo ;
     struct jpeg_error_mgr jerr ;
     JSAMPROW  row_pointer[1] ;
     int row_stride ;
     uint8_t *buffer ;
     FILE *fp ;
     //vfmt2rgb(my_pic,pic) ;
        buffer = pic->data[0];
    #ifdef __MINGW32__
        sprintf(fname, "%sDLPShot-%d.jpg", "frame", framenum++);
    #else
        sprintf(fname, "%sDLPShot-%d.jpg", "frame", framenum++);
    #endif
        fp = fopen (fname, "wb");
        if (fp == NULL)
        {
            av_log(NULL, AV_LOG_ERROR, "fopen %s error/n", fname);
            return;
        }
        cinfo.err = jpeg_std_error(&jerr);
        jpeg_create_compress(&cinfo);
        jpeg_stdio_dest(&cinfo, fp);
        cinfo.image_width = width;
        cinfo.image_height = height;
        cinfo.input_components = 3;
        cinfo.in_color_space = JCS_RGB;
        jpeg_set_defaults(&cinfo);
        jpeg_set_quality(&cinfo, 80,true);
        jpeg_start_compress(&cinfo, TRUE);
        row_stride = width * 3;
        while (cinfo.next_scanline < height)
        {
            row_pointer[0] = &buffer[cinfo.next_scanline * row_stride];
            (void)jpeg_write_scanlines(&cinfo, row_pointer, 1);
        }
        jpeg_finish_compress(&cinfo);
        fclose(fp);
        jpeg_destroy_compress(&cinfo);
     printf("compress %d frame finished!/n",framenum) ;
        return ;
    }
    void main()
    {
     AVFormatContext *pFormatCtx;
     static char *ifilename="1.asf" ;
     AVStream *st;
     AVCodecContext *pCodecCtx;
     AVCodec *pCodec;
     AVFrame *pFrame,*pFrameRGB;
     uint8_t *buffer;
     AVPacket packet;
     struct SwsContext *img_convert_ctx=NULL;
     int numBytes;
     int i,videoStream=-1,frameFinished;
     av_register_all();
     if(av_open_input_file(&pFormatCtx, ifilename, NULL, 0, NULL)!=0)
     {
      printf("open video failed!/n") ;
      return ;
     }
     //read information about input file ;
     if(av_find_stream_info(pFormatCtx)<0)
     {
      printf("get information failed!/n") ;
      return ;
     }
    //print information about file 
     dump_format(pFormatCtx, 0, ifilename, 0);
     
     for(i=0; i<pFormatCtx->nb_streams; i++)
     {
      if(pFormatCtx->streams[i]->codec->codec_type==CODEC_TYPE_VIDEO)
      {
      videoStream=i;
      break;
      }
     }
     if(videoStream==-1)
      return ; // Didn't find a video stream
      // Get a pointer to the codec context for the video stream
     st=pFormatCtx->streams[videoStream] ;
     pCodecCtx=st->codec;
     // Find the decoder for the video stream
     pCodec=avcodec_find_decoder(pCodecCtx->codec_id);
     if(pCodec==NULL) {
      fprintf(stderr, "Unsupported codec!/n");
      return ; // Codec not found
     }
    // Open codec
     if(avcodec_open(pCodecCtx, pCodec)<0)
     {
      printf("open encoder failed!") ;
      return ;
     }
     // Allocate video frame
     pFrame=avcodec_alloc_frame();
     
     // Allocate an AVFrame structure
     pFrameRGB=avcodec_alloc_frame();
     if(pFrameRGB==NULL)
     {
      printf("allocate AVframe failed!/n") ;
      return ;
     }
     // Determine required buffer size and allocate buffer
     numBytes=avpicture_get_size(PIX_FMT_RGB24, pCodecCtx->width,
                                pCodecCtx->height);
     buffer=(uint8_t *)av_malloc(numBytes*sizeof(uint8_t));
     // Assign appropriate parts of buffer to image planes in pFrameRGB
    // Note that pFrameRGB is an AVFrame, but AVFrame is a superset
    // of AVPicture
     avpicture_fill((AVPicture *)pFrameRGB, buffer,PIX_FMT_RGB24,
     //  avpicture_fill((AVPicture *)pFrameRGB, buffer, PIX_FMT_RGB24,
         pCodecCtx->width, pCodecCtx->height);
     //pFrameRGB->alloc_picture(PIX_FMT_RGB24,pCodecCtx->width,pCodecCtx->height) ;
     i=0;
     while(av_read_frame(pFormatCtx, &packet)>=0)
     {
      // Is this a packet from the video stream?
      if(packet.stream_index==videoStream)
      {
     // Decode video frame
       avcodec_decode_video(pCodecCtx, pFrame, &frameFinished,
                             packet.data, packet.size);
        // Did we get a video frame?
       if(frameFinished)
       {
      // Convert the image from its native format to RGB
       
        if(img_convert_ctx==NULL)
        {
          img_convert_ctx=sws_getCachedContext(img_convert_ctx,pCodecCtx->width,pCodecCtx->height,
          //PIX_FMT_YUV420P,pCodecCtx->width,pCodecCtx->height,pCodecCtx->pix_fmt,
           pCodecCtx->pix_fmt,pCodecCtx->width,pCodecCtx->height,PIX_FMT_RGB24 ,
         SWS_X ,NULL,NULL,NULL) ;
          if (img_convert_ctx == NULL) 
          {
           printf("can't init convert context!/n") ;
           return ;
          }
        }
        sws_scale(img_convert_ctx, pFrame->data, pFrame->linesize,
             0, pCodecCtx->width, pFrameRGB->data, pFrameRGB->linesize);
       //av_picture_copy((AVPicture*)pFrameRGB,(AVPicture*)pFrame,PIX_FMT_RGB24,pCodecCtx->width,pCodecCtx->height) ;
       // Save the frame to disk
       int a=++i ;
        if((a>50)&&(a<100))
        // SaveFrame(pFrameRGB, pCodecCtx->width, 
        //  pCodecCtx->height, i);
        draw_jpeg((AVPicture*)pFrameRGB,pCodecCtx->width,pCodecCtx->height) ;
       }
      }
      // Free the packet that was allocated by av_read_frame
     av_free_packet(&packet);
     }
     // Free the RGB image
     av_free(buffer);
     av_free(pFrameRGB);
    // Free the YUV frame
     av_free(pFrame);
    // Close the codec
     avcodec_close(pCodecCtx);
    // Close the video file
     av_close_input_file(pFormatCtx);
    }


    展开全文
  • 链路层数据成方法

    千次阅读 2018-02-27 23:07:16
    能不能看出来的某个比特了?这些都是成机制应该考虑的,所以格式设计成如下这样: 能看出来,的组成主要是标志和字段两个部分,标志主要是标识了的开始和结束,字段部分主要有地址字段...

    首先我们应该想想成帧所涉及的问题。第一就是网络层的数据包交给链路层之后,按照怎样的格式封装成帧?第二就是,用什么来区分帧头和帧尾?也就是什么时候帧开始,什么时候结束的问题。以及,怎么看传送的帧是对的?能不能看出来帧的某个比特错了?这些都是成帧机制应该考虑的,所以帧的格式设计成如下这样:


            能看出来,帧的组成主要是标志和字段两个部分,标志主要是标识了帧的开始和结束,字段部分主要有地址字段,控制字段,正文字段和校验字段四个部分。地址字段表明了帧的去向和来源,这是硬件的网卡地址,控制字段就是各种协议,正文字段是真正的信息,校验字段是用来检验帧是不是有错误,通常有CRC校验等等。这样来看,上面的几个问题就都解决了。标志是成帧的一个重要标志,链路层读到标志,就知道帧开始了,这也就界定了一个帧的范围。对于正文字段,链路层读不懂,他也不会在意正文字段是什么,他眼中的正文也就是一串0101而已。

    数据链路层成帧的方法主要有三个:字符计数法,字符填充的首尾界定法和比特填充的首尾界定法。

    1.字符计数法  用一个帧的第一字节来说明帧的总长度(总长度包含这个帧头)


            看这张图,白色为帧头,指明了长度,比如第一帧长度为5,后面就跟了4个字节,第二帧的长度为5,后面也跟了4字节,之后是两个8字节长度的,所以各自跟了7字节的正文部分。但是很显然,如果头这一个字节出了问题,影响的就不仅仅是这一帧了,其他的都会出问题。比如:


            第二个帧头出了问题,那么就会出现大问题:后面的全部帧都会出错,连锁反应。所以这种方法不太常用。

            2.字符填充的首尾界定法

            在帧的头之前和尾之后加一个特殊的字符,只要读到这个字符帧就开始了,再次读到就认为这个帧结束了,如下图所示:



            这种方法能够避免上面字符计数法的头出错问题,但是他也有问题:如果正文里面出现了flag特殊字符怎么办?解决办法是在正文里面flag字符前面加上转义字符esc,这样读到flag之前如果没有转义字符esc,那么认为帧结束,如果有esc那么认为他就是普通的数据就行。问题又来了,那么正文里面如果有esc字符呢?那么就在esc前面再加一个esc就行了,这两个的处理是一样的。如下图:


          3.比特填充的字符界定法

           这种方法和第二种比较类似,区别是他把flag具体化了,为6个1。这样当正文读取的时候一旦出现了5个连续的1,那么在后面填充一个0,避免出现6个1造成帧提前结束。如下图所示:


           收端接收到之后,每读到5个连续的1之后,就把后面的0去掉一个,这样就得到了原文的数据了。

           上面三种方法就是最常见的链路层成帧的方法。

    展开全文
  • 数据链路层的成方法

    万次阅读 多人点赞 2018-01-09 13:15:54
    第一就是网络层的数据包交给链路层之后,按照怎样的格式封装成?第二就是,用什么来区分头和尾?也就是什么时候开始,什么时候结束的问题。以及,怎么看传送的是对的?能不能看出来的某个比特
  • Verilog自定义UART串口应用层协议SLink[上] ...帧格式中常用的元素有:帧头、数据长度、有效载荷、校验、帧尾等等,当然,我们大可不必拘泥于这些元素,增删名用(增补、删除、命名、运用),仁者见仁,智者见智
  • CAN数据格式

    千次阅读 2017-08-15 11:14:04
    1.名词 1)显性和隐性 ... 显性-0 隐性-1(diff=0) ...2)数据、远程、错误、过载间隔 ... 数据:用于发送节点向接收节点传送数据的 ... 远程:用于接收节点向具有相同ID的发送节点请求数据的... 
  • 最新版ffmpeg 提取视频关键

    千次阅读 2016-04-12 22:30:00
    所用视频为 flv格式的,用的vs2010,电脑为64位,下面的也是64位,别下了。 因为ffmpeg的函数和版本有关系,这里记录下我所用的整合的版本,是昨天下的最新版的,需要请下载 http://download.csdn.n
  • 、报文、分组、包、报文段、数据报这几个概念一直是比较容易混淆的概念,这导致很多IT人把所有的网络数据传输单元都称之...:是数据链路层传输的数据格式的长度 = 头+网络层包头+传输层报文头+数据;这是一个
  • 想要一款简单高效的图片格式转换工具?Joyoshare LivePhoto Converter分享给大家!LivePhoto Converter Mac版可以一次隐藏多个实时照片...实时预览实时照片文件和每个借助精心设计的预览功能,可以在Joyoshare Li...
  • 呵呵 其实是以前的格式记忆了啊aa_mc.onRelease=function(){ trace("aa剪辑事件触发了");}bb_mc.onRelease=function(){ trace("bb剪辑事件触发了"); }
  • 关注、星标公众号,不错过精彩内容上一篇文章《以太网数据包结构》讲解了以太网数据包结构,其中牵扯到了802.3,...最常使用的封装格式是RFC 894定义的格式。下图显示了两种不同形式的封装格式。从上图看到,两种...
  • 关注、星标公众号,不错过精彩内容上一篇文章《以太网数据包结构》讲解了以太网数据包结构,其中牵扯到了802.3,...最常使用的封装格式是RFC 894定义的格式。下图显示了两种不同形式的封装格式。从上图看到,两种...
  • UE4可以在项目设置里面设置播放开场动画但是对视频文件的格式,大小,数要求比较严,下面介绍一种可以播放一般格式的动画。 一:首先在在Content下建立Movies文件夹(文件夹的名字一定不能),把要播放的视频...
  • 千兆网UDP通信以太网帧格式图8‑12 以太网帧格式表8‑5 以太网帧格式说明UDP协议分析为什么UDP协议在FPGA实现时很受欢迎,最主要一个原因就是简单,简答到什么地步呢?UDP协议只是在IP的数据服务之上增加了复用和分...
  • 以太网帧格式图8‑12以太网帧格式表8‑5以太网帧格式说明UDP协议分析为什么UDP协议在FPGA实现时很受欢迎,最主要一个原因就是简单,简答到什么地步呢?UDP协议只是在IP的数据服务之上增加了复用和分用的功能和查...
  • 两个不同的局域网互联通信(比如以太网和无线网通过网桥转化帧格式、实现相互通信;) 3、网桥本身没有网卡,所以网桥并不改变它所转发帧的源地址; 4、网桥是基于存储-转发的的交换,先将数据全部接收,然后再...
  • 关注、星标公众号,不错过精彩内容01USART的特点USART是...UART负责处理数据总线和串行口之间的串/并、并/串转换,并规定了帧格式;通信双方只要采用相同的帧格式和波特率,就能在未共享时钟信号的情况下,仅用两...
  • 关注、星标公众号,不错过精彩内容01USART的特点USART是...UART负责处理数据总线和串行口之间的串/并、并/串转换,并规定了帧格式;通信双方只要采用相同的帧格式和波特率,就能在未共享时钟信号的情况下,仅用两...
  • 在CAN消极报错分界符中发生的格式错会引起该消极报错节点处于等效离线状态,以及由该节点发送的消息优先级逆转。
  • 定义通信格式及功能因为数据不算复杂,所以定义简单下位机帧格式:帧头(0xAA) 类型字节 数据低8位 数据高8位 保留字节1 保留字节2 校验字节 如果要传送的数据比较多/复杂,则可以参考ModuleBus协议!主要功能包括...
  • (三)数据链路层

    2019-02-26 17:50:52
    数据链路层将物理层传送过来的比特流按照一定格式分割成若干个,成的目的在于: (1)一旦数据在传输时出错,只需重传或纠正有,而不必重发全部数据,从而提高效率; (2)报文不分割整个传输,出错概率较...
  • 前言 参考王道考研复习指导 由于本菜鸡第一次发csdn,许多格式不会用。后续会进一步整理,包括添加笔记内容,标明参考资料。暂时只将学习时的markdown直接导入。... 差错控制(位错、帧错)位错帧错习题 ’
  • CRC校验概念及例解

    2017-07-03 13:41:53
    今天我们来简要的介绍一下关于以太网帧格式的帧末尾的CRC校验的相关概念并用实例来说明CRC校验的具体过程。  CRC即循环冗余校验码:是数据通信领域中最常用的一种查校验码,其特征是信息字段和校验字段的长度可以...
  • 应当有特殊的格式,用于区分数据流和噪音,有以下的若干种方法: Character Count 最前面的是包括它在内的长度,后面是数据。但是当长度字节错误时,就会一直下去 Start&ending character with ...
  • 有确认面向连接 无确认无连接)2、链路管理:连接的建立,维持和释放 3、(定义数据格式)组帧(定界,同步),透明传输 4、流量控制:限制发送方的发送速率 5、差错控制:对于位错和帧错的处理 电路和链路的区分,电...
  • 网络知识

    2019-12-05 17:34:14
    OSI七层模型: 应用层:提供网络与用户软件之间的接口服务 表示层:提供格式化的表示和转换数据服务 比如...数据链路层:负责无传输数据 确认重传 ip解析成mac 物理层:提供机械 电气工能和过程特性 TCP...

空空如也

空空如也

1 2 3 4
收藏数 74
精华内容 29
关键字:

帧格式错