当前位置: 首页 > ops >正文

Linux 软件编程(十一)网络编程:TCP 机制与 HTTP 协议

五、TCP 进阶机制

(一)TCP 头部标志位

TCP 头部的标志位是控制通信行为的 “开关”,常用标志位功能:

标志位含义典型场景
SYN请求建立连接三次握手第一步,发起连接请求
ACK响应报文确认回复对方,确认已收到数据
PSH携带数据通知告诉接收方 “立即从缓冲区取数据”,避免延迟
FIN请求断开连接四次挥手第一步,发起断开请求
RST复位连接强制重置异常连接(如网络拥塞时)
URG紧急数据标识标记 “紧急数据”,需优先处理

(二)TCP 安全可靠传输机制

1. 三次握手 & 四次挥手
  • 三次握手:通过 SYN/SYN+ACK/ACK 三次交互,确认双方收发能力,为可靠通信奠基。
  • 四次挥手:因服务端可能残留未发数据,需拆分 FIN/ACK/FIN/ACK 四步,保证数据发完再断开。
2. 应答机制

TCP 采用 **“序列号 + 确认号”** 实现可靠应答:

  • 发送方用 ** 序列号(Sequence Number)** 标记数据段的 “起始编号”;
  • 接收方回复确认号(Acknowledgment Number),值为 “收到的最后一个字节编号 + 1”,告诉发送方 “已收到到这里,下一个该发啥”。

示例:发送方发 [0-999] 数据,序列号为 0;接收方回复确认号 1000,表示 “0-999 已收到,继续发 1000 开头的数据”。

3. 超时重传机制

发送方数据发出后,若超时未收到确认号,则认为数据丢失,触发重传。类似 “快递没收到,重新发货”,保障数据不丢包。

4. 滑动窗口机制

TCP 用滑动窗口管理发送与确认:

  • 窗口内是 “已发送但未确认 + 待发送” 的数据;
  • 收到确认号后,窗口 “滑动”,释放已确认数据的缓冲区,继续发送新数据。
    ( 理解:已发送并确认、已发送未确认、即将发送、准备好的数据,随窗口滑动动态变化 )

(三)TCP 效率优化机制

1. 延迟应答机制

发送数据的同时,接收方不立即回复 ACK,而是等待一段时间(攒一批数据再回复),减少 ACK 报文数量,降低网络开销。

2. 流量控制机制

通过 TCP 头部 **“窗口大小(Window Size)”(滑动窗口)** 字段实现:

  • 接收方根据自身缓冲区剩余空间,动态调整 “窗口大小”;
  • 发送方依据窗口大小控制发送速率,避免接收方缓冲区溢出。
3. 捎带应答机制

ACK 报文有时候不单独发送,而是 “附着” 在应用层数据里一起发(类似于变为三次挥手),减少单独发 ACK 的次数,提升效率。

六、HTTP 协议

(一)万维网通信基础

  • WWW(万维网):由网页、服务器、客户端(浏览器)组成的信息系统,通过 URL 定位资源。
  • URL(统一资源定位符):格式 <协议>://<主机>:<端口>/<路径> ,示例:https://www.baidu.com/s?wd=关键词 ,精准定位网络资源。
  • HTTP(超文本传输协议):应用层协议,基于 TCP 传输,默认端口 80/8080,负责客户端与服务器的请求 - 响应交互。
  • HTML(超文本标记语言):浏览器解析后展示网页内容的语言,HTTP 响应报文里的 “实体主体” 常包含 HTML 代码。

(二)HTTP 通信流程

  1. 建立 TCP 连接:客户端与服务器通过 TCP 三次握手建立连接(如访问百度时,先建 TCP 连接 )。
  2. 发送 HTTP 请求报文:客户端向服务器发请求,包含 “请求方法(如 GET/POST)、URL、协议版本” 等(示例:GET / HTTP/1.1 表示用 GET 方法请求根路径资源 )。
  3. 接收 HTTP 响应报文:服务器处理请求后,回复包含 “状态码、响应头、实体主体(如 HTML 内容)” 的报文(示例:HTTP/1.1 200 OK 表示请求成功 )。
  4. 断开 TCP 连接:默认短连接(Connection: close )直接断开;长连接(Connection: keep-alive )会保持连接一段时间,复用传输其他资源。

(三)HTTP 报文格式

