计算机网络
-
TLS协议握手过程,如何工作的
-
客户端给出协议版本号、客户端生成的随机数、客户端支持的加密方法
-
服务端给出协议版本号、双方使用的加密方法、数字证书、服务端生成的随机数
-
客户端根据CA公钥,验证数字证书,给出生成的由服务端公钥加密的随机数
(Premaster secret)
-
服务端使用服务器私钥解密,获得随机数
(premaster secret)
-
客户端和服务端根据约定的加密方法以及之前生成的三个随机数,生成对话密钥
(session key)
,用来加密接下来的整个对话过程
-
-
HTTP3中使用的QUIC协议基于UDP的原因
-
HTTP2中,基于TCP协议
-
而TCP是面向连接的,因此每次连接会花费一些时间
-
在HTTP3中,基于UDP,就是为了提高了当前正在使用TCP的面向连接的Web应用程序的性能。
-
而UDP是不可靠的,因此要在UDP的基础上,将其改造成可靠的QUIC协议
-
-
一个http请求是线程还是进程
- 每个HTTP请求都需要使用一个线程来控制
-
在浏览器中http有请求数量限制吗,它的策略是怎样的
- 有,每个域名下,最多同时建立6-8个TCP连接
-
https是如何保证数据安全的
-
利用CA证书,保证服务器的真实性
-
利用非对称加密,保证会话密钥的保密性
-
利用对称加密,保证会话的保密性
-
利用数字签名,保证数据的完整性
-
-
http2是如何消除队头阻塞的
- TCP的队头阻塞
- 当一个分组传输失败,导致接收端收到乱序的分组时,接收端将发送缺失包的重发请求(其实是缺失包上一个包的确认包)
- 这时,发送端就必须将缺失包发送给接收端,并接收到确认才能发送接下来的分组,这段重发造成的阻塞,使得后面的分组必须等待,就是队头阻塞
- HTTP1.1中的队头阻塞
- HTTP1.1允许在一个TCP连接中,发送多个HTTP请求,但是对响应的顺序有一个限制,即请求的响应顺序必须与请求的发送顺序一致,这是因为请求跟响应并没有序号标识。
- 因此,当先发出的请求,迟迟未响应时,导致后面的响应必须要等待其响应,这段等待时间造成的阻塞,称为队头阻塞
- HTTP2如何消除队头阻塞
- HTTP2不使用管道化的方式,而是引入了帧、消息和数据流等概念,每个请求/响应被称为消息,每个消息都被拆分成若干个帧进行传输,每个帧都分配一个序号。每个帧在传输是属于一个数据流,而一个连接上可以存在多个流,各个帧在流和连接上独立传输,到达之后在组装成消息,这样就避免了请求/响应阻塞。
- 但由于HTTP2底层使用的是TCP协议,因此仍可能出现TCP队头阻塞。
- 资料:什么是队头阻塞以及如何解决
- TCP的队头阻塞
-
TCP/IP分别属于哪一层(OSI)
-
TCP属于传输层,主要负责应用之间的通信(指定端口,区分不同的应用)
-
IP属于网络层,主要负责路由分组转发(指定ip,便于选择转发路径)
-
-
HTTP常见头部(请求头,响应头)
- 请求头:
-
User-Agent: 用户代理,表示用户使用的哪种浏览器
-
Content-Type: 请求中body的内容类型,帮助服务端正确对body进行解析
-
Accept: 接受的响应内容类型
-
Accept-Encoding: 接受的响应内容编码
-
Accept-Language: 接受的内容语言
-
Cache-Control:用于描述缓存控制
-
Host: 请求的主机
-
Connection: 连接的类型
-
Cookie: cookie信息
-
If-Modified-Since:对应于响应头的Last-Modified,用于协商缓存
-
If-None-Match: 对应于Etag,用于协商缓存
-
Referer:表示发出请求的网址,为了防止自己网站的文件被外网直接引用,设置防盗链。
-
Origin: 发出请求的源,用于跨域判断
-
- 响应头:
-
Cache-Control:用于描述缓存控制
-
Connection: 连接的类型
-
Last-Modified/Etag: 最后修改时间/资源摘要,用于协商缓存
-
Set-Cookie: 向客户端设置Cookie
-
- 资料:http请求头与响应头的应用
- 请求头:
-
TCP/IP参考模型
-
TCP/IP四层参考模型
-
应用层,负责具体的应用协议,如:HTTP, FTP, SMTP, DNS等
-
传输层,负责应用间通信的协议,如:TCP、UDP
-
网际层,负责分组在网络中转发的协议,如:IP
-
网络接口层,负责具体的信号表示(物理层),以及将分组从一个结点发往另一个结点(数据链路层)
-
其中,原OSI七层参考模型中,应用层、传输层之间的表示层、会话层被舍弃。数据链路层跟物理层合并成为网络接口层
-
-
TCP的特性,为什么建立链接需要三次握手,断开4次挥手
- 握手
- 如果只握一次,则客户端不能判断连接是否创建成功
- 如果只握二次,则当请求连接的包在网络中滞留一段时间后,再被服务器接收,会导致服务器单方面的创建连接
- 因此握手三次,当服务端发送连接请求时,客户端如果不同意(不发ACK),则服务器不会建立链接
- 挥手
- 如果只挥三次,则当服务端发送,关闭从服务端到客户端的传输时(FIN),可能因为网络原因导致客户端收不到该包,则一直等待关闭,造成客户端资源浪费
- 因此挥手四次,当服务端发送FIN包时,必须等待客户端发送ACK包,保证客户端成功关闭链接
- 资料:iOS:为什么TCP连接要三次握手,四次挥手 | TCP(七) -- 四次挥手
- 握手
-
客户端如何判断服务端下发的公钥是没有被中间人篡改的
-
服务端下发的公钥证书,其中包含由CA私钥加密的公钥摘要,及公钥
-
客户端拿到公钥证书后,使用CA公钥将CA私钥加密的公钥摘要解密,并对公钥证书中包含的公钥取摘要
-
通过对比解密出来的摘要与计算出来的摘要是否一致,则可以判断有没有被中间人篡改
-