计算机网络的一些笔记总结

一、网络分层协议

国际标准化组织ISO提出了OSI开放互连的七层计算机网络模型,TCP/IP体系结构又将其分成四层结构,因特网的协议栈通常将其分成五层的模型结构,下面分别说一下这几种分层模型:

1.七层

国际标准化组织ISO提出的OSI开放互连的七层计算机网络模型,从上到下分别是应用层,表现层,会话层,运输层,网络层,链路层和物理层。OSI 模型的概念清楚,理论也比较完善,但是既复杂又不实用。

各层的作用及描述,以及对应的协议如下图(好图得留着):

七层模型

2.四层

4层是指TCP/IP四层模型,主要包括:应用层、运输层、网际层和网络接口层。
四层tcp/ip模型
4层协议和对应的标准7层协议的关系如下图:
在这里插入图片描述

3.五层

5层只是OSI和TCP/IP的综合,是业界产生出来的非官方协议模型,有很多具体的应用。实际应用还是TCP/IP的四层结构,只是为了方便把下层的网络接口层分成了数据链路层和物理层。
五层模型

4.各层的作用:

1.应用层:

  • 应用层是网络体系结构中的最高层,主要任务时通过应用进程之间的交互来完成特定网络应用,应用层的数据单位叫做报文
  • 应用层的协议定义了应用进程之间通信和交互的规则,主要包括了域名系统 DNS、支持万维网的 HTTP协议、支持电子邮件的 SMTP 协议、文件传输协议 FTP 等。

这一层在OSI开放互连七层协议中分成以下三层:

  1. 应用层:与其它计算机进行通讯的一个应用,它是对应应用程序的通信服务的。
  2. 表示层:这一层的主要功能是定义数据格式及加密。
  3. 会话层:它定义了如何开始、控制和结束一个会话,包括对多个双向消息的控制和管理。

2.运输层

  • 运输层的主要任务时负责向两台主机中进程之间的通信提供通用的数据传输服务。应用进程利用该服务来传送应用层报文。由于一台主机同时可以运行多个进程,因此运输层具有复用和分用的功能,复用就是多个应用层进程可以同时使用下面运输层的服务,分用就是把运输层收到的信息分别交付给上面应用层中的对应进程。
  • 运输层主要使用两种协议:
    ①用户数据报协议UDP,这是一种提供无连接的,尽最大努力交付的数据传输服务,不保证数据传输的可靠性,数据传输单位是用户数据报。
    ②传输控制协议TCP,这是一种面向连接的,可靠的数据传输服务,数据传输单元是报文。

3.网络层

  • 网络层负责为分组交换网上的不同主机提供通信服务
  • 在发生数据时,网络层把数据层产生的报文或用户数据报封装成分组进行传送,由于网络层使用 IP 协议,因此分组也叫 IP 数据报
  • 另一个任务就是选择合适的路由,使源主机运输层所传下来的分组能够通过网络中的路由器找到目的主机。
  • 网络层的协议包括了网际协议 IP、地址解析协议 ARP、网际控制报文协议 ICMP 以及路由选择协议RIP/OSPF/BGP-4 等。

4.链路层

  • 数据链路层的主要任务是将网络层交下来的IP数据报组装成帧,在两个相邻结点之间的链路上传输帧,每一帧包括数据和必要的控制信息(同步信息、地址信息、差错控制等)。
  • 在接收数据时,控制信息使接收端能够知道一个帧从哪个比特开始到哪个比特结束,这样链路层就可以从帧中提取出数据部分上交给网络层。
  • 控制信息还使接收端能够检测到所收到的帧有无差错,如果有差错就简单地丢弃这个帧以免继续传送而浪费网络资源。
  • 数据链路层的协议包括了点对点协议 PPP 和 CSMA/CD 协议等。

