计算机网络问答
网络体系¶
网络的五层结构中每层都有哪些协议¶
- 应用层的协议有 HTTP / HTTPS,DNS 协议
- 传输层的协议有 TCP 和 UDP
- 网络层的协议有 IP 协议,以及地址解析协议 ARP 用于获取 MAC 地址,ICMP 协议用于提供诊断功能并报告错误。
- 数据链路层的协议有点对点协议 PPP
网络层和数据链路层各自的作用¶
进程如何从网卡中获取网络数据¶
输入 URL 到显示网址经历了怎样的过程¶
- 浏览器会先解析 URL,解析出域名、资源路径、端口信息等,随后构造 HTTP 请求报文
- 随后会将域名解析为 IP 地址:首先查看系统缓存是否有域名信息,有则直接返回 IP 地址;没有就会去查本地的 DNS 服务器,若本地 DNS 服务器中有域名信息,就返回 IP 地址,否则本地 DNS 服务器分别去根域名服务器 -> 顶级域名服务器 -> 权威域名服务器 询问,最后得到 IP 地址
- HTTP 报文基于 TCP 传输,在发送 HTTP 请求之前,需要进行三次握手。第一次握手时,发送 SYN 报文,同时 TCP 首部的源端口由客户端的浏览器随机生成,目标端口 HTTP 默认是 80, HTTPS 默认是 443
- 随后报文到达网络层,加上 IP 头,填上目标 IP 地址和源 IP 地址
- 随后在数据链路层通过 ARP 协议,获取路由器的 MAC 地址,加上 MAC 头,填上目标 MAC 地址和源 MAC 地址
- 到达物理层后,数据包通过路由器转发,路由器通过下一跳找到目标服务器
- 完成握手后,客户端才会将 HTTP 报文发送给服务器
- 目标服务器收到 HTTP 请求消息之后,返回 HTTP 响应,浏览器将响应进行解析渲染
路由器和交换机,网桥有什么区别¶
应用层¶
HTTP¶
http 默认的端口是什么¶
默认的端口是说浏览器发送请求时默认发送到服务器的哪个端口处
http 默认端口是 80 ,https 协议的默认端口是 443
HAED 请求和 PUT 请求是什么¶
- head 一般请求元信息(响应头),不返回响应体,可以用于判断某个文件是否存在
- put 用于修改,一般不用于增加,所以是幂等的
http 是长连接还是短连接¶
http 在 1.1 和以后的版本默认使用长连接
http 有哪些常见的状态码¶
http1.0 和 http1.1 有什么区别¶
- 管道网络传输:http1.1 引入了管道化,允许在一个持久连接上,在没有收到前面请求的响应时就继续发送后续请求,解决了请求的 队头阻塞 问题,但是没有解决响应的队头阻塞问题,因为响应还是需要按照请求顺序应答
- host 头部字段:http1.1 在请求头中新增了 host 字段,则服务器上可以运行多个站点的服务
- 长连接: http1.1 默认为长连接,http1.0 虽然支持长连接,但是默认关闭
http1.1 和 http2.0 有什么区别¶
- http2.0 实现了请求和响应的并发传输,同一个 http 请求和响应跑在同一个 stram 中,通过 streamID 来识别和组装传输的帧,多个 stream 可以复用同一个 tcp 连接;但是 http1.0 的响应是串行返回的(前一个响应延迟,后面的响应即使已经处理完也会被阻塞)
-
http2.0 还支持服务器主动推送资源,比如客户端请求 html 文件时,可能页面渲染还需要其他的 css ,此时服务器可以主动推送 css 文件,减少了消息的传递次数
- 报文格式上,http2.0 将纯文本格式(应用层以文本格式组织)转换为了 二进制 格式,提高了传输效率
http2.0 和 http3.0 有什么区别¶
最主要的区别是 http3.0 在传输层的协议变为了 UDP 协议
http 是无状态的,服务器如何保存状态¶
可以使用 cookie session 的机制(在 springboot 框架中,默认自动管理 session,开发者无需手动创建或者维护,session 数据默认存储在内存中)。
用户成功登录后服务器创建 session 并生成 sessionID,在响应头中附加一个特殊的头信息 set-cookie,并将服务器生成的 cookie 发送给客户端,例如:
随后客户端将接收到的 cookie 储存起来,并在后续的请求中根据 Domain
、Path
、Expires
字段来决定请求中携带的 cookie
服务器需要管理 Cookie 的生命周期:
- 服务器可以控制 Cookie 的过期时间(通过
Expires
或Max-Age
属性),决定 Cookie 何时失效。- 服务器可以在用户注销时删除 Cookie(通过设置
Set-Cookie
的过期时间为过去的时间)。
Session 有什么缺点¶
扩展性较差。Session 是保存在服务器的内存中的,如果服务器是集群,就要求将 session 数据共享到每一台服务器中。
解决方案:
使用 JWT来实现用户凭证,因为 JWT 的状态信息是保存在客户端的,服务端不再保存状态信息,天然适合分布式系统。
如果禁用 Cookie,如何实现 Session¶
禁用意味着请求和响应中都不能含有 cookie 相关的字段了,可以通过在 URL 中增加 session id 请求参数来实现 Session 机制
Cookie 和 Session 的区别是什么¶
- 存储位置:cookie 存在浏览器(有大小限制),session 存在服务端(没有大小限制)
- 安全性:cookie 在客户端的安全性更低
- 有效期:cookie 可以设置为长时间保持
JWT 是什么¶
JWT 本质上是用于验证数据的完整性和真实性,确保未被篡改,而不是用来加密数据。
JWT 分为 header,parload, signature。头部用来表明理令牌使用的签名算法,负载描述用户信息,比如用户名和过期时间等。头部和负载不会被加密,只是会用 base64 进行编码。最后一部分是基于签名算法对于前两个部分的加密结果。
服务器收到客户端发来的 JWT 令牌之后,服务端会取出头部和负载数据,然后用
JWT 为什么能解决集群部署¶
JWT 令牌通过在令牌中包含所有身份验证信息和会话信息,可以让服务器无需存储会话信息,从而让服务器成为无状态的了。
HTTPS¶
http 和 https 的区别是什么¶
https 的加密过程¶
https 证书合法性校验方法¶
证书的数字签名是用什么加密的¶
机构的私钥