Skip to content

通信协议

TCP协议

**TCP (Transmission Control Protocol)协议,翻译为"传输控制协议",是一种面向连接的、可靠的、基于字节流的通信协议,工作在 OSI 参考模型中的传输层。**其中 TCP 报文格式如下:

image-20231204145704936

  • 序列号:Sequence,简写”Seq“,在 TCP 连接中传送的字节流中的每一个字节都按顺序编号,该字段表示本报文所发送的数据的第一个字节的序号;
  • 确认号:期望收到对方下一个报文段的第一个数据字节的序号,若确认号为 N,则表明到序列号 N-1 为止的所有数据都已正确收到;
  • 标志位:在保留位的右边有 6 个标志位,每个标志位都只有 0、1 两种状态,通过不同的组合用来说明报文性质。
    • URG (Urgent Pointer):表示紧急指针的有效性。如果设置为1,表明紧急指针字段包含有效信息。
    • ACK (Acknowledgment):表示确认号字段的有效性。当 ACK=1 时,报文中的确认号字段才有效,当 ACK=0 时,报文中的确认号字段无效;TCP 规定在连接建立后所有传送的报文都必须把 ACK 置为 1;
    • PSH (Push):用于指示接收方应该尽快将数据交给应用层而不是等待缓冲区满再交付。
    • RST (Reset):用于重置连接。如果设置为1,表示连接出现问题,需要重新建立连接。
    • SYN (Synchronize):表示请求建立连接。当 SYN=1,ACK=0 时,表明这是一个连接请求报文,对方若同意建立连接,则应在响应报文中使 SYN=1,ACK=1,因此 SYN=1 就表示这是一个建立连接请求或连接接受报文;
    • FIN (Finish):表示发送方已经完成数据的发送。在正常情况下,FIN 用于释放连接。当 FIN=1 时,表明此报文的发送方的数据已经发送完毕,并要求释放连接。

三次握手

**为了确保通信双方都能正常接收/发送消息,TCP 协议要求通信双方建立一条可靠的通信连接。简单来说就是通过一条连接,通信双方能确认对方的存在和可用性,并且数据能够正确的传输和被接收,”三次握手“就是 TCP 协议中用于建立可靠连接的过程。**具体的建立过程如下:

  • 第一次握手:客户端发送一个 SYN=1,ACK=0 标志的数据包给服务端,请求进行连接;

  • 第二次握手:服务端收到请求并且允许连接的话,就会发送一个 SYN=1,ACK=1 标志的数据包给发送端,告诉它可以通讯了,并且让客户端发送一个确认数据包;

  • 第三次握手:服务端发送一个 SYN=0,ACK=1 的数据包给客户端,告诉它连接已被确认,开始通讯。

image-20220116233834474

使用 Wireshark 抓包展示三次握手:

774327-20181216104535874-2007397893

第一次握手:客户端发送一个 TCP 请求,标志位为 SYN,序列号为 0,代表客户端请求建立连接。数据包的关键属性如下:

  • Seq=0:初始建立连接值为 0,数据包的相对序列号从 0 开始,表示当前还没有发送数据。
  • Ack=0:初始建立连接值为 0,已经收到包的数量,表示当前没有接收到数据。
  • SYN:标志位,表示请求建立连接

774327-20181216104744830-1050984889

