面试官问到三次握手,我甩出这张脑图,他服了!


前语

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

一方面补充专业常识,另一方面也是为了换岗面试做准备。

防止看了即忘,就画了一张XMind图:

面试官问到三次握手,我甩出这张脑图,他服了!

值得深入的问u G / v k [题太多了,今儿就先来讲讲: Web^ Z _ C R 9的几种“握手”

面试官问到三次握手,我甩出这张脑图,他服了!

1. 不止一种握手

在早期的网络传输中,也就存在TCP协议需求“握手”的进程,但早期的协议有一个缺陷:通讯只能由客户端建议,做不到服务器主动向客户端推送信( j s # ? v息。

面试官问到三次握手,我甩出这张脑图,他服了!

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

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

最终前端范畴w c o ) c y & a的协议握手便成了三分全国:

  1. TCP三次握手,A I p – e 5 g ;HTTP
  2. TLS握手,归HTTPS
  3. WebSocket握手,根据TCP协议,都能用。

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

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

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

就和大家一样,只在面试B M 1前会记住,过后即忘。

直到我看到《网6 D ^ A I E络是怎样衔接的d q ` –》中的一段话:

在实践的通讯中,序号并不是从 1 开端的,而是需求用随机数核算出一个初始值,这是因为
假如序号c T 8都从 1@ a w Z $ U 开端,通讯进程就会十分简略猜测,有人会运用这一点来建议攻击。

可是假如初始值是随机的,那么对方就搞不清楚序号到底是从
多少开端核算的,因而需求在开端收发数据之u K d 5 Y .前将初始值告知通讯对象。

面试官问到三次握手,我甩出这张脑图,他服了!

你品,你细品。三次握手不便是彼此试探暗号,来确认是不是对的人吗?

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

核算每个网络包能容纳的数据长度,协议D S P *栈会依据一个叫作 MTU的参数来进行判别。

MTU表明一个网络包的最大长度,在以太网中一般是15A 8 a00字节

MTU是包括头部的总长度,因而需求从MT+ j KU减去头部的长度,然后得到的长度便是一个网络包中所能容纳的最大数据长度,这一长度叫作MSS

面试官问到三次握手,我甩出这张脑图,他服了!
面试官问到三次握手,我甩出这张脑图,他服了!

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

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

3. TLS握手:HTTPS的中心

面试官问到三次握手,我甩出这张脑图,他服了!

HTTPS 其实是一个“十分简略”的协议,RFC 文档很小,只要短短的 7 页,里面规定了新的协议名“https”,默许端口号 447 f S3,至于其他的什么恳求 – 应对形式、报文结构、恳求方法、URI、头字段、衔接办理等等都彻底沿袭 HTTP,没有任何新的东西。—3 s . q k K W ]– 《透视HTT0 q P 2 / - 7 tP协议》

感兴趣的能够到这里看看:链接:tools.ietf.org/html/rfc281…

3.1 TLS/SSL究竟是w 7 E H啥?

面试官问到三次握手,我甩出这张脑图,他服了!

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

面试官问到三次握手,我甩出这张脑图,他服了!

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

现在运用最广泛的是TLS 1.2:

TLS 由记载协议、c X R f E – Z x |握手协议、正告协e 8 A – { B 3 k议、改变密码规范协议、扩展协议等几个子协议组成,归纳运用了对称加密、[ n v y :非对称加密、身份认证等许多密码学前沿技术。

因为TLS/SSL 协议坐落_ & @ T Y应用层和传输层 T) S + ? – SCP 协议之间。TLS 粗略的划分又能够分为 2 层v j J { 3

  1. 接近应用层的握手协议 TLS Handshaking Protocols

  2. 接近 TCP 的记W $ X ) S 8 K |载层协议 TLS Record Protocol

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

3.2 TLS握手详解

TLS握手何时发作?:

  1. 每逢用户经过HTTPS导航到网站而且浏览器首先开端查询网站的原始服务器时,就会进行TLS握手。
  2. 每逢其他任R % c 0 z ~ 6何通讯运k & 2 @ d H W #HTTt s L *PS(包括API5 A $ v 8 v H 2 –用和H{ 2 WTTPS查询上的DNS)时,也会发作TLS握手。
  3. 经过TCP握手打开TCP衔接后,会发作TLS 握手。
面试官问到三次握手,我甩出这张脑图,他服了!

TLS握手期间会发作什么?

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

  • 指定将运用的TLS版别(TLS 1.0、1.2、1. Y ^ x # * `3等)
  • 确认将运用哪些加密套件。
  • 经过服务器的公钥和SSL证书颁发机构K h X 0 @ / : %} Q ) b @ d / b Y数字签名来验证服X ! t务器的身份
  • 握手完结后,生成会话密钥以运用对称加密

