求职简历网 > 知识 >

连想

来源:求职简历网时间:2024-03-10 08:26:15编辑:皮带君

联想与想象有什么区别,有什么共同点?

一、区别如下:1、意思不同:联想指由于某人或某事物而想起其他相关的人或事物,想像指想出不在眼前的具体形象或情景。2、参照物不同:联想必须是从一个现有的事物出发,比如看到“红色”这个词,有人会想到革命;想象是可以没有任何参照物的 。3、性质不同:联想,是一种心理活动的方式,也是一种重要的构思方式。想像,是一种有目的、创造性的思维活动。二、共同点:都是通过思维活动构想出不存在于眼前的事物或情景。扩展资料:联想和想象的区别举例说明:1、如果看到王维的诗就想起了自己曾经看到过的一幅画,这是联想。2、如果看到王维的诗句,就在脑海中产生了画面感,如读到“大漠孤烟直,长河落日圆”就仿佛看到了塞外边陲的风光,大漠、孤烟、长河、落日等形象是之前在图片或者电视上看见过的,是头脑中存储的表象。当据王维的诗句把它们组合到一起形成了一幅画面,这个就是创造出新形象的过程。所以苏轼评价王维的画“诗中有画”实质上是在脑海中产生了画面感,因此属于想象而非联想。参考资料:百度百科-联想百度百科-想象

什么叫联想,什么叫想像,两者有什么区别?

联想是因一事物而想起与之有关事物的思想活动。如此情此景,让人联想起杜甫的诗句“落日平台上,春风啜茗时”。想像是设想的意思。如透过这些蛛丝马迹的线索,我们可以约略想像原始人的生活。区别在于“联想”指由于某人或某事物而想起其他相关的人或事物,“想像”指想出不在眼前的具体形象或情景。“想像”和“联想”是有交集但又有不同的,而且有时候会混用,“想像”可以无限制,“联想”则必须是从一个现有的事物出发 “联想”有时候可以从一个现有事物出发到另一个现有事物,“想像”则一般是限定为一个虚构的目标。联想,是一种心理活动的方式,也是一种重要的构思方式。它的特点是,从某一事物想到与之有一定联系的另一事物。我们在生活中,随时随地会产生联想。一提到“秋风”,往往立刻会想到“落叶”,为什么会想到“落叶”呢?因为“秋风”和“落叶”不但在时空上往往相伴出现,而且它们之间还有一定的因果关系,这就是“相关联想”和“因果联想”。我们好把小朋友比作“花朵”,因为花朵的鲜艳、惹人喜爱,和小朋友有相似之处,这就是“相似联想”。当我们提到被父母遗弃的孤儿时,会自然想到我们在父母身边的幸福,这就是“对比联想”。我们看到一位慈祥的女教师时,往往会想到妈妈,因为她们在某些方面相近,对我们都是一样的关怀、体贴,这就又是“相近联想”了。由此可见,“相关”“因果”“相似”“对比”“相近”,就是一事物与另一事物的联系,这种联系就是“联想的桥梁”。 想像,是一种有目的、创造性的思维活动。想像是利用我们头脑仓库中所存储的已有的信息(平常观察的事物和知识经验等,金钊作文中就利用了“穿错鞋”这一已有的信息),构筑新的形象的心理活动(金钊作文中就构筑了张叔叔的一个笑话)。比如,当你看完一本科幻小说,被其中惊险迷离的情节所吸引,仿佛自己也乘坐宇宙飞船来到茫茫宇宙中和外星人交谈。再比如,当你听到一首优美的乐曲,你会想到美丽的草原、蓝蓝的天空。这时你头脑中的形象,就是你想像的结果。 拓展资料:联想是由一事物想到另一事物,内容相对比较单薄,一般不出现具体的形象化的情景描写,有的仅仅是一个简单的想法。例如《菩萨蛮·大柏地》中的“赤橙黄绿青蓝紫”,这是眼前看到的实景(雨后的彩虹);“谁持彩练当空舞”,这是作者(毛泽东)由此而产生的联想。想象虽然也是由具体事物引起的,但设想(假想)出来的内容相对比较丰富,一般都有具体的形象化的情景描写,而这些形象化的情景是眼前看不到却又合情合理的。例如《卖火柴的小女孩》中写小女孩在又冷又黑的大年夜到街上卖火柴,实在受不住饥饿和寒冷了,就坐在墙角下,点燃了一根又一根火柴,终于冻死在街头。

关于三连音怎样理解

