面经总结

http 和 https

HTTP是应用层协议,是一个无状态协议。服务器不维护任何有关客户端过去所发请求的消息。

HTTPS是HTTP的加强安全版本。HTTPS是基于HTTP的,也是用TCP作为底层协议,额外使用SSL/TLS协议用作加密和安全认证。默认端口号是443.

SSL指安全套接字协议。

HTTPS加密的方式是:
SSL利用对称加密加密传输的消息。而传输的密钥使用非对称加密,保证密钥的安全性。而密钥的安全性则保证了对称性加密的安全性。

为了保证密钥传输的依赖性,CA证书和数字签名被用来验证传输的可靠性。

HTTP/1.0、HTTP/1.1

HTTP/1.1、HTTP/2.0

DNS

DNS解析过程

TCP与UDP

TCP三次握手和四次挥手

  1. 三次握手

建立一个 TCP 连接需要“三次握手”,缺一不可:

  • 一次握手:客户端发送带有 SYN(SEQ=x) 标志的数据包 -> 服务端,然后客户端进入 SYN_SEND 状态,等待服务器的确认;
  • 二次握手:服务端发送带有 SYN+ACK(SEQ=y,ACK=x+1) 标志的数据包 –> 客户端,然后服务端进入 SYN_RECV 状态
  • 三次握手:客户端发送带有 ACK(ACK=y+1) 标志的数据包 –> 服务端,然后客户端和服务器端都进入ESTABLISHED 状态,完成 TCP 三次握手。
    当建立了 3 次握手之后,客户端和服务端就可以传输数据啦!

三次握手的原因

第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。

客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。客户端等待一个超时重传时间之后,就会重新请求连接。但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此就不会再次打开连接。

  1. 四次挥手

    断开一个 TCP 连接则需要“四次挥手”,缺一不可:
  • 第一次挥手:客户端发送一个 FIN(SEQ=x) 标志的数据包->服务端,用来关闭客户端到服务器的数据传送。然后客户端进入 FIN-WAIT-1 状态。
  • 第二次挥手:服务器收到这个 FIN(SEQ=X) 标志的数据包,它发送一个 ACK (ACK=x+1)标志的数据包->客户端 。然后服务端进入 CLOSE-WAIT 状态,客户端进入 FIN-WAIT-2 状态。
  • 第三次挥手:服务端发送一个 FIN (SEQ=y)标志的数据包->客户端,请求关闭连接,然后服务端进入 LAST-ACK 状态。
  • 第四次挥手:客户端发送 ACK (ACK=y+1)标志的数据包->服务端,然后客户端进入TIME-WAIT状态,服务端在收到 ACK (ACK=y+1)标志的数据包后进入 CLOSE 状态。此时如果客户端等待 2MSL 后依然没有收到回复,就证明服务端已正常关闭,随后客户端也可以关闭连接了。
    只要四次挥手没有结束,客户端和服务端就可以继续传输数据!