计算机网络部分笔记

TCP/IP 模型

四层:

HTTP

常见的状态码

1xx 类状态码属于提示信息,是协议处理中的一种中间状态,实际用到的比较少。

2xx 类状态码表示服务器成功处理了客户端的请求,也是我们最愿意看到的状态。

  • 「200 OK」是最常见的成功状态码,表示一切正常。如果是非 HEAD 请求,服务器返回的响应头都会有 body 数据。

  • 「204 No Content」也是常见的成功状态码,与 200 OK 基本相同,但响应头没有 body 数据。

  • 「206 Partial Content」是应用于 HTTP 分块下载或断点续传,表示响应返回的 body 数据并不是资源的全部,而是其中的一部分,也是服务器处理成功的状态。

3xx 类状态码表示客户端请求的资源发生了变动,需要客户端用新的 URL 重新发送请求获取资源,也就是重定向。

  • 「301 Moved Permanently」表示永久重定向,说明请求的资源已经不存在了,需改用新的 URL 再次访问。

  • 「302 Found」表示临时重定向,说明请求的资源还在,但暂时需要用另一个 URL 来访问。

301 和 302 都会在响应头里使用字段 Location,指明后续要跳转的 URL,浏览器会自动重定向新的 URL。

  • 「304 Not Modified」不具有跳转的含义,表示资源未修改,重定向已存在的缓冲文件,也称缓存重定向,也就是告诉客户端可以继续使用缓存资源,用于缓存控制。
    4xx 类状态码表示客户端发送的报文有误,服务器无法处理,也就是错误码的含义。

  • 「400 Bad Request」表示客户端请求的报文有错误,但只是个笼统的错误。

  • 「403 Forbidden」表示服务器禁止访问资源,并不是客户端的请求出错。

  • 「404 Not Found」表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端。

5xx 类状态码表示客户端请求报文正确,但是服务器处理时内部发生了错误,属于服务器端的错误码。

  • 「500 Internal Server Error」与 400 类型,是个笼统通用的错误码,服务器发生了什么错误,我们并不知道。

  • 「501 Not Implemented」表示客户端请求的功能还不支持,类似“即将开业,敬请期待”的意思。

  • 「502 Bad Gateway」通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。

  • 「503 Service Unavailable」表示服务器当前很忙,暂时无法响应客户端,类似“网络服务正忙,请稍后重试”的意思。

常见字段:

GET(从服务器获取指定的资源) 和 POST 请求(根据请求负荷(报文 body)对指定的资源做出处理)

HTTP 缓存

HTTP 缓存

相对来说后者可以更加准确地判断文件内容是否被修改,避免由于时间篡改导致的不可靠问题。

HTTP 特性

HTTP 特性:( HTTP/1.1,HTTP/2.0,HTTP/3.0)

HTTP1.1 相比 HTTP1.0:

性能改进:

缺点:

HTTP2 相比 HTTP1.1

HTTP/2 协议是基于 HTTPS 的,所以 HTTP/2 的安全性也是有保障的。

性能改进:

HPACK 算法:在客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了。

缺点:

HTTP3.0 的优化

特点:

HTTP1.1 如何优化

提升性能的方式

HTTPS

与 HTTP 的区别:

解决"不安全"的方式:

HTTPS 建立连接过程:

TLS 协议建立的详细流程如下:

  1. ClientHello

    • 客户端向服务器发起加密通信请求,发送 ClientHello 消息。
    • 主要信息包括:
      • 支持的 TLS 协议版本(如 TLS 1.2)。
      • 客户端生成的随机数(Client Random),用于后续生成会话秘钥。
      • 支持的密码套件列表(如 RSA 加密算法)。
  2. ServerHello

    • 服务器收到请求后,回应 ClientHello,发送 ServerHello 消息。
    • 主要内容包括:
      • 确认支持的 TLS 协议版本。
      • 服务器生成的随机数(Server Random),也用于生成会话秘钥。
      • 确认的密码套件列表。
      • 服务器的数字证书。
  3. 客户端回应

    • 客户端通过 CA 公钥验证服务器的数字证书。
    • 如果证书有效,客户端提取服务器公钥,用其加密以下信息并发送给服务器
      • 一个随机数(pre-master key)。
      • 加密通信算法改变通知,表示后续信息将使用会话秘钥加密。
      • 客户端握手结束通知,连同数据摘要供服务器校验。
    • 三个随机数(Client Random、Server Random、pre-master key)用于生成会话秘钥。
  4. 服务器的最后回应

    • 服务器用协商的加密算法计算会话秘钥。
    • 向客户端发送最后的信息:
      • 加密通信算法改变通知。
      • 服务器握手结束通知,连同数据摘要供客户端校验。

整个 TLS 握手结束后,客户端与服务器开始使用会话秘钥进行加密通信,内容以普通 HTTP 协议方式传输。

数字证书签发和验证流程:

../../../../../../../附件/images/Pasted image 20250311135642.png

如何保证数据完整性?

分为握手协议和记录协议两层:

具体过程如下:

记录协议完成后,最终的报文数据将传递到传输控制协议 (TCP) 层进行传输。

HTTPS 一定可靠吗?

HTTPS 协议本身到目前为止还是没有任何漏洞的,即使你成功进行中间人攻击,本质上是利用了客户端的漏洞(用户点击继续访问或者被恶意导入伪造的根证书),并不是 HTTPS 不够安全。

客户端通过浏览器向服务端发起 HTTPS 请求时,被「假基站」转发到了一个「中间人服务器」,于是客户端是和「中间人服务器」完成了 TLS 握手,然后这个「中间人服务器」再与真正的服务端完成 TLS 握手。

从客户端的角度看,其实并不知道网络中存在中间人服务器这个角色。那么中间人就可以解开浏览器发起的 HTTPS 请求里的数据,也可以解开服务端响应给浏览器的 HTTPS 响应数据。相当于,中间人能够 “偷看” 浏览器与服务端之间的 HTTPS 请求和响应的数据。

CA 被攻破或错误签发证书时(或电脑中病毒,被恶意导入了中间人的根证书),这种情况下,浏览器是不会弹出证书存在问题的风险提醒的。

抓包工具如何截取 Https 数据?
使用抓包工具进行 HTTPS 抓包的时候,需要在客户端安装 Fiddler 的根证书,这里实际上起认证中心(CA)的作用

抓包工具能够抓包的关键是客户端会往系统受信任的根证书列表中导入抓包工具生成的证书,而这个证书会被浏览器信任,也就是抓包工具给自己创建了一个认证中心 CA,客户端拿着中间人签发的证书去中间人自己的 CA 去认证,当然认为这个证书是有效的。

如何避免被截取数据?

*不去点击非法网站即可*

通过 HTTPS 双向认证来避免这种问题.

一般我们的 HTTPS 是单向认证,客户端只会验证了服务端的身份,但是服务端并不会验证客户端的身份。

如果用了双向认证方式,不仅客户端会验证服务端的身份,而且服务端也会验证客户端的身份。服务端一旦验证到请求自己的客户端为不可信任的,服务端就拒绝继续通信,客户端如果发现服务端为不可信任的,那么也中止通信。

HTTPS RSA 握手