5.物理层

  • 物理层的任务是尽可能地屏蔽掉传输媒介和通信手段的差异,使物理层上面的数据链路层感觉不到这些差异,使其只需考虑本层的协议和服务。
  • 物理层所传输的数据单位是比特,发送方发送 1 或 0,接收方也接收 1 或 0,因此物理层需要考虑用多大的电压代表 1 或 0,以及接收方如何识别出发送方所发送的比特。除此之外,物理层还要确定连接电缆的插头应当有多少根引以及各引脚如何连接等问题。

5.数据报

从上往下,每经过一层,协议就会在包头上面做点手脚,加点东西,传送到接收端,再层层解套出来,如下示意图:
数据报
参考:https://blog.csdn.net/cc1949/article/details/79063439

二、TCP

TCP协议全称: 传输控制协议, 顾名思义, 就是要对数据的传输进行一定的控制.

1.TCP的特点:

(1).TCP 是面向连接的运输层协议:一个应用进程在向另一个进程发送数据之前,两个进程必须先建立TCP连接,发送某些预备报文段,建立确保数据传输的参数。作为 TCP 连接建立的一部分,连接双方都将初始化与 TCP 连接相关的许多状态变量。这种连接不是电路交换网络中的端到端电路这种物理连接,而是一种逻辑连接,TCP 报文要先传送到 IP 层加上 IP 首部后,再传到数据链路层,加上链路层的首部和尾部后才离开主机发送到物理层。

(2).TCP 连接提供全双工服务:允许通信双方的应用进程在任何时候都能发送数据。TCP 连接的两端都有各自的发送缓存和接收缓存,用来临时存放通信数据。在发送时,应用程序把数据传送给 TCP 缓存后就可以做自己的事,而 TCP 在合适的时候会把数据发送出去。在接收时,TCP 把收到的数据放入缓存,上层应用程序会在合适的时候读取缓存数据。

(3).TCP 连接是点对点的:每一条 TCP 连接只能有两个端点,即只能是单个发送方和单个接收方之间的连接。
(4).TCP 提供可靠的交付服务:通过 TCP 连接传送的数据无差错、不丢失、不重复,按序到达。
(5).TCP 是面向字节流的:流是指流入到进程或从进程中流出的字节序列。面向字节流的含义是:虽然应用程序和 TCP 的交互是一次一个数据块,但是 TCP 把应用程序交下来的数据仅仅看成一连串无结构的字节流。TCP 不保证接收方应用程序收到的数据块和发送方应用程序发出的数据块具有对应大小的关系,但是接收方应用程序收到的字节流必须和发送方应用程序发出的字节流完全一样。接收方应用程序必须有能力识别收到的字节流,并把它还原成有意义的应用层数据。

2.TCP 报文结构

报头结构如下:
报文结构
每部分的含义和作用:

  • 源端口号/目的端口号: 表示数据从哪个进程来, 到哪个进程去

  • 32位序号:用来补偿传输中的不一致。

  • 32位确认序号:如果设置了ACK控制位,这个值表示一个准备接收的包的序列码。

  • 4位首部长度: 表示该tcp报头有多少个4字节(32个bit)

  • 6位保留: 顾名思义, 先保留着, 以防万一

  • 6位标志位:

    URG: 标识紧急指针是否有效
    ACK: 标识确认序号是否有效
    PSH: 用来提示接收端应用程序立刻将数据从tcp缓冲区读走
    RST: 要求重新建立连接. 我们把含有RST标识的报文称为复位报文段
    SYN: 请求建立连接. 我们把含有SYN标识的报文称为同步报文段
    FIN: 通知对端, 本端即将关闭. 我们把含有FIN标识的报文称为结束报文段

  • 16位窗口大小:用来表示想收到的每个TCP数据段的大小。TCP的流量控制由连接的每一端通过声明的窗口大小来提供。

  • 16位检验和: 由发送端填充, 检验形式有CRC校验等. 如果接收端校验不通过, 则认为数据有问题. 此处的校验和不光包含TCP首部, 也包含TCP数据部分.

  • 16位紧急指针: 用来标识哪部分数据是紧急数据,进行优先处理.

  • 选项:长度不定,但长度必须为1个字节。如果没有选项就表示这个1字节的域等于0。

  • 数据:该TCP协议包负载的数据。

