`
zhang_xzhi_xjtu
  • 浏览: 536779 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

使用http的chunked模式下载文件网络详解

    博客分类:
  • Web
 
阅读更多
基础知识:
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
分享到:
评论

相关推荐

    nginx详解.pptx

    Nginx 详解 Nginx 是一个自由的、开源的、高性能的 HTTP 服务器和反向代理服务器,支持负载均衡、缓存、内容缓存、SSL/TLS 加密、虚拟主机、URL 重写、访问控制、速率限制等多种功能。 模块架构 Nginx 的架构是...

    [上传下载]Jquery Large File Upload (Jquery实现大文件上传)_jqupload.zip

    前端应提供清晰的错误提示,如网络问题、文件格式错误等。这需要捕获并解析服务器返回的错误信息,确保用户能够理解并解决遇到的问题。 总结,jQuery结合HTML5的新特性以及相关插件,可以实现大文件的高效、流畅...

    HTTP协议详解 培训资料(PPT)

    HTTP(超文本传输协议)是互联网上应用最广泛的一种网络协议,它定义了客户端(通常是Web浏览器)和服务器之间通信的数据格式和交互规则。HTTP协议是TCP/IP协议栈中的应用层协议,它允许用户通过Web浏览器获取网页和...

    WCF上传下载

    8. **性能优化**:为了提高文件传输速度,可以考虑使用BinaryFormatter或DataContractSerializer进行序列化,或者使用Chunked传输来分块发送大文件。 9. **并发控制**:WCF支持并发实例化模型,允许服务处理多个...

    swjtu西南交大:网络编程技术-实验报告-网络体系结构及TCPIP协议分析

    以上内容详细阐述了给定文件中的知识点,包括网络体系结构、TCP/IP协议的基本概念、报文封装方式、常用TCP/IP协议及其层次结构、报文格式定义以及典型网络应用的实现原理等。通过实验报告的内容,可以全面了解这些...

    nginx-http-flv - module.rar

    **Nginx-HTTP-FLV 模块详解** Nginx 是一款高性能、轻量级的 HTTP 和反向代理服务器,广泛应用于互联网服务。它以其稳定性和高并发处理能力而受到赞誉。在标题提到的 "nginx-http-flv - module.rar" 文件中,包含的...

    HTTP协议Keep-Alive模式详解和HTTP头字段总结

    在HTTP协议中,Keep-Alive模式是一种用于优化网络通信的技术,它允许客户端和服务器在同一TCP连接上进行多次请求和响应,而不是每次交互都创建新的连接。这种模式显著提高了效率,减少了网络延迟,降低了资源消耗,...

    PHP官方API文档

    这种格式将手册分成多个小的HTML文件,便于在网络上传输和本地浏览,尤其在没有完整手册数据库的离线环境中非常有用。每个HTML文件对应手册的一个部分,这样可以快速定位到所需的信息,而无需加载整个大文件。 **...

    http-core-4.3.3.jar源码

    2. **HTTP/1.1编码**:支持 chunked transfer encoding 和 content-length 编码,保证大文件的传输效率。 3. **异步处理**:HttpCore提供了异步执行HTTP请求的能力,通过Future接口进行回调,适应高并发场景。 五、...

    http协议pdf版(english)

    转移编码(Transfer Codings)则关注数据在网络传输过程中的编码形式,例如“分块转移编码”(Chunked Transfer Coding)允许将数据分割成较小的块进行传输,提高了传输效率和错误恢复能力。 #### 媒体类型 媒体...

    dumpcap and mergecp详细介绍

    **Dumpcap** 是 Wireshark 套件中的一个强大的网络数据捕获工具,它能够高效地捕获网络中的数据包,并将这些数据包写入文件中进行后续分析。与 Wireshark 的图形界面不同,Dumpcap 是一个命令行工具,更适合于长时间...

    HTTP1.0&HTTP1.1(rfc2616)

    《TCP-IP详解卷1-2》是理解网络协议基础的宝贵资料,其中涵盖了TCP/IP协议族的各个方面,包括TCP/IP层次结构、网络接口层、互联网层、传输层以及应用层协议等,对理解HTTP协议的工作原理有着重要帮助。通过阅读这...

    http1.1协议

    - **分块编码(Chunked Transfer Coding)**:允许服务器在不知道响应大小的情况下发送数据,提高了大文件传输的效率。 - **缓存控制(Cache Control)**:增强了缓存机制,使得重复请求的资源可以直接从本地缓存中...

    nginx-flv.zip

    【Nginx-FLV 模块详解】 Nginx 是一款高性能的 Web 和反向代理服务器,以其轻量级、稳定性和高并发处理能力而备受赞誉。在 Windows 环境下,为了实现流媒体服务,特别是 FLV(Flash Video)格式的视频流,可以借助 ...

    http1.1 http1.1

    ### HTTP/1.1协议详解 #### 一、引言 **HTTP/1.1**是超文本传输协议(Hypertext Transfer Protocol)的一个版本,它由互联网工程任务组(IETF)制定,并在RFC 2616文档中进行了详细定义。自1999年发布以来,...

    python 之 前端开发(HTTP协议、head标签、img标….docx

    ### Python 之 前端开发详解:HTTP协议、HTML标签 #### 第十一章:前端开发 本章节主要探讨Python在前端开发中的应用,重点介绍了HTTP协议的关键特性及其对前端开发的影响。此外,还涉及了如何利用Python进行HTTP...

Global site tag (gtag.js) - Google Analytics