30d2fd21-43d1-4a9c-8c50-0d6fa93fd8b2

作者:前端劝退师

转发链接:https://juejin.im/post/5e9b22ed6fb9a03c337f8c47

前言

失业期间闲来无事,看了本《网络是怎样连接的》与两本HTTP相关的专栏。

一方面补充专业知识,另一方面也是为了跳槽面试做准备。

避免看了即忘,就画了一张XMind图:

0d1bf0c4d409491a82c5f3417d173a89

需要高清大图,关注我,私信回复:HTTP核心问题思维导图

值得深入的问题太多了,今儿就先来讲讲: Web中的几种“握手”

deaeaa90d63e4d528eef919decb4bdfc

1. 不止一种握手

在早期的网络传输中,也就存在TCP协议需要“握手”的过程,但早期的协议有一个缺陷:通信只能由客户端发起,做不到服务器主动向客户端推送信息。

43fda48578e2477e8d3b9f1ead48f9e6

于是WebSocket 协议在2008年诞生,2011年成为国际标准。所有浏览器都已经支持了。

而随着SSL/TLS的完善,存在已久的安全版网络协议:HTTPS也是迸发式发展。

最后前端领域的协议握手便成了三分天下:

  1. TCP三次握手,归HTTP。
  2. TLS握手,归HTTPS
  3. WebSocket握手,基于TCP协议,都能用。

2. TCP三次握手的终极意义

在我之前的文章:《「真香警告」重学 TCP/IP 协议 与三次握手 》

也详细的讲述过TCP三次握手,但那时我未明确意识到其深刻含义。

就和大家一样,只在面试前会记得,过后即忘。

直到我看到《网络是怎样连接的》中的一段话:

在实际的通信中,序号并不是从 1 开始的,而是需要用随机数计算出一个初始值,这是因为 如果序号都从 1 开始,通信过程就会非常容易预测,有人会利用这一点来发动攻击。 但是如果初始值是随机的,那么对方就搞不清楚序号到底是从 多少开始计算的,因此需要在开始收发数据之前将初始值告知通信对象。

1c76f9282a604c67b6e2e527a82c665a

你品,你细品。三次握手不就是相互试探暗号,来确定是不是对的人吗?

2.1 知识补充:一个网络包的最大长度

计算每个网络包能容纳的数据长度,协议栈会根据一个叫作 MTU的参数来进行判断。

MTU表示一个网络包的最大长度,在以太网中一般是1500字节

MTU是包含头部的总长度,因此需要从MTU减去头部的长度,然后得到的长度就是一个网络包中所能容纳的最大数据长度,这一长度叫作MSS。

3376d390c1674718868fc3bc58fd637d
da21e2a0f34649779acb3b77ee8fcacb

由上两图可知,MSS值是1460(1500-40)字节,其中:

  1. TCP固定头部20字节。
  2. IP固定头部20字节。
  3. TCP头部最长可以达到60字节。

3. TLS握手:HTTPS的核心

9a7489e355294e07bd257d36ecee42fb

HTTPS 其实是一个“非常简单”的协议,RFC 文档很小,只有短短的 7 页,里面规定了新的协议名“https”,默认端口号 443,至于其他的什么请求 - 应答模式、报文结构、请求方法、URI、头字段、连接管理等等都完全沿用 HTTP,没有任何新的东西。---- 《透视HTTP协议》

感兴趣的可以到这里看看:链接:https://tools.ietf.org/html/rfc2818

推荐文章:《史上全面图解 HTTPS 加解密原理》

3.1 TLS/SSL究竟是啥?

6ed4911b445647ebbb9da3d5479f7c14

很多人看到TLS/SSL这对词就开始蒙圈了。实际上,这两个东西是一个玩意儿:

80a193fb3096456190831874ed7d0d2b

1999 年改名:SSL 3 === TLS 1.0

目前运用最广泛的是TLS 1.2:

TLS 由记录协议、握手协议、警告协议、变更密码规范协议、扩展协议等几个子协议组成,综合使用了对称加密、非对称加密、身份认证等许多密码学前沿技术。