加密套件决定握@ c r W [ w O p Z手方式:

x u j [ n自:《HTTPS篇之SSL握手进程详解H _ 3 r
TLS中有两种首要的握手类型:一种$ ! ! / u Q根据RSA,一种根据Diffie-Hellman。 这两种握手类型的首要差异在于主秘钥交流和认证上。

秘钥交流 身份` X ? O @ o U %验证
RSA握手 RSA RSA
DH握手 DH RSA/DSA

主流的握手类型,基本都是根据RSA,所以以下解说都根据RSA版握手。

整个流程如下图所示:

面试官问到三次握手,我甩出这张脑图,他服了!

具体流程描述:

  1. 客户端hello:客户端经过向服务器发送“问候”音讯来, / k % B建议握手。该音讯将包括客户端支撑的TLS版别,支撑的加密套件以及称为“客户端随机”的随机字节字符串。
  2. 服务器hello:为回复客户端hello音讯,服务器发送一条音讯,其间包括服务器的SSL证书,服务器挑选的加密套件和U * [ w 1“服务器随机数”,即服务器生成的另一个随机字节串。
  3. 客户端发送公钥加密y p X Q i A ( S ~的预主密钥。
  4. 服务器用自己的私钥解密加密的预主密_ j ~钥。
    • 客户端finished:客户端发送“完结”音讯,该音讯已用会话密钥加密。
    • 服务器finished:服务器发送一条用会话密钥加密的“完结”音讯。
  5. 握手完结,后续经过主密钥加解{ ; {密。

只要J 9 ] P S加密套0 G q件,解说的话需求有抓包根底。改天,改天我一定讲。。。

面试官问到三次握手,我甩出这张脑图,他服了!

4. WebSocket握手

面试官问到三次握手,我甩出这张脑图,他服了!

WebSocket协议完成[ 4 $ = S起来相对简略。它运用HTTP协议进行初始握手。成功握手之后,就树立了衔接,WebSocket基本上运用原始TCP读取/写入数据。

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

面试官问到三次握手,我甩出这张脑图,他服了!

具体步骤表现是:

  1. 客户端恳求:
  GET /chat HTTP/1.1
Host: server` 2 . 6 m . 2.example.com
Upgrade: websocket
Connection: Upgrade
Se= 6 ^ ~ # | hc-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket/ V 9 V p L-Protoc` t dol: chat, superchat
Sec-WebSocket-Vr B z 6 ` v z Lersion: 13
Ori+ ^ 6 t u ; c P 2gin: http://example.c: Y a l Eom
  1. 服务端响应:
    HTTP/1.1 101
Switching Protoc] I /ols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept:{ i ; m 4 . W * HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat

4.1 Webk J N N ` F % esocketP e oH K ~ $双工T m 4 * ; U I 3通讯

Websocket协议解决了服务器与客户端全双工[ h + i I通讯的问题。

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

+ E H F n e 能力
单工 信息单向W w H N e 8 Y b传送
半双工 信息能双向传送,但不能一起双向传送
全双工 信息能够一起双向传W 4 k ~ ! Q

4.2 WebsocketSocket7 $ Q差异

能够把Web( ] 5 n ~ Socket幻想成HTTP应用层),HTTPSockeh ( } 7 _t什么关系,WebSocketc 6 MSocket便是什么关系。

1. WebSocketHTTP的关系

相同点{ | * w [

  1. 都是8 u w | v t x一样根据TCP的,都是可靠性传输协议。
  2. 都是应用层协议。( – f Y W 5

不同点

  1. WebSocket是双向通讯协议,模仿Socket协议,能够双向发送或接受信O – G ) f息。HTTP是单向的。
  2. WebSz L M u T B ~ocket是需求握a S + K手进行树立衔接的。

2. SM _ 8ocket是什么?

SocW X H B S 7 e Xket 8 3是应用层与TCP/IP协议族通讯的中间软件抽象层,它是一组接口。

在设计形式中Q 8 m G )Socket其实便是一个门面形式N A c S [ q y –,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简略的接口便是悉数,让Socket去组织数据,以契合指定的协议。

面试官问到三次握手,我甩出这张脑图,他服了!

4.1 扩展常识:Socket.IO的七层降级

GolangJava Spring等框架中,websocket都有一套完成AP} X P ! s ~ hI

面试官问到三次握手,我甩出这张脑图,他服了!

Socket.IO 由两部分组成:

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

很多人以为Socket.IO只是WebSocketXHR长轮询。

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

1. WebSockets
2. FlY 7 g iashSocket
3. XHR长轮询
4. XHR部分流:multipart/form-data
5. XHR轮询
6. JSONP轮询
7. iframe

得益于这么多种传输机制,Socket.io兼容性彻底不必担心。

5. 扩展:HTTPSHTTP 中心差异

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

HTTPSHTTP 中心差异在于两点:

  1. HTTP 下层的传输协议由 TCP/IP 换成f 8 ^ M LSSL/TLS
  2. 收发报文不再运用 Socket API,而是调用专门的安全接口。

具体差异:

  1. HTTPS协议需求到CA申请证书,一般免费证书很少,需求交费。
  2. HTTP是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的ssl加密传输协议。
  3. HTTPhttps运用的是彻底不同的衔接方式,用的端口也不一样,前h e U J i 2 M _ J者是80,后者是443
  4. HTTP的衔接很简略,是无状况的。HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全。

跋文及引用

本篇引用了很多资料和专栏:

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

2.《网络是怎样衔接的》–户根勤0 / k 9 i ( : Q V

3.《图解HTTP》–上野宣

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

5.《What Happs d 1 ` H 9 uensO : i } in a TLS Handshake?》

6. 《How to U~ v U 5 C Yse Webs1 C M hockets in GolangI r d N x: Best Tools and Step-by-Step Guide》

在我的脑图中,总结归纳了8种HTTP中心问题。

面试官问到三次握手,我甩出这张脑图,他服了!

作为一个转行的前端,理解这些HTe # $ eTP的进程既痛苦又有趣。想要脑图的能% 5 R ;够扫码加我,或公众号回复:HTTP

❤️ 看完三件事

假如你觉得这篇内容对你挺有启发,我[ L u l M K想约请你帮我三个小忙:

  1. 点赞,让更多的人也能看到这篇内容(收藏o m O l Y不点赞,都是耍流氓 -_-)
  2. 关注公众号「前端劝退师」,不定期共享原创常识。
  3. 也看看其它文章
面试官问到三次握手,我甩出这张脑图,他服了!

劝退师个人微信:huabk 8 r N P S ^ v &119

也能够来我的GitHub博客里拿所有文章的源文件:

前端劝退攻略:github.com/r4 l ^ ~oger-hiro/…
一起玩耍呀。~

发表评论

提供最优质的资源集合

立即查看 了解详情