基础知识:
TCP的三次握手。
TCP的ACK机制。
IP协议的MTU。
HTTP协议。
LF的ASCII编码为10(10进制),0A(16进制)。
CR的ASCII编码为13(10进制),0D(16进制)。
数字0的ASCII编码为48(10进制),30(16进制)。
使用http的chunked模式下载文件。
这里使用抓包工具监控一个小文件下载的全过程。
网络包概览:
2104
client -> server (http)
MTU=1500,以太网一般都是1500。
减掉IP header和TCP header。1500-20-20=1460Bytes, 这个地方payloadlen=1460。
2105
Clinet -> Server (TCP)
由于一个TCP的payload没有发完所有的http请求,tcp协议再发一次,104Bytes。
注意这里的Push标识。
对于发送端,使tcp cache中的数据都发送出去。对于服务端,提交cache的数据到高一层的协议处理。这里,就是服务端的http协议层处理。
2109
Server -> Client (TCP)
服务端给了一个ACK。
2110
Server -> Client (TCP)
服务端又给了一个ACK。这个ACK和前一个比增大了3911564407 - 3911564303 =104
2195
Server -> client (Http)
这里2809就是下载文件的大小。
Chunked模式下载。第1个chunk的第1块数据。
一个简单的理解,可以认为chunk的模式为。
[Chunk大小]
[CR LF]
[Chunk数据体]
[CR LF]
[Chunk大小]
[CR LF]
[Chunk数据体]
[CR LF]
....
[0] //最后一个块。
[CR LF]
这次传输了1058bytes数据。(这个值是看不到的,可以通过抓包结果计算。找到 [Chunk大小] [CR LF] ,之后的字节就是实际的数据。
2196
Server -> client (Tcp)
Chunked模式下载。第1个chunk的第2块数据。
这次传输了1460bytes数据。
2197
Client -> server (Tcp)
一个Ack。
2198
Server -> client (Tcp)
Chunked模式下载。第1个chunk的第3块数据。
2809-1058-1460=291
291+2(CR LF所占用的2个bytes)=293(该payload的大小)
2199
30是数字0.
这里实际上是:
[Chunk大小] 0
[CR LF] 0D 0A
这是实际上是第2个chunk,同时也是end chunk。标示chunk模式结束。
Server -> client (http)
Chunked模式下载完成。
2200
client->server (TCP)
ACK
下载完成
- 大小: 54.4 KB
- 大小: 78.3 KB
- 大小: 47.3 KB
- 大小: 59.9 KB
- 大小: 64.6 KB
- 大小: 71.8 KB
- 大小: 32.3 KB
- 大小: 44 KB
- 大小: 51.2 KB
- 大小: 56 KB
- 大小: 46.1 KB
- 大小: 35.4 KB
- 大小: 11.4 KB
分享到:
相关推荐
HTTP协议的chunked编码
一个用C语言实现的解析HTTP chunked方式传输的数据包的演示程序
boost:asio请求类,以及chunked解析,亲测可以使用,大家可以根据需要自己修改
HTTP chunked+gzip及浏览器兼容测试
c语言 http chunked解码.docxc语言 http chunked解码.docx
主要来源是https://github.com/c0ny1/chunked-coding-converter 这里感谢下c0ny1师傅的分享 但基于此基础,这里是我个人已经编译完成好的,省去编译步骤,小白皆可使用,可以直接使用burp导入插件
解码简单说一下:chunked 是 http 协议里面的分块传输,简单说就是一个数据传输方式,之后将数据一段一段传过去,waf 无法检测到,就是绕过了,可以结合
django块上传这个简单的django应用程序使用户可以将多个文件中的大文件上传到Django,并可以在上传中断时恢复。 该应用程序旨在与 ()一起使用 。 许可证: 。演示版如果您想使用此模块看到一个非常简单的Django...
burpsuite分块传输插件,一键生成分块传输请求,用于bypass waf等
一个对chunked编码进行解码的例子,通过java socket实现发送http请求,对gzip压缩的消息体进行解码处理。
http1.1 chunked 中文剖析。。。。。。。。。。。。。。
通过本文给大家介绍php用curl读取http chunked数据的方法,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起学习吧
要使用它,您将需要三件事:一种用于存储文件的方法,一个用于何时文件完成的侦听器以及用于处理接收到的块的主要服务对象。 听众: public class MyListener implements ChunkedFileCompletionListener { ...
简单但是内容不浅的netty传输文件的例子,实现客户端和服务器端。全面,5积分绝对值得。本人通过很久测试才完成该简单通俗易懂的例子。 netty版本:4.0.23
netty案例,netty4.1中级拓展篇十一《Netty基于ChunkedStream数据流切块传输》源码 ...
你可以使用大文件分割器将文件分割成指定大小的多个文件。 日志文件分割,可以用于将大的日志文件、小说文件等分割成多个小文件。 特点: 1. 默认按1MB大小分割,你可以指定分割大小,比如你的文件是100M,你想分成...
3.3 日期/时间格式(Date/Time Formats) 3.3.1完整日期 (Full Date) 3.3.2 Delta Seconds 3.4 字符集 3.4.1丢失的字符集(Missing Charset) 3.5 内容编码(Content Codings) 3.6 传输编码 (Transfer Codings)...
Chunked编码使用若干个Chunk串连而成,由一个标明长度为0的chunk标示结束。每个Chunk分为头部和正文两部分,头部内容指定下一段正文的字符总数(十六进制的数字)和数量单位(一般不写),正文部分就是指定长度的...
java 使用socked接收chunck分块数据 , 部分做修改, 原来参考地址:http://blog.csdn.net/lhj_5460/article/details/48156461
使用方法安装npm i启动// 用一个终端来打开前端部分npm start// 用另一个终端来打开servernpm run server使用在浏览器里打开http://localhost:3000页面。如果要测试多终端上传,则多开浏览器窗口。上传文件。前端...