第二次握手:服务器发回确认包,标志位为 SYN,ACK. 将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即0+1=1。数据包的关键属性如下:

  • [SYN + ACK] : 标志位,同意建立连接,并回送SYN+ACK

  • Seq = 0:初始建立值为0,表示当前还没有发送数据

  • Ack = 1:表示当前端成功接收的数据位数,虽然客户端没有发送任何有效数据,确认号还是被加1,因为包含SYN或FIN标志位。(并不会对有效数据的计数产生影响,因为含有SYN或FIN标志位的包并不携带

774327-20181216104950687-1236457395

第三次握手:客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1。数据包的关键属性如下:

ACK:标志位,表示已经收到记录

Seq = 1:表示当前已经发送1个数据

Ack = 1: 表示当前端成功接收的数据位数,虽然服务端没有发送任何有效数据,确认号还是被加1,因为包含SYN或FIN标志位(并不会对有效数据的计数产生影响,因为含有SYN或FIN标志位的包并不携带有效数据)。

774327-20181216105102440-1450961874

就这样通过了TCP三次握手,建立了连接。

四次挥手

建立一个连接需要三次握手,而终止一个连接要经过四次握手,这是由于TCP是一个全双工通信机制的协议,只有双方都关闭的时候才表示这个连接断开了。

image-20220116234127171

第一次挥手:FIN+ACK,其中 183.136.236.13 是服务器的ip,可以看到这一次挥手是由服务器发起的。

701983-20180314102255745-1296704292

第二次挥手:ACK

701983-20180314102255981-1871970231

第三次挥手:FIN+ACK

701983-20180314102256594-1733317431

第四次挥手:ACK

701983-20180314102257013-202026294

HTTP协议

**HTTP 协议,英文全称”Hyper Text Transfer Protocol“,中文全称”超文本传输协议“,是一个简单的请求-响应协议,它运行在TCP之上。在OSI参考模型中的HTTP协议工作在应用层(第7层)。**图中可以看到wireshark截获到了三次握手的三个数据包。第四个包才是HTTP的, 这说明HTTP的确是使用TCP建立连接的。

774327-20181216104535874-2007397893

**HTTP最初的设计目的,是为了将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。也是说,将HTML页面放在web服务器上,通过浏览器访问URL地址来获取网页的内容。**到了WEB2.0以来,我们的页面变得复杂,不仅仅是一些简单的文字和图片,HTML页面开始有了CSS,Javascript,来丰富我们的页面展示,ajax的出现,又多了一种向服务器端获取数据的方法,这些其实都是基于HTTP协议的。

!> 注意:HTTP协议目的是规定客户端和服务端数据传输的格式和数据交互行为,并不负责数据传输的细节。

什么是HTTP无状态协议,怎么解决?

​ 标准的http协议就是无状态的,无连接的。cookies, session都不属于标准协议。

​ 无连接指的是每一个访问都是无连接的,服务器挨个处理访问队列里的访问,处理完一个就断开连接,这事儿就完了,然后处理下一个新的

​ 两种用于保持HTTP连接状态的技术就应运而生了,一个是Cookie,而另一个则是Session

HTTP协议头中,keep-alive字段有什么作用?

​ Keep-Alive:显示此HTTP连接的Keep-Alive时间。使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive避免了建立或者重新建立连接。以前HTTP请求是一站式连接,从HTTP/1.1协议之后,就有了长连接,即在规定的Keep-Alive时间内,连接是不会断开的。

HTTP和HTTPS的区别和优缺点:

​ HTTP 中文名叫作超文本传输协议 。HTTP 协议是用于从网络传输超文本数据到本地浏览器的传送协议,它能保证高效而准确地传送超文本文档。

​ HTTPS 是以安全为目标的 HTTP通道,简单讲是 HTTP 的安全版, HTTP 下加入 SSL层(Secure Socket Layer,安全套接字层),简称为 HTTPS。HTTPS的安全基础是SSL,因此通过它传输的内容都是经过SSL加密的,它的主要作用可以分两种:

​ 1.建立一个信息安全通道来保证数据传输的安全。

​ 2.确认网站的真实性,凡是使用了 HTTPS 的网站,都可以通过点击浏览器地址栏的锁头标志来查看网站认证。

区别:

  1. http 的URL 以http:// 开头,https以https:// 开头。

  2. http 标准端口是80 ,https是443。

  3. https 协议需要到ca申请证书,http不需要。

  4. http 是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。

  5. http 的连接很简单,是无状态的,https协议是由SSL+http协议构建的可进行加密传输、身份认证的网络协议 要比http协议安全。

优点:

  1. 通过证书可以更信任服务器。

  2. 更安全,防篡改。

缺点:

  1. https 需要证书。
  2. 因为对传输进行加密,会一定程度增加cpu消耗。
  3. 由于https 要还密钥和确认加密算法的需要,所以首次建立连接会慢一些。
  4. 带宽消耗会增加。

常用的http方法:

GET 从服务器获得资源

POST 客户端向服务器提交资源

PUT 修改服务器相关资源  (已经很少用)

DELETE 删除服务器相关资源   (已经很少用)

对HTTP的了解

\1. 客户端与服务器建立TCP连接,一般使用80端口。

\2. 客户端向服务器发送请求。

\3. 服务器向客户端发送响应。

\4. 重复上述步骤。

\5. 通讯完毕,TCP连接断开。

1.HTTP协议是无状态的

就是说每次HTTP请求都是独立的,任何两个请求之间没有什么必然的联系。但是在实际应用当中并不是完全这样的,引入了Cookie和Session机制来关联请求。

2.多次HTTP请求

在客户端请求网页时多数情况下并不是一次请求就能成功的,服务端首先是响应HTML页面,然后浏览器收到响应之后发现HTML页面还引用了其他的资源,例如,CSS,JS文件,图片等等,还会自动发送HTTP请求这些需要的资源。现在的HTTP版本支持管道机制,可以同时请求和响应多个请求,大大提高了效率。

3.基于TCP协议

HTTP协议目的是规定客户端和服务端数据传输的格式和数据交互行为,并不负责数据传输的细节。底层是基于TCP实现的。现在使用的版本当中是默认持久连接的,也就是多次HTTP请求使用一个TCP连接。

HTTPS(SSL/TLS)会对我们的数据进行加密和解密。

HTTP版本

HTTP版本历史进度图:

138606-f9ba56daf288760c

HTTP1.0最早在网页中使用是在1996年,那个时候只是使用一些较为简单的网页上和网络请求上。例如,使用header里的If-Modified-Since,Expires来做为缓存判断的标准;存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,不支持断点续传功能。

HTTP1.1在1999年才开始广泛应用于现在的各大浏览器网络请求中,同时也是当前使用最为广泛的HTTP协议。 主要区别主要体现在:

  • 引入更多的缓存控制策略;
  • 带宽优化及网络连接的使用;
  • 新增了24个错误状态响应码;
  • Host头处理,即在请求消息中如果没有Host头域会报告一个错误(400 Bad Request);
  • 支持长连接和请求的流水线(Pipelining)处理,默认开启 Connection: keep-alive,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。

**HTTP2.0是HTTP协议的一个新迭代,提供了一种更高效的数据传输准则。**主要体现在:

  • 协议解析采用二进制格式,只认0和1的组合,实现方便且健壮;
  • 多路复用,即每个request对应一个id,每个连接可以将多个request混杂在一起,接收方可以根据id将request再归属到各自不同的服务端请求里面;
  • header压缩,通讯双方各自cache一份header fields表,既避免了重复header的传输。

HTTP/2优势

复用区别:HTTP2.0的多路复用和HTTP1.X中的长连接复用有什么区别?

  • HTTP/1.* 一次请求-响应,建立一个连接,用完关闭;每一个请求都要建立一个连接;且若干个请求排队串行化单线程处理,后面的请求等待前面请求的返回才能获得执行机会,一旦有某请求超时等,后续请求只能被阻塞,毫无办法,也就是人们常说的线头阻塞;
  • HTTP/2多个请求可同时在一个连接上并行执行。某个请求任务耗时严重,不会影响到其它连接的正常执行。具体如图:

138606-37ea7846b10ea092

头部压缩:假定一个页面有100个资源需要加载(这个数量对于今天的Web而言还是挺保守的), 而每一次请求都有1kb的消息头(这同样也并不少见,因为Cookie和引用等东西的存在), 则至少需要多消耗100kb来获取这些消息头。HTTP2.0可以维护一个字典,差量更新HTTP头部,大大降低因头部传输产生的流量。具体参考:HTTP/2 头部压缩技术介绍

服务端推送:服务端推送能把客户端所需要的资源伴随着index.html一起发送到客户端,省去了客户端重复请求的步骤。正因为没有发起请求,建立连接等操作,所以静态资源通过服务端推送的方式可以极大地提升速度。具体如下:

普通的客户端请求过程:

138606-d6b704a63c41587c

服务端推送的过程:

138606-180318d7f001446f

性能测试HTTP/2: the Future of the Internet 是 Akamai 公司建立的一个官方的演示,用以说明 HTTP/2 相比于之前的 HTTP/1.1 在性能上的大幅度提升。 同时请求 379 张图片,从Load time 的对比可以看出 HTTP/2 在速度上的优势。

QQ截图20211125180534

?> 提示:从HTTP/1.0开始,一直到HTTP/2,不管应用层协议如何改进,TCP一直以来都是HTTP协议的基础,主要是因为他能提供可靠连接。

服务器HTTP

开发者工具栏点击 Network 选择一个请求,点击 Headers 可以看到在 Response Headers 右侧有一个 View source 选项:

QQ截图20211126113018

点击 View source 选项第一行就可以看到服务器HTTP版本,目前绝大部分的服务器使用的都是HTTP1.1的版本:

QQ截图20211126113556

在标签里右键,然后把protocol选项打开也可以看到使用协议:

QQ截图20220326144219

这里http/1.1代表HTTP1.1版本,h2代表HTTP2.0版本:

QQ截图20220326144415

HTTPS

使用HTTP协议最直观的体现就是在网址URL最前的HTTP头,一般分为两类:

http超文本传输协议,使用80端口。

https安全超文本传输协议,在 HTTP 加入 TLS(安全传输层协议),使用443端口。

138606-0360ca017b6f5eb7

CA证书

使用HTTPS协议需要到CA(数字证书管理机构)申请CA证书,也可以叫数字证书,CA证书有很多种,其中SSL证书就是一种由专业的数字证书签发机构所签发的数字安全证书。

不同的ca机构所签发的ca证书价格也是不同的,而即便是同一个签发机构的不同品牌、不同安全等级的证书,价格也有比较大的差异。目前,安全证书主要分为DV、OV和EV三个种类,对应的安全等级为一般、较好和最高三个等级。三者的审核过程、审核标准和对应的域名数量也不同,所以价格在几百元到几万元不等。另外,第一种安全证书还有免费版本的可供使用,只不过数量很少。

**因此,https的签发机构选择一定要特别谨慎,最好选择行业认可且全球范围内都可以使用的ca机构签发的证书。目前,我们国内的证书能够符合标准的还不是特别多,主要原因是有一些证书不能够被国外的浏览器所认可,在使用的时候需要进行一定的额外操作。**例如国家税务总局全国增值税发票查验平台网站,即使网址开端是https,但由于证书不被认可,浏览器还是会提示不是私密链接。

QQ截图20200719004117

DH密钥交换算法

**Diffie-Hellman密钥交换算法(简称 DH):一种流行的密钥交换加密算法,它使得通信的双方能在“非安全”的信道中安全的交换密钥,用于加密后续的通信消息,比如 Https 协议的 TLS(Transport Layer Security) 和 IPsec 协议的 IKE(Internet Key Exchange) 均以 DH 算法作为密钥交换算法,可以说它是许多协议(包括HTTPS,SSH,IPsec,SMTPS和依赖TLS的协议)的基础。**简单说,DH算法的唯一目的是使得两个用户能够安全地交换密钥,得到一个共享的会话密钥,用该密钥加密后续的通信消息,但算法本身不能用于加、解密,其安全性基于求离散对数的困难性。

Logjam漏洞

2015年,研究人员发现了一个名为Logjam新的浏览器和网站加密漏洞,漏洞影响称为Diffie-Hellman密钥交换算法,该协议作为HTTPS, SSH, SMTPS协议的加密算法使用。

b21c8701a18b87d6de978dd50e0828381e30fd27

但如果在DH交互过程中Alice和Bob始终使用相同的私钥,就会导致后续产生的共享密钥是一样的,如果有嗅探者截获通信双方的所有数据,由于都是同一个密钥加密所得,一旦被破解,后续的通信将全部暴露。

不仅如此,一个主动的窃听者C可能截取A发给B的消息以及B发给A的消息,他用自己的消息替换这些消息,并分别与A和B完成一个Diffie-Hellman密钥交换,密钥交换协议完毕后,A实际上和C建立了一个会话密钥,B和C建立了一个会话密钥,当A加密一个消息发送给B时,C能解密它而B不能。类似地,当B加密一个消息发送给A时,C能解密它而A不能。

中间人攻击

攻击者利用Logjam漏洞发起中间人式攻击,也会对TLS协议进行攻击,攻击者可以将TLS链接的加密算法的输出级别降至512位。这样会使得攻击者能够读取和修改使用这个链接进行传输的所有数据信息。

**任何支持DHE_EXPORT加密算法的网站邮件服务器和其他基于TLS协议的服务器并且会影响所有的现代web浏览器都有被中间人攻击的危险。**我们使用互联网广域扫描来评估哪些服务器容易被攻击:

协议                      可被Logjam漏洞攻击
HTTPS前一百万域名               8.4%
HTTPS浏览器信任的站点            3.4%
SMTP+StartTLSIPv4地址空间     14.8%
POP3SIPv4地址空间              8.9%
IMAPSIPv4地址空间              8.4%

我们对TSL协议中最常用的512位初始序列进行了研究和计算结果显示中间人攻击能够使80%的使用了TLS DHE_EXPORT协议的服务器链接降级20%。因此我们进一步估计一个学术团队能够破解768位的初始序列而且一个国家级的团队能够破解1024位的初始序列。在这种情况下web服务器中所使用的最常见的1024位初始序列将会允许攻击者对排名在前一百万的HTTPS域名的通讯线路上实施被动窃听。如果最常见的1024位密钥组被破解将会产生漏洞的协议如下:

协议                         可被Logjam漏洞攻击
HTTPS前一百万域名                  17.9%
HTTPS浏览器信任的站点               6.6%
SSHIPv4地址空间                   25.7%
IKEv1(IPsec VPNs)IPv4地址空间     66.1%

我们已经公布了一个技术报告报告名为《有缺陷的前端加密实践中的Diffie-Hellman是如何失败的》报告内容的重点是关于这些攻击的内容还有关于我们如何破解最常见的512位Diffie-Hellman密码组合的详细信息还有我们对已被感染的服务器的测评。

**如果你有一个运行着的web服务器或邮件服务器,那么你应当禁止服务器对输出密码套件和生成唯一的2048位Diffie-Hellman密钥集的支持。**我们已经发布了一个为TLS协议部署Diffie-Hellman的指导教程教程会对操作的每一步进行指导。如果你使用了SSH那么你应该将你的服务器和客户端进行升级至最新版的OpenSSH最新版的OpenSSH使用的是椭圆曲线的Diffie-Hellman密钥交换技术。

如果你使用了一个浏览器,请确保你安装了最新版的浏览器并且经常去检查更新。Google Chrome浏览器(包括安卓版浏览器),Mozilla火狐浏览器微软的IE浏览器和苹果的Safari浏览器都针对Logjam漏洞进行了补丁修复。

如果你是一名系统管理员或开发者,请确保你所使用的所有TLS库都进行了更新并且移除所有小于1024位密钥的Diffie-Hellman密钥集。

TCP/IP协议簇

IP地址

经过同一个路由器的设备查到的外网IP一般是一样的

但是可能会存在两种情况导致查到的外网IP不一样:

1、手机连接了路由器WIFI,同时打开了移动数据网,此时通过手机网络参数查询到的IP可能就不是路由器的IP,而是移动网的IP!

2、手机或者电脑设置了代理服务器,查到的外网IP是代理服务器的IP!

所以我们要查路由器外网的IP,一定要连接路由器的WIFI或者有线网,然后通过登录路由器管理界面去查外网的IP,这样查到的外网IP才不会错!

计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路和通信设备连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。

  1. 光信号的发送:在家庭或企业入户系统中,光信号通常由外部网络提供商发送,这些光信号被发送到您的建筑物。光信号的发送是通过一种光模块或发射设备来实现的,这些设备将电信号转化为光信号,然后通过光纤传输到入户点。

  2. 光信号的接收:在入户点,光信号被接收并转换为电信号,以便在您的建筑物内部的设备(如光猫)能够处理和利用这些信号。光信号的接收通常是通过一个专门的光接收模块或接收器来完成的,它负责将传入的光信号转化为电信号。

  3. 基础概念

    网域

    局域网:LAN(家庭网络)

    城域网:MAN(城市网络)

    广域网:WAN(Internet因特网)

    传输类型

    单工:始终只能完成一个方向的数据传输(电视、遥控器)

    半双工:同一时间只能完成一个方向的数据传输(单车道,对讲机)

    全双工:同一时间只能完成两个方向的数据传输(双车道)

    数据类型

    单播:一对一

    组播:一对多

    广播:一对所有

交换机

交换机的作用:终端用户设备的接入,基本的安全功能,广播域的隔离(VLAN)

优点:可多用户同时访问,支持全双工

缺点:无法完成一些特殊的功能(NAT功能)

接口模块

接口一般就四种:SC、LC、ST、FC(后两种用在交换机上)

交换机上的接口:电口(双绞线)、光口(光纤)、光电复用口(双绞线和光纤都支持)

短波模块到短波模块:只能用多模光纤,因为短波模块的发光口大于单模光纤的纤芯直径,部分信号无法进入光纤。

短波模块到长波模块:任何光纤都不行,两端波长必须相同。

长波模块到长波模块:多模光纤可用,但传输距离受限,单模光纤更合适。

在浏览器中输入 URL 后,按下回车经历如下八步操作:

  1. 浏览器通过 DNS 查找域名的IP地址;
  2. 浏览器与目标服务器建立 TCP 连接(3次握手);
  3. 浏览器通过 HTTP 协议发送请求;
  4. 服务器端响应 HTTP 请求;
  5. 浏览器解析 HTML 代码;
  6. 浏览器发送请求获取获取 HTML 中的资源(如图片、音频、视频、CSS、JS等);
  7. 浏览器对页面进行渲染呈现给用户。
  8. 释放 TCP 连接(4次挥手);

然后通过网卡(物理层)变成比特流(二进制码)发送到网线上,通过网线到达它们的目的机器,在目的机器的一端执行相反的过程。接收端机器的以太网卡捕获到这些帧,并告诉操作系统帧已到达,然后对其进行存储。

TLS协议

安全传输层协议(Transport Layer Security,TLS)用于在两个通信应用程序之间提供保密性和数据完整性。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake),在OSI参考模型中的TLS协议工作在传输层(第4层)。

