| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 一次HTTP(S)请求究竟需要多少流量?Wireshark抓包分析 -> 正文阅读 |
|
[网络协议]一次HTTP(S)请求究竟需要多少流量?Wireshark抓包分析 |
来自:指月 https://www.lixueduan.com 原文:https://www.lixueduan.com/post/network/06-http-flow/ 本文主要通过抓包分析了一次 HTTP(S) 请求究竟需要多少流量,同时也分析了一下整个 HTTP 请求的执行流程。 1. 背景最近查询监控,观察到某个负载的带宽峰值在最高的时候都达到了近 30M,然后查了对应时间段的系统 QPS,发现确实是有一个明细的峰值,但是也不应该有这种多流量吧?
后续对接口响应进行了优化和精简,整体响应数据降低了 20% 左右,但是负载的带宽峰值还是没什么变化,有降低但是并不明显。 HTTP 响应除了包含我们业务数据的 对比了几个请求后发现,虽然这部分会消耗一定流量,但是并不多,还没有业务数据多呢。 这就很奇怪了,也找不到流量到底消耗到哪儿去了,于是想着通过抓包来分析一下。 2. 抓包分析没办法,HTTP 层找不到原因只能从更底层找了,这里使用的是 具体的抓包结果如下图所示:
按阶段拆分了一下,可以看到整个流程可以分为 5 个阶段:
TCP 三次握手,四次挥手详情见计算机网络(二)—TCP三次握手四次挥手 2.1 TCP 三次握手首先是 三次握手,毕竟 HTTP 也是基于 TCP 的,所以需要先建立 TCP 连接。 从图中可以看到,客户端发送两次请求,总共 66+54 字节,服务端一次请求共 66 字节。 2.2 TLS 握手由于是 HTTPS,所以还需要进行额外的一个 TLS 握手,具体步骤如下:
从截图或者步骤中可以看到,服务端需要提供证书给客户端,所以肯定会耗费较多的流量。 客户端:571(步骤1)+54(ACK)+147(步骤4)+153(步骤5)+576(步骤5) 服务端:60(ACK)+1446(步骤2)+1446(步骤3)+220(步骤4)+60(ACK)+312(步骤6) 2.3 业务请求建立 TLS 连接后才能进行真正的业务请求,这里一共进行了 3 个请求。 客户端:189(业务数据)+54(ACK)+268(业务数据)+54(ACK)+683(业务数据)+54(ACK) 服务端:636(业务数据)+92+350(业务数据)+92+257(业务数据)+92 2.4 Keep-Alive为了防止连接被关闭,客户端会自动发送 Keep-Alive 请求来保持连接。
每个心跳包:客户端 55 字节,服务端 66 字节。 2.5 TCP 四次挥手最后则是 TCP 的四次挥手了。 客户端:54+54 服务端:60+60 3. 结论经过前面的分析,基本上已经可以确定流量到底是消耗在哪个阶段了,这里还是总结一下,具体流量消耗请求见下表:
从表格中可以看到,一共发起了 3 个 HTTP 请求,客户端消耗了 3092 字节,服务端则多达 5311 字节。 客户端真正发送的业务数据为:1140 字节,占比 36% 服务端真正的响应数据为 1243 字节,占比只有 23%。 不管是客户端还是服务端 TLS 握手消耗占比都超过了 50%,这也是为什么要保持连接,不然每请求一次都要走一遍 TLS 握手,那这个消耗可太大了。
这也印证了为什么负载带宽这么高,且减少响应数据后带宽变化不大。毕竟真正消耗带宽的地方并不是业务数据。 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/27 13:17:12- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |