shuguang's blog

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

网络协议 - 其他协议

  • 本文主要介绍应用层除HTTPS之外的其他协议,包括支持全双工的WebSocket协议、HTTPDNS、文件传输协议FTP、邮件协议收发协议POP、IMAP(收)和SMTP(发)。

#区别WebSocket和Socket

  • Socket:一套网络编程API,利用他可以建立网络连接,一般都是基于操作系统底层实现的(Socket编程)

  • WebSocket:网络协议。


#WebSocket协议

  • 背景

    • HTTP请求的特点,通信只能由客户端发起(请求-应答 模式),所以早期的网站为了实现推送技术,!所用的技术都是轮询(直播,聊天,股票)

    AJAX轮询和WebSocket

    • **轮询:**由浏览器每隔一段时间(如每秒)向服务器发出HTTP请求,然后服务器返回最新的数据给客户端
    • 为了能更好的节省服务器资源和带宽,并且能够更实时地进行通讯,HTML5规范中出现了WebSocket协议

  • WebSocket

    • WebSocket是基于TCP的支持全双工通信应用层协议

      • 在2011年由IETF标准化为 RFC 6455,后由 RFC 7936 补充规范
      • 客户端、服务器,任何一方都可以主动发消息给对方

    • WebSocket的应用场景

      • 社交订阅、股票基金报价、体育实况更新、多媒体聊天、多玩家游戏等

    • WebSocket和 HTTP 属于平级关系,都是应用层的协议

      • 其实TCP本身就是支持全双工通信的(客户端、服务器均可主动发消息给对方)
      • 只是HTTP的 “请求-应答模式” 限制了TCP的能力

    • WebSocket使用 80(ws://)、443(wss://) 端口,可以绕过大多数防火墙的限制(不能写#)

      • ws://example.com/wsapi
      • wss://secure.example.com/wsapi

    • 与 HTTP 不同的是,WebSocket需要先建立连接(在应用层建立)

      • 这就使得WebSocket成为一种有状态的协议,之后通信时可以省略部分状态信息
      • 而HTTP请求可能需要在每个请求都额外携带状态信息(如身份认证等)

#WebSocket - 建立连接

  • WebSocket需要借助 HTTP协议来建立连接(也叫作握手,Handshake

    • 由客户端(浏览器)主动发出握手请求

    浏览器发出握手请求

    • Connection必须设置Upgrade
      • 表示客户端希望连接升级
    • Upgrade必须设置webSocket
      • 表示希望升级到WebSocket协议
    • Sec-WebSocket-Version
      • 表示支持的WebSocket版本
      • RFC 6455要求使用的的是13
    • Sec-WebSocket-Key是客户端随机生成的字符串
    • 服务端收到客户端的Sec-WebSocket-Key后会执行以下操作
      1. Sec-WebSocket-Key加上一个固定的GUID
      2. 将1中的结果进行SHA-1摘要计算
      3. 将2中的结果进行Hex To Base64编码
      4. 将3中的结果作为Sec-WebSocket-Accept响应头的值,返回给客户端
    • 这样操作以后就能尽量避免普通的HTTP请求被误认为是WebSocket协议

  • WebSocket - 使用


#WebService

  • WebService:Web服务,是一种跨编程语言和跨操作系统平台的远程调用技术标准

  • 应用场景

    • 天气预报、手机归属地查询、航班信息查询、物流信息查询等,比如天气预报,是气象局把自己的服务以WebService形式暴露出来,让第三方程序可以调用这些服务功能

    • http://www.webxml.com.cn/zh_cn/index.aspx

    • 后被Web API取代(例如:HTTP + JSON)(大多数使用)

  • WebService传递数据

    • WebService使用SOAP协议来封装传递数据
      • SOAP(Simple Object Access Protocol),译为:简单对象访问协议
      • 很多时候,SOAP = HTTP + XML

    WebService传递数据


  • 补充:
    • WSDL(Web Services Description Language),译为:Web服务描述语言
    • 一个XML文档,用以描述WebService接口的细节(比如参数、返回值等)
    • 一般在WebService的URL后面跟上?wsdl获取WSDL信息
    • 比如:http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl

#RESTful风格

  • 简介:

    • RESTful的全称是:(REpresentational State Transfer)

    • REST是一种互联网架构设计风格

      • 定义一组用于创建Web服务的约束
      • 符合REST架构的Web服务,称为为RESTful Web服务

  • RESTful的使用:

    • URL使用名词(建议使用复数形式),不使用动词

      • 推荐users/users/6
      • 不推荐:/listUsers/getUser?id=6/user/list/user/get?id=6
    • 使用HTTP 的请求方法表示动作

    RESTful风格的请求动作

    • 一个资源连接到另一个资源,使用子资源的形式

      • GET /users/6/cars/88
      • POST /users/8/cars
    • API 的版本化

      • baidu.com/v1/users
      • baidu.com/v2/users/66
    • 返回JSON格式数据

    • 发生错误是,不要返回200的状态码


#HTTPDNS

  • 简介

    • HTTPDNS是基于HTTP协议向DNS服务器发送域名解析请求
    • 替代了传统基于DNS协议向运营商Local DNS发起解析请求的传统方式
    • 可以避免Local DNS造成的域名劫持和跨网访问问题
    • 常用在移动互联网中(比如Android、iOS开发中)

    HTTPDNS和LocalDNS比较

  • 使用:


#FTP文件传输协议

  • FTP的两种连接模式:主动(Active)和被动(Passive)

  • 不管是哪种模式,都需要客户端和服务器建立2个连接

    • 控制连接:用于传输状态信息(命令,CMD)
    • 数据连接:用于传输文件和目录信息(data)

FTP的两种连接模式


  • FTP - 主动模式

    • 客户端

      • 客户端打开一个随机的命令端口(端口号大于1024,假设为N),同时连接至服务器的命令端口21(固定不变)
      • 客户端开始监听N+1数据端口,同时发送一个Port命令给服务器的命令端口21(告诉客户端正在监听N+1数据端口,并且已经准本好从此端口接受数据)
    • 服务器

      • 服务器打开20号数据端口,并创建和客户端端口(N+1)的连接

    FTP主动模模式的流程


  • FTP - 被动模式

    • 客户端

      • 客户端打开一个随机的命令端口(端口号大于1024,假设为N),同时连接至服务器的命令端口21(固定不变)

      • 客户端通过命令端口N发送PASV命令(开启被动模式)给服务器端口21

      • 服务器打开一个随机的命令端口(端口号大于1024,假设为M),并告知该端口号给客户端

      • 客户端数据端口N+1发起与服务器数据端口M的连接

    FTP被动模模式的流程


#邮件相关的协议

  • 发邮件使用的协议

    • SMTP(Simple Mail Transfer Protocol),译为:简单邮件传输协议
      1. 基于TCP,标准参考RFC 5321
      2. 服务器默认使用25端口,SSL/TLS使用465端口

  • 收邮件使用的协议

    • POP(Post Office Protocol),译为:邮局协议

      1. 基于TCP,最新版是POP3,标准参考RFC 1939
      2. 服务器默认使用110端口,SSL/TLS使用995端口

    • IMAP(Internet Message Access Protocol),译为:因特网信息访问协议

      1. 基于TCP,最新版是IMAP4,标准参考RFC 3501
      2. 服务器默认使用143端口,SSL/TLS使用993端口

  • 收发邮件流程

    收发邮件流程


  • POP 和 IMAP对比

    • POP的特点

      • 客户端连接服务器时,将会从服务器下载所有邮件

      • 可以设置下载完后,立即或一段时间后删除服务器邮件

      • 客户端的操作(比如删除邮件、移动到文件夹)不会跟服务器同步

      • 每个客户端都是独立的,都可以获得其自己的电子邮件副本

    • IMAP的特点

      • 客户端连接服务器时,获取的是服务器上邮件的基本信息,并不会下载邮件

      • 等打开邮件时,才开始下载邮件

      • 客户端的操作(比如删除邮件、移动到文件夹)会跟服务器同步

      • 所有客户端始终会看到相同的邮件和相同的文件夹