HTTP1.1 wireshark分析

news2024/11/18 11:34:13

本地springboot启动一个简单的服务,然后请求测试

tcpdump -i lo0 -nnvv -w tmp.cap tcpdump 本地回环网卡

http1.1

HTTP/1.0 每进行一次通信,都需要经历建立连接传输数据断开连接三个阶段。当一个页面引用了较多的外部文件时,这个建立连接和断开连接的过程就会增加大量网络开销。

为了解决 HTTP/1.0 的问题,1999 年推出的 HTTP/1.1 有以下特点:

  • 长连接:引入了 TCP 连接复用,即一个 TCP 默认不关闭,可以被多个请求复用
  • 并发连接:对一个域名的请求允许分配多个长连接(缓解了长连接中的「队头阻塞」问题)
  • 引入管道机制(pipelining),一个 TCP 连接,可以同时发送多个请求。(响应的顺序必须和请求的顺序一致,因此不常用)
  • 增加了 PUT、DELETE、OPTIONS、PATCH 等新的方法
  • 新增了一些缓存的字段(If-Modified-Since, If-None-Match)
  • 请求头中引入了 range 字段,支持断点续传
  • 允许响应数据分块(chunked),利于传输大文件
  • 强制要求 Host 头,让互联网主机托管称为可能
    ————————————————
    版权声明:本文为CSDN博主「前端南玖」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_41960279/article/details/123786121

wireshark分析http 1.1 keep-alive的2次http请求

当8080端口还没有好的时候,我们浏览器请求可以看到如下对话
在这里插入图片描述

客户端SYN要去链接,但是服务端一直返回RST。

附RST标志位:

RST表示复位,用来异常的关闭连接,在TCP的设计中它是不可或缺的。就像上面说的一样,发送RST包关闭连接时,不必等缓冲区的包都发出去(不像上面的FIN包),直接就丢弃缓存区的包发送RST包。而接收端收到RST包后,也不必发送ACK包来确认。

TCP处理程序会在自己认为的异常时刻发送RST包。例如,A向B发起连接,但B之上并未监听相应的端口,这时B操作系统上的TCP处理程序会发RST包。

又比如,AB正常建立连接了,正在通讯时,A向B发送了FIN包要求关连接,B发送ACK后,网断了,A通过若干原因放弃了这个连接(例如进程重启)。网通了后,B又开始发数据包,A收到后表示压力很大,不知道这野连接哪来的,就发了个RST包强制把连接关了,B收到后会出现connect reset by peer错误。


SpringBoot项目8080端口启动成功后,可以看到TCP三次握手成功

在这里插入图片描述


接着看到Tcp window update:TCPWindowUpdate是TCP通信中的一个状态,可以发生的原因有很多,但最终归结于发送者传输数据的速度比接收者读取的数据还快,这使得接受端的在缓冲区必须释放一部分空间来装发送过来的数据,然后向发送者发送WindowsUpdate,告诉给发送者应该以多大的速度发送数据,从而使得数据传输与接受恢复正常。

  • 附:Wireshark的TCP提示
    Tcp previous segment lost(tcp先前的分片丢失)
    Tcpacked lost segment(tcp应答丢失)
    Tcp window update(tcp窗口更新)
    Tcp dup ack(tcp重复应答)
    Tcp keep alive(tcp保持活动)
    Tcp retransmission(tcp重传)
    Tcp ACKed unseen segument (tcp看不见确认应答)
    tcp port numbers reused(tcp端口重复使用)
    tcp retransmission(tcp重传)
    tcp fast retransmission (tcp快速重传)
    TCP Previoussegment lost(发送方数据段丢失)
    tcp spurious retransmission(tcp伪重传)

接着http请求发送
在这里插入图片描述

http的服务端响应请求返回
在这里插入图片描述

接着的一次http请求响应(http1.1 Keep-Alive 服用了TCP连接,不用断开重连了)
在这里插入图片描述

客户端4次挥手断开链接
在这里插入图片描述

wireshark分析http1.1 keep-alive过期的2次请求