TLS简介(不知道怎么回事,这里不能设置标题,否则打包会大于500KB)

通过TCP/IP模型,可以看到HTTP协议运行在TCP协议之上,所有传输的内容都是明文,但如果使用了SSL协议,所有传输的内容都经过加密的,保证数据传输安全和网站真实性,可以有效的防止运营商劫持。其中,SSL就是安全套接层(Secure Socket Layer),在SSL更新到3.0时,IETF对SSL3.0进行了标准化,并更名为TLS1.0,可以说TLS就是SSL的新版本3.1。目前,TLS有1.0、1.1、1.2、1.3四个版本。

14ce36d3d539b60025290839e350352ac75cb75c

TLS 通信(不知道怎么回事,这里不能设置标题,否则打包会大于500KB)

**wireshark抓包内容及简单说明:**以访问 新浪 为例,抓包解析 TLS1.2 到底是如何通信的。

1566038645141966

**客户端Client Hello阶段:**客户端向服务端发送建立连接请求;此时,客户端会携带支持的版本号、支持的加密套件、客户端随机数(用于协商对称加密的密钥)、支持的HTTP协议供服务端选择。

1566040273634516

**服务端Server Hello阶段:**服务端回应客户客户端的招呼信息;根据客户端所携带的内容,确定建立连接版本、加密套件,生成服务端随机数(用于协商对称加密的密钥)。如下图,可以看到确定的加密套件是:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

