专栏首页北京马哥教育关于HTTP协议中的保持连接

关于HTTP协议中的保持连接

缘起

中午在群里讨论,用ab测试 一台只提供静态文件服务, 不与其他任何系统交互的时候,为什么也会产生大量的TIME WAIT状态的。

首先,我们可以简单的理解,在TCP连接的两端,谁主动断开连接(先发送FIN包),谁进入TIME WAIT,谁被动断开连接(后发送FIN包),谁进入CLOSE WAIT状态。

那么,由此可以推断,在这个场景中,server是主动断开连接的一方,那么server为什么会主动断开呢, 这就涉及到HTTP里关于keepalive的内容了。

我们常常听说keepalive能提高webserver的性能, 但是为什么呢? 这里暂且不解释,说完下面的内容,就清楚了。

分析

在HTTP协议中, 除了需要服务器支持并打开keepalive之外, 还有一个重要的请求头Connection需要注意。

我们来看下面一个请求:

GET /? HTTP/1.1
Accept: */*
Cache-Control: no-cache
Connection: close
Host: 127.0.0.1
User-Agent: Apache-HttpClient/4.3.2 (java 1.5)
Accept-Encoding: gzip,deflate

这是我通过Idea 的REST Client 插件发送的一个请求, 我们看到 Connection头的值是close,抓包看一下请求过程

可以看到, 在server响应完成后, 发送了FIN 包, 主动断开连接, 这很好理解。

在来看一个请求:

GET /? HTTP/1.1
Accept: */*
Cache-Control: no-cache
Connection: keep-alive
Keep-Alive: 5
Host: 127.0.0.1
User-Agent: Apache-HttpClient/4.3.2 (java 1.5)
Accept-Encoding: gzip,deflate

可以看到, 这个请求里, Connection的值变成了keep-alive, 并且多了一个Keep-Alive头,值为5。再抓包看看这次请求:

可以看到, server在响应完成后,并没有发送FIN包关闭连接, 而是一段时间后,客户端发送FIN包,关闭连接, 如果你看第二列, time会发现,正好是大约5秒后,客户端发送了FIN包, 这个数值正好是 Keep-Alive头的值。事实上,Keep-Alive头的语义就是客户端保持连接多少秒。

以上的测试, server配的keepalive都是65s, 我们来把它0, 再来测试一遍看看。

客户端Connection头为close的情况:

客户端Connectionkeep-alive, Keep-Alive5的情况

可以看到,server主动断开连接。

最后一个场景, server配置keepalive为3, client Connectionkeep-alive, Keep-Alive5的情况

可以看到,请求结束大约3秒后(主要时间戳),server发送FIN主动断开连接。

结论

说了这么多,是时候总结一下了,关于keepalive主要有以下几点:

  • Connection 头控制客户端是否开启, close 不开启, keep-alive开启
  • Keep-Alive头控制客户端保持连接的时间
  • 在开启keepalive的时候, 谁先到保持连接的时间,谁先发FIN包,主动关闭连接。

本文分享自微信公众号 - 马哥Linux运维(magedu-Linux),作者:magedu-Comyn

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-05-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 不能在Linux下玩游戏?看完这篇文章从此Linux下玩游戏不是梦

    自述:从第一次看到Linux系统,从大神那里了解到了Linux灵活、干净、开源等诸多的好处后,我打算入坑。但是,作为一个游戏迷,用笔记本打游戏绝对是不能省的。...

    小小科
  • 20 分钟 Shell 入门深度教程

    作者:aron1992 来源:https://my.oschina.net/FEEDFACF/blog/1789695 0. 背景 之前写了系列的shell实...

    小小科
  • 当下流行的分布式文件系统大阅兵

      本文对目前数种分布式文件系统进行简单的介绍。当前比较流行的分布式文件系统包括:Lustre、Hadoop、MogileFS、FreeNAS、FastDFS...

    小小科
  • 使用EFSS规避消费级云存储风险

    许多使用消费级云存储产品的公司都面临着不同程度的安全风险,因此企业可以尝试采用IT部门和普通员工都能够接受的企业级文件同步和共享解决方案。 IT部门需要在提供服...

    静一
  • 机器学习VS人工智能:它们的不同是什么?

    ? AI与机器学习的联系十分紧密,但它们不是完全相同的东西。 得益于Google,Amazon和Facebook的偏好,人工智能(AI)和机器学习这两个概念出...

    小莹莹
  • CentOS6.5:login后循环显示"starting filemanager"的问题

    版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net...

    用户1148648
  • 中国黑客组织发现第二个Android万能密钥漏洞

    一个中国的安全组织Android Security Squad称他们发现了第二个万能密钥,能够在不破坏应用签名的情况下修改应用本身。 一个文件或者文档的数字签名...

    安恒信息
  • FastDFS学习笔记

    fastdfs作者及软件的下载方式:https://github.com/happyfish100

    二狗不要跑
  • 完成一次简单的 SQL 注入

    事件概述:2015年10月29日国外知名CMS(内容管理系统)Joomla,爆出存在SQL注入漏洞,该漏洞影响了 1.5 到 3.4.5 的所有...

    Lenis
  • 微信小程序的出现给前端带来了什么

    这是一个前端飞速发展的时代,我比较喜欢将其类比为欧洲列强疯狂殖民扩张的那段历史。JavaScript,得益于所有平台都必须具有浏览器这一特点,已经成为了事实上目...

    逆葵

扫码关注云+社区

领取腾讯云代金券