网络
网络基础1


网络套接字
本质可以看成是进程间通信
网络基础2
应用层
HTTP协议
概念
超文本传输协议
就是超过了普通的文本,也可以传输图片文字音频视频...这些都叫做超文本
常见状态码
1xx
表示中间状态
2xx
成功
3xx
资源重定向
4xx
客户端错误
5xx
服务端错误
常见字段
HOST
服务器域名
Content-Length
数据长度
Connection
决定长短链接:keep-alive(长连接) / close(短连接)
Content-Type
数据格式(如 text/html、application/json、image/jpeg)
Content-Encoding
数据压缩方法(如 gzip、deflate)
GET/POST
区别
GET从服务器获取资源(查)
POST向服务器提交数据(改 / 增)
安全
GET低(参数暴露在地址栏)POST相对高(参数不直接暴露)
幂等
GET是(多次请求结果一致),POST不是(多次请求可能产生不同结果)
特性
HTTP/1.0
短连接,性能不好,一般不考虑
HTTP/1.1
核心改进:长连接(Keep-Alive)。
一次 TCP 连接可以处理多次 HTTP 请求和响应。
性能优化:管道(Pipelining) ,客户端可以一次性发多个请求,不用等上一个返回。
优点:简单、灵活、跨平台、应用最广。
缺点:
- 明文传输,不安全。
- 无状态(需要 Cookie/Session 维持状态)。
- 队头阻塞:响应必须按顺序返回,前面一个响应卡住,后面所有都得等。
- 头部冗余:每次请求都带重复的 Header。
HTTP/2.0
优点- 头部压缩
- 并发传输
注意一下并发传输,说的是在一条TCP连接中可以有多个Stream(流),
每一个流里面有Message(消息),
Message里面放的Frame(帧),
真正实现了并发,不同流的数据可以乱序发送,解决队头阻塞 - 服务器推送(Server Push):
客户端请求 index.html,服务端可以主动把 CSS、JS 推送给客户端 ,不用客户端再请求。
缺点
TCP层的队头阻塞问题没有解决
HTTP/3.0
直接把底层协议换成UDP,但是普及很慢
缓存
减少请求,提升性能,避免重复从服务器拿数据。
实现方式
把请求和响应的数据缓存在本地,如果请求的方式是一样的,那么直接从本地拿响应的数据
强制缓存
原理:服务端返回响应时,带上一个过期时间(如 Cache-Control: max-age=300)。
流程:
客户端请求 → 检查本地缓存是否过期。
没过期 → 直接用本地缓存,不发请求。
过期了 → 发请求去服务器。
协商缓存
原理:缓存过期了,客户端发请求问服务器:"资源变了吗?"
流程:
客户端带缓存标识(If-Modified-Since / If-None-Match)请求服务器。
服务器对比:
没变 → 返回 304,客户端用本地缓存。
变了 → 返回 200 和新资源。
对比:强制缓存不用发请求
HTTPS协议
解决问题
窃听,篡改,冒充
途径
信息加密,校验机制,身份证书
传输层
UDP
特性
- 无连接
只要知道对端地址就可以发数据
2. 不可靠
不关心是否安全送达 - 面向数据包
只能整个整个发,但是不会粘包问题
协议字段
源端口、目的端口、数据报长度、校验和
如果校验和出错就会丢弃
数据包长度的特性
数据类型:uint16_t
数据报长度:≤64k
面向数据报
TCP
字段
- 源端口/目的端口
2. 序号/确认序号 - 首部长度
4. 标志位
URG 紧急指针是否有效
ACK 确认号是否有效
PSH 让接收端赶快读取数据
RST 重新建立连接 复位报文段
SYN 请求建立连接 同步报文段
FIN 提示本端要关闭了 结束报文段
5. 窗口大小
6. 校验和
7. 紧急指针
特性- 面向连接
三次握手和四次挥手
第三次握手是可以携带数据的 - 可靠传输
确认应答、超时重传、序号排序、丢包重传 - 面向字节流
会产生粘包问题
- 面向连接