饿了吗叫好友拼单引起去理解TCPHTTPSWebSocket以及三者间关系的故事

3次阅读

共计 1188 个字符,预计需要花费 3 分钟才能阅读完成。

今天和同事一起饿了吗拼单点奶茶。分享至微信群,然后每个人可以点。本人无意间发现饿了吗这边的菜单实时刷新的,意识到这是 WebSocket 实现的,以前没有详细了解,也不知道他与 HTTPS、HTTP、TCP 之间的关系。这次喝奶茶的时间里看了看文章,下面记录下自己的理解。

首先先介绍下参考资料。阮一峰大神的博客:http://www.ruanyifeng.com/blo…
还有现在读一半的《网络是怎样连接的》这本书

1.TCP 协议就不摘抄大篇文章,也不说自己的理解了。相信每个人都会理解一二,最起码面试常背的三次握手,四次挥手大家都已经理解并烂熟于心了。TCP 是底层通讯协议,定义的是数据传输和连接方式的规范

2.HTTP 超文本传输协议。是基于 TCP 协议的应用层。你可以理解为 TCP 是传输层,就是最基础的客户端和服务端用于建立连接的服务,它并不涉及我们需要请求的实际数据,简单的传输,而 HTTP 为基于 TCP 的应用方法,是用来收发数据,即实际应用来的。他有对应的动作

HTTP 是应用层协议,定义的是传输数据的内容的规范

3.HTTPS,HTTP 可能会有信息安全风险所以有 SSL,TLS 加密。目前 SSL 已经 v3.0 版本,TSL v.2 版本。目前大部分浏览器都已经用到 TSL 1.2 版本。
这个加密简单来说就是客户端向服务端要求创建安全连接,并列出受支持的密码组合(加密密码算法和加密哈希函数)===> 服务器从该列表中决定加密和散列函数,并通知客户端 ===> 返回给客户端安全证书,包含服务器的名称、受信任的证书颁发机构(CA)和服务器的公钥 ===> 客户端利用公匙进行加密,并发送给服务端 ===> 服务端解密。
上边任何一个步骤失败,就会断开连接。

4.WebSocket: 标识符 WS 如果加密就是 WSS。TCP 协议保证了双方的平等对话,但是从一方面看 HTTP 协议貌似有点“不平等”,总是由客户端单向发起请求,每次请求结束又会主动释放连接,客户端数据有更新并不能通知客户端进行数据的更新,但是客户端轮询(每隔一段时候,就发出一个询问,了解服务器有没有新的信息)效率很低,而且非常浪费资源,必须不停的链接。
这个时候 WebSocket 在 2008 年诞生了,2011 年成为国际标准,所有浏览器都支持。他的最大特点就是服务器可以主动想客户端推送消息,是真正的双向平等对话。下面图是二者区别

下面一幅图很好的阐明的三者之间的关系。(ws 为 WebSocket)

TCP 为 TCP/IP 五层网络协议中的传输层,而 HTTP 和 WebSocket 二者都是基于 TCP 的应用层。OSI 七层协议把第五层应用层分为三个应用层、表示层、会话层。这里简单放两张图,不知道或者还不明白的同学可以读下上边推荐的书或者有很多博客对其进行了详细介绍。
计算机网络核心结构,就是 TCP/IP 五层网络模型(OSI 七层模型是将应用层分为了三层)

以及,每一层对应的协议

正文完
 0