[Linux复习]:网络

网络

网络基础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) ,客户端可以一次性发多个请求,不用等上一个返回。

优点:简单、灵活、跨平台、应用最广。

缺点:

  1. 明文传输,不安全。
  2. 无状态(需要 Cookie/Session 维持状态)。
  3. 队头阻塞:响应必须按顺序返回,前面一个响应卡住,后面所有都得等。
  4. 头部冗余:每次请求都带重复的 Header。
    HTTP/2.0
    优点
    1. 头部压缩
    2. 并发传输
      注意一下并发传输,说的是在一条TCP连接中可以有多个Stream(流),
      每一个流里面有Message(消息),
      Message里面放的Frame(帧),
      真正实现了并发,不同流的数据可以乱序发送,解决队头阻塞
    3. 服务器推送(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

特性

  1. 无连接
    只要知道对端地址就可以发数据
    2. 不可靠
    不关心是否安全送达
  2. 面向数据包
    只能整个整个发,但是不会粘包问题
    协议字段
    源端口、目的端口、数据报长度、校验和
    如果校验和出错就会丢弃
    数据包长度的特性
    数据类型:uint16_t
    数据报长度:≤64k
    面向数据报
TCP
字段
  1. 源端口/目的端口
    2. 序号/确认序号
  2. 首部长度
    4. 标志位
    URG 紧急指针是否有效
    ACK 确认号是否有效
    PSH 让接收端赶快读取数据
    RST 重新建立连接 复位报文段
    SYN 请求建立连接 同步报文段
    FIN 提示本端要关闭了 结束报文段
    5. 窗口大小
    6. 校验和
    7. 紧急指针
    特性
    1. 面向连接
      三次握手和四次挥手
      第三次握手是可以携带数据的
    2. 可靠传输
      确认应答、超时重传、序号排序、丢包重传
    3. 面向字节流
      会产生粘包问题
相关推荐
不会写DN2 小时前
如何设计应用层 ACK 来补充 TCP 的不足?
开发语言·网络·数据库·网络协议·tcp/ip·golang
何中应2 小时前
Linux的systemctl命令
linux·运维·服务器
IMPYLH2 小时前
Linux 的 mktemp 命令
linux·运维·服务器·bash
-SGlow-2 小时前
Linux相关概念和易错知识点(51)(mmap文件映射、共享内存原理、malloc的原理)
linux·c语言·算法·内核
三不原则2 小时前
RAG 技术优化运维问答:如何构建运维知识库?
运维
IT摆渡者2 小时前
JUMPSERVER堡垒机部署
linux·运维·网络·经验分享·笔记
徐子元竟然被占了!!2 小时前
测速工具-iperf3
运维
人工小情绪2 小时前
Linux下离线安装timm
linux·运维·服务器
Trouvaille ~2 小时前
【MySQL篇】表的操作:数据的容器
linux·数据库·mysql·oracle·xshell·ddl·表的操作