常见的keep-alive参数

  • 客户端 IE默认的KeepAliveTimeout是1分钟

  • 服务器 IIS默认ConnectionTimeout时长是2min

  • 服务器 ASP.NetCore Kestrel默认的KeepAliveTimeout=130s

  • 服务器 nginx默认的keepalive_timeout=60s

当一次http请求keep-alive过期后,如下图可以看到服务端会发起TCP断开连接,完成4次挥手

在这里插入图片描述

接着的一次http请求又重新进行了TCP三次握手

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/756571.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

两种异步日志方案的介绍

文章目录 一、日志写入逻辑1.1 相关接口函数1.2 写入逻辑 二、log4cpp 日志框架2.1 下载和编译2.2 日志级别2.3 日志格式2.4 日志输出2.5 日志回滚 三、muduo 异步日志库3.1 异步日志机制3.2 双缓冲机制3.3 前端日志写入3.4 后端日志落盘3.5 coredump 查找未落盘的日志3.6 总结…

复习第六课 C语言-排序,初识指针

目录 【1】冒泡排序&#xff08;从小到大&#xff09; 【2】选择排序 【3】二维数组 【4】指针 【5】指针修饰 【6】大小端 【7】初见二级指针 练习&#xff1a; 【1】冒泡排序&#xff08;从小到大&#xff09; #include <stdio.h> //数组哪里的\0?自己和字符串…

论文阅读-2:基于深度学习的大尺度遥感图像建筑物分割研究

一、该网络中采用了上下文信息捕获模块。通过扩大感受野&#xff0c;在保留细节信息的同时&#xff0c;在中心部分进行多尺度特征的融合&#xff0c;缓解了传统算法中细节信息丢失的问题&#xff1b;通过自适应地融合局部语义特征&#xff0c;该网络在空间特征和通道特征之间建…

SSH框架简介篇

文章目录 概述目录结构 strutsSpringHibernate总结 概述 SSH框架&#xff08;Struts Spring Hibernate&#xff09;是一种广泛应用的Java企业级开发框架组合&#xff0c;它将Struts、Spring和Hibernate三个优秀的框架有机地结合在一起&#xff0c;提供了一套完整的解决方案&…

cmake 函数相关

目录 cmake函数和宏基础 demo cmake函数和宏的参数处理 cmake函数和宏的基本使用 demo cmake函数和宏使用变量 demo demo cmake函数和宏需要注意的地方 demo cmake函数和宏的关键字参数 demo 使用第二种形式cmake_parse_arguments() demo 关键字list demo singl…

GDB 调试代码

目录 一、其他调试代码的工具 二、GDB调试 1、调试准备 2、开始调试 3、调试命令 1.运行程序 2.退出gdb 3.传参 4.查看代码 5.设置或删除断点及相关操作 6.继续运行 7.运行中打印某些值及其类型 8.自动的打印某些值和信息及其相关操作 9.单步调试 10.设置变量的…

http-server 的安装与使用

文章目录 问题背景http-server简介安装nodejs安装http-server开启http服务http-server参数 问题背景 打开一个文档默认使用file协议打开&#xff0c;不能发送ajax请求&#xff0c;只能使用http协议才能请求资源&#xff0c;所以此时我们需要在本地建立一个http服务&#xff0c…

基于java的智能停车场管理系统

背景 智能停车场管理系统的主要使用者分为管理员和用户&#xff0c;实现功能包括管理员&#xff1a;个人中心、用户管理、车位信息管理、车位租用管理、车位退租管理、违规举报管理、论坛交流、系统管理&#xff0c;用户&#xff1a;个人中心、车位租用管理、车位退租管理、违…

MySQL每日一练——MySQL多表查询进阶挑战

目录 1、首先创建表 t_dept: t_emp: 2、插入数据 t_dept表&#xff1a; t_tmp表: 3、修改表 4、按条件查找 1、首先创建表 t_dept: CREATE TABLE t_dept (id INT(11) NOT NULL AUTO_INCREMENT,deptName VARCHAR(30) DEFAULT NULL,address VARCHAR(40) DEFAULT NULL,P…

为什么单片机可以直接烧录程序的原因是什么?

