LOADING

加载过慢请开启缓存 浏览器默认开启

计网

2025/9/9 知识

计算机网络

HTTP/HTTPS

HTTP 是什么?

  • http 是用于两点之间传输文本,图片,视频等超文本的约定和规范

​ HTTP 的名字「超文本协议传输」,它可以拆成三个部分:超文本、传输、协议

GET 和 POST 有什么区别?

  • GET 是从指定服务器获取资源,POST 是(根据报文 body)对指定的资源进行管理

​ GET 请求的参数位置一般是写在 URL 中,URL 规定只能支持 ASCII,所以 GET 请求的参数只允许 ASCII 字符 ,而且浏览器会对 URL 的长度有限制(HTTP 协议本身对 URL 长度并没有做任何规定)。

​ POST 请求携带数据的位置一般是写在报文 body 中,body 中的数据可以是任意格式的数据,只要客户端与服务端协商好即可,而且浏览器不会对 body 大小做限制。

HTTP/1.1 的优缺点?

  • 优点:HTTP/1.1 简单,直接使用 header+body,易于理解

  • 性能:实现长连接,不用 TCP 频繁连接,使用【请求-应答】模式,可以发送多个请求

  • 缺点:明文传递不安全

  • 性能:队头堵塞,当一个请求被阻塞时,就会阻塞全部请求

HTTP 与 HTTPS 有哪些区别?*

    1. 端口号不同,HTTP 是 80,HTTPS 是 443
    2. HTTP 连接时只用 TCP 的三次握手,HTTPS 连接时不仅 TCP 要进行三次握手,SSL/TLS 还要进行握手才能加密报文传输
    3. HTTPS 在 HTTP 和 TCL 层中间加入了 SSL/TLS 安全协议
    4. HTTPS 还要向 CA 申请数字证书

HTTPS 解决了 HTTP 的哪些问题?

  • HTTP 由于明文传输的原因,会造成篡改风险,窃听风险,冒充风险
  • HTTPS 由于加入了 SSL/TLS,加入了校验机制,信息加密,身份验证(CA 的数字证书)

HTTPS 是如何解决上面的三个风险的?

  • 混合加密 能对信息进行加密,实现信息机密性
  • 摘要算法 能校验信息完整性,确保信息不会被篡改
  • 向 CA 申请 数字证书

解释一下混合加密

    1. 客户端发起握手请求,并携带一个随机数 Client Random
    2. 服务器接受请求,返回证书(包含公钥)还有一个随机数 Server Random
    3. 客户端验证证书,在生成一个随机数 Pre-Master Secret 和前面两个用算法加密为 Session Secret,再用证书里的公钥加密 Pre-Master Secret,再传输给服务器
    4. 服务器拿到后用自己的私钥解密这部分得到 Pre-Master Secret,再根据前面的两个随机数用相同的算法得到 Session Secret

HTTP/1 和 HTTP/2 的优化,HTTP/2 和 HTTP/3 的优化?

  • HTTP/2 相对于 HTTP/1 实现了头部压缩,二进制,并发传输,服务器主动推送资源

    如果你发出多个请求,他们的头相似,那么就会压缩头,消除重复的部分

    HTTP/2 不像 HTTP/1 采用纯文本格式,全面采用二进制,统称为帧

    针对不同的 HTTP 请求用独一无二的 Stream ID 来区分,接收端可以通过 Stream ID 有序组装成 HTTP 消息,不同 Stream 的帧是可以乱序发送的,因此可以并发不同的 Stream ,也就是 HTTP/2 可以并行交错地发送请求和响应。

    服务器不再是被动接受消息了,能主动推送资源

  • HTTP/3 相对于 HTTP/2 放弃了 TCP,因为虽然 HTTP/2 因为并发传输解决了队头阻塞,但是在 TCL 层有队头阻塞,于是 HTTP/3 使用 UDP+QUIC

TCP

UDP 和 TCP 有什么区别呢?分别的应用场景是?

  • TCP 是 1 对 1 的连接,UDP 的连接可以 1 对 1,1 对多,多对多

  • TCP 传输是以数据流的形式,但是保证不乱序,不丢包,UDP 的传输是以包的形式,但是不保证数据完整

  • TCP 的头部比 UDP 的头部大很多

  • TCP 是面向连接的传输层协议,传输之前要先连接,UDP 传输不需要连接

  • TCP 的数据如果大于 MSS 就会在传输层进行分片,UDP 的数据如果大于 MTU 就会在 IP 层进行分片

  • TCP 因为面向连接的能保证数据可靠交付一般用于 HTTP/HTTPS,FTP 文件传输

  • UDP 因为面向无连接,故能随时发送,一般用于多媒体通信,广播通信

TCP 三次握手过程是怎样的?

  • 首先是客户端和服务端都处于 CLOSE 状态,然后服务器主动监听一个端口处在 LISTEN 状态
  • 然后客户端向服务端发出请求标志位 SYN = 1,然后变为 SYN_SENT 状态
  • 服务端接受到客户端的消息后,回复一个标志位 ACK = 1 SYN = 1 的报文,然后变成 SYN_RCVD 状态
  • 客户端收到后继续向服务端发送标志位 ACK = 1 的报文,这次报文可以携带客户端到服务端的数据,至此完成三次握手连接成功

