- 本文网络协议其他知识,包括常用的VPN、网络爬虫、HTTP缓存、IPv6、即时通信和流媒体。
#VPN
简介
- VPN(Virtual Private Network)虚拟私人网络
- 能在公用网络上建立专用网络,并进行加密通讯
VPN - 作用
- 提高上网安全性 保护公司内部网络(外部网络访问公司内部服务器)
- 隐藏上网者身份(隐藏IP)
- 突破网站地域限制
- 突破网络封锁(GFW的限制)
VPN - 与代理区别
- 软件
- VPN一般需要安装VPN客户端软件
- 代理不需要安装额外的软件
- 安全性
- VPN默认会对数据进行加密
- 代理默认不会对数据进行加密(数据最终是否加密取决于使用的协议本身
- 费用
- 一般情况下,VPN比代理贵
- 一般情况下,VPN比代理贵
- 软件
VPN - 实现原理
- VPN的实现原理是:使用了隧道协议(Tunneling Protocol)
- 常见的VPN隧道协议有 PPTP(Point to Point Tunneling Protocol):点对点隧道协议
- L2TP(Layer Two Tunneling Protocol):第二层隧道协议
- SSL VPN(如OpenVPN)
- …
tcpdump
#网络爬虫
概述
- 网络爬虫(Web Crawler),也叫做网蜘蛛(Web Spider)
- 网络爬虫是模拟人类使用浏览器操作页面的行为,对页面进行相关操作
- 常用的爬虫工具:Python的Scrapy框架
网络爬虫 - 简易实例
网络爬虫 - robots.txt
- 存在于网络根目录的文件,例如:https://www.bilibili.com/robots.txt
- 因为一些系统中的URL是大小写敏感的,所以robots.txt的文件名应统一为小写
#HTTP缓存
缓存(Cache)
简单流程
Resource cache (Memory cache and Disk cache)
通常会缓存的情况: GET请求 + 静态资源 (js,css,html,图片等)
Ctrl + F5 :强制刷新缓存
缓存 - 响应头
Pragma:作用类似于Cache-Control, HTTP、1.0产物
Expires:缓存的过期时间(CMT格式),HTTP/1.0产物
Cache-Control:缓存策略
- no-storage:不缓存数据到本地
- public:允许用户、代理服务器缓存数据到本地
- private:只允许用户缓存数据到本地(默认)
- max-age:缓存的有效时间,单位秒
- no-cache:每次发请求给服务器询问缓存是否变化,再决定是否使用缓存
优先级: Pragma > cache-control > Expires
缓存 - 响应头
- Last-Modified: 资源的最后一次修改时间
- ETag: 资源的唯一标识(根据文件内同计算出的摘要值)
- 优先级 ETag > Last - Modified
缓存 - 请求头
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)
Last-Modified 与ETag 区别
- Last-Modified
- 只能精确到秒级别,如果资源部在1秒内被修改,客户端将无法获取最新数据
- 如果某些资源被修改了(最后一次修改时间发生变化),但是内容没有变化,就会导致数据重复传输,没有使用缓存
- ETag
- 只要资源内容发生变化,就会返回最新的资源数据给客户端
- 只要资源内容发生变化,就会返回最新的资源数据给客户端
- Last-Modified
缓存使用流程
#IPv6
背景
- IPv6(Internet Protocol version 6)
- 用它来取代IPv4主要是为了解决IPv4地址枯竭问题,同时它也在其他方面对于IPv4有许多改进
- IPv6采用128位的地址,而IPv4使用的是32位
- 支持2^128(约3.4 ∗ 1038 )个地址
- 就以地球人口70亿人计算,每人平均可分得约4.86 ∗ 10^28个IPv6地址
IPv6 - 地址格式
- IPv6地址为128位,没16bit为一组,一共8组
- 每组用":"隔开,每组4位十六进制方式表示
- 2001:0db8:86a3:08d3:1319:8a2e:0307:7344
- 类似于IPv4的点分十进制的写法
- 2.0.0.1.0.d.b.8.8.6.a.3.0.8.d.3.1.3.1.9.8.a.2.e.0.3.0.7.7.3.4.4
- 每组前面连续0可以省略
- 2001:0db8:86a3:0000:0000:0000:0307:7344
- 2001:0db8:86a3:0:0:0:0307:7344
- 可以使用双冒号“::”表示一组或多组连续的0,但只能出现一次
- 2001:0db8:86a3:0000:0000:0000:0307:7344
- 2001:0db8:86a3::0307:7344
- ::1是本地环回地址(0:0:0:0:0:0:0:1)
ping ::1
ping 127.0.0.1
IPv6 - 首部格式
- 前面64位
- 有40个字节的固定首部
Version(占4bit,0110):版本号
Traddic Class(占8bit):交通类别
- 指示数据包的类别或优先级,可以帮助路由器根据数据包的优先级处理流量
- 如果路由器发生拥塞,则优先级别最低的数据包将被丢弃
Payload Length(占16bit):有效负载长度
- 最大致65535分字节
- 包括了扩展头部、上层(传输层)数据长度
Hop Limit(占8bit):跳数限制
- 与IPv4数据包中的TTL相同
Source Address(占128bit):源IPv6地址
Destination Adress(占128bit):目的IPv6地址
Flow Label(占20bit):标签流
- 指示数据包属于那以特定序列(流)
- 用数据包的源地址、目的地址、流标签标识一个流
不包括固定40个字节
IPv6 - 扩展头部
- Next Header(占8bit):下一个头部
- 指示扩展头部(如果存在)的类型,上层数据包的协议类型(例如TCP,UDP)
- Next Header(占8bit):下一个头部
#即时通信
即时通信(Instant Messaging,简称IM),平时用的QQ、微信,都属于典型的IM应用
国内的IM开发者社区
IM云服务
常用协议
- XMPP、MQTT、自定义协议
即时通信 - XMPP
- XMPP(Extensible Messaging and Presence Protocol)
- 译为:可扩展消息与存在协议,前身是Jabber
- 基于TCP,默认端口5222、5269
- 特点
- 使用XML格式进行传输,体积较大
- 比较成熟的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),译为:实时传输控制协议
- 参考:RFC 3550,基于UDP,使用RTP的下一个端口
- RTSP(Real-Time Streaming Protocol),译为:实时流协议,参考:RFC 7820
- 基于TCP、UDP的554端口
- RTMP(Real-Time Messaging Protocol),译为:实时消息传输协议,由Adobe公司出品
- 默认基于TCP的1935端口
- HLS(HTTP Live Streaming),基于HTTP的流媒体网络传输协议,苹果公司出品,参考:RFC 8216