这次的笔记会围绕TCP连接 和 http长连接和短连接来说

TCP连接:

   tcp为http提供了一条可靠的比特传输管道。

       tcp的数据是通过名为ip分组(ip数据报)的小数据块来发送的。

   tcp连接是通过4个值来识别的:

       <源ip地址、源端口号、目的IP地址、目的端口号>

 

HTTP事务的时延原因:

  1、客户端需要根据URI确定Web服务器的IP地址和端口号。如果最近没有对URI中的主机名进行访问,通过DNS域名解析系统将URI中的主机名转换成一个IP地址可能要花费数十秒的时间。

  2、接下来,客户端会向服务器发送一条TCP连接请求,并等待服务器回送一个请求接收应答。每条新的TCP连接都会有连接建立时延。这个值通常最多只有一个两秒钟,但如果有数百个HTTP事务的话,这个值会快速的叠加上去。

  3、一旦连接建立起来了,客户端就会通过新建立的TCP管道来发送HTTP请求。数据到达时,Web服务器会从TCP链接中读取请求报文,并对请求进行处理。因特网传输请求报文,以及服务器处理请求报文都需要时间。

  4、然后,Web服务器会回送HTTP响应,这也需要花费时间。

 

TCP三次握手建立连接

  1、请求新的TCP连接时,客户端要想服务器端放松一个小的tcp分组(通常是40-60个字节)。这个分组中设置了一个同步位SYN=1,同时选择一个初始序号seq=x。 TCP规定,SYN报文段(即SYN=1的报文段)不能携带数据,但要消耗掉一个序号。这个分组中设置了一个特殊的SYN标记,说明这是一个链接请求。

  2、如果服务器接受了连接,就会对一些参数进行计算,并向客户端回送一个tcp分组,这个分组中的SYN和ACK标记都被置位。在确认报文段中应把SYN位和ACK位都置1,确认号是ack=x+1,同时也为自己选择一个初始序号seq=y,这个报文段也不能携带数据,但同样要消耗一个序号。

  3、最后,客户端像服务器回送一条确认信息,通知它连接已经成功建立。确认报文段的ACK置1,确认号ack=y+1,而自己的序号seq=x+1。 TCP的标准规定,ACK的标准规定,ACK报文段可以携带数据。但如果不携带数据则不消耗序号。

TCP四次握手关闭连接

  1、客户端的进程向其TCP发出连接释放报文段,并停止在发送数据,主动关闭TCP连接。

    链接释放报文段首部的终止控制位FIN=1,序号为seq=u,u等于前面已经传送过的数据的最后一个字节的序号+1。

  2、服务器收到释放报文段后即发出确认,确认号是ack=u+1,ACk=1,seq=v,v为服务器之前已经传送过的数据的最后一个字节的序号加1,这个时候TCP链接处于半关闭状态(客户端已经没有数据要发送,但是服务器又数据要发送,客户端仍要接收)。

  3、如果服务器已经没有要向客户端发送的数据,其应用进程就会通知TCP释放链接。这是链接释放报文段必须使FIN=1,ACK=1,seq=w,ack=u+1。

  4、客户端收到服务器的链接释放报文段后,必须对此发出确认。确认报文段ACK=1,ack=w+1,seq=u+1。

 

HTTP是“HTTP over TCP over IP”协议栈中的最顶层

HTTPs是在HTTP和TCP之间插入了一个(成为TLS或SSL的)密码加密层

http传输报文过程:

  以流的形式将报文数据的内容通过一条打开的TCP连接按序传输。

      TCP收到数据流之后,会将数据流砍成被称作段的小数据块,并将段封装在IP分组中,通过因特网进行传输。

 http长连接和短连接

    HTTP/1.1允许HTTP设备在事务处理结束之后将TCP链接保持在打开状态,以便为未来的HTTP请求重用现存的连接。

            在事务处理结束之后仍然保持在打开状态的TCP连接被称为持久连接(长连接),非持久连接(短连接)会在每个事务结束之后关闭。

            keep-alive首部只是请求将连接保持在活跃状态。

    在HTTP/1.0中,keep-alive不是默认使用的,客户端必须发送一个Connection:Keep-Alive请求首部来激活keep-alive连接。存在很多问题:eg:哑代理(盲中继:只是将字节从一个连接转发到另一个连接中去,不对Connection首部进行特殊的处理)

 

          什么是长连接、短连接?

            在HTTP/1.0中,默认使用的是短连接,也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。

       从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头有加入这行代码:

        Connection:keep-alive

      在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的tcp连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。keep-alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如apache)中设定这个时间。实现长连接需要客户端和服务器都支持长连接。

      http协议的长连接和短连接,实质上是tcp协议的长连接和短连接。

          长连接短连接操作过程:

      短连接的操作步骤:

      建立连接---数据传输---关闭连接...建立连接---数据传输---关闭连接

      长连接的操作步骤:

      建立连接---数据传输...(保持连接)...数据传输---关闭连接。

    长连接和短连接的优缺点

      长连接优点: 可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间。

             对于频繁请求资源的客户来说,较适用长连接。

         缺点: 在长连接的应用场景下,client端一般不会主动关闭他们之间的连接,client和server之间的连接如果一直不关闭的话,会存在一个问题,随着客户端连接越来越多,server会负载过大。

      短连接优点: 对于服务器来说管理较为简单,不需要额外的控制手段。

         缺点: 如果客户请求频繁,将在tcp的简历和关闭操作上浪费时间和带宽。

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

        长连接多用于操作频繁,点对点的通讯,而且连接数不能太多的情况。 eg: 数据库的连接用长连接,如果用短连接频繁的通信会造成socket错误,而且频繁的socket创建也是对资源的浪费。

        像web网站的http服务一般都用短连接,因为长连接对于服务端来说会耗费一定的资源,而像web网站这么频繁的成千上万甚至上亿客户端的连接使用短连接会更省一些资源,如果用长连接而且同时有成千上万的用户,如果每个用户都占用一个连接的话,会造成不必要的资源浪费。

        并发量打,但每个用户无需频繁操作情况下需用短连接。

      

    短连接优点:管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段

 

posted on 2016-03-04 11:26  王妮丹  阅读(363)  评论(0编辑  收藏  举报