原理_原理图 - CSDN
  • Git——基本原理

    2018-11-27 11:31:41
    一、哈希   哈希是一个系列的加密算法,各个不同的哈希算法虽然加密强度不同,但是有以下几个共同点:   ①不管输入数据的数据量有多大,使用同一个哈希算法,得到的加密结果长度固定   ②哈希算法确定,输入...

    一、哈希
    在这里插入图片描述
      哈希是一个系列的加密算法,各个不同的哈希算法虽然加密强度不同,但是有以下几个共同点:
      ①不管输入数据的数据量有多大,使用同一个哈希算法,得到的加密结果长度固定
      ②哈希算法确定,输入数据确定,输出结果保证不变
      ③哈希算法确定,输入数据有变化,输出结果一定有变化,而且通常变化很大
      ④哈希算法不可逆
      ⑤哈希算法中不区分英文大小写
      哈希算法有很多种,如:MD5、SHA-1等。Git 底层采用的是 SHA-1 ,因为哈希算法可以被用来验证文件,Git 就是靠这种机制来从根本上保证数据完整性的
    在这里插入图片描述
    二、Git保存版本的机制
     1、集中式版本控制工具(如SVN)的文件管理机制:以文件变更列表的方式存储信息。这类系统将它们保存的信息看作是一组基本文件(对应下图的Version1)和每个文件随时间逐步累积的差异(对应下图的其他Version),在文件管理的时候只保存当前版本相对于上一个版本的差异,这是一种增量式的版本控制
    在这里插入图片描述
     2、Git 的文件管理机制:Git 把数据看作是小型文件系统的一组快照。每次提交更新时 Git 都会对当前的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。所以 Git 的工作方式可以称之为快照流。下图中Version2及其之后的实线框中的文件表示该版本的该文件相较于上个版本有变动,虚线框中的文件表示该版本的该文件相较于上一版本没有变动(只保存上一个版本的指针,而无需保存文件),这样根据当前版本的文件和指向上一版本的指针就可以找到该版本的所有文件的状态
    在这里插入图片描述
     Git 的提交对象:
    在这里插入图片描述
     提交对象及其父对象形成的链条:
    在这里插入图片描述
    三、Git的分支管理机制(依赖于指针的变化)
     1、分支的创建:创建一个指向HEAD当前指向的分支的当前版本的指针
    在这里插入图片描述
      说明:此时HEAD指向master分支的f30ab版本,那么新创建的testing分支的指针也会指向master分支的f30ab版本,实际上是创建的分支的指针会指向HEAD指针指向的分支所在的版本
     2、分支的切换:仅仅是改变HEAD指针的指向
    在这里插入图片描述
      说明:切换分支时,仅仅是切换一下HEAD指针的指向,从原分支指向想切换的分支
     3、版本的提交
    在这里插入图片描述
      说明:若此时在testing分支上提交了版本,则只会使该分支的指针向后移动,不会影响其他分支,如上图所示,其他分支的指针指向并没有发生变化
     4、冲突的产生
    在这里插入图片描述
      说明:在testing分支修改后,再将HEAD切换至master,然后在master上修改相同的文件,然后再master分支上提交,就会形成下面的局面:这时就有可能产生冲突,这合并版本的时候就需要解决冲突
    在这里插入图片描述

    5、和SVN的比较
      SVN在创建分支的时候是将所有文件复制一份,而git仅仅是创建一个指向当前版本的指针,因此效率很高;Git中分支之间的切换仅仅是HEAD指针的变化,效率也很高;
      综上:Git的操作很依赖于HEAD指针的变化。

    展开全文
  • H264基本原理

    2017-11-15 02:25:54
    H264视频压缩算法现在无疑是所有视频压缩技术中使用最广泛,最流行的。随着 x264/openh264以及ffmpeg等开源库的推出,...但为了用好H264,我们还是要对H264的基本原理弄清楚才行。今天我们就来看看H264的基本原理

    前言

    H264视频压缩算法现在无疑是所有视频压缩技术中使用最广泛,最流行的。随着 x264/openh264以及ffmpeg等开源库的推出,大多数使用者无需再对H264的细节做过多的研究,这大降低了人们使用H264的成本。

    但为了用好H264,我们还是要对H264的基本原理弄清楚才行。今天我们就来看看H264的基本原理。

    H264概述

    H264压缩技术主要采用了以下几种方法对视频数据进行压缩。包括:

    • 帧内预测压缩,解决的是空域数据冗余问题。
    • 帧间预测压缩(运动估计与补偿),解决的是时域数据冗徐问题。
    • 整数离散余弦变换(DCT),将空间上的相关性变为频域上无关的数据然后进行量化。
    • CABAC压缩。

    经过压缩后的帧分为:I帧,P帧和B帧:

    • I帧:关键帧,采用帧内压缩技术。
    • P帧:向前参考帧,在压缩时,只参考前面已经处理的帧。采用帧音压缩技术。
    • B帧:双向参考帧,在压缩时,它即参考前而的帧,又参考它后面的帧。采用帧间压缩技术。

    除了I/P/B帧外,还有图像序列GOP。

    • GOP:两个I帧之间是一个图像序列,在一个图像序列中只有一个I帧。如下图所示:

    下面我们就来详细描述一下H264压缩技术。

    H264压缩技术

    H264的基本原理其实非常简单,下我们就简单的描述一下H264压缩数据的过程。通过摄像头采集到的视频帧(按每秒 30 帧算),被送到 H264 编码器的缓冲区中。编码器先要为每一幅图片划分宏块。

    以下面这张图为例:

    划分宏块

    H264默认是使用 16X16 大小的区域作为一个宏块,也可以划分成 8X8 大小。

    划分好宏块后,计算宏块的象素值。

    以此类推,计算一幅图像中每个宏块的像素值,所有宏块都处理完后如下面的样子。

    划分子块

    H264对比较平坦的图像使用 16X16 大小的宏块。但为了更高的压缩率,还可以在 16X16 的宏块上更划分出更小的子块。子块的大小可以是 8X16、 16X8、 8X8、 4X8、 8X4、 4X4非常的灵活。

    上幅图中,红框内的 16X16 宏块中大部分是蓝色背景,而三只鹰的部分图像被划在了该宏块内,为了更好的处理三只鹰的部分图像,H264就在 16X16 的宏块内又划分出了多个子块。

    这样再经过帧内压缩,可以得到更高效的数据。下图是分别使用mpeg-2和H264对上面宏块进行压缩后的结果。其中左半部分为MPEG-2子块划分后压缩的结果,右半部分为H264的子块划压缩后的结果,可以看出H264的划分方法更具优势。

    宏块划分好后,就可以对H264编码器缓存中的所有图片进行分组了。

    帧分组

    对于视频数据主要有两类数据冗余,一类是时间上的数据冗余,另一类是空间上的数据冗余。其中时间上的数据冗余是最大的。下面我们就先来说说视频数据时间上的冗余问题。

    为什么说时间上的冗余是最大的呢?假设摄像头每秒抓取30帧,这30帧的数据大部分情况下都是相关联的。也有可能不止30帧的的数据,可能几十帧,上百帧的数据都是关联特别密切的。

    对于这些关联特别密切的帧,其实我们只需要保存一帧的数据,其它帧都可以通过这一帧再按某种规则预测出来,所以说视频数据在时间上的冗余是最多的。

    为了达到相关帧通过预测的方法来压缩数据,就需要将视频帧进行分组。那么如何判定某些帧关系密切,可以划为一组呢?我们来看一下例子,下面是捕获的一组运动的台球的视频帧,台球从右上角滚到了左下角。


    H264编码器会按顺序,每次取出两幅相邻的帧进行宏块比较,计算两帧的相似度。如下图:

    通过宏块扫描与宏块搜索可以发现这两个帧的关联度是非常高的。进而发现这一组帧的关联度都是非常高的。因此,上面这几帧就可以划分为一组。其算法是:在相邻几幅图像画面中,一般有差别的像素只有10%以内的点,亮度差值变化不超过2%,而色度差值的变化只有1%以内,我们认为这样的图可以分到一组。

    在这样一组帧中,经过编码后,我们只保留第一帖的完整数据,其它帧都通过参考上一帧计算出来。我们称第一帧为IDR/I帧,其它帧我们称为P/B帧,这样编码后的数据帧组我们称为GOP

    运动估计与补偿

    在H264编码器中将帧分组后,就要计算帧组内物体的运动矢量了。还以上面运动的台球视频帧为例,我们来看一下它是如何计算运动矢量的。

    H264编码器首先按顺序从缓冲区头部取出两帧视频数据,然后进行宏块扫描。当发现其中一幅图片中有物体时,就在另一幅图的邻近位置(搜索窗口中)进行搜索。如果此时在另一幅图中找到该物体,那么就可以计算出物体的运动矢量了。下面这幅图就是搜索后的台球移动的位置。

    通过上图中台球位置相差,就可以计算出台图运行的方向和距离。H264依次把每一帧中球移动的距离和方向都记录下来就成了下面的样子。

    运动矢量计算出来后,将相同部分(也就是绿色部分)减去,就得到了补偿数据。我们最终只需要将补偿数据进行压缩保存,以后在解码时就可以恢复原图了。压缩补偿后的数据只需要记录很少的一点数据。如下所示:

    我们把运动矢量与补偿称为帧间压缩技术,它解决的是视频帧在时间上的数据冗余。除了帧间压缩,帧内也要进行数据压缩,帧内数据压缩解决的是空间上的数据冗余。下面我们就来介绍一下帧内压缩技术。

    帧内预测

    人眼对图象都有一个识别度,对低频的亮度很敏感,对高频的亮度不太敏感。所以基于一些研究,可以将一幅图像中人眼不敏感的数据去除掉。这样就提出了帧内预测技术。

    H264的帧内压缩与JPEG很相似。一幅图像被划分好宏块后,对每个宏块可以进行 9 种模式的预测。找出与原图最接近的一种预测模式。

    下面这幅图是对整幅图中的每个宏块进行预测的过程。

    帧内预测后的图像与原始图像的对比如下:

    然后,将原始图像与帧内预测后的图像相减得残差值。

    再将我们之前得到的预测模式信息一起保存起来,这样我们就可以在解码时恢复原图了。效果如下:

    经过帧内与帧间的压缩后,虽然数据有大幅减少,但还有优化的空间。

    对残差数据做DCT

    可以将残差数据做整数离散余弦变换,去掉数据的相关性,进一步压缩数据。如下图所示,左侧为原数据的宏块,右侧为计算出的残差数据的宏块。

    将残差数据宏块数字化后如下图所示:

    将残差数据宏块进行 DCT 转换。

    去掉相关联的数据后,我们可以看出数据被进一步压缩了。

    做完 DCT 后,还不够,还要进行 CABAC 进行无损压缩。

    CABAC

    上面的帧内压缩是属于有损压缩技术。也就是说图像被压缩后,无法完全复原。而CABAC属于无损压缩技术。

    无损压缩技术大家最熟悉的可能就是哈夫曼编码了,给高频的词一个短码,给低频词一个长码从而达到数据压缩的目的。MPEG-2中使用的VLC就是这种算法,我们以 A-Z 作为例子,A属于高频数据,Z属于低频数据。看看它是如何做的。

    CABAC也是给高频数据短码,给低频数据长码。同时还会根据上下文相关性进行压缩,这种方式又比VLC高效很多。其效果如下:

    现在将 A-Z 换成视频帧,它就成了下面的样子。

    从上面这张图中明显可以看出采用 CACBA 的无损压缩方案要比 VLC 高效的多。

    小结

    至此,我们就将H264的编码原理讲完了。本篇文章主要讲了以下以点内容:
    1. 简音介绍了H264中的一些基本概念。如I/P/B帧, GOP。
    2. 详细讲解了H264编码的基本原理,包括:

    • 宏块的划分
    • 图像分组
    • 帧内压缩技术原理
    • 帧间压缩技术原理。
    • DCT
    • CABAC压缩原理。

    希望以上内容能对您有所帮助。谢谢!

    展开全文
  • BT下载原理简介

    2017-06-26 14:27:58
    1. BT下载原理简介 BT是一种用来进行文件下载的共享软件(不是“变态”),全名叫"BitTorrent"。BitTorrent是一个多点下载的源码公开的P2P软件,使用非常方便,就像一个浏览器插件,很适合新 发布的热门下载。其...

    1.   BT下载原理简介

    BT是一种用来进行文件下载的共享软件(不是“变态”),全名叫"BitTorrent"。BitTorrent是一个多点下载的源码公开的P2P软件,使用非常方便,就像一个浏览器插件,很适合新

    发布的热门下载。其特点简单的说就是:下载的人越多,速度越快 。

     

    一般来讲,下载是把文件由服务器端传送到客户端,例如FTP,HTTP,PUB等等。工作原理如下图:

    但是这样就出现了一个问题,随着用户的增多,对带宽的要求也随之增多,用户过多就会造成瓶颈,而且搞不好还会把服务器挂掉,所以很多的服务器会都有用户人数的限制,下载速度的限制,这样就给用户造成了诸多的不便。

     

    但BT就不同,用BT下载反而是用户越多,下载越快,这是为什么呢?因为BT用的是一种传销的方式来达到共享的,工作原理如下图:

    BT首先在上传者端把一个文件分成了Z个部分,甲在服务器随机下载了第N各部分,乙在服务器随机下载了第M个部分,这样甲的BT就会根据情况到乙的电脑上去拿乙已经下载好的M部分,乙的BT就会根据情况去到甲的电脑上去拿甲已经下载好的N部分,这样就不但减轻了服务器端得负荷,也加快了用户方(甲乙)的下载速度,效率也提高了,更同样减少了地域之间的限制。比如说丙要连到服务器去下载的话可能才几K,但是要是到甲和乙的电脑上去拿就快得多了。所以说用的人越多,下载的人越多,大家也就越快,BT的优越性就在这里。而且,在你下载的同时,你也在上传(别人从你的电脑上拿那个文件的某个部分),所以说在享受别人提供的下载的同时,你也在贡献。

    2.  BT协议介绍

    2.1.  综述

    BitTorrent(简称BT,比特洪流)是一个文件分发协议。它通过URL识别内容并且和网络无缝结合。它和普通HTTP协议相比优势在于,同时下载一个文件的下载者在下载同时不断互相上传数据,使文件源可以在很有限的负载增加的情况下支持大量下载者同时下载。

     

    一个BT式文件分发需要以下实体:

    l  一个普通网络服务器

    l  一个静态元信息文件('Metainfo' file)

    l  一个BT Tracker

    l  一个“原始”下载者('original'downloader)

    l  网络终端的浏览器

    l  网络终端的下载者

    这里假设理想情况下一个文件有多个网络终端的下载者。

     

    架设一个BT服务器步骤如下:

    1.开始运行Tracker(已运行的跳过这一步);

    2.开始运行普通网络服务器程序,如Apache,已运行的跳过这一步;

    3.在网络服务器上将.torrent文件关联到Mime类型application/x-bittorrent(已做过关联的跳过这一步);

    4.用要发布的完整文件和Tracker的URL创建一个元信息文件(.torrent文件);

    5.将元信息文件放置在网络服务器上;

    6.在网页上发布元信息文件(.torrent文件)的链接;

    7.原始下载者开始提供完整的文件(原本)。

     

    通过BT下载步骤如下:

    1.安装BT客户端程序(已安装的跳过这一步);

    2.上网;

    3.点击一个链到.torrent文件的链接;

    4.选择本地存储路径,或者选定未完成的下载的续传;

    5.等待下载完成;

    6.下载者退出下载(之前下载者不停止上传)。

    连通性如下:

    l  网站正常提供静态文件,并且启动客户端上的BitTorrenthelper(这里说官方的客户端程序);

    l  Tracker即时接收所有下载者信息,并且给每个下载者一份随机的peer列表。通过HTTP或HTTPS协议实现;

    l  下载者定时向Tracker登记,使之知道每个人的进度,并和那些直接连接上的peer互相进行数据的上传下载。这些连接遵循BitTorrent peer协议,通过TCP协议进行通信。

    l  原始下载者只上传不下载,他拥有整个文件,所以向网络中传输完文件的所有部分是很必要的。在一些人气很旺的下载中,原始下载者经常可以在较短的时间后退出上传,因为许多下载已经完成,并且可能依然在运行(此时相当于替原始下载者接着提供上传)。

     

    2.2.  B编码及元信息文件

    元信息文件和Tracker的回应信息都以一种简单高效可扩展的格式(Bencoding,B编码格式)传送。B编码过的信息就是字典和列表的嵌套(像在Python中一样),这些字典和列表包含字符串和整型数据。它的可扩展性是因为字典中存在被忽略的关键值(key),所以附加可选的关键值也可以在以后添加。

    B编码的规则如下:

    l  字符串表示为前缀十进制的字符串长度加冒号再跟原字符串。
    如4:spam就相当于'spam'。

    l  整型数据的表示是前面加'i'后面加'e'中间是十进制数,如i3e就相当于3,i-3e就是-3。整型数据没有长度限制。i-0e无效,所有以'i0'开头的除了代表0的i0e,其它都无效。

    l  列表编码为一个'l'开头,后面跟它所包含的项目(已经被编码过)最后加一个'e',比如 l4:spam4:eggse 就等于 ['spam', 'eggs'] 。

    l  字典编码为一个'd'开头,后面是关键值(key)及其对应值轮流出现,最后加一个'e'。如:d3:cow3:moo4:spam4:eggse 相当于 {'cow': 'moo', 'spam': 'eggs'} d4:spaml1:a1:bee相当于 {'spam':['a', 'b']} 关键值必须是处理过的字符串(用原始字符串编码的,而不是数字字母混合编码的)。

     

    元信息文件就是B编码的有以下关键值的字典(括号里面的字是简译的关键值中文意思,不作为关键值一部分,后同):

    announce(声明):Tracker的URL。

    info(信息):此关键值对应一个包含以下关键值的字典。

    l  关键值name对应一个字符串,代表默认的下载文件(或保存时目录)的名字。它是纯粹建议性的。

    l  关键值piece length(块长)对应文件分割成的块的字节数。出于传输需要,文件被分割成大小相等的块,除了最后一块可能会被文件尾截断而小一些(剩下的大小不足一个块长)。块长一般来说是2的权值,大部分设块长为256K即2的18次幂(BitTorrent官方版3.2版本以前的默认值是1M,2的20次幂)。

    l  关键值pieces(块)对应一个字符串,此字符串长度是20的倍数。它可以再分成每20字节一段的多个字符串,分别对应块在相应索引中的SHA1校验码(hash)。

    l  关键值length(长度)和files(文件),它们不能同时出现也不能都不出现。当length出现说明这个元信息文件只是提供单文件下载(the single filecase),否则说明是多文件下载(themulti-file case),载到一个目录里。

    单文件情况下,length对应文件长度的字节数。多文件情况被看作是把许多单文件按文件列表中的顺序连成一个大文件下载,

    而关键值files就对应文件列表,是一个字典的列表,其中每个字典又包含以下关键值:

    l  length(长度):文件长度的字节数。

    l  path(路径):一个包含字符串的列表,字符串就是子目录名,最后一项的字符串就是文件本身的文件名。(一个长度为零的length表单是错误的。)

     

    2.3.  Tracker HTTP协议

    Tracker质询是双向的。Tracker通过HTTP协议的GET参数获得信息,然后返回一个B编码后的信息。尽管Tracker需要在自己的服务器端执行,但它运行流畅就像Apache的一个嵌入模块。

     

    Tracker的GET请求有如下关键值:

    l  info_hash
    20字节长的SHA1验证码,就是元信息文件中的info值中分出来的字符串进行B编码以后的信息,是元信息文件的一个支链。这个值必须是自动转换的。

    l  peer_id
    一个20字节长的字符串,是每个用户开始新下载时随机生成的ID。这个值也必须是自动转换的。

    l  ip

    一个非强制性的参数(可有可无)给出peer所在的IP(或DNS主机名),一般是和Tracker同机器的原始下载者得到后用来散发文件。

    l  port

    监听端口,官方默认的是从6881端口开始试,如果端口被占用则依次向后推一个端口直到找到空闲端口,到6889端口没找到就放弃。

    l  uploaded

    目前总上传量,编码为十进制ASCII码。

    l  downloaded

    目前总下载量,编码为十进制ASCII码。

    l  left

    还要下载的字节数,编码为十进制ASCII码。这个数不能通过文件长度和已下载数出来的,因为文件可能是续传的,还可能有一些已经下载的数据不能通过完整性检查必须被重新下载。

    l  event

    这是个非强制性的关键值,有started,completed或stopped(或empty,等同于未运行)三种值。如果没有这个关键值,说明下载状态的声明也会从下载者那里定期发出。首次开始下载时发出started值,完成下载时发出completed。当文件完整后再开始,没有completed发出,下载者中止下载时发出stopped。

     

    Tracker的回应也是B编码字典。如果Tracker回应中有关键值failure reason(失败原因),则对应一个人易读懂的字符串信息,解释质询失败的原因,不需要其它关键值。

    否则,回应必须有两个关键值:

    l  interval(间隔):对应下载者定期发出请求的间隔秒数;

    l  peers,peers是个包含字典的列表,每个字典对应一个peer,里面包含关键值peer id、ip和port,分别对应peer自选ID、IP地址或DNS主机名的字符串以及端口号。记住假如下载者发生一个意外事件或者想要更多的peer列表,下载者会不定期重发请求。

    如果你想对元信息文件或者Tracker质询进行扩展,请与Bram Cohen进行协调,确保所有扩展都兼容。

    (downloader 通过 HTTP 的GET 命令来向 tracker 发送查询请求,tracker 响应一个peers 的列表)

     

    2.4.  BitTorrent peer protocol

        BT对等协议基于TCP,它很有效率,并不需要设置任何socket选项。(译注:BT对等协议指的是peer与peer之间交换信息的协议)

    对等的两个连接是对称的,消息在两个方向上同样的传递,数据也可以在任何一个方向上流动。一旦某个peer下载完了一个片断,并且也检查了它的完整性,那么它就向它所有的peers宣布它拥有了这个片断。

    Peer之间的上载和下载关系有其简单的机制来保证。

    在连接的任一端包含两个bit位用来指示连接状态:choked or not、interested or not。

    连接的任何一端都包含两比特的状态信息:choked or not(是否choked),interested or not(是否感兴趣)。Choking是通知对方,没有数据可以发送,除非unchoking发生。Choking的原因以及技术后文解释。

    一旦一端状态变为interested,而另一端变为非choking,那么数据传输就开始了。(也就是说,一个peer,如果想从它的某个peer那里得到数据,那么,它首先必须将它两之间的连接设置为 interested,其实就是发一个消息过去,而另一个peer,要检查它是否应该给这个家伙发送数据,如果它对这个家伙是 unchoke,那么就可以给它发数据,否则还是不能给它数据)Interested状态必须一直被设置――任何时候。要用点技巧才能比较好的实现这个目的,但它使得下载者能够立刻知道哪些peers将开始下载。

    对等协议

    由一个握手开始,后面是循环的消息流,每个消息的前面,都有一个数字来表示消息的长度。握手的过程

    首先是先发送19,跟着是字符串“BitTorrent protocol”。19就是“Bittorrentprotocol”的长度。后续的所有的整数,都采用big-endian 来编码为4个字节在协议名称之后,是8个保留的字节,这些字节当前都设置为0。接下来对元文件中的 info 信息,通过 sha1 计算后得到的hash值,20个字节长。接收消息方,也会对 info 进行一个 hash 运算,如果这两个结果不一样,那么说明对方要的文件,并不是自己所要提供的,所以切断连接。接下来是20个字节的 peer id。

    接下来就是以消息长度开始的消息流,这是可选的。长度为0 的消息,用于保持连接的活动状态,被忽略。通常每隔2分钟发送一个这样的消息。

    其它类型的消息,都有一个字节长的消息类型,可能的值如下:

    ‘choke’, ‘unchoe’, ‘interested’, not interested’类型的消息不再含有其它数据了。

    ‘bitfield’永远也仅仅是第一个被发送的消息。它的数据实际是一个位图,如果downloader已经发送了某个片断,那么对应的位置1,否则置0。Downloaders如果一个片断也没有,可以忽略这个消息。(通过这个消息,能知道什么了?)

    ‘have’类型的消息,后面的数据是一个简单的数字,它是下载者刚刚下载完并检查过完整性的片断的索引。(由此,可以看到,peer通过这种消息,很快就相互了解了谁都有什么片断)

    ‘request’类型的消息,后面包含索引、开始位置和长度)长度是2的幂。当前的实现都用的是215 ,而关闭连接的时候,请求一个超过2 17的长度。(这种类型的消息,就是当一个peer希望另一个peer给它提供片断的时候,发出的请求)

    ‘cancel’类型的消息,它的数据和’request’消息一样。它们通常只在下载趋向完成的时候发送,也就是在‘结束模式“阶段发送。在一次下载接近完成的时候,最后的几个片断需要很长时间才能下载完。为了确保最后几个片断尽快下载完,它向所有的peers发送下载请求。为了保证这不带来可怕的低效,一旦某个片断下载完成,它就其它peers发送’cancel’消息。(意思就是说,我不要这个片断了,你要是准备好了,也不用给我发了,可以想象,如果对方还是把数据发送过来了,那么这边必须忽略这些重复的数据)。

    ‘piece’类型的消息,后面保护索引号、开始位置和实际的数据。注意,这种类型的消息和 ‘request’消息之间有潜在的联系(译注:因为通常有了request消息之后,才会响应‘piece’消息)。如果choke和unchoke消息发送的过于迅速,或者,传输速度变的很慢,那么可能会读到一些并不是所期望的片断。( 也就是说,有时候读到了一些片断,但这些片断并不是所想要的)

    Choking 算法

    BT下载过程中没有一个统一的资源调度,所有的下载者都希望能够尽可能的提高下载速度,对等体之间从任何对端下载,同时礼尚往来的进行上传,就是说,在下载上传形成对子,对于不合作方,则在上传方向进行Choke(阻塞),比如我和你之间形成Pair,但是你只想下载不想上传,则把你Choke。Choking用于阶段性的阻止上载,但是在Choking结束后,上传可以继续进行。

    Choking算法不是BT链路协议的技术组成,但是对提高下载效率很有作用,一个好的Choking应该能够利用各种资源,保障参加下载的每个用户获得理想的下载速度,同时杜绝有人只下载不上载。

    每一个BT客户一般会不阻塞一定数量的对等体,所以应该决定哪些Peer应该不去阻塞,这个决定是是基于当前的下载速度,为提高效率,BT对20S内的下载速度进行计算,同时为避免频繁的计算在成效率下降,BT每隔10S进行一次计算,10S的时间也足够TCP机制达到最高的下载速度。另外,为了始终选择到能够提供最大下载速度的Peer,BT会使用一种‘optimistic unchoke’机制,每隔30s就循环的地Choke一个Peer,这样有机会去查询是否还有更好的下载对象。

     

    2.5.  BT限流的解决方案

    1、利用客户端与客户端连接的端口号:6m## o
    BT实现中,提供了一个端口范围(6881~6889),如果通过这个范围的所有端口来限

    流,一些运营商曾采用这种方法来封杀BT,如长城宽带和重庆网通曾采用这种方法来封堵

    BT。

        这种方法在前期一定程度上是可用的;因为:BT的官方网站提供了一个默认的监听端

    口范围(6881~6889)。但是,这种方法比较片面,因为通过一定的技术手段可以改变这个

    端口范围(网上有);另外,BT的客户端较多,它们所采用的端口范围及实现方式各不相

    同(见下表)。

                

    BT客户端

    端口范围

    贪婪ABC

    可以手工设置

    BitComet

    没有公开

    BitTorrent Plus

    可以手工设置

    BitTorrent

    6881~6889

    比特精灵Bit Spirit

    16881

      

       所以,采用这种方来对BT进行限流效果不是很好。

         

    2、对协议进行分析

    对所有的 ip 包都进行检查,如果 ip 包的数据区包含 BT 对等协议的特征“BitTorrent

    protocol”(BT协议规定),那么可以标识这是一个BT流,标识了以后,就可以采取相应的措施(CAR)对它进行限流。

    以下是通过对几种BT客户端的报文分析来验证上述方案。

    客户端:贪婪ABC

     

           由上图可以看贪婪ABC建立连接的过程是:

    1、 TCP的三次握手。

    2、 握手成功后,紧接着是BT对等协议的二次握手。

    3、 握手成功后,进行数据的传输。

    由图分析可知:

    1、 TCP三此握手与BT对等协议二次握手用的端口号都是一样的,并且以后得数据传输用的端口号也和前两者是一样的。

    2、 TCP头之后的BT对等协议的报文格式对应如下:

    19-对应图中的“13(十六进制)”

    ‘B’- 对应图中的“42(十六进制)”以后对应“Bittorrentprotocol”

    八个保留字节-对应图中的八个“00(十六进制)”

    info 信息-对应的报文有20个字节长

    总长为48字节

     

    客户端:BitTorrent Plus! 2

    由上图可以看BitTorrentPlus! 2建立连接的过程是:

    1、 TCP的三次握手。

    2、 握手成功后,紧接着是BT对等协议的二次握手。

    3、 握手成功后,进行数据的传输。

    由图分析可知:

    1、 TCP三此握手与BT对等协议二次握手用的端口号都是一样的,并且以后得数据传输用的端口号也和前两者是一样的。

    2、 TCP头之后的BT对等协议的报文格式对应如下:

    19-对应图中的“13(十六进制)”

    ‘B’- 对应图中的“42(十六进制)”以后对应“Bittorrentprotocol”

    八个保留字节-对应图中的八个“00(十六进制)”

    info 信息-对应的报文有20个字节长

    peer id-20个字节

    总长为68字节

     

     

     

    客户端:BitComet

     

    由上图可以看BitTorrentPlus! 2建立连接的过程是:

    1、TCP的三次握手。

    2、握手成功后,紧接着是BT对等协议的二次握手。

    3、握手成功后,进行数据的传输(图中显示握手没有成功)。

    由图分析可知:

    1、 TCP三此握手与BT对等协议二次握手用的端口号都是一样的,并且以后得数据传输用的端口号也和前两者是一样的。

    2、 TCP头之后的BT对等协议的报文格式对应如下:

    19-对应图中的“13(十六进制)”

    ‘B’- 对应图中的“42(十六进制)”以后对应“Bittorrentprotocol”

    八个保留字节-对应图中的八个“00(十六进制)”

    info 信息-对应的报文有20个字节长

    peer id-20个字节

    总长为68字节

     

    总结:

        1、三个不同客户端的报文验证了BT对等协议的连接过程是:

    (1)TCP的三次握手。

    (2)握手成功后,紧接着是BT对等协议的二次握手。

    (3)握手成功后,进行数据的传输。

    2、TCP三此握手与BT对等协议二次握手用的端口号都是一样的,并且以后得数据传输用的端口号也和前两者是一样的。

    3、TCP头之后的BT对等协议的报文格式对应如下:

    19-对应图中的“13(十六进制)”

    ‘B’- 对应图中的“42(十六进制)”以后对应“Bittorrentprotocol”

    八个保留字节-对应图中的八个“00(十六进制)”

    info 信息-对应的报文有20个字节长

     

     

    展开全文
  • AR--基本原理实现科普

    2017-12-10 17:10:08
    本文章转载自,ARChina,尊重原创; ...AR,即增强现实技术,它的出现意味着能将计算机技术带到现实当中来,能使科技更“贴近”人们的现实世界的生活,被誉为可能是代替智能手机的,未来的下一个平台。...

    本文章转载自,ARChina,尊重原创;

    AR,即增强现实技术,它的出现意味着能将计算机技术带到现实当中来,能使科技更“贴近”人们的现实世界的生活,被誉为可能是代替智能手机的,未来的下一个平台。

    AR的基本定义

    AR是对现实的增强,是虚拟影像和现实影像的融合。AR技术具有虚拟现实融合、实时交互、三维注册三大特征。其中三维注册是其中最重要的特征。
    三维注册(也叫三维配准)强调计算机生成物和现实环境的对应关系,虚拟的物体和现实环境的三维位置和大小必须完美融合。

    观察科技演进的历史会发现从一开始的工业革命,到现在的信息技术革命以及正在蓬勃发展必定会兴起的认知革命,科技的发展其实意味着现实和虚拟的更好融合。而AR正是这种融合时代的代表性技术。

    AR/VR技术的起源,可追溯到Morton Heilig在上个世纪五、六十年代所发明的Sensorama Stimulator。他是一名哲学家、电影制作人和发明家。他利用在电影上的拍摄经验设计出了图中这个叫Sensorama Stimulator的机器。Sensorama Stimulator可使用图像、声音、香味和震动,让用户感受在纽约布鲁克林街道上骑着摩托车风驰电掣的场景。这个发明在当时非常超前。以此为契机,AR也展开了它的发展史。来看看各时期AR的发展里程碑吧。

    很多人对于VR、AR、MR等概念还是处于混淆的状态,那么到底如何区别这三者呢?

    AR和VR的区别,除了从硬件和技术等方面有区别,归根到底是要看到底是对现实的增强还是完全的虚拟化。如若是让人们完全投入进入虚拟世界的沉浸感,则是VR。(如超级学校霸王电影里面2人进入街机里面玩超级玛丽),如若是让虚拟的事物和现实接轨,则是AR。(如超级学校霸王电影里面虚拟世界的英雄形象进入真实世界惩罚坏人)

    而MR则是让2者完全的融合,“实时的”进行虚拟和真实的交互。是最终的发展形态。混合现实是实现虚拟和现实的完美融合。目前的MR和AR可以从设备上来进行区分,有以下2点不同。

    比如如果虚拟物体的位置能够随设备而移动,做到随身随行,则是MR的实现,如果不能移动,定位在三维世界中,你离开了,虚拟物体还是摆放在刚刚的位置,则是AR。而MR的最高形态,虚拟和现实已经融为一体,有一致的体验,不容易被区分了。

    AR的工作原理

    在介绍AR的工作原理之前,我们先通过一个例子,让大家有一个简单的认识。

    在2009年2月的TED大会上,帕蒂•梅斯(Pattie Maes)和普拉纳夫•米斯特莱(Pranav Mistry)展示了他们研发的AR系统。该系统属于麻省理工学院媒体实验室流体界面小组的研究成果之,他们称之为SixthSense(第六感)。它依靠众多AR系统中常见的一些基本元件来工作:摄像头、小型投影仪、智能手机和镜子。
    可以点击这个,查看她的研究。

    上图是一个典型的AR系统结构,由虚拟场景生成单元以及显示器和头盔等交互设备构成。其中虚拟场景生成单元负责虚拟场景的建模、管理、绘制和其它外设的管理;显示器负责显示虚拟和现实融合后的信号;头部跟踪设备跟踪用户视线变化;交互设备用于实现感官信号及环境控制操作信号的输入输出。
    首先摄像头和传感器采集真实场景的视频或者图像,传入后台的处理单元对其进行分析和重构,并结合头部跟踪设备的数据来分析虚拟场景和真实场景的相对位置,实现坐标系的对齐并进行虚拟场景的融合计算;交互设备采集外部控制信号,实现对虚实结合场景的交互操作。系统融合后的信息会实时地显示在显示器中,展现在人的视野中。

    为了保持现实和虚拟的对准,跟踪和识别的技术就显得尤为重要。检测和识别技术包含图像匹配和识别以及语义检测和识别这2点。

    跟踪定位技术则分为基于硬件的定位技术和基于视觉的定位技术2点。其中基于视觉的跟踪定位技术最核心的技术,也是主流技术。基于视觉的三维配准包含了这3个发展阶段。


    二维图片定位
    二维图片定位是指基于平面物体的识别和定位,比如现在市场上很常见的一些AR技术图书,又或则是APP应用。这种技术是将现实世界的一张图片作为定位的锚点,计算机生成的虚拟物体会围绕这个定位点,融入现实环境中。目前基于图片定位的AR是最为成熟的技术,广泛运用在各个地方。目前用在儿童教育图书方面,会比较多。

    三维物体定位
    然扩展当属三维物体。一些简单的规则三维物体,比如圆柱状可乐罐,同样可以作为虚实结合的载体。对于一些特定的非规则物体,比如人脸,由于有多年的研究积累和海量的数据支持,已经有很多算法可以进行实时精准对齐。

    基于SLAM的三维环境定位
    对于三维环境的动态的实时的理解是当前AR在技术研究方面最活跃的问题。其核心就是最近火热的“即时定位与地图构建”(SLAM,SimultaneouslyLocalization And Mapping),在无人车,无人机和机器人等领域也起着核心作用。AR中的SLAM比其他领域中一般难度要大很多,主要是因为AR赖以依存的移动端的计算能力和资源比起其他领域来说要弱很多。目前在AR中还是以视觉SLAM为主,其他传感器为辅的局面,尽管这个情况正在改变。

    标准的视觉SLAM问题可以这么描述为:把你空投到一个陌生的环境中,你要解决“我在哪”的问题。这里的“我”基本上等同于相机或者眼睛(因为单目,即单相机,请把自己想象成独眼龙),“在”就是要定位(就是localization),“哪”需要一张本来不存在的需要你来构建的地图(就是mapping)。你带着一只眼睛一边走,一边对周边环境进行理解(建图),一边确定在所建地图中的位置(定位),这就是SLAM了。换句话说,在走的过程中,一方面把所见到(相机拍到)的地方连起来成地图,另一方面把走的轨迹在地图上找到。 

    展开全文
  • 前几天在给人解释Windows是如何通过Kerberos进行Authentication的时候,讲了半天也别把那位老兄讲明白,还差点把自己给绕进去。后来想想原因有以下两点:对于一个没有完全不了解Kerberos的人来说,Kerberos的整个...
  • HTTP原理

    2019-02-25 20:05:56
    前言 HTTP(HyperText Transfer Protocol,超文本传输协议)是 TCP/IP 四层模型中的应用层的其中一种协议。 HTTP 的历史 HTTP 于 1990 年问世,被称为 HTTP/0.9; HTTP/1.0 作为标准被公布是在 1996 年的 5 月,该... ...
  • 官方文档地址: https://docs.spring.io/spring/docs/4.3.21.RELEASE/spring-framework-reference/htmlsingle/#transaction 我翻译的地址: ... 我的疑惑如下: SPRING事物原理 @Tran...
  • 编程界的小学生一、是什么二、那还要nginx干嘛?三、LVS术语四、三种模型0、补充:路由器1、D-NAT2、DR3、TUN4、三种模型对比 一、是什么 负载均衡调度器。那么和nginx区别是啥? 首先nginx是七层的,lvs是四层的...
  • synchronize关键字synchronize的使用synchronize的原理 synchronize的使用 我们知道,当出现race condition的时候,应用就不会同步。 举个例子: package sync; import org.junit.Test; import java.util....
  • ZooKeeper原理解析

    2020-02-07 09:48:03
    分布式协调服务组件zookeeper的介绍、特点及原理解析
  • 原理图设置基础 原理图的设置 在原理图的绘制过程中,各个元件的大小是不能调整的。如果原理图纸张放不下,需要对图纸进行设置:设计->文档选项,右键->选项->文档选项。 同时,在原理图...
  • ①HashMap的工作原理 HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象。当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存值对象。当获取...
  • LoRa无线通信设计(一)原理 引言 1901年,古列尔默.马可尼把长波无线电信号从Cornwall(康沃尔,位于英国的西南部)跨过大西洋传送到3200公里之外的Newfoundland(加拿大的纽芬兰岛),至此人类进入了无线通信时代。...
  • 引言 不论在工作中,亦或是求职面试...当然,作为Spring Boot的精髓,自动配置原理的工作过程往往只有在“面试”的时候才能用得上,但是如果在工作中你能够深入的理解Spring Boot的自动配置原理,将无往不利。 Spr...
  • 原理图如下: SHR(逻辑右移):指令使目的操作数逻辑右移一位,最高位用 0 填充,最低位移入进位标志位,而进位标志位中原来的数值被丢弃。原理图如下: SAL(算数左移):指令使目的操作数算数左移一位,最低位...
  • 单片机:单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、... 先上原理图和PCB,原理介绍...
  • 作为一名计算机专业的学生,计算机组成原理、计算机网络、操作系统这三门课程可以说是专业核心基础课,是至关重要的,其内容是一名合格的coder所必备的知识集;非科班出身的程序员要是想要有所提升,也需要认真学习...
  • 认识CPU的工作原理

    2019-04-07 22:10:36
    学习CPU的工作原理 在了解CPU的工作原理之前,先简单谈谈CPU是如何生产出来的。 CPU是在特别纯净的硅材料上制造的。一个CPU的芯片包含上百万个精巧的晶体管。人们在一块指甲盖大小的硅片上,用化学的方法蚀刻或...
  • 直方图均衡化的数学原理直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度...
  • 手机摄像头测距原理

    2017-01-06 15:48:51
    手机摄像头测距原理
1 2 3 4 5 ... 20
收藏数 2,623,639
精华内容 1,049,455
关键字:

原理