1566040453571349

服务端Certificate, Server Key Exchange, Server Hello Done阶段:

Certificate:服务端向客户端发送由权威ca机构签发的数字证书(此证书包含服务端的公钥)以验证身份;

1566040865315429

Server Key Exchange:服务端向客户端发送基于选择的加密套件生成的公钥;基于Server Hello阶段选择的ECDHE交换密钥算法,发送生成的公钥,用于协商出对称加密的密钥;

1566041009101253

Server Hello Done:服务端向客户端表示响应结束;

客户端Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message阶段:

Client Key Exchange:客户端向服务端发送自己生成的公钥;基于协商选择的ECDHE交换密钥算法,发送它生成的椭圆曲线的公钥,用于协商出对称加密的密钥;

1566041522646745

Change Cipher Spec:变更密码规范协议,告知服务端/客户端,以后的通信都是基于AES加密的;,它非常简单,就是一条通知消息,告知对方以后的通信都是加密的;

Enctypted Handshare Message:基于协商生成的密钥,用AES加密验证信息让服务端/客户端进行认证;如果对方可以解密,则双方认证无误开始通信;

服务端New Session Ticket, Change Cipher Spec, Encrypted Handshake Message阶段:

New Session Ticket:TLS建立SSL连接的优化方法,此处不做特别说明;

Change Cipher Spec:告诉客户端以后的通信是加密的;

Enctypted Handshare Message:发送一条经过密钥加密的数据,让客户端验证;验证通过则开始进行加密通信;

**Applicatiion Data阶段:**表示客户端/服务端已经开始基于TLS进行通信了;