1. 请求报文结构(以 GET 为例)
请求行:方法 URL 版本 CRLF  (如:GET /index.html HTTP/1.1\r\n)
首部行:字段名: 值 CRLF    (如:Host: www.baidu.com\r\n)
...(更多首部行)
空行:CRLF
实体主体:(GET 通常无实体主体,POST 可带数据)
2. 响应报文结构
状态行:版本 状态码 短语 CRLF  (如:HTTP/1.1 200 OK\r\n)
首部行:字段名: 值 CRLF        (如:Content-Type: text/html\r\n)
...(更多首部行)
空行:CRLF
实体主体:(如 HTML 代码、文件内容等)
3. 状态码分类
状态码分类含义典型码值场景
1xx通知信息100表示 “继续”,常为中间响应
2xx成功200请求成功,服务器正常返回数据
3xx重定向302请求的资源 “搬家了”,需重新定向
4xx客户端错误404资源不存在;400 表示请求语法错
5xx服务器错误500服务器内部故障;502 表示网关错误

(四)HTTP 请求方法

HTTP 定义了多种请求方法,控制对资源的操作:

方法含义典型场景
OPTION查询选项探知服务器支持的方法
GET(常见)请求资源浏览网页、获取图片等(参数放 URL 里)
HEAD请求资源头部只获取响应头,不下载实体主体
POST(常见)提交数据登录、上传文件(参数放请求体)
PUT上传文档在指定 URL 存储文档(需权限)
DELETE删除资源删除指定 URL 对应的资源(需权限)
TRACE环回测试调试用,查看请求的传输路径
CONNECT代理连接用于代理服务器,建立隧道

(五)爬虫

爬虫(Web Crawler) 是一种自动化程序,模拟浏览器的 HTTP 请求 - 响应流程,批量抓取网络资源:

  1. 工作逻辑

    • 构造 HTTP 请求(模仿浏览器发 GET/POST),获取网页 HTML;
    • 解析 HTML 提取链接、数据;
    • 递归抓取新链接,形成 “自动浏览 - 采集” 的流程。

总结

  • TCP 核心:通过 “三次握手建连接、四次挥手断连接、序列号 + 确认号应答、滑动窗口控速率”,实现可靠且高效的传输。
  • HTTP 核心:基于 TCP 传输,用请求 - 响应模式交互,通过 URL 定位资源,用状态码反馈结果,是万维网的 “通信语言”。
  • 爬虫本质:自动化的 HTTP 请求 - 解析工具。
http://www.xdnf.cn/news/18654.html

相关文章:

  • 我的项目管理之路-组织级项目管理(二)
  • 【spring进阶】spring应用内方法调用时长统计
  • 【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day13
  • Python之matplotlib 基础三:绘制折线图
  • 什么是JSON-RPC 2.0,在项目中应该怎么使用
  • Jenkins+docker 微服务实现自动化部署安装和部署过程
  • More Effective C++ 条款08:理解各种不同意义的new和delete
  • (操作系统)死锁是什么 必要条件 解决方式
  • 【Task05】:向量数据库实践(第三章3、4节)
  • Fory序列化与反序列化
  • ArcGIS JSAPI 高级教程 - 创建渐变色材质的自定义几何体
  • MYSQL(DDL)
  • 算法:驱动智能社会的核心引擎
  • OpenIM应用机器人自动应答
  • Zabbix 7.0中文乱码矫正
  • AI产品经理面试宝典第75天:Agentic RAG系统优化策略面试题实战解析
  • 08-系统能力调用与权限管理
  • BERT(Bidirectional Encoder Representations from Transformers)模型详解
  • 【RAGFlow代码详解-1】概述
  • 【Android】从一个AndroidRuntime看类的加载
  • 结构化智能编程:用树形向量存储重构AI代码理解范式
  • 第16届蓝桥杯C++中高级选拔赛(STEMA)2025年4月真题
  • More Effective C++ 条款05: 谨慎定义类型转换函数
  • 【Flex SerialPort】一个基于Qt6的支持自定义按键指令的串口工具
  • Kubernetes保姆级教学
  • centos搭建gitlab服务器
  • 【贪心算法】day2
  • 邮箱创建时间打标与自动删除功能设计思路
  • 13种常见机器学习算法面试总结(含问题与优质回答)
  • MySQL视图有什么用?一文读懂虚拟表的六大核心价值