3.TCP三次握手

TCP 是全双工通信,任何一方都可以发起建立连接的请求,假设 A 是客户端,B 是服务器。
三次握手
(1).初始状态:
初始 A 和 B 均处于 CLOSED 状态,B 会创建传输进程控制块 TCB 并进入 LISTEND 状态,监听端口是否收到了 TCP 请求以便及时响应。
(2).第一次握手:
当 A 要发生数据时就向 B 发送一个连接请求报文,TCP 规定连接请求报文的 SYN=1,ACK=0,SYN 不可以携带数据,但要消耗一个序号,假设此时 A 发送的序号 seq 为 x。发送完之后 A 就进入了 SYNSENT 同步已发送状态。
(3).第二次握手:
当 B 收到 A 的连接请求报文后,如果同意建立连接就会发送给 A 一个确认连接请求报文,其中SYN=1,ACK=1,ack=x+1,seq=y,ack 的值为 A 发送的序号加 1,ACK 可以携带数据,如果不携带的话则不消耗序号。发送完之后,B进入 SYN-RCVD 同步已接收状态。
(4).第三次握手:
当 A 收到 B 的确认连接请求报文后,还要对该确认再进行一次确认,报文的 ACK=1,ack=y+1,seq=x+1,发送后 A 进入 ESTABLISHED 状态,当 B 接收到该报文后也进入 ESTABLISHED 状态,客户端会稍早于服务器端建立连接。

三次握手的原因主要有两个目的,信息对等和防止超时。

  • 从信息对等的角度看,双方只有确定 4 类信息才能建立连接,即 A 和 B 分别确认自己和对方的发送和接收能力正常。在第二次握手后,从 B 的角度看还不能确定自己的发送能力和对方的接收能力,只有在第三次握手后才能确认。
  • 三次握手也是防止失效连接突然到达导致脏连接,网络报文的生存时间往往会超过 TCP 请求超时时间,A 的某个超时连接请求可能会在双方释放连接之后到达 B,B 会误以为是 A 创建了新的连接请求,然后发送确认报文创建连接。因为 A 机器的状态不是 SYN_SENT,所以直接丢弃了 B 的确认数据。如果是两次握手,连接已经建立了,服务器资源被白白浪费。如果是三次握手,B 由于长时间没有收到确认息,最终超时导致创建连接失败,因此不会出现脏连接。

4.TCP四次挥手

数据传输完毕后,双方都可以释放连接.此时客户端和服务器都是处于ESTABLISHED状态,然后客户端主动断开连接,服务器被动断开连接.
四次挥手
(1).第一次挥手:
当 A 已经没有要发送的数据时就会释放连接,会向 B 发送一个终止连接报文,其中 FIN=1,seq=u,u的值为之前 A 发送的最后一个序号+1。发送完之后进入 FIN-WAIT-1 状态。
(2).第二次挥手:
B 收到该报文后,发送给 A 一个确认报文,ACK=1,ack=u+1,seq=v,v 的值为 B 之前发送的最后一个序号+1。此时 A 进入了FIN-WAIT-2 状态,B 进入了 CLOSE-WAIT 状态,但连接并未完全释放,B 会通知高层的应用层结束 A 到 B 方向的连接,此时 TCP 处于半关闭状态。
(3).第三次挥手:
当 B 发送完数据后准备释放连接时,就向 A 发送连接终止报文,FIN=1,同时还要重发ACK=1,ack=u+1,seq=w,seq 不是 v 的原因是在半关闭状态 B 可能又发送了一些数据,之后 B 进入 LAST- ACK 状态。
(4).第四次挥手:
A 收到连接终止报文后还要再进行一次确认,确认报文中 ACK=1,ack=w+1,seq=u+1。发送完之后进
入 TIME-WAIT 状态,等待 2MSL之后进入 CLOSED 状态,B 收到该确认后进入 CLOSED 状态,服务器端会稍早于客户端释放连接。

