首页 > 其他 > 详细

长连接与短连接

时间:2021-05-21 12:01:16      阅读:27      评论:0      收藏:0      [点我收藏+]

1 什么是长连接和短连接

知识储备:

(1)http1.1与http2.0

首先要了解长连接与短连接指的是TCP连接。现在使用最多的还是http1.1,虽然http2.0早已诞生,但是我不明白为什么现在不是以http2.0为主。所以我查了百科资料发现有这样的解释:

在开放互联网上HTTP 2.0将只用于https://网址,而 http://网址将继续使用HTTP/1,目的是在开放互联网上增加使用加密技术,以提供强有力的保护去遏制主动攻击。

由于http1.1使用在http协议上,而http2.0使用在https协议上,虽然如今https已经日渐成为标准,但是由http向https过渡还需要很长一段时间。首先笔者之前也写过一个小网站,https配置不难,只要到对应的机构申请SSL证书,然后配置在自己服务器上即可,而且是免费的,缺点是需要一年更新一次SSL证书。因为我配置过https协议,明白https只能接受https的资源数据,所有http资源数据都会被屏蔽掉,当然有少数浏览器可能不会屏蔽,但是谷歌、edge这些浏览器是把http数据认为是不安全的,所以会屏蔽,现在市场上大量存在http网站的原因并不是这些企业以及机构不想升级为https协议,而是不能这样做,如果升级,那么这些企业及机构网站使用到的数据都要更换为https协议的,当然如果是自己的数据,那么只要遍历自己的数据库,更新即可,但是如果是依赖于第三方的数据的话,那么还要第三方数据也更新为https协议,而如果第三方还依赖于第四方数据的话,那么还需要第四方也更新为https协议,这样无限套娃,还是非常可怕的,所以从http到https协议还需要一段时间要走。

(2)网络七层

技术分享图片

七层模型介绍

    • 物理层:
      物理层负责最后将信息编码成电流脉冲或其它信号用于网上传输;
      eg:RJ45等将数据转化成0和1;
    • 数据链路层:
      数据链路层通过物理网络链路??供数据传输。不同的数据链路层定义了不同的网络和协 议特征,其中包括物理编址、网络拓扑结构、错误校验、数据帧序列以及流控;
      可以简单的理解为:规定了0和1的分包形式,确定了网络数据包的形式;
    • 网络层
      网络层负责在源和终点之间建立连接;
      可以理解为,此处需要确定计算机的位置,怎么确定?IPv4,IPv6!
    • 传输层
      传输层向高层??提供可靠的端到端的网络数据流服务。
      可以理解为:每一个应用程序都会在网卡注册一个端口号,该层就是端口与端口的通信!常用的(TCP/IP)协议;
    • 会话层
      会话层建立、管理和终止表示层与实体之间的通信会话;
      建立一个连接(自动的手机信息、自动的网络寻址);
    • 表示层:
      表示层??供多种功能用于应用层数据编码和转化,以确保以一个系统应用层发送的信息 可以被另一个系统应用层识别;
      可以理解为:解决不同系统之间的通信,eg:Linux下的QQ和Windows下的QQ可以通信;
    • 应用层:
      OSI 的应用层协议包括文件的传输、访问及管理协议(FTAM) ,以及文件虚拟终端协议(VIP)和公用管理系统信息(CMIP)等;
      规定数据的传输协议;
      常见的应用层协议:
      技术分享图片

       

      技术分享图片

       

       

      值得注意的是http与https协议都是应用层协议,而tcp协议才是传输层协议,所以通常长短连接指的是tcp连接而非http连接。打个形象的比喻: 拿你在网上购物来说,HTTP协议是指的那个快递单,你寄件的时候填的单子就像是发了一个HTTP请求,等货物运到地方了,快递员会根据你发的请求把货物送给相应的收货人。而TCP协议就是中间运货的那个大货车,也可能是火车或者飞机,但不管是什么,它是负责运输的,因此必须要有路,不管是地上还是天上。那么这个路就是所谓的TCP连接,也就是一个双向的数据通道。

      (3)关于http请求头的connection

      通常我们如果看见http的请求头里面有connection:keepalive

      技术分享图片

       

       

       此处的作用并不是http协议实现长连接,事实上http是无连接的,指的是并不能把http认为具有连接性,http只是由客户端发起请求,服务端返回响应,随即结束。至于为什么要把这个属性设置为keep-alive是因为要通知传输层的tcp协议为长连接的,这样达到多个http协议复用一个tcp连接的目的,达到了tcp为长连接,这样就可以持续客户端的发送http请求并得到服务器的http响应。为什么要设置tcp协议为长连接?我的理解是每一次tcp连接都需要建立三次握手,每一次断开tcp连接都需要经历四次挥手。如果tcp为短连接,那么将会频繁的建立tcp连接,不断的建立三次握手与四次挥手,造成服务器负担与客户端的负担,这样会造成数据响应非常慢,导致用户体验非常糟糕。

      正文内容:

技术分享图片

 

三次握手和四次挥手

TCP区别于UDP最重要的特点是TCP必须建立在可靠的连接之上,连接的建立和释放就是握手和挥手的过程。

三次握手为连接的建立过程,握手失败则连接建立失败。

四次挥手为连接的完整释放过程,也会发生某个消息丢失或者超时的情况,有一方主动发送FIN消息即表示连接即将释放。

注:SYN、ACK、FIN消息具有哪些含义,以及连接的状态,请参考《TCP/IP详解 卷1》第18章。

长连接

长连接,也叫持久连接,在TCP层握手成功后,不立即断开连接,并在此连接的基础上进行多次消息(包括心跳)交互,直至连接的任意一方(客户端OR服务端)主动断开连接,此过程称为一次完整的长连接。HTTP 1.1相对于1.0最重要的新特性就是引入了长连接。

短连接

短连接,顾名思义,与长连接的区别就是,客户端收到服务端的响应后,立刻发送FIN消息,主动释放连接。也有服务端主动断连的情况,凡是在一次消息交互(发请求-收响应)之后立刻断开连接的情况都称为短连接。

注:短连接是建立在TCP协议上的,有完整的握手挥手流程,区别于UDP协议。

2 如何快速区分当前连接使用的是长连接还是短连接

1、凡是在一次完整的消息交互(发请求-收响应)之后,立刻断开连接(有一方发送FIN消息)的情况都称为短连接

2、长连接的一个明显特征是会有心跳消息(也有没有心跳的情况),且一般心跳间隔都在30S或者1MIN左右,用wireshark抓包可以看到有规律的心跳消息交互(可能会存在毫秒级别的误差)。

3 什么时候用长连接,短连接?

1、需要频繁交互的场景使用长连接,如即时通信工具(微信/QQ,QQ也有UDP),相反则使用短连接,比如普通的web网站,只有当浏览器发起请求时才会建立连接,服务器返回相应后,连接立即断开。

2、维持长连接会有一定的系统开销,用户量少不容易看出系统瓶颈,一旦用户量上去了,就很有可能把服务器资源(内存/CPU/网卡)耗尽,所以使用需谨慎。

 参考文章:

【1】https://blog.csdn.net/qq_22238021/article/details/81197157

【2】https://blog.csdn.net/maquealone/article/details/87345795

【3】https://www.cnblogs.com/sunsky303/p/10647255.html

 

 

长连接与短连接

原文:https://www.cnblogs.com/hmy-666/p/14792469.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!