1. NAT 地址转换。
2. HTTP 断点续传的原理。
3. 有几种会话跟踪技术(补充)?
4. TCP 接收方如何保证按序接收。
5. 数据传输:服务器与服务器之间传输文件夹下的文件,一个文件夹下有 10 个文件,另一个文件夹下有 100 个文件,两个文件夹大小相等,问,哪个传输更快?
要实现断点续传下载文件,首先要了解断点续传的原理。断点续传其实就是在上一次
下载断开的位置开始继续下载。HTTP 协议中,可以在请求报文头中加入 Range 段,来表
示客户机希望从何处继续下载。在以前版本的 HTTP 协议是不支持断点的,HTTP/1.1 开
始就支持了。一般断点下载时才用到 Range 和 Content-Range 实体头。
这是一个普通的下载请求:
GET /test.txt HTTP/1.1
Accept:*/*
Referer:http://192.168.1.96
Accept-Language:zh-cn
Accept-Encoding:gzip,deflate
User-Agent:Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.2;.NET CLR 2.0.50727)
Host:192.168.1.96
Connection:Keep-Alive
这表示从 1024 字节开始断点续传(加入了 Range:bytes=1024-):
GET /test.txt HTTP/1.1
Accept:*/*
Referer:http://192.168.1.96
Accept-Language:zh-cn
Accept-Encoding:gzip,deflate
User-Agent:Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.2;.NET CLR 2.0.50727)
Host:192.168.1.96
Range:bytes=1024- //Range:bytes=0-10000 (从 0 编号) 告诉服务器/test.txt这个文件从 1024 字节开始传,前面的字节不用传了。
Connection:Keep-Alive
Connection: close
Host: 127.0.0.3
Accept: */*
Pragma: no-cache
Cache-Control: no-cache
Referer: http://127.0.0.3/
User-Agent: Mozilla/4.04 [en] (Win95; I ;Nav)
Range: bytes=5275648-
HTTP/1.1 206 Partial Content
Server: Zero Http Server/1.0
Date: Thu, 12 Jul 2001 11:19:40 GMT
Cache-Control: no-cache
Last-Modified: Tue, 30 Jan 2001 13:11:30 GMT
Content-Type: application/octet-stream
Content-Range: bytes 5275648-15143085/15143086
Content-Length: 9867438
Connection: close
If-Range 中的内容可以为最初收到的 ETag 头或者是 Last-Modfied 中的最后修改时间。
服务端在收到续传请求时,通过 If-Range 中的内容进行校验,看文件的内容是否发生了变
化,校验一致时(文件内容没有发生变化时),返回 206 的续传回应;不一致时(文件的
内容发生了变化),服务端则返回 200 回应,回应的内容为新的文件的全部数据。
If-Match: "40e04a44a997d11:0"//第一次获取到的 Etag 的值
如果服务器端的资源被修改了,那么,http 请求时会发生 http 412 Precondition failed 先
决条件失败 ,因此,我们建议使用 iF-Range。这样,即使文件被修改,也会以 http200 返
回全部资源。
第五种是:Web Storage 技术。
HTML5 中可以使用 Web Storage 技术通过 JavaScript 来保存数据。
Web Storage 由两部分组成:sessionStorage 和 localStorage,他们都可以用来保存
用户会话的信息,也能够实现会话跟踪。 sessionStorage 用于本地存储一个会话 (session)
中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销
毁。因此 sessionStorage 不是一种持久化的本地存储,仅仅是会话级别的存储; localStorage
用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。
TCP 具有乱序重组的功能。
(1)TCP 具有缓冲区;
(2)TCP 报文具有序列号,TCP 给所发送数据的每一个字节关联一个序列号进行排序。
如果分节非顺序到达,接收方的 TCP 将根据它们的序列号重新排序。
我答的 10 个文件更快,因为建立连接数更少,建立连接的开销比传输文件的开销大。 事后讨论下,还有另一个,文件写入磁盘,要计算文件的起始位置,文件数目少的话,这 个开销就小了。