IPv6 · 流媒体 · 即时通讯 · 缓存 · 网络爬虫
VPN
作用
VPN与代理的区别
- 软件
- VPN一般需要安装VPN客户端软件
- 代理不需要安装额外的软件
- 安全性
- VPN默认会对数据进行加密
- 代理默认不会对数据进行加密(数据最终是否加密取决于使用的协议本身)
- 费用
- 一般情况下,VPN比代理贵
实现原理(隧道协议)
tcpdump
tcpdump是Linux平台的抓包分析工具,Windows版本是WinDump
网络爬虫
网络爬虫(Web Crawler),也叫做网络蜘蛛(Web Spider)
- 模拟人类使用浏览器操作页面的行为,对页面进行相关的操作
- 常用爬虫工具:Python 的Scrapy框架
搜索引擎
简易实例
可以使用Java的一个小框架Jsoup爬一些简单的数据
- jar包(jsoup、commons-io):
https://jsoup.org/packages/jsoup-1.13.1.jar
https://mirror.bit.edu.cn/apache//commons/io/binaries/commons-io-2.8.0-bin.zip
爬取目标:https://ext.se.360.cn/webstore/categor
import org.apache.commons.io.FileUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.File;
import java.net.URL;
public class Main {
public static void main(String[] args) throws Exception {
// 请求网站:https://ext.se.360.cn/webstore/category
// Jsoup使用CSS选择器来查找元素
String dir = "C:/Users/yusael/Desktop/imgs/"; // 爬取后的存放路径
String url = "https://ext.se.360.cn/webstore/category";
Document doc = Jsoup.connect(url).get();
Elements eles = doc.select(".applist .appwrap");
for (Element ele : eles) {
String img = ele.selectFirst("img").attr("src");
String title = ele.selectFirst("h3").text();
String intro = ele.selectFirst(".intro").text();
// 下载图片
String filepath = dir + (title + ".png");
FileUtils.copyURLToFile(new URL(img), new File(filepath));
}
}
}
robots.txt
-
robots.txt 是存放于网站根目录下的文本文件,比如 https://www.baidu.com/robots.txt
- 用来告诉爬虫:哪些内容是不应被爬取的,哪些是可以被爬取的
- 因为一些系统中的URL是大小写敏感的,所以 robots.txt 的文件名应统一为小写
-
robots.txt 并不是一个规范,而只是约定俗成的,所以并不能保证网站的隐私
- 只能防君子,不能防小人
- 无法阻止不讲 “武德” 的年轻爬虫爬取隐私信息
无线网络
缓存(Cache)
响应头
Pragma:作用类似于Cache-Control,HTTP/1.0的产物
Expires:缓存的过期时间 (GMT格式时间),HTTP/1.0的产物
GMT时间:例如 date: Sat, 19 May 2018 17:17:24 GMT
Cache-Control:设置缓存策略
- no-storage:不缓存数据到本地
- public:允许用户、代理服务器缓存数据到本地
- private:只允许用户缓存数据到本地
- max-age:缓存的有效时间(多长时间不过期),单位秒
- no-cache:每次需要发请求给服务器询问缓存是否有变化,再来决定如何使用缓存
优先级:Pragma > Cache-Control > Expires
Last-Modified:资源的最后一次修改时间
ETag:资源的唯一标识(根据文件内容计算出来的摘要值)
优先级:ETag > Last-Modifie
Last-Modified vs ETag
Last-Modified的缺陷
- 只能精确到秒级别,如果资源在1秒内被修改了,客户端将无法获取最新的资源数据
- 如果某些资源被修改了(最后一次修改时间发生了变化),但是内容并没有任何变化,则会导致相同数据重复传输,没有使用到缓存
ETag 可以办到
- 只要资源的内容没有变化,就不会重复传输资源数据
- 只要资源的内容发生了变化,就会返回最新的资源数据给客户端
请求头
If-None-Match
- 如果上一次的响应头中有ETag,就会将ETag的值作为请求头的值
- 服务器发现资源的最新摘要值跟If-None-Match不匹配,就会返回新的资源 (200 OK)
- 否则,就不会返回资源的具体数据 (304 Not Modified)
If-Modified-Since
- 如果上一次的响应头中没有ETag,有Last-Modified,就会将Last-Modified的值作为请求头的值
- 如果服务器发现资源的最后一次修改时间晚于If-Modified-Since,就会返回新的资源 (200 OK)
- 否则,就不会返回资源的具体数据 (304 Not Modified)
缓存的使用流程
IPv6
地址格式
ping ::1
可以ping通本机
首部格式
有40字节的固定首部
Version (占4bit,0110):版本号
Traffic Class (占8bit):交通类别
- 指示数据包的类别或优先级,可以帮助路由器根据数据包的优先级处理流量
- 如果路由器发生拥塞,则优先级最低的数据包将被丢弃
Payload Length (占16bit):有效负载长度
- 最大值65535字节
- 包括了扩展头部、上层(传输层)数据的长度首部格式
Hop Limit (占8bit):跳数限制
- 与IPv4数据包中的TTL相同
Source Address (占128bit):源IPv6地址
Destination Address (占128bit):目的IPv6地址
Flow Label (占20bit):流标签
- 指示数据包属于哪个特定序列(流)
- 用数据包的源地址、目的地址、流标签标识一个流
Next Header (占8bit):下一个头部
- 指示扩展头部(如果存在)的类型、上层数据包的协议类型(例如TCP、UDP、ICMPv6)
扩展头部
即时通信
即时通信(Instant Messaging,简称IM),平时用的QQ、微信,都属于典型的IM应用
-
国内的IM开发者社区
http://www.52im.net/ -
常用的协议
XMPP、MQTT、自定义协议
XMPP
XMPP(Extensible Messaging and Presence Protocol),译为:可扩展消息与存在协议
- 前身是Jabber
- 基于TCP,默认端口5222、5269
特点
- 使用XML格式进行传输,体积较大
- 专为IM而开发的、比较成熟的IM协议,开发者接入方便
MQTT
MQTT(Message Queuing Telemetry Transport),译为:消息队列遥测传输
- 基于TCP,默认端口1883、8883(带SSL/TLS)
特点
- 开销很小,以降低网络流量,信息冗余远小于XMPP
- 不是专门为IM设计的协议,很多功能需要自己实现
- 很多人认为MQTT是最适合 物联网 (IoT,Internet of Things) 的网络协议
流媒体
流媒体(Streaming Media),又叫流式媒体
- 是指将一连串的多媒体数据压缩后,经过互联网分段发送数据,在互联网上即时传输影音以供观赏的一种技术
- 此技术使得资料数据包得以像流水一样发送,不使用此技术,就必须在使用前下载整个媒体文件
常见协议
RTP(Real-Time Transport Protocol),实时传输协议
RTCP(Real-Time Transport Control Protocol),实时传输控制协议
- 基于UDP,使用RTP的下一个端口
- 参考:RFC 3550
RTSP(Real-Time Streaming Protocol),实时流协议
- 基于TCP、UDP的554端口
- 参考:RFC 7820
RTMP(Real-Time Messaging Protocol),实时消息传输协议
- 默认基于TCP的1935端口
- 由Adobe公司出品
HLS(HTTP Live Streaming)
- 基于HTTP的流媒体网络传输协议
- 苹果公司出品,参考:RFC 821