zoukankan      html  css  js  c++  java
  • 服务器time_wait状态原因

    通信双方建立TCP连接后,主动关闭连接的一方就会进入TIME_WAIT状态

    TIME_WAIT状态的时间是2倍的MSL(最大生存时间),在TIME_WAIT状态TCP连接实际上已经断掉,但是该插口又不能被新的连接实例使用。这种情况一般都是程序中建立了大量的短连接。

    那么http 服务是谁主动关闭连接呢?

    http 1.0时代,如果不设置KeepAlive,默认都是短连接,服务器主动关,否则就看本地浏览器和web各自的设置了,基本都是某个间隔不活跃就断开,两边都可以。HTTP 1.1时代,默认就是长连接,类似HTTP 1.0外加KeepAlive,那边主动关都可以,依然看本地浏览器设置和web服务器设置。
    在http1.1协议中,对于客户端(browser)的一个请求,如果返回Connection:Close,不是告诉客户端让客户端关闭连接,而是服务端之后主动关闭连接
    
    http://www.zhihu.com/question/24338653

     

    HTTP是请求-响应模式的,而有时候会以关闭连接来表示数据发送完毕,所以在其协议定义中有个字段来表示谁关闭连接。
    
    HTTP1.0/1.1都支持持久连接
    
    在1.1中,如果客户端在请求中使用Connection: Close ,服务器端就会在发送完响应后从容关闭连接。但是即使客户端要求使用持久连接,但是服务器也有权在响应完请求后主动关闭连接,但是要在响应头在包含Connection: Close 。
    
    1.0和1.1一样,但是HTTP1.1默认是持久连接的,而且HTTP1.0不是
    考虑两种方式:持久连接和非持久连接
    这两种连接方式首先取决于http服务器是否支持
    标准HTTP服务器支持这两种方式,特殊HTTP服务器只支持非持久连接
    
    持久连接和非持久连接都是服务器端/IE端均可控制的
    控制方式是用Connection : xxxxx字段
    Connection: Close告诉对方这次传输结束以后关闭socket
    Connection: Alive告诉对方这次传输结束以后可以再次利用这个socket
    
    以下模拟持久连接:
    IE Request 包含Connection:Alive -> HTTP服务器返回网页,HTTP头部包含 Connection: Alive -> IE在HTTP头部描述的字节数接收完毕以后提交下一个请求,其中继续包含 Connection: Alive -> HTTP服务器继续返回网页
    
    以下模拟非持久连接:
    IE Request 包含Connection:Alive -> HTTP服务器返回网页,HTTP头部包含 Connection: Close,表示自己无视IE的Alive请求 -> IE在HTTP头部描述的字节数接收完毕以后关闭socket
    
    需要说明的是,对于持久连接,Server返回的HTTP头部必须包含一个内容大小字段用来确定IE需要接收的data字节,否则持久连接就会发生问题,因为IE无法获知自己什么时候应该发送下一个请求.所以无法确定data字段大小的时候,服务器必须在适当的时候(通常是data发送结束)主动关闭socket
  • 相关阅读:
    wifi通信过程的研究--(2)Wifi传输认证过程
    wifi通信过程的研究--(1)Wifi基本属性介绍
    wifi通信过程的研究--(3)传输过程概念细分
    网络编程之TCP/IP各层详解
    持续集成CI与自动化构建
    IEEE 802.11标准列表
    IEEE802.11协议基础知识
    IEEE 802.11协议基础知识整理
    beacon帧字段结构最全总结(三)——VHT字段总结
    beacon帧字段结构最全总结(二)——HT字段总结
  • 原文地址:https://www.cnblogs.com/zlingh/p/4658815.html
Copyright © 2011-2022 走看看