计算机网络重要知识整理汇总
重要文章
网络模型
HTTP 协议
HTTP1.0
HTTP1.0 最早在网页中使用是在 1996 年,那个时候只是使用一些较为简单的网页上和网络请求上,是一种无状态、无连接的应用层协议,几年后被 HTTP1.1 代替并广泛使用。
HTTP1.1
- 基于文本解析,把所有请求和响应作为纯文本。
- 加入了缓存处理(强缓存和协商缓存):从客户端读取缓存,强缓存不发送请求,直接读取资源,可以获得返回 200 的状态码;协商缓存通过服务器来确定缓存资源是否可用(304);如果时间过期,则向服务器发送 header 带有 If-None-Match 和 If-Modified-Since 的请求。
- 拥有长连接,并支持请求管道化。
- 流控制基于 TCP 连接。当连接建立时,两端通过系统默认机制建立缓冲区,并通过 ACK 报文来通知对方接收窗口大小,因为 HTTP1.1 依靠传输层来避免流溢出,每个 TCP 连接需要一个独立的流控制机制。
HTTP2
- 通过一个连接来多路复用
- 头部压缩
- 使用二进制框架层把所有消息封装成二进制
- 允许客户端和服务器端实现他们自己的流控制机制,而不是依赖传输层,两端在传输层交换可用的缓冲区大小,来让他们在多路复用流上设置自己的接收窗口
- 让服务器可以将响应主动“推送”到客户端缓存中
HTTP3
HTTP3 是建立一个在 QUIC 协议上运行的 HTTP 新规范,而之前的版本都是基于 TCP,QUIC 是为了替代 TCP,解决 TCP 的一些缺陷:
- 同样拥有头部压缩,并优化了对乱序发送的支持,也优化了压缩率
- 通过 UDP 建立连接,提高了连接建立的速度,降低了延迟
- 解决队头拥塞问题
- Connection ID 使得 HTTP3 支持连接迁移以及 NAT 的重绑定
HTTPS 协议
HTTPS=HTTP+SSL/TLS
使用 HTTPS 进行通信时,先是建立传输层 TCP 的连接,完成三次握手,然后再是 SSL/TLS 协议的四次握手,双方协商出对称加密的密钥,之后的通信数据会利用该密钥进行加密传输。具体流程:
HTTPS(超文本传输安全协议)是HTTP的安全版本,主要用于在计算机网络中进行安全的数据传输。HTTPS通过SSL/TLS协议对数据进行加密,确保数据的机密性和完整性。下面是HTTPS的基本流程:
- 客户端发起请求:用户在浏览器中输入 HTTPS 网址,浏览器向服务器发送请求。
- 服务器响应:服务器接收到请求后,返回其 SSL/TLS 证书给客户端。这个证书包含了服务器的公钥和其他信息。
- 证书验证:客户端浏览器验证服务器的 SSL/TLS 证书是否可信。这通常通过检查证书是否由受信任的证书颁发机构(CA)签发,以及证书是否在有效期内。
- 生成会话密钥:如果证书有效,客户端生成一个随机的会话密钥,并使用服务器的公钥对其进行加密,然后发送给服务器。
- 服务器解密会话密钥:服务器使用其私钥解密收到的会话密钥,从而获得该密钥。
- 安全连接建立:客户端和服务器使用会话密钥进行加密通信。此后,所有传输的数据都通过这个密钥进行加密,确保数据的安全性。
- 数据传输:客户端和服务器之间的数据传输通过加密的连接进行,确保数据在传输过程中不被窃取或篡改。
- 连接关闭:数据传输完成后,客户端或服务器可以关闭连接,结束会话。
通过以上流程,HTTPS 能够有效地保护用户的数据安全,防止中间人攻击和数据泄露:
- 防窃听:加密(对称加密和非对称加密<公钥加密,私钥解密>)
- 防篡改:加签(私钥加签,公钥验签)
- 防伪装:证书(引入中间角色 CA,根据公钥生成证书,帮助验证证书的合法性)
HTTP 代理
如访问 HTTP 站点,则遵循流程如下:
1Agent Proxy Site
2 | | |
3 | <1> tcp dial to proxy:8080 | |
4 |<--------------------------->| |
5 | <2> GET / HTTP/1.1 | |
6 | Host: baidu.com | <3> tcp dial to baidu.com:80 |
7 |---------------------------->|<---------------------------->|
8 | | <4> GET / HTTP/1.1 |
9 | | Host: baidu.com |
10 | |----------------------------->|
11 | | <5> HTTP/1.1 200 OK |
12 | <4> HTTP/1.1 200 OK |<-----------------------------|
13 |<----------------------------| |
14 | | |
- 客户端同代理服务器建立 TCP 连接
- 客户端将 HTTP 请求发送给代理服务器
- 代理服务器解析 HTTP 请求,获取目标服务器地址并建立 TCP 连接
- 代理服务器将客户端 HTTP 请求发送给目标服务器
- 目标服器将响应内容发送给代理服务器
- 代理服务器将目标服务器的响应内容发送给客户端
如访问 HTTPS 站点,则需遵循另外一套流程:
1Agent Proxy Site
2 | | |
3 | <1> tcp dial to proxy:8080 | |
4 |<--------------------------->| |
5 | <2> CONNECT baidu.com:443 | |
6 |---------------------------->| <3> tcp dial to baidu.com:443|
7 | <4> HTTP/1.1 200 OK |<---------------------------->|
8 |<----------------------------| |
9 | | |
10 | https data | https data |
11 |<--------------------------->|<---------------------------->|
12 | | |
- 客户端同代理服务器建立 TCP 连接
- 客户端向发送给代理服务器发送 CONNECT 请求
- 代理服务器解析 HTTP 请求,获取目标服务器地址并建立 TCP 连接
- 代理服务器向客户端发送 Connection Established 响应(图中标为 OK)
- 接下来代理服务器会不断将客户端发来数据转发给目标服务器,并把目标服务器的发来的数据转发给客户端
为什么 HTTP 请求和 HTTPS 请求的代理通信流程不一样?
因为对于明文的 HTTP 请求,代理服务器可以通过解析请求内容获取目标服务器的域名和端口,进而发起 TCP 连接。可对于 HTTPS 请求,客户端在发送 HTTP 请求之前要发送 TLS 握手数据。Proxy 收到 TLS 握手数据后是无法获取目标服务器。所以,协议要求客户端要先发送一个 CONNECT 请求来告诉代理服务器目标服务器的域名和端口。
注意,对于 HTTP 请求,Agent 和 Proxy 之间的通信中全明文的;对于 HTTPS 请求, Agent 的 CONNECT 请求也是通过明文发送给 Proxy 的。
MTU
MTU(Maximum Transmission Unit)是网络通信中的一个重要参数,表示网络设备(如网卡、路由器)在一次传输中可以处理的最大数据包大小,以字节为单位。设置合适的 MTU 是优化网络性能的关键。
ARP
ARP(Address Resolution Protocol) 是一种网络协议,用于在局域网(LAN)中根据 IP 地址获取对应的物理地址(MAC 地址)。ARP 是网络通信中不可或缺的部分,尤其是在 IPv4 网络中,它确保设备能够正确地将数据包发送到目标设备。
TCP
三次握手
- seq=x (syn, >)
- ack=x+1,seq=y (syn-ack, <)
- ack=y+1 (ack, >)
四次挥手
- seq=x (fin, >)
- ack=x+1 (ack, <)
- seq=y (fin, <)
- ack=y+1 (ack, >)
数据传输
- seq=x (send data1, >)
- ack=x+len(data1) (ack, <)
- seq=x+len(data1) (send data2, >)
- ack=x+len(data1)+len(data2) (ack, <)
如果未收到 ack,则超时重传。