网络协议九:其他协议

WebSoclet

  1. HTTP与WebSoclet
    1. HTTP请求的特点:通信只能由客户端发起。所以,早期很多网站为了实现推送技术,所用的技术都是轮询
    2. 轮询是指由浏览器每隔一段时间(如每秒)向服务器发出HTTP请求,然后服务器返回最新的数据给客户端
    3. 为了能更好的节省服务器资源和带宽,并且能够更实时地进行通讯,HTML5规范中出现了WebSocket协议
  2. WebSocket
    1. WebSocket,基于TCP的支持全双工通信的应用层协议
      1. 在2011年由IETF标准化为RFC 6455,后由RFC 7936补充规范
      2. 客户端、服务器,任何一方都可以主动发消息给对方
    2. WebSocket的应用场景很多
      1. 社交订阅、股票基金报价、体育实况更新、多媒体聊天、多玩家游戏等
  3. HTTP与WebSoclet区别
    1. WebSocket和HTTP属于平级关系,都是应用层的协议
      1. 其实TCP本身就是支持全双工通信的(客户端、服务器均可主动发消息给对方)
      2. 只是HTTP的“请求-应答模式”限制了TCP的能力
    2. WebSocket使用80(ws://)、443(wss://)端口,可以绕过大多数防火墙的限制
      1. WebSocket协议头为ws://或者wss://,wss是ws的安全版,跟http、https一样
      2. ws://example.com/wsapi
      3. wss://secure.example.com/wsapi
    3. 与HTTP不同的是,WebSocket需要先建立连接
      1. 注意:这个建立连接是应用层的连接建立,不是TCP的连接建立
      2. 这就使得WebSocket成为一种有状态的协议,之后通信时可以省略部分状态信息
      3. 而HTTP请求可能需要在每个请求都额外携带状态信息(如身份认证Cookie等)

WebSocket建立连接

  1. WebSocket需要借助HTTP协议来建立连接(也叫作握手,Handshake
    1. 由客户端(浏览器)主动发出握手请求

    图1

    1. Connection必须设置Upgrade
      1. 表示客户端希望连接升级
    2. Upgrade必须设置websocket
      1. 表示希望升级到WebSocket协议
    3. Sec-WebSocket-Version
      1. 表示支持的Websocket版本
      2. RFC 6455要求使用的版本是13
    4. Sec-WebSocket-Key是客户端生成的随机字符串,比如例子中的:dGh1IHNhbXBsZSBub25jZQ==
    5. 服务器接收到客户端的Sec-WebSocket-Key后,会进行以下操作
      1. Sec-WebSocket-Key加上一个固定的GUID值(258EAFA5-E914-47DA-95CA-C5AB0DC85B11)
        1. dGh1IHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11
      2. 将①的结果进行SHA-1摘要计算
        1. b37a4f2cc0624f1690f64606cf385945b2bec4ea
      3. 将②的结果进行Hex To Base64编码
        1. s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
      4. 将③的结果做为Sec-WebSocket-Accept响应头的值,返回给客户端
    6. 如此操作,可以尽量避免普通HTTP请求被误认为WebSocket协议
  2. WebSocket使用
    1. WebSocket体验和演示(官网)
      1. https://www.websocket.org/echo.html
      2. 可以简单实现,服务器与客户端的简单消息发送,只需要简历一次连接即可相互通信
    2. W3C标准化了一套WebSocket API,可以直接使用JS调用

       let websocket = new WebSocket(’wss://echo.websocket.org/‘);
      

WebService (已经淘汰)

  1. WebService,译为:Web服务,是一种跨编程语言跨操作系统平台的远程调用技术标准
  2. WebService使用场景举例
    1. 天气预报、手机归属地查询、航班信息查询、物流信息查询等
    2. 比如天气预报,是气象局把自己的服务以WebService形式暴露出来,让第三方程序可以调用这些服务功能
    3. http://www.webxml.com.cn/zh_cn/index.aspx
  3. 事实上,WebService完全可以用普通的Web API取代(比如HTTP + JSON)
    1. 现在很多企业的开放平台都是直接采用Web API
  4. 核心概念
    1. SOAP(Simple Object Access Protocol),译为:简单对象访问协议
      1. 很多时候,SOAP = HTTP + XML
        1. 用HTTP协议发送请求,数据内容用XML文档来传递
      2. WebService使用SOAP协议来封装传递数据
    2. WSDL(Web Services Description Language),译为:Web服务描述语言
      1. 一个XML文档,用以描述WebService接口的细节(比如参数、返回值等)
      2. 一般在WebService的URL后面跟上?wsdl获取WSDL信息
        1. 比如:http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl
  5. 总结:WebService就是某个公司将自己的数据进行开放出去共别人使用,但是别人使用的时候必须遵守WebService指定的协议来请求数据;即WebService就是一个对外开放的一定协议来访问的服务器
  6. 现在已经淘汰,直接被公开的接口调用来替代。

其他知识点

RESTful(注意理解,重要!)

  1. 简介
    1. REST的全称是:REpresentational State Transfer
      1. 译为:“表现层状态转移”
    2. REST是一种互联网软件架构设计风格
      1. 定义了一组用于创建Web服务的约束
      2. 符合REST架构的Web服务,称为RESTful Web服务
  2. 总结:就是一个规范标准用来规范后台接口的路径、请求方式
  3. 实践建议
    1. URL中使用名词(建议用复数形式),不使用动词
      1. 推荐:/users 、/users/6
      2. 不推荐:/listUsers、/getUser?id=6、/user/list、 /user/get?id=6
    2. 使用HTTP的请求方法来表达动作

      图1

    3. 一个资源连接到其他资源,使用子资源的形式
      1. GET /users/6/cars/88
        1. 查询id为6的用户的所有车的第88号车
      2. POST /user/8/cars
        1. 给id为8的用户添加一两车
    4. API版本化
      1. zh.com/v1/users
      2. zh.com/v2/user/66
    5. 返回JSON格式的数据
    6. 发生错误时,不要返回200状态码

HTTPDNS

  1. HTTPDNS是基于HTTP协议向DNS服务器发送域名解析请求
    1. 替代了基于DNS协议向运营商Local DNS发起解析请求的传统方式
    2. 可以避免Local DNS造成的域名劫持和跨网访问问题
    3. 常用在移动互联网中(比如在Android、iOS开发中)
  2. 本质:就是以前客户端输入一个域名要通过DNS协议访问DNS服务器获取到IP地址,现在有一个HTTP协议的服务器,通过发送http协议就可以到HTTP服务器中获取到对应的IP地址
  3. 使用
    1. 市面上已经有现成的解决方案
      1. 腾讯云:https://cloud.tencent.com/product/httpdns
      2. 阿里云:https://help.aliyun.com/product/30100.html
    2. 移动端集成相关的SDK即可使用HTTPDNS服务

FTP

  1. FTP(File Transport Protocol),译为:文件传输协议,RFC 959定义了此规范,是基于TCP的应用层协议
    1. RFC 1738中有定义,FTP的URL格式为:ftp://[user[:password]@]host[:port]/url-path
  2. 连接模式
    1. FTP有2种连接模式:主动(Active)和被动(Passive)
    2. 不管是哪种模式,都需要客户端和服务器建立2个连接
      1. 控制连接:用于传输状态信息(命令,cmd)
      2. 数据连接:用于传输文件和目录信息(data)
  3. 主动模式
    1. 客户端打开一个随机的命令端口
      1. 端口号大于1024,假设为N
      2. 同时连接至服务器的命令端口21
    2. 客户端开始监听N+1数据端口
      1. 同时向服务器发送一个Port命令给服务器的命令端口21
      2. 此命令告诉服务器
        1. 客户端正在监听的数据端口N+1s
        2. 并且已准备好从此端口接收数据
    3. 服务器打开20号数据端口,并且创建和客户端数据端口(N+1)的连接
  4. 被动模式
    1. 客户端通过两个随机的端口与服务器建立连接
      1. 命令端口N
      2. 数据端口N+1
    2. 步骤
      1. 客户端的命令端口N用于连接服务器的命令端口21
      2. 客户端通过命令端口N发送PASV命令给服务器的命令端口21
      3. 服务器打开一个随机的数据端口P,并告知客户端该端口号P
      4. 客户端数据端口N+1发起与服务器数据端口P的连接

图1

邮件相关的协议

  1. 发邮件使用的协议
    1. SMTP(Simple Mail Transfer Protocol),译为:简单邮件传输协议
      1. 基于TCP,标准参考RFC 5321
      2. 服务器默认使用25端口,SSL/TLS使用465端口
  2. 收邮件使用的协议
    1. POP(Post Office Protocol),译为:邮局协议
      1. 基于TCP,最新版是POP3,标准参考RFC 1939
      2. 服务器默认使用110端口,SSL/TLS使用995端口
    2. IMAP(Internet Message Access Protocol),译为:因特网信息访问协议
      1. 基于TCP,最新版是IMAP4,标准参考RFC 3501
      2. 服务器默认使用143端口,SSL/TLS使用993端口

    图1

  3. POP vs IMAP
    1. POP的特点
      1. 客户端连接服务器时,将会从服务器下载所有邮件
        1. 可以设置下载完后,立即或一段时间后删除服务器邮件
      2. 客户端的操作(比如删除邮件、移动到文件夹)不会跟服务器同步
      3. 每个客户端都是独立的,都可以获得其自己的电子邮件副本
    2. IMAP的特点
      1. 客户端连接服务器时,获取的是服务器上邮件的基本信息,并不会下载邮件
        1. 等打开邮件时,才开始下载邮件
      2. 客户端的操作(比如删除邮件、移动到文件夹)跟服务器同步
      3. 所有客户端始终会看到相同的邮件和相同的文件夹

VPN

  1. VPN(Virtual Private Network),译为:虚拟私人网络
    1. 它可以在公共网络上建立专用网络,进行加密通讯
    2. 有个VPN服务器,VPN客户端,通过VPN客户端与VPN服务器进行数据传送(加密),VPN服务器(解密)再去查找目的资源
  2. 作用
    1. 提高上网的安全性
    2. 保护公司内部资料
    3. 隐藏上网者的身份
    4. 突破网站的地域限制
      1. 有些网站针对不同地区的用户展示不同的内容
    5. 突破网络封锁
      1. 因为有GFW的限制,有些网站在国内上不了
      2. Great Firewall of China
      3. 中国长城防火墙
  3. 与代理的区别
    1. 软件
      1. VPN一般需要安装VPN客户端软件
      2. 代理不需要安装额外的软件
    2. 安全性
      1. VPN默认会对数据进行加密
      2. 代理默认不会对数据进行加密(数据最终是否加密取决于使用的协议本身)
    3. 费用
      1. 一般情况下,VPN比代理贵
  4. 实现原理
    1. VPN的实现原理是:使用了隧道协议(Tunneling Protocol)
    2. 常见的VPN隧道协议有
      1. PPTP(Point to Point Tunneling Protocol):点对点隧道协议
      2. L2TP(Layer Two Tunneling Protocol):第二层隧道协议
      3. IPsec(Internet Protocol Security):互联网安全协议
      4. SSL VPN(如OpenVPN)

tcpdump

  1. tcpdump是Linux平台(命令行)的抓包分析工具,Windows版本是WinDump
  2. 使用手册: https://www.tcpdump.org/manpages/tcpdump.1.html
  3. 不错的教程: https://danielmiessler.com/study/tcpdump/

网络爬虫

  1. 网络爬虫(Web Crawler),也叫做网络蜘蛛(Web Spider)
    1. 模拟人类使用浏览器操作页面的行为,对页面进行相关的操作
    2. 常用爬虫工具:Python的Scrapy框架
  2. 搜索引擎
  3. 简易实例
    1. 可以使用Java的一个小框架Jsoup爬一些简单的数据
      1. jar包
        1. https://jsoup.org/packages/jsoup-1.13.1.jar
        2. https://mirror.bit.edu.cn/apache//commons/io/binaries/commons-io-2.8.0-bin.zip
  4. robots.txt
    1. robots.txt是存放于网站根目录下的文本文件,比如https://www.baidu.com/robots.txt
      1. 官方用来告诉爬虫:哪些内容是不应被爬取的,哪些是可以被爬取的
      2. 因为一些系统中的URL是大小写敏感的,所以robots.txt的文件名应统一为小写
    2. 它并不是一个规范,而只是约定俗成的,所以并不能保证网站的隐私
      1. 只能防君子,不能防小人
      2. 无法阻止不讲“武德”的年轻爬虫爬取隐私信息
    3. robots.txt文件内容分析

      图1

Table of Contents