四次挥手的原因

  • 第一点原因是为了保证被动关闭方可以进入 CLOSED 状态。MSL 是最大报文段寿命,等待 2MSL 可以保证 A 发送的最后一个确认报文能被 B 接收,如果该报文丢失,B 没有收到就会超时重传之前的FIN+ACK 报文,而如果 A 在发送确认报文后就立即释放连接就无法收到 B 超时重传的报文,因而也不会再一次发送确认报文段,B 就无法正常进入 CLOSED 状态。
  • 第二点原因是 2MSL 时间之后,本连接中的所有报文就都会从网络中消失,可以防止已失效连接的请求数据包与正常连接的请求数据包混淆而发生异常
  • 除此之外,TCP 还设有一个保活计时器,用于解决客户端主机故障的问题,服务器每收到一次客户的数据就重新设置保活计时器,时间为 2 小时。如果 2 小时内没有收到就间隔 75 秒发送一次探测报文,连续 10 次都没有响应后就关闭连接。

5.TCP 和 UDP 的区别

  1. TCP 是面向连接的,而 UDP 是无连接的,发送数据之前不需要建立连接,减少了开销和发送数据之前的时延。
  2. TCP 保证数据的可靠传输,UDP 使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态。
  3. TCP 是面向字节流的,UDP 是面向报文的,发送方的 UDP 对应用程序交下来的报文,在添加首部后就向下交付 IP 层。UDP 对应用层交下来的报文既不拆分也不合并,而是保留这些报文的边界。如果报文太长,IP 层在传送时可能需要分片,如果报文太短,会使 IP 数据报首部的相对长度太大,都会降低 IP层的效率。
  4. TCP 有拥塞控制,UDP 没有拥塞控制,因此网络中出现的拥塞不会降低源主机的发送速率。这对某些实时应用很重要,很多实时应用如 IP 电话、实时视频会议等要求源主机以恒定的速率发送数据,并且允许在网络发生拥塞时丢失一些数据,但却不允许网络有太大的时延,UDP 正好适合这种要求。
  5. TCP 是点到点之间的一对一通信,UDP 支持一对一、一对多和多对多的交互通信。
  6. UDP 的首部开销很小,只有 8 字节,相比 TCP 的 20 字节要短。

参考:
https://blog.csdn.net/sinat_36629696/article/details/80740678
https://www.jianshu.com/p/ef892323e68f

三、HTTP

HTTP 即超文本传输协议,是 Web 的应用层协议。
在这里插入图片描述

1.HTTP 概况

HTTP 即超文本传输协议,是 Web 的应用层协议。HTTP 由两个程序实现,一个客户程序和一个服务器程序,客户程序和服务器程序运行在不同的端系统中,通过交换 HTTP 报文进行会话。HTTP 定义了这些报文的结构以及客户和服务器进行报文交换的方式,当用户请求一个 Web 页面时,浏览器向服务器发出对该页面中所包含对象的 HTTP 请求报文,服务器接收到请求并用包含这些对象的 HTTP 响应报文进行响应。

HTTP 使用 TCP 作为它的支撑运输协议,HTTP 客户首先发起一个与服务器的 TCP 连接,一旦连接建立,该浏览器和服务器进程就可以通过套接字访问 TCP。客户端的套接字接口是客户进程与 TCP 连接之间的门,服务器端的套接字接口则是服务器进程与 TCP 连接之间的门。客户向它的套接字接口发送HTTP 请求报文并从它的套接字接口接收 HTTP 响应报文,类似的,服务器从它的套接字接口接收HTTP 请求报文并向它的套接字接口发送 HTTP 响应报文。一旦客户向它的套接字接口发送一个 HTTP请求报文,该报文就脱离了客户控制并进入 TCP 的控制,TCP 为 HTTP 提供可靠的数据传输服务,因此一个客户进程发出的每个 HTTP 请求报文最终都能完整地到达服务器,服务器进程发出地每个 HTTP 响应报文最终也可以完整地到达客户。这里体现了分层体系结构的优点,HTTP 协议不需要担心数据丢失,也不需要关注 TCP 从网络的数据丢失和乱序中如何恢复。

HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间

HTTP 是一种无状态的协议,服务器向客户发送被请求的文件,而不存储任何关于该客户的状态信息。假如某个客户在短时间内连续两次请求同一个对象,服务器并不会因为刚刚为该客户做出了响应就不再响应,而是重新进行响应。

2.非持续连接和持续连接

依据每个请求/响应对经过一个单独的 TCP 连接还是相同的 TCP 连接发送,可以将连接划分为非持续连接和持续连接。HTTP 默认使用持续连接,但是也可以配置成使用非持续连接。

非持续连接
使用非持续连接时,从服务器向客户传送一个包含了一个 HTML 文件和 10 个 JPG 对象的 Web 页面步骤:

  • ① HTTP 客户进程在端口号 80 发起一个到服务器的 TCP 连接,并经它的套接字向服务器发送一个HTTP 请求报文。
  • ② HTTP 服务器进程经它的套接字接收请求报文,从其存储器中检索出请求对象,在一个 HTTP 响应报文中封装对象,并通过套接字向客户发送响应报文。
  • ③ HTTP 服务器进程通知 TCP 断开该 TCP 连接,直到 TCP 确认客户已经完整接收到响应报文才会实际断开连接。
  • ④ HTTP 客户接收到响应报文,客户从报文中提取出 HTML 文件,得到多个 JPG 图像的引用,并对每个引用的 JPG 图像对象重复前三个步骤。

每个 TCP 连接会在服务器发送一个对象后关闭,即该连接并不为其他的对象而持续下来。每个 TCP 连接只传输一个请求报文和一个响应报文,假如请求一个 HTML 文件和其中包括的 10 个 JPG 图像就要产生 11 个 TCP 连接。

在非持续连接中,每次请求文件到接收响应大约需要花费两个 RTT 加上服务器传输文件的时间,RTT 就是往返时间,指一个短分组从客户到服务器然后再返回客户所发送的时间。其中三次握手的前两个部分占用一个 RTT,三次握手的第三个确认部分向服务器发送了请求报文,服务器接收到之后做出响应,这用去了另一个 RTT。

持续连接

非持续连接有很多缺点。第一,必须为每个请求的对象建立和维护一个新的连接,对于每个连接,在客户和服务器中都要分配 TCP 的缓冲区和保持 TCP 变量,这给 Web 服务器带来了很大负担。第二,每一个对象需要消耗两倍的 RTT,一个用于创建 TCP,一个用于请求和接收对象。

在 HTTP1.1 中使用了持续连接,服务器在发送响应后保持该 TCP 连接打开。在相同的客户与服务器之间,后续的请求和响应报文能够通过相同的连接进行传送。在使用持续连接的情况下,请求一个完整的Web 页面可以使用单个持续的 TCP 连接,例如之前所说的包含一个 HTML 文件和 10 个 JPG 对象的Web 页面就只需要一个 TCP 连接而不是 11 个。

3.HTTP 报文格式

HTTP 报文有两种,分为请求报文和响应报文。

请求报文

HTTP 请求报文的第一行叫做请求行,其后继的行叫做首部行。请求行有三个字段,包括方法、URL 和HTTP 版本。方法包括了 GET、POST、HEAD、PUT 和 DELETE 等。绝大部分的 HTTP 请求报文使用GET 方法,当使用 GET 方法时,在 URL 字段中会带有请求对象的标识。

首部行指明了对象所在的主机,其实已经存在 TCP 连接了,但是还需要首部行提供主机信息,这时Web 代理高速缓存所要求的。

  • 通过包含 Connection:close 的首部行,可以告诉服务器不要麻烦地使用持续连接,它要求在发送完响应后就关闭连接。
  • User-agent 可以用来指明用户代理,即向服务器发送请求的浏览器类型,服务器可以有效地为不同类型的用户代理发送实际相同对象的不同版本。