由于TLS/SSL 协议位于应用层和传输层 TCP 协议之间。TLS 粗略的划分又可以分为 2 层:

  1. 靠近应用层的握手协议 TLS Handshaking Protocols
  2. 靠近 TCP 的记录层协议 TLS Record Protocol

这个篇幅展开来写就太多了,我们先关心下TLS握手吧。

3.2 TLS握手详解

TLS握手何时发生?:

  1. 每当用户通过HTTPS导航到网站并且浏览器首先开始查询网站的原始服务器时,就会进行TLS握手。
  2. 每当其他任何通信使用HTTPS(包括API调用和HTTPS查询上的DNS)时,也会发生TLS握手。
  3. 通过TCP握手打开TCP连接后,会发生TLS 握手。
e7650295843547478cb3f3c016b95912

TLS握手期间会发生什么?

在TLS握手过程中,客户端和服务器将共同执行以下操作:

  • 指定将使用的TLS版本(TLS 1.0、1.2、1.3等)
  • 确定将使用哪些加密套件。
  • 通过服务器的公钥和SSL证书颁发机构的数字签名来验证服务器的身份
  • 握手完成后,生成会话密钥以使用对称加密

加密套件决定握手方式:

摘自:《HTTPS篇之SSL握手过程详解》 在TLS中有两种主要的握手类型:一种基于RSA,一种基于Diffie-Hellman。 这两种握手类型的主要区别在于主秘钥交换和认证上。

https://razeencheng.com/post/ssl-handshake-detail

秘钥交换 身份验证 RSA握手 RSA RSA DH握手 DH RSA/DSA

主流的握手类型,基本都是基于RSA,所以以下讲解都基于RSA版握手。

整个流程如下图所示:

2c8cd685703d43d2b3ba9ffc24e2e33e

具体流程描述:

  1. 客户端hello:客户端通过向服务器发送“问候”消息来发起握手。该消息将包括客户端支持的TLS版本,支持的加密套件以及称为“客户端随机”的随机字节字符串。
  2. 服务器hello:为回复客户端hello消息,服务器发送一条消息,其中包含服务器的SSL证书,服务器选择的加密套件和“服务器随机数”,即服务器生成的另一个随机字节串。
  3. 客户端发送公钥加密的预主密钥。
  4. 服务器用自己的私钥解密加密的预主密钥。 客户端finished:客户端发送“完成”消息,该消息已用会话密钥加密。 服务器finished:服务器发送一条用会话密钥加密的“完成”消息。
  5. 握手完成,后续通过主密钥加解密。

只有加密套件,讲解的话需要有抓包基础。改天,改天我一定讲。。。

99138ae33cf24f21868bcdfb443ec4ab

4. WebSocket握手

b9296701ebc24c17bca06a6a1681af99

WebSocket协议实现起来相对简单。它使用HTTP协议进行初始握手。成功握手之后,就建立了连接,WebSocket基本上使用原始TCP读取/写入数据。

《图解HTTP》一书中的图讲的比较清楚:

df17a91fbb134d04a9370d53d90b9333

具体步骤表现是:

  1. 客户端请求:
  GET /chat HTTP/1.1     Host: server.example.com     Upgrade: websocket     Connection: Upgrade     Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==     Sec-WebSocket-Protocol: chat, superchat     Sec-WebSocket-Version: 13     Origin: http://example.com复制代码
  1. 服务端响应:
    HTTP/1.1 101 Switching Protocols     Upgrade: websocket     Connection: Upgrade     Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=     Sec-WebSocket-Protocol: chat复制代码

4.1 Websocket全双工通信

Websocket协议解决了服务器与客户端全双工通信的问题。

那什么是单工、半双工、全双工通信?

类型 能力 单工 信息单向传送 半双工 信息能双向传送,但不能同时双向传送 全双工 信息能够同时双向传送

4.2 Websocket和Socket区别

可以把WebSocket想象成HTTP应用层),HTTP和Socket什么关系,WebSocket和Socket就是什么关系。

1. WebSocket与HTTP的关系

相同点

  1. 都是一样基于TCP的,都是可靠性传输协议。
  2. 都是应用层协议。

不同点

  1. WebSocket是双向通信协议,模拟Socket协议,可以双向发送或接受信息。HTTP是单向的。
  2. WebSocket是需要握手进行建立连接的。

