其他协议

  • WebSocket
  • WebSocket - 建立连接
  • WebService
  • RESTful
  • HTTPDNS
  • FTP文件传输协议
  • 邮件相关的协议(SMTP、POP、IMAP)
  • POP vs IMAP
  • IPv6
  • IPv6 - 地址格式
  • IPv6 - 首部格式
  • IPv6 - 拓展头部


WebSocket

Socket 是一套网络编程API,利用它可以建立网络连接,一般都是操作系统底层实现的。
WebSocket 是一个网络协议

HTTP请求的特点:通信只能由客户端发起。所以,早期很多网站为了实现推送技术,所用的技术都是轮询

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

  • 客户端、服务器,任何一方都可以主动发消息给对方

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 体验和演示:https://www.websocket.org/echo.html W3C 标准化了一套 WebSocket API,可以直接使用JS调用:

let ws = new WebSocket('wss://example.com')

WebSocket - 建立连接


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

如何搭建底层架构实现数据远距离传输毫秒级 底层传输协议_HTTP


如何搭建底层架构实现数据远距离传输毫秒级 底层传输协议_HTTP_02

WebService

WebService,译为:Web服务,是一种跨编程语言跨操作系统远程调用技术标准

其实 WebService 是比较老的技术,放到现在已经可以由普通的 Web API 取代

WebService使用场景举例

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

事实上,WebService完全可以用普通的 Web API 取代(比如HTTP + JSON)

  • 现在很多企业的开放平台都是直接采用Web API

SOAP (Simple Object Access Protocol),译为:简单对象访问协议

  • 很多时候,SOAP = HTTP + XML
  • WebService 使用 SOAP协议 来封装传递数据

WSDL (Web Services Description Language),译为:Web服务描述语言

  • 一个XML文档,用以描述WebService接口的细节(比如参数、返回值等)
  • 一般在WebService的URL后面跟上 ?wsdl 获取WSDL信息

RESTful

REST (REpresentational State Transfer)表现层状态转移

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

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

RESTful 的实践建议

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

  • 推荐:/users、/users/6
  • 不推荐:listsers、/getser?id=6,/uer/list、/user/get?id=6

2、使用 HTTP的请求方法 表达动作:

如何搭建底层架构实现数据远距离传输毫秒级 底层传输协议_服务器_03


一个资源连接到其他资源,使用子资源的形式:

  • GET /users/6/cars/8
  • POST /users/8/cars

3、API 版本化

  • mj.com/v1/users
  • mj.com/v2/users/66

4、返回 JSON格式的数据

5、发生错误时,不要返回 200状态码

HTTPDNS

HTTPDNS 是基于HTTP协议向DNS服务器发送域名解析请求

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

HTTPDNS使用
1、市面上已经有现成的解决方案

2、移动端集成相关的SDK即可使用HTTPDNS服务

FTP文件传输协议

FTP (File Transport Protocol),文件传输协议RFC 959 定义了此规范,是基于TCP应用层协议

  • RFC 1738 中有定义,FTP的URL格式为:ftp://[user[:password]@]host[:port]/url-path

FTP有2种连接模式:主动 (Active)被动 (Passive)

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

控制连接:用于传输状态信息(命令,cmd)

数据连接:用于传输文件和目录信息(data)

如何搭建底层架构实现数据远距离传输毫秒级 底层传输协议_服务器_04

FTP - 主动模式

如何搭建底层架构实现数据远距离传输毫秒级 底层传输协议_网络协议_05


FTP - 被动模式

如何搭建底层架构实现数据远距离传输毫秒级 底层传输协议_网络_06

邮件相关的协议(SMTP、POP、IMAP)

发邮件使用的协议

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

收邮件使用的协议

  • POP (Post Office Protocol)邮局协议
    基于TCP,最新版是POP3,标准参考 RFC 1939 服务器默认使用110端口,SSL/TLS使用995端口
  • IMAP (Internet Message Access Protocol)因特网信息访问协议
    基于TCP,最新版是IMAP4,标准参考 RFC 3501 服务器默认使用143端口,SSL/TLS使用993端口

收发邮件的过程

如何搭建底层架构实现数据远距离传输毫秒级 底层传输协议_http_07

POP vs IMAP

POP的特点

  • 客户端连接服务器时,将会从服务器下载所有邮件
    可以设置下载完后,立即或一段时间后删除服务器邮件
  • 客户端的操作(比如删除邮件、移动到文件夹)不会跟服务器同步
  • 每个客户端都是独立的,都可以获得其自己的电子邮件副本

IMAP的特点

  • 客户端连接服务器时,获取的是服务器上邮件的基本信息(如列表),并不会下载邮件
    等打开邮件时,才开始下载邮件
  • 客户端的操作(比如删除邮件、移动到文件夹)跟服务器同步
  • 所有客户端始终会看到相同的邮件和相同的文件夹

如何搭建底层架构实现数据远距离传输毫秒级 底层传输协议_http_08

IPv6

IPv6 (Internet Protocol version 6)网际协议第6版

  • 用它来取代IPv4主要是为了解决IPv4地址枯竭问题,同时它也在其他方面对于IPv4有许多改进
  • 然而长期以来IPv4在互联网流量中仍占据主要地位,IPv6的使用增长缓慢
  • 在2019年12月,通过IPv6使用Google服务的用户百分率首次超过30%
    因为使用IPv6需要设备、操作系统内核升级支持IPv6
    不像HTTP升级到HTTP2一样方便

IPv6采用128位的地址,而IPv4使用的是32

  • 支持2128(约3.4 ∗ 1038 )个地址
  • 以地球人口70亿人计算,每人平均可分得约 4.86 ∗ 1028个IPv6地址
  • 解决了IPv4地址枯竭问题

IPv6 - 地址格式

IPv6地址为128bit,每16bit一组,共8组

每组以冒号 : 隔开,每组以4位十六进制方式表示

  • 例如 2001:0db8:86a3:08d3:1319:8a2e:0370:7344

类似于IPv4点分十进制IPv6同样也存在点分十六进制的写法

  • 2.0.0.1.0.d.b.8.8.5.a.3.0.8.d.3.1.3.1.9.8.a.2.e.0.3.7.0.7.3.4.4

每组前面连续的0可以省略。下列IPv6地址是等价的:

  • 2001:0db8:02de:0000:0000:0000:0000:0e13
  • 2001:db8:2de:0:0:0:0:e13

双冒号 :: 表示一组0多组连续的0,但只能出现一次。下列IPv6地址等价:

  • 2001:db8:2de:0:0:0:0:e13
  • 2001:db8:2de::e13

2001::25de::cade 是非法的,因为双冒号:出现了两次,会造成歧义

  • 2001:0000:0000:0000:0000:25de:0000:cade
  • 2001:0000:25de:0000:0000:0000:0000:cade

::1是本地环回地址:0:0:0:0:0:0:0:1

  • ping ::1 可以ping通本机

IPv6 - 首部格式

IPv6 有40字节的固定首部

如何搭建底层架构实现数据远距离传输毫秒级 底层传输协议_网络_09


如何搭建底层架构实现数据远距离传输毫秒级 底层传输协议_服务器_10


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):流标签

  • 指示数据包属于哪个特定序列(流)
  • 用数据包的源地址、目的地址、流标签标识一个流

IPv6 - 拓展头部

如何搭建底层架构实现数据远距离传输毫秒级 底层传输协议_服务器_11


Next Header(占8bit):下一个头部

  • 指示扩展头部(如果存在)的类型、上层数据包的协议类型(例如TCP、UDP、ICMPv6)