Linux网络编程:TCP/UDP与HTTP协议核心笔记

Linux网络编程:TCP/UDP与HTTP协议核心笔记

目录

一、TCP粘包问题

TCP是流式传输,发送多包数据时会发生粘包,多条数据合并一起发给接收端。 解决粘包三种方案:

  1. 加延时;
  2. 设置数据边界,例如用\r\n作为数据结束标记;
  3. 定长发送,每次发送固定长度数据包。

二、TCP通信原理

TCP头部20字节固定头部,包含源端口、目的端口、序号、确认序号、标志位、窗口大小、校验和等字段。 标志位含义:

  • ACK:确认应答,ACK=1时确认序号生效
  • FIN:结束通信
  • SYN:连接请求
  • RST:重置重建连接
  • PSH:推送发送数据
  • URG:紧急加急数据

1.三次握手(建立连接)

通信前建立TCP连接

  1. 发送端发送SYN
  2. 接收端回复SYN+ACK
  3. 发送端回复ACK,连接建立完成。

2.四次挥手(断开连接)

完成通信后释放连接,无数据传输时可简化为三次挥手。

  1. 主动关闭方发送FIN
  2. 被动关闭方回复ACK
  3. 被动关闭方数据发送完毕,发送FIN
  4. 主动关闭方回复ACK,连接断开。

3.TCP核心保障机制

  1. 序号&确认序号:保证数据完整传输。序号为本包数据起始字节编号;确认序号代表接收方期待收到的下一字节序号 = 收到的序号 + 接收数据实际长度。
  2. 滑动窗口:流量控制,修改头部窗口大小字段,控制发送速率。
  3. 拥塞控制:网络带宽紧张时,自动调节发包,保障可靠通信。
  4. 掉线检测:检测长连接是否存活。

三、TCP与UDP对比

UDP(无连接)

  • 实现简单,资源开销小
  • 无连接,不可靠不安全,不保证数据送达

TCP(面向连接)

  • 实现复杂,资源开销大
  • 三次握手建立连接、四次挥手断开,安全可靠,保障数据完整有序传输。

四、HTTP协议(基于TCP的应用层协议)

1.两种模型

  1. C/S客户端/服务器模型 优点:本地资源加载快,断网本地可运行 缺点:占用本地存储空间;不同平台要单独开发客户端;更新需要本地升级。
  2. B/S浏览器/服务器模型 资源全部放在服务器;新增内容不用更新本地;只要有浏览器就可以访问,跨平台通用。

2.URL统一资源定位符

格式:协议://主机:端口/路径

  • 协议:http / https
  • 主机:域名/IP,DNS将域名解析成IP地址
  • 端口:http默认80、8080;https默认443
  • 路径:服务器资源存放位置

3.HTTP完整传输流程

1.浏览器输入URL 2.浏览器和服务器建立TCP连接 3.浏览器发送HTTP请求报文 4.服务器返回HTTP响应报文 5.断开TCP连接

4.HTTP请求报文

  • 请求行:请求方法 + URL + HTTP版本
    • GET:获取服务器资源
    • POST/PUT:向服务器提交数据
  • 首部行:字段名:值格式,多个请求头;
  • CRLF空行分割头部与实体主体;
  • 实体主体:POST请求存放提交数据,GET一般为空。

5.HTTP响应报文

  • 状态行:版本 + 状态码 + 描述短语
    • 1xx:通知信息
    • 2xx:请求成功
    • 3xx:重定向
    • 4xx:客户端错误
    • 5xx:服务器内部错误
  • 响应首部行;
  • 实体主体:返回给浏览器的数据内容。
相关推荐
未济1 天前
linux 配置环境变量
linux
傲世仙尊1 天前
目录即文件-Ext文件系统收尾篇
linux·c语言
虎头金猫1 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
_艾伦 耶格尔.1 天前
进程间通信
linux
Liuqy-051 天前
Linux IO编程——静态库、动态库
linux
wuyk5551 天前
《WiFi 嵌入式物联网开发全套实战》| 第 16 章 ESP32 AP+STA 双模共存原理与工程坑点
网络·stm32·物联网
彧azz1 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
-梅1 天前
linux(8) 软硬链接
linux·运维·服务器
AIgorithmGEEK1 天前
[Linux]线程三部曲(上):一个执行流的诞生——从操作系统一路拆到 pthread_create
linux·线程·pid
琥珀色糖1 天前
SimlpeHttp
linux·服务器