在首部行之后有一个空行,后面跟着的是实体。使用 GET 方法时实体为空,而使用 POST 方法时才会使用实体。当用户提交表单时,HTTP 客户通常使用 POST 方法,使用 POST 方法时用户仍可以向服务器请求一个 Web 页面,但 Web 页面的特定内容依赖于用户在表单字段中输入的内容。如果使用 POST方法,则实体中包含的就是用户在表单字段的输入值。表单不是必须使用 POST 方法,也可以使用GET。

HEAD 方法类似于 GET,当服务器收到一个使用 HEAD 方法的请求时,将会用一个 HTTP 报文进行响应,但是并不返回请求对象。通常开发者使用 HEAD 方法进行调试跟踪。PUT 方法常用于上传对象到指定的 Web 服务器上指定的目录,DELETE 方法允许用户或应用程序删除 Web 服务器上的对象。

响应报文

响应报文包括状态行、首部行和实体。状态行有三个字段,协议版本、状态码和对应的状态信息。实体是报文的主要部分,即所请求的对象本身。

服务器通过首部行来告诉浏览器一些信息。 Connection:close 可以告诉客户发送完报文后将关闭该TCP 连接。 Date 是首部行指示服务器发送响应报文的日期和时间,这个时间不是对象创建或修改的时间,而是服务器从它的文件系统中检索到该对象,将该对象插入响应报文并发送的时间。 Server 指明了服务器的类型,类似于请求报文中的 User-agent 。

4.cookie

HTTP 的无状态性简化了服务器的设计,并且提高了 Web 服务器的性能,使其可以同时处理大量的TCP 连接。但是一个 Web 站点通常希望能够识别用户,可能是为了限制用户的访问,也可能为了把内容与用户身份关联起来,为此 HTTP 使用了 cookie,cookie 是一种客户端的会话技术,允许站点对用户进行追踪。

cookie 技术有四个组件

① 在 HTTP 响应报文中的一个 cookie 首部行。
② 在 HTTP 请求报文中的一个 cookie 首部行。
③ 在用户端系统中保留有一个 cookie 文件,并由用户的浏览器关联。
④ 位于 Web 站点的一个后端数据库。

cookie 的工作流程

当客户通过浏览器第一次访问某个站点时,该 Web 站点将产生一个唯一识别码,并以此作为索引在它的后端数据库中产生的一个表项。接下来服务器会用一个包含 Set-cookie 首部的HTTP 响应报文对浏览器进行相应,当浏览器收到后将其添加到自己管理的 cookie 文件中,在下次访问该站点时,请求报文的首部行中就会包括这个识别码,尽管浏览器不知道客户是谁,但是可以确定是同一个客户进行了访问。

cookie 和 session 的区别

① cookie 只能存储 ASCII 码字符串,而 session 则可以存储任何类型的数据,因此在考虑数据复杂性时首选session。
② session 存储在服务器,而 cookie 存储在客户浏览器中,容易被恶意查看。如果非要将一些隐私数据存在 cookie 中,可以将 cookie 值进行加密,然后在服务器进行解密。

5.输入一个 url 发生的事

① 分析 url
判断输入的 url 是否合法,如果不合法浏览器会使用默认的搜索引擎进行搜索。如果输入的是一个域名,默认会加上一个 http 前缀。

② DNS 查询
检查浏览器的 DNS 缓存,检查本地 hosts 文件的缓存,如果没有会向本地 DNS 服务器发送请求。
主机向本地 DNS 服务器发起请求是递归查询,如果找到则返回,否则会向根 DNS 查询。
根 DNS 查询是迭代查询,没有域名和 ip 的对应关系,而是告知可以查询的域名服务器地址。
本地 DNS 向得到的域名服务器发出请求,收到一个域名和 ip 关系,把结果返回给用户,并把结果保存到缓存中。

③ TCP 建立连接
拿到 ip 地址后,通过 TCP 的三次握手建立连接,按照协议规定的格式发送 HTTP 请求报文。

