HTTPS总结+相关面试问题解答

TCP/IP

TCP/IP 不是一个协议,而是一个协议族的统称。里面包括了 IP 协议,IMCP 协议,TCP 协议,以及我们更加熟悉的http、ftp、pop3协议等等。电脑有了这些,就好像学会了外语一样,就可以和其他的计算机终端做自由的交流了。

TCP / IP 协议分层

  • 应用层

向用户提供一组常用的应用程序,如电子邮件(简单邮件传输协议,SMTP),文件传输访问(文件传输协议,FTP),远程登录(TELNET)等。

  • 传输层: 负责提供应用程序间的通信 格式化信息流; 提供可靠传输。为实现后者,传输层协议规定接收端必须发回确认,并且假如分组丢失,必须重新发送

  • 网络层:负责相邻计算机之间的通信

    • 处理来自传输层的分组发送请求:收到请求之后,将分组装入 IP 数据报,填充报头,选择去往信宿机的路径,然后将数据报发往适当的网络接口;
    • 处理输入数据报:首先检查其合法性,然后进行寻址:如果该数据包已经到达信宿机,则去掉报头,将剩下一部分交给适当的传输协议;如果该数据包尚未到达信宿机,则转发该数据报;
    • 处理路径、流控、拥塞等问题;
  • 网络接口层: 这是 TCP / IP 的最底层,负责接收 IP 数据报并通过网络发送数据报,或者从网络上接收物理帧,抽出 IP 数据报,交给 IP 层;

TCP的三次握手

  • 第一次握手(SYN=1, seq=x):

客户端发送一个 TCP 的 SYN标志位置1的包,指明客户端打算连接的服务器的端口,以及初始序号 X,保存在包头的序列号(Sequence Number)字段里。

发送完毕后,客户端进入 SYN_SEND 状态。

  • 第二次握手(SYN=1, ACK=1, seq=y, ACKnum=x+1):

服务器发回确认包(ACK)应答。即 SYN 标志位和 ACK 标志位均为1。服务器端选择自己 ISN 序列号,放到 Seq 域里,同时将确认序号(Acknowledgement Number)设置为客户的 ISN 加1,即X+1。

发送完毕后,服务器端进入 SYN_RCVD 状态。

  • 第三次握手(ACK=1,ACKnum=y+1)

客户端再次发送确认包(ACK),SYN 标志位为0,ACK 标志位为1,并且把服务器发来 ACK 的序号字段+1,放在确定字段中发送给对方,并且在数据段放写ISN的+1

发送完毕后,客户端进入 ESTABLISHED 状态,当服务器端接收到这个包时,也进入 ESTABLISHED 状态,连接建立成功,TCP 握手结束。

白话解释大概是这样的:

1. 隔壁老王:李四么,我隔壁老王哈,听得到么?
2. 李四:老王哈,听得到,你听得到我么?
3. 隔壁老王:听得到,你说
接下来就可以进行愉快的对话了。。。
复制代码
可不可以1次握手?
1. 隔壁老王:老李么,我隔壁老王哈,听得到么?
复制代码

如果只有一次握手,隔壁老王根本不知道李四是否听到了?

沟通失败!

可不可以2次握手?
1. 隔壁老王:老李么,我隔壁老王哈,听得到么?
2. 李四:老王哈,听得到,你听得到我么?
复制代码

李四听到了老王的对话,但是呢?李四不知道老王是否听到了?

沟通失败!

只有老王回复了,双方才知道: 哦!我们说的话对方都是可以听到的。

TCP的4次挥手

  • 第一次挥手:主机1(可以使客户端,也可以是服务器端),设置Sequence NumberAcknowledgment Number,向主机2发送一FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了;
  • 第二次挥手:主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段Acknowledgment NumberSequence Number加1;主机1进入FIN_WAIT_2状态;主机2告诉主机1,我“同意”你的关闭请求;
  • 第三次挥手:主机2主机1发送FIN报文段,请求关闭连接,同时主机2进入LAST_ACK状态;
  • 第四次挥手:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态;主机2收到主机1ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。

HTTP

HTTP(HyperText Transfer Protocol),超文本传输协议,是一个基于TCP实现的应用层协议。

HTTPS

HTTPS 是最流行的 HTTP 安全形式。它是由网景公司首创的,所有主要的浏览器和 服务器都支持此协议。

