今天周末时间,有空给大家讲解一个小知识点,即HTTP的keep-alive头部。我使用wireshark来抓取网络包来在实战中讲解。希望能让大家更容易、更直观的理解!

HTTP中keep-alive头部的作用是为保持TCP连接,这样可以复用TCP连接不需要为每个HTTP请求都建立一个单独的TCP连接。这样既可以节省操作系统资源,也能够保持HTTP请求的高效性。

我们通过wireshark抓的包来分析一下:

下面的例子中128.14.154.105是HTTP服务器,192.168.1.6是客户端。

当服务器处理完一个HTTP请求时,会主动发起断开连接,如下图所示(四次挥手):

当服务器最后发送一个ACK包后进入TIME_WAIT状态,此状态将会持续2MSL(Maximum Segment Lifetime),一个MSL一般为2分钟,所以TIME_WAIT一般持续4分钟。在此期间还是可以接受客户端的数据的。

此时客户端为了复用TCP连接,将会发送一个心跳包(keep-alive)来保持连接。

上面的例子中,共发送了2次心跳包。如果在此期间还没有新的HTTP请求那么服务器会再次主动断开。

此后,客户端不会再发送心跳包了。

在最后给大家说下,为什么主动发起断开连接的一方在发送最后一个ACK包后需要进入TIME_WAIT状态2MSL

1)我们先假设发送完最后一个ACK包后直接断开的话,如果由于某种原因对端没有收到的话,对端会再次发送一个FIN包(TCP的重传机制),由于此时另一端已经关闭了对应的socket,所以TCP协议栈会

发送一个RST包。这个包表示的是一种错误。(比如,请求的TCP连接的端口没有在监听状态下),那么TCP连接就是因错误而被迫断开,所以TCP中工作没有正常完成。

2)第二个原因是让老的重复包在网络中消失,解释一下这句话的意思:如果我们的TCP断开之后,立马有一个新的TCP连接和之前的连接的IP和端口都一样的话,那么残留在网络中的包到达后会被误解为是新的

连接中的包。这样就会出现问题。如果我们使用了TIME_WAIT,在这个状态下是不允许建立新的IP和端口都一样的TCP连接的,而且它会维持2MSL时间, 这足够让网络中的旧包消失掉。

最后欢迎大家评论指正!^_^

通过wireshark抓包来讲解HTTP中Connection: keep-alive头部的作用的更多相关文章

  1. 用wireshark抓包分析TCP三次握手、四次挥手以及TCP实现可靠传输的机制

    关于TCP三次握手和四次挥手大家都在<计算机网络>课程里学过,还记得当时高超老师耐心地讲解.大学里我遇到的最好的老师大概就是这位了,虽然他只给我讲过<java程序设计>和< ...

  2. 网络知识===wireshark抓包,三次握手分析

    TCP需要三次握手建立连接: 网上的三次握手讲解的太复杂抽象,尝试着使用wireshark抓包分析,得到如下数据: 整个过程分析如下: step1 client给server发送:[SYN] Seq ...

  3. Mac OS X上使用Wireshark抓包

    Wireshark针对UNIX Like系统的GUI发行版界面采用的是X Window(1987年更改X版本到X11).Mac OS X在Mountain Lion之后放弃X11,取而代之的是开源的X ...

  4. MAC Wireshark抓包IOS

    网络抓包是个基础技能,对于网络协议的掌握有一定的要求.iOS上实现网络抓包可以用Charles(针对http和https),tcpdump(快速分析网络包),和Wireshare.之前写过一篇介绍tc ...

  5. TCP\IP协议实践:wireshark抓包分析之链路层与网络层

    目录 TCP\IP协议实践:wireshark抓包分析之链路层与网络层 从ping开始 链路层之以太网封装 ip首部 开启ping程序,开始抓包 由一个ping的结果引出来的两个协议ARP ICMP ...

  6. Wireshark抓包分析/TCP/Http/Https及代理IP的识别

    前言 坦白讲,没想好怎样的开头.辗转三年过去了.一切已经变化了许多,一切似乎从没有改变. 前段时间调研了一次代理相关的知识,简单整理一下分享之.如有错误,欢迎指正. 涉及 Proxy IP应用 原理/ ...

  7. 使用wireshark抓包分析浏览器无法建立WebSocket连接的问题(server为Alchemy WebSockets组件)

    工作时使用了Websocket技术,在使用的过程中发现,浏览器(Chrome)升级后可能会导致Websocket不可用,更换浏览器后可以正常使用. 近日偶尔一次在本地调试,发现使用相同版本的Chrom ...

  8. 云计算之路-阿里云上:Wireshark抓包分析一个耗时20秒的请求

    这篇博文分享的是我们针对一个耗时20秒的请求,用Wireshark进行抓包分析的过程. 请求的流程是这样的:客户端浏览器 -> SLB(负载均衡) -> ECS(云服务器) -> S ...

  9. 用Wireshark抓包分析超过70秒的请求

    超过70秒的请求是通过分析IIS日志发现的: 10.159.63.104是SLB的内网IP. 通过Wireshark抓包分析请求是9:22:21收到的(tcp.stream eq 23080): 09 ...

随机推荐

  1. [翻译]NUnit---RequiredAddin and RequiresMTA Attributes(十六)

    RequiredAddinAttribute (NUnit 2.5) RequiredAddin特性用于提示一个程序集需要特殊的插件才能保证功能正常.如果没有安装插件,整个程序集会被标记为未运行. N ...

  2. NET 下载共享文件

    执行 public static void Run() { "); if (state) { // 共享文件夹的目录 TransportRemoteToLocal(@"\\192. ...

  3. vux 入门备忘大佬多指点

    一.安装node.js https://nodejs.org/en/ 这样就可以使用npm喽 二.安装vux 安装vux npm install vux --save 安装vux-loader npm ...

  4. .net core Memcached使用

    首先,你要在你电脑上安装配置好Memcached环境哦 Startup类的ConfigureServices中加入 //memcachedcore1 services.AddEnyimMemcache ...

  5. RDLC报表学习

    RDLC报表由以下三部分构成: 1.制作自己的DateSet集合(就是报表的数据集): 2.制作自己的报表文件.rdlc文件,用于画做报表样式,里面有微软自带的导出和打印功能,其实就为了少做这2个功能 ...

  6. 利用bulk添加百万条数据,进行测试

    (1)连接数据库 public static void BulkToDB(DataTable dt) { //数据库连接 SqlConnection sqlCon = new SqlConnectio ...

  7. selenium下拉框踩坑埋坑

    本文来自网易云社区 作者:王利蓉 最近web端全站重构,所有的页面都大大小小都有些变动,UI就全军覆没了,用例从登录改,改到个人信息页面发现根以前的实现方式完全不一样,这可怎么解决 1.以前的实现(o ...

  8. iOS推送功能极光推送的介绍与实现

    1.个人整理操作流程 2.官方使用说明流程 2018iOS极光推送完整流程 极光推送官网

  9. Linux快速学习系列

    这篇文章会随着学习的进行,不断的更新!!! 总结 操作系统引入的抽象概念 进程(process) 地址空间(address space) 虚拟内存(virtual memory) 操作系统引入的cah ...

  10. XCode10.0遇到的问题

    1:编译时报info.plist冲突. 解决方法,XCode上 File -> Workspace Settings ... 将Build System改为 Legacy Build Syste ...