2. Socket是什么?

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。

在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

14f81823986a414c92a00275930a3df2

4.3 扩展知识:Socket.IO的七层降级

在Golang、Java Spring等框架中,websocket都有一套实现API。

cb3d05fb53af469cae2f4bf972e8cece

Socket.IO 由两部分组成:

  1. 一个服务端用于集成 (或挂载) 到 Node.JS HTTP 服务器: socket.io
  2. 一个加载到浏览器中的客户端: socket.io-client

很多人以为Socket.IO只是WebSocket和XHR长轮询。

实际上,Socket.io有很多传输机制:

1. WebSockets 2. FlashSocket 3. XHR长轮询4. XHR部分流:multipart/form-data5. XHR轮询6. JSONP轮询7. iframe复制代码

得益于这么多种传输机制,Socket.io兼容性完全不用担心。

5. 扩展:HTTPS 与HTTP 核心区别

上面讲到 Socket是什么?,有一点我忘了讲:

HTTPS 与HTTP 核心区别在于两点:

  1. 把 HTTP 下层的传输协议由 TCP/IP 换成了 SSL/TLS
  2. 收发报文不再使用 Socket API,而是调用专门的安全接口。

具体区别:

  1. HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。
  2. HTTP是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的ssl加密传输协议。
  3. HTTP和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  4. HTTP的连接很简单,是无状态的。HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全。

后记及引用

本篇引用了大量资料和专栏:

1.《HTTPS篇之SSL握手过程详解》

2.《网络是怎样连接的》--户根勤

3.《图解HTTP》--上野宣

4.《透视HTTP协议》--罗剑峰

5.《What Happens in a TLS Handshake?》

6. 《How to Use Websockets in Golang: Best Tools and Step-by-Step Guide》

在我的脑图中,总结概括了8种HTTP核心问题。

4c7eef3f31dc4719bd4d58f6768e8d1a

作者:前端劝退师
转发链接:https://juejin.im/post/5e9b22ed6fb9a03c337f8c47

http三次握手_图文深入http三次握手核心问题【思维导图】相关推荐

  1. 开头和结尾标记 在不同系统_写人作文的写作技巧。含思维导图、开头结尾写法及范文分析...

    从小到大,我们接触了形形色色的人.有无微不至地关怀着我们的亲人,有朝夕相处的老师和同学,有从小玩到大的小伙伴,有从事着各种工作的街坊邻居,甚至有在不经意间给了我们鼓励和帮助的陌生人--那么,写人的作文 ...

  2. puml绘制思维导图_强推:9款超好用思维导图APP

    思维导图是由英国著名教育学家东尼·博赞发明的一种思维利器,被誉为大脑的"瑞士军刀".运用思维导图,我们可以便捷地整理笔记.收集想法和统筹事项. 一. MindMaster 说起思维 ...

  3. 计算机网络第四章思维导图_初级会计实务的第四章所有者权益的思维导图丨初级讲堂...

    蜜蜜知道很多考证党每天都在密切关注考试动态,打卡<每日一练>,最近,蜜蜜特开辟会计考试相关的专栏<初级讲堂>(点击查看第一期报道:镇定!2021初级报名人数突破500万?),为 ...

  4. 最火的python视频_超火Python400集视频,116-248集思维导图视频介绍(第二季)

    第二季 2.1 文件处理 116_file文件操作_操作系统底层关系_写入文件 117_编码知识_中文乱码问题解决 118_关闭流要点1_try异常管理 119_关闭流要点2_with上下文管理_现场 ...

  5. sql增删改查_快速搞定数据库增删改查|附思维导图

    数据库学习,增删改查一直是测试工程师面试笔试的必考知识点,对于常用sql语法我们一定要牢记于心,尤其是各种查询的用法,在面试的时候,一个小小的知识点,面试官都可以推断出求职者的基础是否扎实. 下面是关 ...

  6. 重构碎片化知识_知识碎片化时代,如何妙用思维导图,提高你的学习效率(含福利)...

    这里是[科学学习法]的第03篇. 慧心优学:不忘初心,与您一道关心教育,关心未来! 随着移动互联网的快速发展,各种付费知识产品也层出不穷,加上工作本来就繁忙的你,原本就没有多少时间静下心来好好读书,于 ...

  7. sql增删改查_面试速记之数据库增删改查|附思维导图

    数据库学习,增删改查一直是测试工程师面试笔试的必考知识点,对于常用sql语法我们一定要牢记于心,尤其是各种查询的用法,在面试的时候,一个小小的知识点,面试官都可以推断出求职者的基础是否扎实.下面是关于 ...

  8. confluence 制作流程图_「每周开方」 高效制作流程图、思维导图

    提升工作效率,并且可以自成一套职场PPT的导图.流程图! 这周的「每周开方」公子要分享强大的"思维导图"及"流程图"制作网站!在职场中导图的重要性应该不需要公子 ...

  9. 大学物理质点动力学思维导图_高三物理期末考备考,牛顿运动定律思维导图知识点总结...

    高三物理期末考备考,牛顿运动定律思维导图知识点总结 12-28 浏览量: 分享: 高三物理期末考备考,牛顿运动定律思维导图知识点总结.高中物理经典力学是高考必考的知识点, 1.牛顿第一定律:一切物体总 ...

  10. html将页面分成三块_导航渲染流程你真的知道从输入URL到页面展示发生了什么吗?(内附思维导图)...

    导航渲染流程 通过这篇文章当你被问到从URL输入到页面展示都发生了什么的时候,基本都能对答如流,甚至可以一直深入的说,说到面试官闭麦哈哈哈~ 以下是本文的思维导图,直接拿图「点个赞」再走吧 ~ 求求了 ...

