面试-计算机网络
HTTP2 与 HTTP1 区别
- HTTP2 是一个二进制协议
HTTP1.1 的报头必须是文本,数据体可以是文本或是二进制
HTTP2 的报头和数据体均为二进制,分别被称为头信息帧和数据帧
- HTTP2 实现头信息压缩
HTTP2 中头信息使用 gzip 或 compress 压缩后再发送
HTTP2 中客户端和服务器同时维护一张头信息表,所有字段存储在表中并生成索引号,头信息不会重复多次发送,后续头信息利用索引号避免重复发送
- HTTP2 支持多路复用
HTTP2 支持同时无序的发送多个请求或响应,从而避免队头堵塞的问题
- HTTP2 使用数据流的概念
因为 HTTP2 的数据包不是按序发送的,同个连接内的数据包可能属于不同的请求;因此 HTTP2 中将每个请求或响应的数据包均作为数据流给出唯一的编号,每个数据包均需标记数据流 ID,以表示其所属的数据流 ID
- HTTP2 支持服务器推送
HTTP2 允许服务器未经请求,主导向客户端发送资源,可以一定程度上减少延迟时间
HTTP3 与 HTTP2 区别
流量控制、传输可靠性
集成 TLS 加密功能
多路复用 - 同一物理连接上可以有多个独立的逻辑数据流
快速连接 - 基于 UDP,仅需 1~2 RTT 建立连接
TCP 与 UDP 区别
- TCP 是面向连接;UDP 是面向无连接
TCP 发送数据前必须建立连接后发送数据
UDP 发送数据前不建立连接直接发送
- TCP 是可靠传输,使用流量控制和拥塞控制;UDP 是不可靠传输,不支持流量控制和拥塞控制
TCP 连接通过给包编号并通过接收到数据后返回的 ACK 判断传输是否成功,从而确定是否重传数据;在出现拥塞时,会通过减小注入网络数据的速率和数量以缓解拥塞
UDP 不会进行检测包的发送成功与否,以恒定速率发送数据,不会根据网络状况调整发送速率
- TCP 只能是一对一;UDP 可以一对一或一对多或多对一或多对多
TCP 连接只有两个端点,只能进行点对点的数据传输
UDP 支持单播、多播、广播功能
- TCP 是面向字节流传输;UDP 是面向报文传输
TCP 连接在不保留报文边界情况下以字节流传输数据
UDP 连接在保留报文边界情况下以报文形式传输数据
TCP 首部最小 20 字节到 60 字节;UDP 首部为 8 字节
TCP 使用要求可靠连接的应用;UDP 适用于实时应用
常见 HTTP 状态码
200
OK 服务器成功处理301
Moved Permanently 永久重定向302
Found 临时重定向资源304
Not Modified 使用客户端缓存403
Forbidden 服务器拒绝资源访问404
Not Found 服务器未找到资源或无原因的拒绝访问500
Internal Server Error 服务器执行出错
TCP/IP五层协议
- 应用层 - 直接为应用进程提供服务 | HTTP HTTPS DNS FTP SMTP
- 传输层 - 负责为主机的进程提供通信服务 | TCP UDP
- 网络层 - 负责为主机提供通信服务 | IP寻址
- 数据链路层 - 负责将数据封装为帧并在链路间传输 | MAC地址
- 物理层 - 负责保证数据在物理介质上传输
TCP 三次握手及四次挥手
客户端向服务端发送连接请求报文段
服务端发送同意连接应答
客户端向服务端发送一个确认报文
客户端向服务端发送连接释放请求
服务端不再接收客户端发的数据,仍旧可以发送数据给客户端
服务端向客户端发送连接释放请求
客户端向服务端发送确认应答
HTTPS 过程
- 客户端向服务器发起请求,请求中包含使用的协议版本号、生成的一个随机数、以及客户端支持的加密方法。
- 服务器端接收到请求后,确认双方使用的加密方法、并给出服务器的证书、以及一个服务器生成的随机数。
- 客户端确认服务器证书有效后,生成一个新的随机数,并使用数字证书中的公钥,加密这个随机数,然后发给服务器。并且还会提供一个前面所有内容的 hash 值,用来供服务器检验。
- 服务器使用自己的私钥,来解密客户端发送过来的随机数。并提供前面所有内容的 hash 值来供客户端检验。
- 客户端和服务器端根据约定的加密方法使用前面的三个随机数,生成对话秘钥,以后的对话过程都使用这个秘钥来加密信息。