单片机&#xff08;Microcontroller&#xff09;可以直接烧录程序的原因主要有以下几点&#xff1a; 集成性&#xff1a;单片机是一种高度集成的芯片&#xff0c;内部包含了处理器核心&#xff08;CPU&#xff09;、存储器&#xff08;如闪存、EEPROM、RAM等&#xff09;、输入…

JavaScript 使用URL跳转传递数组对象数据类型的方法

文章目录 首先了解一下正常传递基本数据类型JavaScript 跳转页面方法JavaScript 路由传递参数JavaScript 路由接收参数传递对象、数组效果&#xff1a; 在前端有的时候会需要用链接进行传递参数&#xff0c;基本数据类型的传递还是比较简单的&#xff0c;但是如果要传递引用数据…

AWS 解决方案架构师「免费考」

周五晚&#xff0c;AWS 推出了的训练营活动&#xff0c;这对于正在准备 Cloud Practitioner 的我来说&#xff0c;简直不要太开心。官方文章原文链接《限定&#xff01;直冲「云」霄训练营开营啦》。 PART-01 训练营简介 看到推送后第一时间点了进去&#xff0c;活动的情况简…

Socket API使用——模拟http协议

Socket API使用——模拟http协议 简单的c/s程序——服务端实例 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; import java.nio.char…

Python np.unique()函数详解

np.unique()函数详解&#xff1a;返回数组的唯一值唯一值默认已进行从小到大的排序 一些重要参数 return_index&#xff1a;bool, optional。如果设置为True,返回数组中唯一值的索引号&#xff1b;否则不返回。 注意&#xff1a;返回的数组和输入的数组的大小不相同&#xf…

第十五章——友元、异常

友元 类并非只能拥有友元函数&#xff0c;也可以将类作为友元。在这种情况下&#xff0c;友元类的所有方法都可以访问原始类的私有成员和保护成员。因此尽管友元被授予从外部访问类的私有部分的权限&#xff0c;但它们并不与面向对象的编程思想相悖&#xff0c;相反提高了共有…

《C++程序设计原理与实践》笔记 第20章 容器和迭代器

本章和下一章将介绍STL&#xff0c;即C标准库的容器和算法部分。关键概念序列和迭代器用于将容器&#xff08;数据&#xff09;和算法&#xff08;处理&#xff09;联系在一起。 20.1 存储和处理数据 首先考虑一个简单的例子&#xff1a;Jack和Jill各自在测量车速&#xff0c…

echarts x轴文字过长 文字换行显示

xAxis: {type: "category",data: [四美休闲娱乐文化场馆, 资讯, 大咖分享],axisLabel: {show: true,fontSize: 10,interval: 0,color: "#CAE8EA",formatter: function (params) {var newParamsName "";var paramsNameNumber params.length;var…

MySQL数据库基础 18

第18章_MySQL8其它新特性 1. MySQL8新特性概述1.1 MySQL8.0 新增特性1.2 MySQL8.0移除的旧特性 2. 新特性1&#xff1a;窗口函数2.1 使用窗口函数前后对比2.2 窗口函数分类2.3 语法结构2.4 分类讲解1. 序号函数2. 分布函数3. 前后函数4. 首尾函数5. 其他函数 2.5 小 结 3. 新特…

【讲座笔记】Continual Learning and Memory Augmentation with Deep Neural Networks

20230607【开放世界的感知&#xff1a;探索可迁移与可持续学习之路】巩东&#xff1a;Continual Learning and Memory Augmentation……_哔哩哔哩_bilibili 游荡……游荡……找个talk看一下 讲的是continuous learning&#xff08;好家伙缩写也是CL&#xff09; 1.continual l…

error: ‘CV_LOAD_IMAGE_UNCHANGED’ was not declared in this scope

1-错误 2-错误原因 opencv4.x以上&#xff0c;有些宏&#xff0c;API名字改了&#xff0c;需要改为新的 3-解决方案 CV_LOAD_IMAGE_UNCHANGED 改为 cv::IMREAD_UNCHANGEDCV_LOAD_IMAGE_GRAYSCALE 改为 cv::IMREAD_GRAYSCALECV_LOAD_IMAGE_COLOR 改为 cv::IMREAD_COLORCV_LO…