三连音就是在原来时值的位置上,均等地奏出3个音来。
具体理解:
1、三连音,即是三等分1拍、2拍或4拍,每个音响1/3拍、2/3拍或4/3拍。这是一种典型的节奏变化,乐曲进行时,突然的三连音将给人节奏“错位”、不稳定的感觉。
2、乐谱表示为连音线中间有个“3”的标记。实际演奏中,3个音往往不是完全平均化的“三等分”,一般,第一个音的时值要稍微延长一点,这样,错位和倾向稳定的感觉会更强烈。
3、三连音的时值,为三代二,三连音中的任一音符为单位乘以2,即为此三连音的总时值。


如何理解连接跟踪机制

  连接跟踪定义很简单:用来记录和跟踪连接的状态。

  为什么又需要连接跟踪功能呢?因为它是状态防火墙和NAT的实现基础。

  Neftiler为了实现基于数据连接状态侦测的状态防火墙功能和NAT地址转换功能才开发出了连接跟踪这套机制。那就意思是说:如果编译内核时开启了连接跟踪选项,那么Linux系统就会为它收到的每个数据包维持一个连接状态用于记录这条数据连接的状态。接下来我们就来研究一下Netfilter的连接跟踪的设计思想和实现方式。

  之前有一副图,我们可以很明确的看到:用于实现连接跟踪入口的hook函数以较高的优先级分别被注册到了netfitler的NF_IP_PRE_ROUTING和NF_IP_LOCAL_OUT两个hook点上;用于实现连接跟踪出口的hook函数以非常低的优先级分别被注册到了netfilter的NF_IP_LOCAL_IN和NF_IP_POST_ROUTING两个hook点上。

  其实PRE_ROUTING和LOCAL_OUT点可以看作是整个netfilter的入口,而POST_ROUTING和LOCAL_IN可以看作是其出口。在只考虑连接跟踪的情况下,一个数据包无外乎有以下三种流程可以走:

  一、发送给本机的数据包

  流程:PRE_ROUTING----LOCAL_IN---本地进程,如果是新的包,在PREROUTING处生成连接记录,通过POSTROUTING后加到hash表

  二、需要本机转发的数据包

  流程:PRE_ROUTING---FORWARD---POST_ROUTING---外出,在PREROUTING处生成连接记录,在LOCAL_IN处把生成的连接记录加到hash表

  三、从本机发出的数据包

  流程:LOCAL_OUT----POST_ROUTING---外出,在LOCAL_OUT处生成连接记录,在POSTROUTING处把生成的连接记录加到hash表。

  我们都知道在INET层用于表示数据包的结构是大名鼎鼎的sk_buff{}(后面简称skb),如果你不幸的没听说过这个东东,那么我强烈的建议你先补一下网络协议栈的基础知识再继续阅读这篇文章。在skb中有个成员指针nfct,类型是struct nf_conntrack{},该结构定义在include/linux/skbuff.h文件中。该结构记录了连接记录被公开应用的计数,也方便其他地方对连接跟踪的引用。连接跟踪在实际应用中一般都通过强制类型转换将nfct转换成指向ip_conntrack{}类型(定义在include/linux/netfilter_ipv4/ip_conntrack.h里)来获取一个数据包所属连接跟踪的状态信息的。即:Neftilter框架用ip_conntrack{}来记录一个数据包与其连接的状态关系。

  同时在include/linux/netfilter_ipv4/ip_conntrack.h文件中还提供了一个非常有用的接口:struct ip_conntrack *ip_conntrack_get(skb, ctinfo)用于获取一个skb的nfct指针,从而得知该数据包的连接状态和该连接状态的相关信息ctinfo。从连接跟踪的角度来看,这个ctinfo表示了每个数据包的几种连接状态:

  l IP_CT_ESTABLISHED

  Packet是一个已建连接的一部分,在其初始方向。

  l IP_CT_RELATED

  Packet属于一个已建连接的相关连接,在其初始方向。

  l IP_CT_NEW

  Packet试图建立新的连接

  l IP_CT_ESTABLISHED+IP_CT_IS_REPLY

  Packet是一个已建连接的一部分,在其响应方向。

  l IP_CT_RELATED+IP_CT_IS_REPLY

  Packet属于一个已建连接的相关连接,在其响应方向。

  在连接跟踪内部,收到的每个skb首先被转换成一个ip_conntrack_tuple{}结构,也就是说ip_conntrack_tuple{}结构才是连接跟踪系统所“认识”的数据包。那么skb和ip_conntrack_tuple{}结构之间是如何转换的呢?这个问题没有一个统一的答案,与具体的协议息息相关。例如,对于TCP/UDP协议,根据“源、目的IP+源、目的端口”再加序列号就可以唯一的标识一个数据包了;对于ICMP协议,根据“源、目的IP+类型+代号”再加序列号才可以唯一确定一个ICMP报文等等。对于诸如像FTP这种应用层的“活动”协议来说情况就更复杂了。本文不试图去分析某种具体协议的连接跟踪实现,而是探究连接跟踪的设计原理和其工作流程,使大家掌握连接跟踪的精髓。因为现在Linux内核更新的太快的都到3.4.x,变化之大啊。就算是2.6.22和2.6.21在连接跟踪这块还是有些区别呢。一旦大家理解了连接跟踪的设计思想,掌握了其神韵,它再怎么也万变不离其宗,再看具体的代码实现时就不会犯迷糊了。俗话说“授人一鱼,不如授人一渔”,我们教给大家的是方法。有了方法再加上自己的勤学苦练,那就成了技能,最后可以使得大家在为自己的协议开发连接跟踪功能时心里有数。这也是我写这个系列博文的初衷和目的。与君共勉。

  在开始分析连接跟踪之前,我们还是站在统帅的角度来俯视一下整个连接跟踪的布局。这里我先用比较粗略的精简流程图为大家做个展示,目的是方便大家理解,好入门。当然,我的理解可能还有不太准确的地方,还请大牛们帮小弟指正。

  我还是重申一下:连接跟踪分入口和出口两个点。谨记:入口时创建连接跟踪记录,出口时将该记录加入到连接跟踪表中。我们分别来看看。
  入口:

  整个入口的流程简述如下:对于每个到来的skb,连接跟踪都将其转换成一个tuple结构,然后用该tuple去查连接跟踪表。如果该类型的数据包没有被跟踪过,将为其在连接跟踪的hash表里建立一个连接记录项,对于已经跟踪过了的数据包则不用此操作。紧接着,调用该报文所属协议的连接跟踪模块的所提供的packet()回调函数,最后根据状态改变连接跟踪记录的状态。

  出口:

  整个出口的流程简述如下:对于每个即将离开Netfilter框架的数据包,如果用于处理该协议类型报文的连接跟踪模块提供了helper函数,那么该数据包首先会被helper函数处理,然后才去判断,如果该报文已经被跟踪过了,那么其所属连接的状态,决定该包是该被丢弃、或是返回协议栈继续传输,又或者将其加入到连接跟踪表中。

  连接跟踪的协议管理:

  我们前面曾说过,不同协议其连接跟踪的实现是不相同的。每种协议如果要开发自己的连接跟踪模块,那么它首先必须实例化一个ip_conntrack_protocol{}结构体类型的变量,对其进行必要的填充,然后调用ip_conntrack_protocol_register()函数将该结构进行注册,其实就是根据协议类型将其设置到全局数组ip_ct_protos[]中的相应位置上。

  ip_ct_protos变量里保存连接跟踪系统当前可以处理的所有协议,协议号作为数组唯一的下标,如下图所示。

  结构体ip_conntrack_protocol{}中的每个成员,内核源码已经做了很详细的注释了,这里我就不一一解释了,在实际开发过程中我们用到了哪些函数再具体分析。

  连接跟踪的辅助模块:

  Netfilter的连接跟踪为我们提供了一个非常有用的功能模块:helper。该模块可以使我们以很小的代价来完成对连接跟踪功能的扩展。这种应用场景需求一般是,当一个数据包即将离开Netfilter框架之前,我们可以对数据包再做一些最后的处理。从前面的图我们也可以看出来,helper模块以较低优先级被注册到了Netfilter的LOCAL_OUT和POST_ROUTING两个hook点上。

  每一个辅助模块都是一个ip_conntrack_helper{}结构体类型的对象。也就是说,如果你所开发的协议需要连接跟踪辅助模块来完成一些工作的话,那么你必须也去实例化一个ip_conntrack_helper{}对象,对其进行填充,最后调用ip_conntrack_helper_register{}函数将你的辅助模块注册到全局变量helpers里,该结构是个双向链表,里面保存了当前已经注册到连接跟踪系统里的所有协议的辅助模块。

  全局helpers变量的定义和初始化在net/netfilter/nf_conntrack_helper.c文件中完成的。

  最后,我们的helpers变量所表示的双向链表一般都是像下图所示的这样子:

  由此我们基本上就可以知道,注册在Netfilter框架里LOCAL_OUT和POST_ROUTING两个hook点上ip_conntrack_help()回调函数所做的事情基本也就很清晰了:那就是通过依次遍历helpers链表,然后调用每个ip_conntrack_helper{}对象的help()函数。

  期望连接:

  Netfilter的连接跟踪为支持诸如FTP这样的“活动”连接提供了一个叫做“期望连接”的机制。我们都知道FTP协议服务端用21端口做命令传输通道,主动模式下服务器用20端口做数据传输通道;被动模式下服务器随机开一个高于1024的端口,然后客户端来连接这个端口开始数据传输。也就是说无论主、被动,都需要两条连接:命令通道的连接和数据通道的连接。连接跟踪在处理这种应用场景时提出了一个“期望连接”的概念,即一条数据连接和另外一条数据连接是相关的,然后对于这种有“相关性”的连接给出自己的解决方案。我们说过,本文不打算分析某种具体协议连接跟踪的实现。接下来我们就来谈谈期望连接。

  每条期望连接都用一个ip_conntrack_expect{}结构体类型的对象来表示,所有的期望连接存储在由全局变量ip_conntrack_expect_list所指向的双向链表中,该链表的结构一般如下:

  结构体ip_conntrack_expect{}中的成员及其意义在内核源码中也做了充分的注释,这里我就不逐一介绍了,等到需要的时候再详细探讨。

  连接跟踪表:

  说了半天终于到我们连接跟踪表抛头露面的时候了。连接跟踪表是一个用于记录所有数据包连接信息的hash散列表,其实连接跟踪表就是一个以数据包的hash值组成的一个双向循环链表数组,每条链表中的每个节点都是ip_conntrack_tuple_hash{}类型的一个对象。连接跟踪表是由一个全局的双向链表指针变量ip_conntrack_hash[]来表示。为了使我们更容易理解ip_conntrack_hash[]这个双向循环链表的数组,我们将前面提到的几个重要的目前还未介绍的结构ip_conntrack_tuple{}、ip_conntrack{}和ip_conntrack_tuple_hash{}分别介绍一下。

  我们可以看到ip_conntrack_tuple_hash{}仅仅是对ip_conntrack_tuple{}的封装而已,将其组织成了一个双向链表结构。因此,在理解层面上我们可以认为它们是同一个东西。

  在分析ip_conntrack{}结构时,我们将前面所有和其相关的数据结构都列出来,方便大家对其理解和记忆。

  参考http://bbs.chinaunix.net/thread-1925862-1-1.html

  该图可是说是连接跟踪部分的数据核心,接下来我们来详细说说ip_conntrack{}结构中相关成员的意义。

  l ct_general:该结构记录了连接记录被公开应用的计数,也方便其他地方对连接跟踪的引用。

  l status:数据包连接的状态,是一个比特位图。

  l timeout:不同协议的每条连接都有默认超时时间,如果在超过了该时间且没有属于某条连接的数据包来刷新该连接跟踪记录,那么会调用这种协议类型提供的超时函数。

  l counters:该成员只有在编译内核时打开了CONFIG_IP_NF_CT_ACCT开完才会存在,代表某条连接所记录的字节数和包数。

  l master:该成员指向另外一个ip_conntrack{}。一般用于期望连接场景。即如果当前连接是另外某条连接的期望连接的话,那么该成员就指向那条我们所属的主连接。

  l helper:如果某种协议提供了扩展模块,就通过该成员来调用扩展模块的功能函数。

  l proto:该结构是ip_conntrack_proto{}类型,和我们前面曾介绍过的用于存储不同协议连接跟踪的ip_conntrack_protocol{}结构不要混淆了。前者是个枚举类型,后者是个结构体类型。这里的proto表示不同协议为了实现其自身的连接跟踪功能而需要的一些额外参数信息。目前这个枚举类型如下:

  如果将来你的协议在实现连接跟踪时也需要一些额外数据,那么可以对该结构进行扩充。

  l help:该成员代表不同的应用为了实现其自身的连接跟踪功能而需要的一些额外参数信息,也是个枚举类型的ip_conntrack_help{}结构,和我们前面刚介绍过的结构体类型ip_conntrack_helpers{}容易混淆。ip_conntrack_proto{}是为协议层需要而存在的,而ip_conntrack_help{}是为应用层需要而存在。

  l tuplehash:该结构是个ip_conntrack_tuple_hash{}类型的数组,大小为2。tuplehash[0]表示一条数据流“初始”方向上的连接情况,tuplehash[1]表示该数据流“应答”方向的响应情况,见上图所示。

  到目前为止,我们已经了解了连接跟踪设计思想和其工作机制:连接跟踪是Netfilter提供的一套基础框架,不同的协议可以根据其自身协议的特殊性在连接跟踪机制的指导和约束下来开发本协议的连接跟踪功能,最后将其交给连接跟踪机制来统一管理。
转载仅供参考,版权属于原作者。祝你愉快,满意请采纳哦


上一篇:statcounter

下一篇:没有了

相关推荐

热门头条