使用 HTTPS 时,所有的 HTTP 请求和响应数据在发送到网络之前,都要进行加密。 HTTPS 在 HTTP 下面提供了一个传输级的密码安全层——可以使用 SSL,也可以使用其后继者—— 传输层安全(Transport Layer Security,TLS)。由于 SSL 和 TLS 非常类似,所以我们不太严格地用术语 SSL 来表示 SSL 和 TLS。

SSL/TLS

不使用SSL/TLS的HTTP通信,就是不加密的通信。所有信息明文传播,带来了三大风险。
  • 窃听风险(eavesdropping):第三方可以获知通信内容。
  • 篡改风险(tampering):第三方可以修改通信内容。
  • 冒充风险(pretending):第三方可以冒充他人身份参与通信。
SSL/TLS协议是为了解决这三大风险而设计的,希望达到:
  • 所有信息都是加密传播,第三方无法窃听。
  • 具有校验机制,一旦被篡改,通信双方会立刻发现。
  • 配备身份证书,防止身份被冒充。

SSL握手

开始加密通信之前,客户端和服务器首先必须建立连接和交换参数,这个过程叫做握手(handshake),握手阶段分成五步:

  1. 客户端给出协议版本号、一个客户端生成的 随机数 A(Client random),以及客户端支持的加密方法。 客户端(A)
  2. 服务器确认双方使用的加密方法,获取到A,并给出数字证书、以及一个服务器生成的随机数B(Server random)。服务器(A、B)
  3. 客户端确认数字证书有效,获取到B,然后生成一个新的 随机数 C(Premaster secret),并使用数字证书中的公钥,加密这个随机数,发给服务器。客户端(A、B、C)
  4. 服务器使用自己的私钥,获取客户端发来的随机数C(即Premaster secret)。服务器(A、B、C)
  5. 客户端服务器根据约定的加密方法,使用前面的三个随机数 A、B、C 生成 对话密钥(session key),用来加密接下来的整个对话过程。

常见面试题:

HTTP和HTTPS的区别?

  • HTTP 的URL 以http:// 开头,而HTTPS 的URL 以https:// 开头
  • HTTP 是不安全的,而 HTTPS 是安全的
  • HTTP 标准端口是80 ,而 HTTPS 的标准端口是443
  • 在OSI 网络模型中,HTTP工作于应用层,而HTTPS 的安全传输机制工作在传输层
  • HTTP 无法加密,而HTTPS 对传输的数据进行加密
  • HTTP无需证书,而HTTPS 需要CA机构wosign的颁发的SSL证书

如何理解HTTP是无状态的协议?

无状态协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息 也就是说,当客户端一次HTTP请求完成以后,客户端再发送一次HTTP请求,HTTP并不知道当前客户端是一个”老用户“

如何解决HTTP的无状态协议?

使用Cookie来解决无状态的问题,Cookie就相当于一个通行证,第一次访问的时候给客户端发送一个Cookie,当客户端再次来的时候,拿着Cookie(通行证),那么服务器就知道这个是”老用户“。

常用的HTTP方法有哪些?

  • GET: 用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器
  • POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式。
  • PUT: 传输文件,报文主体中包含文件内容,保存到对应URI位置。
  • HEAD: 获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效。
  • DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件。
  • OPTIONS:查询相应URI支持的HTTP方法。

GET/POST的区别?

  • GET的语义是请求获取指定的资源。GET方法是安全、幂等、可缓存的(除非有 Cache-ControlHeader的约束),GET方法的报文主体没有任何语义。

  • POST的语义是根据请求负荷(报文主体)对指定的资源做出处理,具体的处理方式视资源类型而不同。POST不安全,不幂等,(大部分实现)不可缓存。

安全、幂等、缓存是什么?

  • 安全

如果一个方法的语义在本质上是「只读」的,那么这个方法就是安全的。客户端向服务端的资源发起的请求如果使用了是安全的方法,就不应该引起服务端任何的状态变化,因此也是无害的。 此RFC定义,GET, HEAD, OPTIONS 和 TRACE 这几个方法是安全的。

  • 幂等

指同一个请求方法执行多次和仅执行一次的效果完全相同

  • 缓存

顾名思义就是一个方法是否可以被缓存,此RFC里GET,HEAD和某些情况下的POST都是可缓存的,但是绝大多数的浏览器的实现里仅仅支持GET和HEAD。

为什么要三次握手?

防止服务器端的一直等待而浪费资源。防止接收方收不到信息而已,发送方也不知道接收方收到还是没收到

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值