shuguang's blog

环境决定基础,选择决定价值,努力决定方向。

网络协议 - 相关补充

  • 本文网络协议其他知识,包括常用的VPN、网络爬虫、HTTP缓存、IPv6、即时通信和流媒体。

#VPN

  • 简介

    • VPN(Virtual Private Network)虚拟私人网络
    • 能在公用网络上建立专用网络,并进行加密通讯

    公用网络上的VPN


  • VPN - 作用

    • 提高上网安全性 保护公司内部网络(外部网络访问公司内部服务器)
    • 隐藏上网者身份(隐藏IP)
    • 突破网站地域限制
    • 突破网络封锁(GFW的限制)

  • 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框架


#HTTP缓存

  • 缓存(Cache)

    • 简单流程

      HTTP缓存简单流程

      • 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

  • 缓存 - 响应头

    1. Last-Modified: 资源的最后一次修改时间
    2. ETag: 资源的唯一标识(根据文件内同计算出的摘要值)
    3. 优先级 ETag > Last - Modified

  • 缓存 - 请求头

    • If-None-Match

      1. 如果上一次响应头中有ETag,则将ETag值作为该请求头的值
      2. 如果服务器发现请求资源的最新摘要值与If-None-Match不匹配,就返回新资源(200 ok)
      3. 否则不返回资源具体数据(304 Not Modified)
    • If-Modified-Since

      1. 如果上一次响应头中没有ETag,有Last-Modified,则将Last-Modified值作为该请求头的值。
      2. 如果服务器发现请求资源的最后一次修改时间小于If-Modified-Since,就返回新资源(200 ok)
      3. 否则不返回资源具体数据(304 Not Modified)
    • Last-ModifiedETag 区别

      • Last-Modified
        1. 只能精确到秒级别,如果资源部在1秒内被修改,客户端将无法获取最新数据
        2. 如果某些资源被修改了(最后一次修改时间发生变化),但是内容没有变化,就会导致数据重复传输,没有使用缓存
      • ETag
        • 只要资源内容发生变化,就会返回最新的资源数据给客户端

  • 缓存使用流程

    HTTP缓存使用流程


#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 - 首部格式

    IPv6-首部格式

    • 前面64位
    • 有40个字节的固定首部

    IPv4和IPv6头部对比

    • 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):下一个头部
      IPv6下一个头部
    • 指示扩展头部(如果存在)的类型,上层数据包的协议类型(例如TCP,UDP)
      指示扩展头协议类型对应编号

#即时通信

  • 即时通信(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)的网络协议

    即时通信-MQTT


#流媒体

  • 流媒体(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