跳转至

计算机网络问答

网络体系

网络的五层结构中每层都有哪些协议

  • 应用层的协议有 HTTP / HTTPS,DNS 协议
  • 传输层的协议有 TCP 和 UDP
  • 网络层的协议有 IP 协议,以及地址解析协议 ARP 用于获取 MAC 地址,ICMP 协议用于提供诊断功能并报告错误。
  • 数据链路层的协议有点对点协议 PPP

网络层和数据链路层各自的作用

进程如何从网卡中获取网络数据

输入 URL 到显示网址经历了怎样的过程

  1. 浏览器会先解析 URL,解析出域名、资源路径、端口信息等,随后构造 HTTP 请求报文
  2. 随后会将域名解析为 IP 地址:首先查看系统缓存是否有域名信息,有则直接返回 IP 地址;没有就会去查本地的 DNS 服务器,若本地 DNS 服务器中有域名信息,就返回 IP 地址,否则本地 DNS 服务器分别去根域名服务器 -> 顶级域名服务器 -> 权威域名服务器 询问,最后得到 IP 地址
  3. HTTP 报文基于 TCP 传输,在发送 HTTP 请求之前,需要进行三次握手。第一次握手时,发送 SYN 报文,同时 TCP 首部的源端口由客户端的浏览器随机生成,目标端口 HTTP 默认是 80, HTTPS 默认是 443
  4. 随后报文到达网络层,加上 IP 头,填上目标 IP 地址和源 IP 地址
  5. 随后在数据链路层通过 ARP 协议,获取路由器的 MAC 地址,加上 MAC 头,填上目标 MAC 地址和源 MAC 地址
  6. 到达物理层后,数据包通过路由器转发,路由器通过下一跳找到目标服务器
  7. 完成握手后,客户端才会将 HTTP 报文发送给服务器
  8. 目标服务器收到 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 文件,减少了消息的传递次数

    image-20250201230023474

  • 报文格式上,http2.0 将纯文本格式(应用层以文本格式组织)转换为了 二进制 格式,提高了传输效率

http2.0 和 http3.0 有什么区别

最主要的区别是 http3.0 在传输层的协议变为了 UDP 协议

http 是无状态的,服务器如何保存状态

可以使用 cookie session 的机制(在 springboot 框架中,默认自动管理 session,开发者无需手动创建或者维护,session 数据默认存储在内存中)。

用户成功登录后服务器创建 session 并生成 sessionID,在响应头中附加一个特殊的头信息 set-cookie,并将服务器生成的 cookie 发送给客户端,例如:

HTTP/1.1 200 OK
Set-Cookie: sessionid=abc123; Path=/; HttpOnly; Secure

随后客户端将接收到的 cookie 储存起来,并在后续的请求中根据 DomainPathExpires 字段来决定请求中携带的 cookie

服务器需要管理 Cookie 的生命周期

  • 服务器可以控制 Cookie 的过期时间(通过 ExpiresMax-Age 属性),决定 Cookie 何时失效。
  • 服务器可以在用户注销时删除 Cookie(通过设置 Set-Cookie 的过期时间为过去的时间)。

Session 有什么缺点

扩展性较差。Session 是保存在服务器的内存中的,如果服务器是集群,就要求将 session 数据共享到每一台服务器中。

解决方案:

使用 JWT来实现用户凭证,因为 JWT 的状态信息是保存在客户端的,服务端不再保存状态信息,天然适合分布式系统。

如果禁用 Cookie,如何实现 Session

禁用意味着请求和响应中都不能含有 cookie 相关的字段了,可以通过在 URL 中增加 session id 请求参数来实现 Session 机制

http://taobao.com/getitem?sessionid=we2iqud1hwi&name=baymax&action=buy
  • 存储位置:cookie 存在浏览器(有大小限制),session 存在服务端(没有大小限制)
  • 安全性:cookie 在客户端的安全性更低
  • 有效期:cookie 可以设置为长时间保持

JWT 是什么

JWT 本质上是用于验证数据的完整性和真实性,确保未被篡改,而不是用来加密数据。

JWT 分为 header,parload, signature。头部用来表明理令牌使用的签名算法,负载描述用户信息,比如用户名和过期时间等。头部和负载不会被加密,只是会用 base64 进行编码。最后一部分是基于签名算法对于前两个部分的加密结果。

服务器收到客户端发来的 JWT 令牌之后,服务端会取出头部和负载数据,然后用

JWT 为什么能解决集群部署

JWT 令牌通过在令牌中包含所有身份验证信息和会话信息,可以让服务器无需存储会话信息,从而让服务器成为无状态的了。

HTTPS

http 和 https 的区别是什么

https 的加密过程

https 证书合法性校验方法

证书的数字签名是用什么加密的

机构的私钥

传输层

TCP 报文段首部格式

TCP 三握

TCP 四挥

MSL 的具体时间是多少

TCP 可靠性

tcp 的拥塞控制机制

发送方和接收方的初始序列号是一样的吗

场景

如何解决跨域问题

如何控制自定义 token 的过期时间