TCP 四次挥手过程是怎样的?

  • 首先是发起断开连接的一方,比如客户端发送一个标志位 FIN = 1 的报文
  • 服务端收到后发送标示位 ACK = 1 的报文表示确认收到,然后开始释放资源
  • 当服务端准备好了后就会向客户端发送标志位 FIN = 1 的报文
  • 当客户端接受到后,再次向服务端发送标志位 ACK = 1 的报文,至此服务端完成连接关闭,在 2MSL 后客户端也完成连接关闭
  • 需要注意的是,最后的 TIME_WAIT 状态是谁主动发起断开的一方才有

TCP 常见的重传机制?

  • 超时重传:顾名思义,没收到 ACK 且超时后进行重传
  • 快速重传:当收到三个相同的 ACK 后不等超时立即重传

滑动窗口协议的作用是什么?他如何提高传输效率

  • 窗口是指发送后无需应答就能再次发送,并且如果应答丢失,只要最后一次应答确认,之前所有数据全都确认
  • 而接受方控制了窗口的大小,就实现了 流量控制

拥塞控制的四个阶段是如何工作的?

  • 慢启动:每当收到一个 ACK 后拥塞窗口 cwnd 大小+1
  • 当 cwnd 大小到达一个阈值 ssthresh 时,就会启动拥塞避免算法:每当收到一个 ACK 后拥塞窗口 cwnd 大小+1/cwnd
  • 当 cwnd 大小到达一定大小,网络发生拥塞,触发了重传机制中的超时重传,就会启动拥塞发生:将 ssthresh 设为 cwnd/2,将 cwnd 重置为 1;如果触发的是快速重传,同样是启动拥塞发生:将 cwnd 设为 cwnd/2,ssthresh 设为 cwnd
  • 快速恢复一般和拥塞发生同时使用:将 cwnd 设为 ssthresh+3,再按拥塞避免增加,当收到新的 ACK 后,将 cwnd 设为 ssthresh

TCP 协议的缺陷

  • 建立 TCP 连接的延迟

  • 由于需要确保数据的完整有序,所有 TCP 会有队头堵塞,只要一个 TCP 段丢失,即使较高序列号的 TCP 段到达也无法读取,需要等待丢失的重传完成

  • 网络迁移需要重新建立 TCP 连接

IP

IPV4 和 IPV6 的区别是什么?

  • IPV4 只有 32 位,只有 42 亿地址,IPV6 有 128 位,有近乎无限的地址
  • IPV4 是十进制点分,IPV6 是十六进制冒分
  • IPV6 支持地址自动分配,解决了 IPV4 地址枯竭和功能不足的问题

什么是公网 IP 和私网 IP?

  • 公网 IP:互联网中唯一可以路由的 IP,需要确保唯一性
  • 私网 IP:局域网内使用的非路由 IP,仅在内部生效,需通过 NET 转化为公网 IP 才能访问外网

IP 协议是面向连接的还是无连接的?有什么特点?

  • IP 是面向无连接的,可以不建立连接发送数据,但不保证数据送达,需依赖上层协议如 TCP

IP 地址由哪两部分组成?子网掩码的作用?

  • IP 网络的组成:网络位(标识设备所在网段)+ 主机位(标识网段内的具体设备)
  • 子网掩码用来划分 IP 地址中的网络位和主机位,子网掩码与 IP 地址按位与后,网络位就是前 24 位,主机位就是后 8 位

什么是 DNS?

  • 我们上网一般使用的是域名,而不是 IP 地址,而 DNS 就是将域名转化位 IP 地址的一种方式,比如 www.baidu.com,以.为分隔,越往右域名等级越高
  • DNS 解析流程一般是先在缓存中查找,如果没有的话就在操作系统的缓存中查找,如果还没有就在 DNS 服务器询问查找
  • DNS 服务器的查找也是一样,现查看自身缓存,如果没有就提供方法询问最右的域名,依次询问找到 IP 地址

什么是 DHCP?它的作用是什么?(校园网)

  • DHCP 是动态主机配置协议,用于局域网设备分配 IP 地址,子网掩码,网关,DNS 等网络参数
  • 避免了手动配置 IP 的繁琐,简化网络管理

输入一条网络地址后,具体历程

  • 地址解析:用 DNS 把域名翻译成 IP 地址
  • 建立连接:与目标服务器建立连接(TCP 的三次握手)
  • 发送请求:根据 HTTP/HTTPS 请求发送,比如 GET, POST
  • 服务器处理:准备要返回的内容打包成响应报文
  • 返回响应:将响应报文传回浏览器
  • 断开连接:关闭 TCP 连接(TCP 四次挥手) (如果用的是 HTTP/1.1, 连接会暂时保留)
  • 浏览器渲染:浏览器拿到服务器返回的 HTML, CSS, JS 后,开始翻译渲染