最新文章

  1. web项目答辩总结_web实战项目遇到问题总结探索
  2. Cocos2dx小技巧 单例
  3. 写给过去的自己-No.2-数据结构篇-初尝柔性数组
  4. [題解](并查集)luogu_P2391 白雪皚皚
  5. 用户需求测试软件,用户需求和软件需求的区别
  6. 数字图像处理学习笔记(一):特征检测和匹配概述
  7. C#正则_取出标签内的内容(非贪婪)
  8. python实现将文件下内每张图片按顺序命名为txt文本文件中的内容
  9. Android客户端和服务器端数据交互的第三种方法
  10. mysql count group by_MySQL中使用count与group by 的统计问题
  11. 【## 1、浏览器及内核-】
  12. 从技术实现到安全运行,工程师版“元宇宙”离我们还有多远?
  13. 【计算机图形学】基于OpenGL的中点Bresenham算法画直线
  14. 王者服务器维护s24,王者荣耀:体验更新S24数据,征召模式痛点解决,不会再失手了...
  15. 时间加减计算器_财政局刚刚回应丨禁止携带计算器,否则成绩无效!
  16. 【以太坊】雷电网络的101网络原理概述
  17. 【服务计算】第十六周实验报告
  18. 使用httpClient4.4登录豆瓣,并发表说说
  19. java 内置jetty_java内嵌jetty服务器
  20. 数据可视化之matplotlib实战:plt.pie() 绘制分裂式饼图

热门文章

  1. 【图像处理基础】基于matlab图像RGB+HSV分布图【含Matlab源码 234期】
  2. 【路径规划】基于matlab改进的人工势场算法机器人避障路径规划【含Matlab源码 1151期】
  3. 【图像分割】基于matlab遗传算法道路图像分割【含Matlab源码 779期】
  4. 台式计算机诞生,生物电脑 ①1946年,世界上第一台计算机诞生,这个庞然大物开创了一个电脑时代。从那时候起,人们不断革新、创造,把庞然大物的体积一减再减,现在我们所见的台式电脑、掌上电脑...
  5. rl滤波器原理_浅谈滤波器原理以及其他基础知识
  6. c与python内存传递_如何将C中的内存地址转换为python ctypes调用?
  7. debloater手机版apk_会议管家apk下载-会议管家云平台v1.0.0手机版下载
  8. java二级考纲_二级JAVA程序设计考试大纲
  9. 我的奇思妙想机器人消防员_【小作家专栏】我的奇思妙想(三)
  10. Java 字符串替换String.replaceAll需注意