精华内容
下载资源
问答
  • 今天本文主要对于运算放大器和比较器进行了分析对比,并总结出运放与比较主要区别
  • 导读:今天本文主要对于运算放大器和比较器进行了分析对比,并总结出运放与比较主要区别。  运算放大器与比较主要三大区别,放大器大都工作在闭环状态,所以要求闭环后不能自激。而比较器大都工作在...
  • 全触屏分电容触摸屏和电阻触摸屏。电容触摸屏是比较好也比较贵的屏幕,可以用手肉感应,也就是热感应;...今天本文就对电阻式和电容式两种触摸屏的性能进行对比分析,以便大家能够更清晰的认识他们之间的区别
  • 当前主流关系型数据库有Oracle、DB2、Microsoft SQL Server、Microsoft Access、...==========================优缺点分析如下=============================================== nosql和关系型数据库比较? 优点...

    当前主流的关系型数据库Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL等。

    非关系型数据库有 NoSql、Cloudant。

     

    ==========================优缺点分析如下===============================================

    nosql和关系型数据库比较?


    优点:
    1)成本:nosql数据库简单易部署,基本都是开源软件,不需要像使用oracle那样花费大量成本购买使用,相比关系型数据库价格便宜。
    2)查询速度:nosql数据库将数据存储于缓存之中,关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql数据库。
    3)存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础类型。
    4)扩展性:关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难。
    缺点:
    1)维护的工具和资料有限,因为nosql是属于新的技术,不能和关系型数据库10几年的技术同日而语。
    2)不提供对sql的支持,如果不支持sql这样的工业标准,将产生一定用户的学习和使用成本。

    3)不提供关系型数据库对事物的处理。

     

    非关系型数据库与关系型数据库各自的优势

    非关系型数据库的优势:

    1. 性能NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。

    2. 可扩展性同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。

    关系型数据库的优势:

    1. 复杂查询可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。

    2. 事务支持使得对于安全性能很高的数据访问要求得以实现。对于这两类数据库,对方的优势就是自己的弱势,反之亦然。

     

    非关系型数据库的优势和劣势

    关系型数据库把所有的数据都通过行和列的二元表现形式表示出来。

    关系型数据库的优势:

    1. 保持数据的一致性(事务处理)

    2.由于以标准化为前提,数据更新的开销很小(相同的字段基本上都只有一处)

    3. 可以进行Join等复杂查询

    其中能够保持数据的一致性是关系型数据库的最大优势。

    关系型数据库的不足:

    不擅长的处理

    1. 大量数据的写入处理

    2. 为有数据更新的表做索引或表结构(schema)变更

    3. 字段不固定时应用

    4. 对简单查询需要快速返回结果的处理

     

     

    =========================区别如下==============================================

    区别的总结:

    首先一般非关系型数据库是基于CAP模型,而传统的关系型数据库是基于ACID模型
    1.
    数据存储结构:
    首先关系型数据库一般都有固定的表结构,并且需要通过DDL语句来修改表结构,不是很容易进行扩展,而非关系型数据库的存储机制就有很多了,比如基于文档的,K-V键值对的,还有基于图的等,对于数据的格式十分灵活没有固定的表结构,方便扩展,因此如果业务的数据结构并不是固定的或者经常变动比较大的,那么非关系型数据库是个好的选择
    2.
    可扩展性
    传统的关系型数据库给人一种横向扩展难,不好对数据进行分片等,而一些非关系型数据库则原生就支持数据的水平扩展(比如mongodb的sharding机制),并且这可能也是很多NoSQL的一大卖点,其实象Mysql这种关系型数据库的水平扩展也并不是难,即使NoSQL水平扩展容易但对于向跨分片进行joins这种场景都没有什么太好的解决办法,不管是关系型还是非关系型数据库,解决水平扩展或者跨分片Joins这种场景,在应用层和数据库层中间加一层中间件来做数据处理也许是个好的办法
    3.
    数据一致性
    非关系型数据库一般强调的是数据最终一致性,而不没有像ACID一样强调数据的强一致性,从非关系型数据库中读到的有可能还是处于一个中间态的数据,因此如果你的业务对于数据的一致性要求很高,那么非关系型数据库并不一个很好的选择,非关系型数据库可能更多的偏向于OLAP场景,而关系型数据库更多偏向于OLTP场景

     

     

    ==============================应用部分如下分析===============================================

    关系型数据库

    大量数据的写入处理

    读写集中在一个数据库上让数据库不堪重负,大部分网站已使用主从复制技术实现读写分离,以提高读写性能和读库的可扩展性。

    所以在进行大量数据操作时,会使用数据库主从模式。数据的写入由主数据库负责,数据的读入由从数据库负责,可以比较简单地通过增加从数据库来实现规模化,但是数据的写入却完全没有简单的方法来解决规模化问题。

    第一,要想将数据的写入规模化,可以考虑把主数据库从一台增加到两台,作为互相关联复制的二元主数据库使用,确实这样可以把每台主数据库的负荷减少一半,但是更新处理会发生冲突,可能会造成数据的不一致,为了避免这样的问题,需要把对每个表的请求分别分配给合适的主数据库来处理。

    第二,可以考虑把数据库分割开来,分别放在不同的数据库服务器上,比如将不同的表放在不同的数据库服务器上,数据库分割可以减少每台数据库服务器上的数据量,以便减少硬盘IO的输入、输出处理,实现内存上的高速处理。但是由于分别存储字不同服务器上的表之间无法进行Join处理,数据库分割的时候就需要预先考虑这些问题,数据库分割之后,如果一定要进行Join处理,就必须要在程序中进行关联,这是非常困难的。

     

     

    --为有数据更新的表做索引或表结构变更

    在使用关系型数据库时,为了加快查询速度需要创建索引,为了增加必要的字段就一定要改变表结构,为了进行这些处理,需要对表进行共享锁定,这期间数据变更、更新、插入、删除等都是无法进行的。如果需要进行一些耗时操作,例如为数据量比较大的表创建索引或是变更其表结构,就需要特别注意,长时间内数据可能无法进行更新。

     

    --字段不固定时的应用

    如果字段不固定,利用关系型数据库也是比较困难的,有人会说,需要的时候加个字段就可以了,这样的方法也不是不可以,但在实际运用中每次都进行反复的表结构变更是非常痛苦的。你也可以预先设定大量的预备字段,但这样的话,时间一长很容易弄不清除字段和数据的对应状态,即哪个字段保存有哪些数据。

    --对简单查询需要快速返回结果的处理  (这里的“简单”指的是没有复杂的查询条件)

    这一点称不上是缺点,但不管怎样,关系型数据库并不擅长对简单的查询快速返回结果,因为关系型数据库是使用专门的sql语言进行数据读取的,它需要对sql与越南进行解析,同时还有对表的锁定和解锁等这样的额外开销,这里并不是说关系型数据库的速度太慢,而只是想告诉大家若希望对简单查询进行高速处理,则没有必要非使用关系型数据库不可。

     

     

    非关系型(NoSQL)数据库

    关系型数据库应用广泛,能进行事务处理和表连接等复杂查询。相对地,NoSQL数据库只应用在特定领域,基本上不进行复杂的处理,但它恰恰弥补了之前所列举的关系型数据库的不足之处。

    优点:

     易于数据的分散

    各个数据之间存在关联是关系型数据库得名的主要原因,为了进行join处理,关系型数据库不得不把数据存储在同一个服务器内,这不利于数据的分散,这也是关系型数据库并不擅长大数据量的写入处理的原因。相反NoSQL数据库原本就不支持Join处理,各个数据都是独立设计的,很容易把数据分散在多个服务器上,故减少了每个服务器上的数据量,即使要处理大量数据的写入,也变得更加容易,数据的读入操作当然也同样容易。

     

    典型的NoSQL数据库

    临时性键值存储(memcached、Redis)、永久性键值存储(ROMA、Redis)、面向文档的数据库(MongoDB、CouchDB)、面向列的数据库(Cassandra、HBase)

    一、 键值存储

    它的数据是以键值的形式存储的,虽然它的速度非常快,但基本上只能通过键的完全一致查询获取数据,根据数据的保存方式可以分为临时性、永久性和两者兼具 三种。

    (1)临时性

          所谓临时性就是数据有可能丢失,memcached把所有数据都保存在内存中,这样保存和读取的速度非常快,但是当memcached停止时,数据就不存在了。由于数据保存在内存中,所以无法操作超出内存容量的数据,旧数据会丢失。总结来说:

          。在内存中保存数据

          。可以进行非常快速的保存和读取处理

          。数据有可能丢失

     (2)永久性

           所谓永久性就是数据不会丢失,这里的键值存储是把数据保存在硬盘上,与临时性比起来,由于必然要发生对硬盘的IO操作,所以性能上还是有差距的,但数据不会丢失是它最大的优势。总结来说:

           。在硬盘上保存数据

           。可以进行非常快速的保存和读取处理(但无法与memcached相比)

           。数据不会丢失

    (3) 两者兼备

           Redis属于这种类型。Redis有些特殊,临时性和永久性兼具。Redis首先把数据保存在内存中,在满足特定条件(默认是 15分钟一次以上,5分钟内10个以上,1分钟内10000个以上的键发生变更)的时候将数据写入到硬盘中,这样既确保了内存中数据的处理速度,又可以通过写入硬盘来保证数据的永久性,这种类型的数据库特别适合处理数组类型的数据。总结来说:

           。同时在内存和硬盘上保存数据

           。可以进行非常快速的保存和读取处理

           。保存在硬盘上的数据不会消失(可以恢复)

           。适合于处理数组类型的数据

         

    二、面向文档的数据库

       MongoDB、CouchDB属于这种类型,它们属于NoSQL数据库,但与键值存储相异。

       (1)不定义表结构

         即使不定义表结构,也可以像定义了表结构一样使用,还省去了变更表结构的麻烦。

       (2)可以使用复杂的查询条件 

         跟键值存储不同的是,面向文档的数据库可以通过复杂的查询条件来获取数据,虽然不具备事务处理和Join这些关系型数据库所具有的处理能力,但初次以外的其他处理基本上都能实现。

    三、 面向列的数据库

       Cassandra、HBae、HyperTable属于这种类型,由于近年来数据量出现爆发性增长,这种类型的NoSQL数据库尤其引入注目。

       普通的关系型数据库都是以行为单位来存储数据的,擅长以行为单位的读入处理,比如特定条件数据的获取。因此,关系型数据库也被成为面向行的数据库。相反,面向列的数据库是以列为单位来存储数据的,擅长以列为单位读入数据。

    面向列的数据库具有搞扩展性,即使数据增加也不会降低相应的处理速度(特别是写入速度),所以它主要应用于需要处理大量数据的情况。另外,把它作为批处理程序的存储器来对大量数据进行更新也是非常有用的。但由于面向列的数据库跟现行数据库存储的思维方式有很大不同,故应用起来十分困难。

     

    总结:关系型数据库与NoSQL数据库并非对立而是互补的关系,即通常情况下使用关系型数据库,在适合使用NoSQL的时候使用NoSQL数据库,让NoSQL数据库对关系型数据库的不足进行弥补。

    展开全文
  • 今天本文就对电阻式和电容式两种触摸屏的性能进行对比分析,以便大家能够更清晰的认识他们之间的区别。  1.触摸屏的构造及原理  1)电阻式触摸屏的构造及工作原理  首先电阻屏幕分为四线式、五线式等几大类,...
  • TCP和UDP的区别分析与总结引言一、TCP/IP网络模型二、UDP1. 面向无连接2. 有单播,多播,广播的功能3. UDP是面向报文的4. 不可靠性5. 头部开销小,高效传输数据报文三、TCP1. TCP连接过程2. TCP断开链接3. TCP协议的...



    引言

    网络协议是每个前端工程师都必须要掌握的知识,TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP,本文将介绍下这两者以及它们之间的区别。

    一、TCP/IP网络模型

    计算机与网络设备要相互通信,双方就必须基于相同的方法。比如,如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、怎样结束通信等规则都需要事先确定。不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则。而我们就把这种规则称为协议(protocol)。

    TCP/IP 是互联网相关的各类协议族的总称,比如:TCP,UDP,IP,FTP,HTTP,ICMP,SMTP 等都属于 TCP/IP 族内的协议。

    TCP/IP模型是互联网的基础,它是一系列网络协议的总称。这些协议可以划分为四层,分别为链路层、网络层、传输层和应用层。

    • 链路层:负责封装和解封装IP报文,发送和接受ARP/RARP报文等。
    • 网络层:负责路由以及把分组报文发送给目标网络或主机。
    • 传输层:负责对报文进行分组和重组,并以TCP或UDP协议格式封装报文。
    • 应用层:负责向用户提供应用程序,比如HTTP、FTP、Telnet、DNS、SMTP等。

    在网络体系结构中网络通信的建立必须是在通信双方的对等层进行,不能交错。 在整个数据传输过程中,数据在发送端时经过各层时都要附加上相应层的协议头和协议尾(仅数据链路层需要封装协议尾)部分,也就是要对数据进行协议封装,以标识对应层所用的通信协议。接下去介绍TCP/IP 中有两个具有代表性的传输层协议----TCP 和 UDP。

    二、UDP

    UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。

    它有以下几个特点:

    1. 面向无连接

    首先 UDP 是不需要和 TCP一样在发送数据前进行三次握手建立连接的,想发数据就可以开始发送了。并且也只是数据报文的搬运工,不会对数据报文进行任何拆分和拼接操作。

    具体来说就是:
    在发送端,应用层将数据传递给传输层的 UDP 协议,UDP 只会给数据增加一个 UDP 头标识下是 UDP 协议,然后就传递给网络层了;
    在接收端,网络层将数据传递给传输层,UDP 只去除 IP 报文头就传递给应用层,不会任何拼接操作。

    2. 有单播,多播,广播的功能

    UDP 不止支持一对一的传输方式,同样支持一对多,多对多,多对一的方式,也就是说 UDP 提供了单播,多播,广播的功能。

    3. UDP是面向报文的

    发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。因此,应用程序必须选择合适大小的报文

    4. 不可靠性

    首先不可靠性体现在无连接上,通信都不需要建立连接,想发就发,这样的情况肯定不可靠。

    并且收到什么数据就传递什么数据,并且也不会备份数据,发送数据也不会关心对方是否已经正确接收到数据了。

    再者网络环境时好时坏,但是 UDP 因为没有拥塞控制,一直会以恒定的速度发送数据。即使网络条件不好,也不会对发送速率进行调整。这样实现的弊端就是在网络条件不好的情况下可能会导致丢包,但是优点也很明显,在某些实时性要求高的场景(比如电话会议)就需要使用 UDP 而不是 TCP。

    从上面的动态图可以得知,UDP只会把想发的数据报文一股脑的丢给对方,并不在意数据有无安全完整到达。

    5. 头部开销小,高效传输数据报文


    UDP 头部包含了以下几个数据:

    • 两个十六位的端口号,分别为源端口(可选字段)和目标端口
    • 整个数据报文的长度
    • 整个数据报文的检验和(IPv4 可选 字段),该字段用于发现头部信息和数据中的错误

    因此 UDP 的头部开销小,只有八字节,相比 TCP 的至少二十字节要少得多,在传输数据报文时是很高效的

    三、TCP

    当一台计算机想要与另一台计算机通讯时,两台计算机之间的通信需要畅通且可靠,这样才能保证正确收发数据。例如,当你想查看网页或查看电子邮件时,希望完整且按顺序查看网页,而不丢失任何内容。当你下载文件时,希望获得的是完整的文件,而不仅仅是文件的一部分,因为如果数据丢失或乱序,都不是你希望得到的结果,于是就用到了TCP。

    TCP协议全称是传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,由 IETF 的RFC 793定义。TCP 是面向连接的、可靠的流协议。流就是指不间断的数据结构,你可以把它想象成排水管中的水流。

    1. TCP连接过程

    如下图所示,可以看到建立一个TCP连接的过程为(三次握手的过程):

    第一次握手
    客户端向服务端发送连接请求报文段。该报文段中包含自身的数据通讯初始序号。请求发送后,客户端便进入 SYN-SENT 状态。

    第二次握手
    服务端收到连接请求报文段后,如果同意连接,则会发送一个应答,该应答中也会包含自身的数据通讯初始序号,发送完成后便进入 SYN-RECEIVED 状态。

    第三次握手
    当客户端收到连接同意的应答后,还要向服务端发送一个确认报文。客户端发完这个报文段后便进入 ESTABLISHED 状态,服务端收到这个应答后也进入 ESTABLISHED 状态,此时连接建立成功。

    这里可能大家会有个疑惑:为什么 TCP 建立连接需要三次握手,而不是两次?这是因为这是为了防止出现失效的连接请求报文段被服务端接收的情况,从而产生错误。
    在这里插入图片描述

    2. TCP断开链接

    TCP 是全双工的,在断开连接时两端都需要发送 FIN 和 ACK。

    第一次挥手
    若客户端 A 认为数据发送完成,则它需要向服务端 B 发送连接释放请求。

    第二次挥手
    B 收到连接释放请求后,会告诉应用层要释放 TCP 链接。然后会发送 ACK 包,并进入 CLOSE_WAIT 状态,此时表明 A 到 B 的连接已经释放,不再接收 A 发的数据了。但是因为 TCP 连接是双向的,所以 B 仍旧可以发送数据给 A。

    第三次挥手
    B 如果此时还有没发完的数据会继续发送,完毕后会向 A 发送连接释放请求,然后 B 便进入 LAST-ACK 状态。

    第四次挥手
    A 收到释放请求后,向 B 发送确认应答,此时 A 进入 TIME-WAIT 状态。该状态会持续 2MSL(最大段生存期,指报文段在网络中生存的时间,超时会被抛弃) 时间,若该时间段内没有 B 的重发请求的话,就进入 CLOSED 状态。当 B 收到确认应答后,也便进入 CLOSED 状态。

    3. TCP协议的特点

    • 面向连接
      面向连接,是指发送数据之前必须在两端建立连接。建立连接的方法是“三次握手”,这样能建立可靠的连接。建立连接,是为数据的可靠传输打下了基础。

    • 仅支持单播传输
      每条TCP传输连接只能有两个端点,只能进行点对点的数据传输,不支持多播和广播传输方式。

    • 面向字节流
      TCP不像UDP一样那样一个个报文独立地传输,而是在不保留报文边界的情况下以字节流方式进行传输。

    • 可靠传输
      对于可靠传输,判断丢包,误码靠的是TCP的段编号以及确认号。TCP为了保证报文传输的可靠,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。

    • 提供拥塞控制
      当网络出现拥塞的时候,TCP能够减小向网络注入数据的速率和数量,缓解拥塞

    • TCP提供全双工通信
      TCP允许通信双方的应用程序在任何时候都能发送数据,因为TCP连接的两端都设有缓存,用来临时存放双向通信的数据。当然,TCP可以立即发送一个数据段,也可以缓存一段时间以便一次发送更多的数据段(最大的数据段大小取决于MSS)

    四、TCP和UDP的比较

    1. 对比

    UDP TCP
    是否连接 无连接 面向连接
    是否可靠 不可靠传输,不使用流量控制和拥塞控制 可靠传输,使用流量控制和拥塞控制
    连接对象个数 支持一对一,一对多,多对一和多对多交互通信 只能是一对一通信
    传输方式 面向报文 面向字节流
    首部开销 首部开销小,仅8字节 首部最小20字节,最大60字节
    适用场景 适用于实时应用(IP电话、视频会议、直播等) 适用于要求可靠传输的应用,例如文件传输

    2. 总结

    • TCP向上层提供面向连接的可靠服务 ,UDP向上层提供无连接不可靠服务。
    • 虽然 UDP 并没有 TCP 传输来的准确,但是也能在很多实时性要求高的地方有所作为
    • 对数据准确性要求高,速度可以相对较慢的,可以选用TCP

    参考文献
    ————————————————
    [1] 计算机网络简明教程及仿真实验 https://www.bilibili.com/video/av40163489?from=search&seid=11224550652008575322
    [2] TCP和UDP的区别 https://www.bilibili.com/video/av31151326?from=search&seid=11224550652008575322
    [3] 前端面试之道 https://juejin.im/book/5bdc715fe51d454e755f75ef/section/5bdc729af265da615a414603
    [4] 一篇文章看明白 TCP/IP,TCP,UDP,IP,Socket 之间的关系 https://blog.csdn.net/freekiteyu/article/details/72236734
    [5] 深入理解计算机网络 https://book.douban.com/subject/20560942/
    [6] TCP和UDP协议的特点和区别详解 https://blog.csdn.net/hanzhen7541/article/details/79072036
    [7] 一文搞懂TCP与UDP的区别 https://www.cnblogs.com/fundebug/p/differences-of-tcp-and-udp.html


    上一篇:从浏览器输入一个URL(www.baidu.com)后执行全过程

    下一篇:TCP三次握手、四次挥手几常见面试题全集


    欢迎各位订阅我,谢谢大家的点赞和专注!我会继续给大家分享我大学期间详细的实践项目。
    在这里插入图片描述

    展开全文
  • TCPUDP差异对比分析

    千次阅读 2017-09-15 15:54:13
    TCPUDP差异对比分析写在前面:公司在做智能硬件方向...本文通过对比分析 TCP 和 UDP 有哪些区别,来帮助这些比较基础知识点,遇到相应问题,便可以快速地解决。建立连接方式TCP: 说到 TCP 建立连接,相信大多数

    TCP与UDP差异对比分析

    写在前面:

    公司在做智能硬件方向,所以使用了 TCP、UDP 协议来做通信。过几天我会整理一下两种协议在 Android 上的使用,不过在此之前,还是想先了解一下这两种协议有哪些异同,又有哪些值得注意的地方。本文通过对比分析 TCP 和 UDP 有哪些区别,来帮助这些比较基础的知识点,遇到相应的问题,便可以快速地解决。

    建立连接方式

    TCP:
    说到 TCP 建立连接,相信大多数人脑海里肯定可以浮现出一个词,没错就是–“三次握手”。TCP 通过“三次握手”来建立连接,再通过“四次挥手”断开一个连接。在每次挥手中 TCP 做了哪些操作呢?继续往下看:

    TCP的三次握手和四次挥手

    上图就从客户端和服务端的角度,清楚的展示了 TCP 的三次握手和四次挥手。

    可以看到,当 TCP 试图建立连接时,三次握手指的是客户端主动触发了两次,服务端触发了一次。

    我们可以先明确一下 TCP 建立连接并且初始化的目标是什么呢?1. 初始化资源 2. 告诉对方我的序列号。
    所以三次握手的次序是这样子的:

    1)client端首先发送一个SYN包告诉Server端我的初始序列号是X。

    2)Server端收到SYN包后回复给client一个ACK确认包,告诉client说我收到了。

    3)接着Server端也需要告诉client端自己的初始序列号,于是Server也发送一个SYN包告诉client我的初始序列号是Y。

    4)Client收到后,回复Server一个ACK确认包说我知道了。

    其中的 2 、3 步骤可以简化为一步,也就是说将 ACK 确认包和 SYN 序列化包一同发送给 Client 端。到此我们就比较简单的解释了 TCP 建立连接的“三次握手”。

    UDP:
    我们都知道 TCP 是面向连接的、可靠的、有序的传输层协议,而 UDP 是面向数据报的、不可靠的、无序的传输协议,所以 UDP 压根不会建立什么连接。

    就好比发短信一样,UDP 只需要知道对方的 ip 地址,将数据报一份一份的发送过去就可以了,其他的作为发送方,都不需要关心。

    数据发送

    关于 TCP、UDP 之间数据发送的差异,可以体现二者最大的不同之处:

    TCP:
    由于 TCP 是建立在两端连接之上的协议,所以理论上发送的数据流不存在大小的限制。但是由于缓冲区有大小限制,所以你如果用 TCP 发送一段很大的数据,可能会截断成好几段,接收方依次的接收。

    UDP:
    由于 UDP 本身发送的就是一份一份的数据报,所以自然而然的就有一个上限的大小,这个每次 UDP 发送的数据报大小由哪些因素共同决定呢?

    1. UDP协议本身,UDP协议中有16位的UDP报文长度,那么UDP报文长度不能超过2^16=65536。

    2. 以太网(Ethernet)数据帧的长度,数据链路层的MTU(最大传输单元)。

    3. socket的UDP发送缓存区大小

    先来看第一个因素,UDP 本身协议的报文长度为 2^16 - 1,UDP 包头占 8 个字节,IP 协议本身封装后包头占 20 个字节,所以最终长度为: 2^16 - 1 - 20 - 8 = 65507 字节。

    只看第一个因素有点理想化了,因为 UDP 属于不可靠协议,我们应该尽量避免在传输过程中,数据包被分割。所以这里有一个非常重要的概念 MTU – 也就是最大传输单元。

    在 Internet 下 MTU 的值为 576 字节,所以在 internet 下使用 UDP 协议,每个数据报最大的字节数为: 576 - 20 - 8 = 548

    TCP:
    我们再来谈谈数据的有序性。

    对于 TCP 来说,本身 TCP 有着超时重传、错误重传、还有等等一系列复杂的算法保证了 TCP 的数据是有序的,假设你发送了数据 1、2、3,则只要发送端和接收端保持连接时,接收端收到的数据始终都是 1、2、3。

    UDP:

    而 UDP 协议则要奔放的多,无论 server 端无论缓冲池的大小有多大,接收 client 端发来的消息总是一个一个的接收。并且由于 UDP 本身的不可靠性以及无序性,如果 client 发送了 1、2、3 这三个数据报过来,server 端接收到的可能是任意顺序、任意个数三个数据报的排列组合。

    可靠性

    其实大家都知道 TCP 本身是可靠的协议,而 UDP 是不可靠的协议。

    TCP:

    TCP 内部的很多算法机制让他保持连接的过程中是很可靠的。比如:TCP 的超时重传、错误重传、TCP 的流量控制、阻塞控制、慢热启动算法、拥塞避免算法、快速恢复算法 等等。

    所以 TCP 是一个内部原理复杂,但是使用起来比较简单的这么一个协议。

    UDP:
    UDP 是一个面向非连接的协议,UDP 发送的每个数据报带有自己的 IP 地址和接收方的 IP 地址,它本身对这个数据报是否出错,是否到达不关心,只要发出去了就好了。所以来研究下,什么情况会导致 UDP 丢包:

    • 数据报分片重组丢失:
      在文章之前我们就说过,UDP 的每个数据报大小多少最合适,事实上 UDP 协议本身规定的大小是 64kb,但是在数据链路层有 MTU 的限制,大小大概在 5kb,所以当你发送一个很大的 UDP 包的时候,这个包会在 IP 层进行分片,然后重组。这个过程就有可能导致分片的包丢失。UDP 本身有 CRC 检测机制,会抛弃掉丢失的 UDP 包。

    • UDP 缓冲区填满
      当 UDP 的缓冲区已经被填满的时候,接收方还没有处理这部分的 UDP 数据报,这个时候再过来的数据报就没有地方可以存了,自然就都被丢弃了。

    使用场景

    在文章最后的一部分,聊聊 TCP、UDP 使用场景。
    先来说 UDP 的吧,有很多人都会觉得 UDP 与 TCP 相比,在性能速度上是占优势的。因为 UDP 并不用保持一个持续的连接,也不需要对收发包进行确认。但事实上经过这么多年的发展 TCP 已经拥有足够多的算法和优化,在网络状态不错的情况下,TCP 的整体性能是优于 UDP 的。

    那在什么时候我们非用 UDP 不可呢?

    • 对实时性要求高
      比如实时会议,实时视频这种情况下,如果使用 TCP,当网络不好发生重传时,画面肯定会有延时,甚至越堆越多。如果使用 UDP 的话,即使偶尔丢了几个包,但是也不会影响什么,这种情况下使用 UDP 比较好。

    • 多点通信
      TCP 需要保持一个长连接,那么在涉及多点通讯的时候,肯定需要和多个通信节点建立其双向连接,然后有时在NAT环境下,两个通信节点建立其直接的 TCP 连接不是一个容易的事情,而 UDP 可以无需保持连接,直接发就可以了,所以成本会很低,而且穿透性好。这种情况下使用 UDP 也是没错的。

    以上我们说了 UDP 的使用场景,在此之外的其他情况,使用 TCP 准没错。毕竟有一句话嘛。

    when in doubt,use TCP.

    写在后面:
    本文主要是介绍概念,未来会从 Android 的角度来总结 TCP 和 UDP 的使用。

    展开全文
  • 介绍了澳大利亚马斯洛风电场EPC总承包管理模式和运行机制,并结合该项目的特点,对比分析了传统模式和总承包模式的区别。在此基础上,提出了我国风电建设中逐步推广总承包模式的几点建议,以期对风电建设管理工作起到...
  • 从多角度分析Hibernate mybatis的区别 目录 概念: 1.两者最大的区别: 2.开发难度对比 3.sql书写比较 4.数据库扩展性比较 5.缓存机制比较 6.总结: 概念: Hibernate :...
    从多角度分析Hibernate 与mybatis的区别

    概念:


    Hibernate :Hibernate 是当前最流行的ORM框架,对数据库结构提供了较为完整的封装。

    Mybatis:Mybatis同样也是非常流行的ORM框架,主要着力点在于POJO 与SQL之间的映射关系。

    其次具体从几个方面说一下两者的区别:

    1.两者最大的区别:


    针对简单逻辑,Hibernate和MyBatis都有相应的代码生成工具,可以生成简单基本的DAO层方法。


    针对高级查询,Mybatis需要手动编写SQL语句,以及ResultMap。而Hibernate有良好的映射机制,开发者无需关心SQL的生成与结果映射,可以更专注于业务流程。

    2.开发难度对比


    Hibernate的开发难度要大于Mybatis。主要由于Hibernate比较复杂、庞大,学习周期较长。


    而Mybatis则相对简单一些,并且Mybatis主要依赖于sql的书写,让开发者感觉更熟悉。

    3.sql书写比较


    Mybatis的SQL是手动编写的,所以可以按需求指定查询的字段。不过没有自己的日志统计,所以要借助log4j来记录日志。

    Hibernate也可以自己写SQL来指定需要查询的字段,但这样就破坏了Hibernate开发的简洁性。不过Hibernate具有自己的日志统计。


    4.数据库扩展性比较


    Mybatis由于所有SQL都是依赖数据库书写的,所以扩展性,迁移性比较差。

    Hibernate与数据库具体的关联都在XML中,所以HQL对具体是用什么数据库并不是很关心。

    5.缓存机制比较


    相同点:Hibernate和Mybatis的二级缓存除了采用系统默认的缓存机制外,都可以通过实现你自己的缓存或为其他第三方缓存方案,创建适配器来完全覆盖缓存行为。

    不同点:Hibernate的二级缓存配置在SessionFactory生成的配置文件中进行详细配置,然后再在具体的表-对象映射中配置是那种缓存。

    MyBatis的二级缓存配置都是在每个具体的表-对象映射中进行详细配置,这样针对不同的表可以自定义不同的缓存机制。并且Mybatis可以在命名空间中共享相同的缓存配置和实例,通过Cache-ref来实现。

    两者比较:因为Hibernate对查询对象有着良好的管理机制,用户无需关心SQL。所以在使用二级缓存时如果出现脏数据,系统会报出错误并提示。

    而MyBatis在这一方面,使用二级缓存时需要特别小心。如果不能完全确定数据更新操作的波及范围,避免Cache的盲目使用。否则,脏数据的出现会给系统的正常运行带来很大的隐患。

    6.总结:


    Hibernate与MyBatis都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory 生成Session,最后由Session来开启执行事务和SQL语句。

    而MyBatis的优势是MyBatis可以进行更为细致的SQL优化,可以减少查询字段,并且容易掌握。

    Hibernate的优势是DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。
    展开全文
  • 一、==equals()的区别首先,我们需要知道==equals()的区别,==号比较的一直是地址值,对于基本数据类型来说,==比较实际上就是变量数值是否相等,而对于引用数据类型,比较的则是地址值。这里特别需要注意的是...
  • 对于中小企业来说建立自己网站,对外展示自己页面是最平常不过事情了。目前最流行建立WWW服务工具就要属ApacheIIS了。... 二、稳定性: 接下来要比较的就是稳定性了,WWW服务要随时运转正常,一个
  • 本文通过对比分析 TCP 和 UDP 有哪些区别,来帮助这些比较基础知识点,遇到相应问题,便可以快速地解决。建立连接方式TCP: 说到 TCP 建立连接,相信大多数人脑海里肯定可以浮现出一个词,没错就是--“三次握手...
  • 这样不仅能让面试官看到你真懂这两个职位,还能让面试官看出你具备多维度拆解分析方法、对比分析方法思维能力。2.你可以从职责、日常工作内容、所需掌握技能、发展方向这4个维度来展开比较。3.从职责维度来看...
  • 这样不仅能让面试官看到你真懂这两个职位,还能让面试官看出你具备多维度拆解分析方法、对比分析方法思维能力。 2.你可以从职责、日常工作内容、所需掌握技能、发展方向这4个维度来展开比较。 3.从职责维度来...
  • 本文从实时带宽、动态范围、灵敏度和功率测量准确度四个方面比较了示波器和频谱仪的分析性能指标的区别。文中作者通过实验对比发现R&S示波器测量某个频率点的测量结果和频谱仪相比只相差了0.2dB,这意味着R&S示波器...
  • 为了更好说明activiti jflow两款工作流引擎特点与区别,我们按照如下几个方面做一次全面、客观的对比。 首先activiti是国外一款开源工作流程引擎,在国际上影响比较深远广泛,解决了BPM领域很多...
  • 早期开发的时候一直用c/c++,后来主要用的是java。最近需要用下c#。 熟悉了下c#,发现c#语言在对c/...本文总结下c# 和c++及 java的语法差别,重点比较与java的区别,便于相互学习,加强理解。 一、c#c++的区别...
  • Apache Kylin 和 Apache Phoenix 都能使用...下面我们将从这两个项目介绍开始为大家做个深度解读和比较。1.ApacheKylin 和Apache Phoenix介绍1.1 Apache KylinKylin 是一个分布式大数据分析引擎,提供在 Hadoop ...
  • 简单对比了三种组件,当初找到这篇想了解一下CORBA和COM的区别。 内容是04年的一篇文章。
  • 本文仅对一些常见优化方法进行直观介绍和简单的比较,各种优化方法详细内容及公式只好去认真啃论文了,在此我就不赘述了。 SGD 此处SGD指mini-batch gradient descent,关于batch gradient descent, ...
  • 本文概述在本主题中, 我们将比较这三种语言各个方面, 以使你对这些语言市场价值和功能有清晰认识, 以便你可以选择可以向前发展语言。众所周知, 要学习数据分析, 可以使用三种重要语言, 分别是Python, R和...
  • 主要介绍了php中file_get_contentscurl性能比较,以实例形式详细分析了file_get_contentscurl的区别以及运行效率的对比,需要的朋友可以参考下
  • 下面做一个阶段性的对比分析及总结。 AI芯片运算架构对比 整体来看,NVDLA的架构寒武纪的DianNao比较像。所以,单位资源的性能应该是差不多的。 二者性能的区别,就看资源的多寡了。 寒武纪的DianNao,共16个PE,...
  • 抽象类和普通类主要有三点比较的区别: 1.首先应该知道,抽象类是不能被实例化的,就是不能用new调出构造方法创建对象,而普通类则反之! 2.抽象类的访问权限限于Public和Protected,因为抽象类的方法是需要继承...
  • MVC和MVP在app中的对比分析

    千次阅读 2016-06-14 14:18:46
    为了解决逻辑处理和UI视图松散耦合,MVC和MVP架构模式在很多App中使用比较广泛。 那什么是MVP呢?它又和我们常常听到MVC有什么关系了以及区别呢? MVP 是从经典模式MVC演变而来,它们基本思想有相通...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 212
精华内容 84
关键字:

对比分析与比较分析的区别