④ 处理请求
服务器收到 HTTP 请求报文后进行响应,主进程进行监听,创建子进程处理,先判断是否是重定向,如果是重定向则返回重定向地址。如果是静态资源则直接返回,否则通过 REST URL 在代码层面处理返回结果,最后返回 HTTP 响应报文。

⑤ 接收响应
浏览器收到 HTTP 响应报文后进行解析,首先查看响应报文在状态行的状态码,根据不同的状态码做不同的事,解析 HTML、CSS、JS 等文件。构建 DOM 树,渲染树,重绘,将像素发送 GPU 进行渲染,最后将渲染结果返回给用户并进行缓存。

⑥ TCP 断开连接
通过 TCP 的四次挥手断开连接,如果是 HTTP1.1 则会将连接保持一小段时间。

6.HTTPS

HTTP 存在的问题

  • HTTP 没有密码加密,无法保证通信内容不被窃听,攻击者可以截取客户发送的数据并得到他的信息。
  • HTTP 没有报文完整性验证,无法确保通信内容在传输过程中不被改变,攻击者可以篡改客户通信内容。
  • HTTP 没有身份鉴别,无法让通信双方确认对方的身份,攻击者可以伪装成客户或者服务器。

加密原理

HTTPS 即 HTTP over SSL,在 HTTP 传输上增加了 SSL 安全性服务。SSL 是安全套接字层,通过采用机密性、数据完整性、服务器鉴别以及客户鉴别来强化 TCP,主要用于为发生在 HTTP 之上的事务提供安全性。SSL 会对数据进行加密并把加密数据送往 TCP 套接字,在接收方,SSL 读取 TCP 套接字中的数据并解密,然后把数据交给应用层。HTTPS 采用混合加密机制,使用非对称加密传输对称密钥来保证传输过程的安全性,之后使用对称加密进行通信来保证通信过程的效率。

HTTPS 的传输过程主要分为两部分:通过 SSL 握手建立安全的 HTTPS 通道和在安全的通道上进行数据传输,SSL 握手的步骤如下:

① 客户发送它支持的密码算法列表,以及一个客户的不重数,不重数就是在一个协议的生存期只使用一次的数。
② 服务器从该列表中选择一种对称加密算法(例如 AES),一种公钥加密算法(例如 RSA)和一种报文鉴别码算法。服务器把它的选择以及证书和一个服务器不重数返回给客户。
③ 客户通过 CA 提供的公钥验证该证书,验证成功后提取服务器的公钥,生产一个前主密钥 PMS,用服务器的公钥加密该 PMS,并将加密的 PMS 发送给服务器。
④ 客户和服务器独立地从 PMS 和不重数中计算出仅用于当前 SSL 会话的主密钥 MS,然后该 MS 被切片以生成两个密码和两个报文鉴别码密钥。自从以后,客户和服务器之间发送的所有报文均被加密和鉴别(使用报文鉴别码)。
⑤ 客户和服务器分别发送所有握手报文的一个报文鉴别码。这一步是为了使握手免受篡改危害,在第一步中客户提供的算法列表是以明文形式发送的,因此可能被攻击者截获并删除较强的算法。当客户发送一个级联它以及发送和接收的所有握手报文的报文鉴别码,服务器能够比较这个报文鉴别码和它已经接受和发送的握手报文的报文鉴别码,如果不一致就终止连接。类似的,客户也可以通过服务器发送的报文鉴别码来检查一致性。

第一步和第二步中的不重复数用于防止重放攻击,每个 TCP 会话使用不同的不重复数就可以使加密密钥不同,当收到重放的 SSL 记录时,该记录无法通过完整性检查,假冒的电子事务不会成功。
当结束 SSL 会话时,需要在类型字段中指出该记录是否是用于终止 SSL 会话的。通过包含这样一个字段,如果客户或服务器在收到一个关闭 SSL 记录之前突然收到了一个 TCP FIN,就知道遭受了截断攻击。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值