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

Linux学习-TCP网络协议(补充)

一、TCP 头部标志位

TCP 头部包含多种标志位,用于控制连接建立、数据传输、连接断开等过程,核心标志位及作用如下:

标志位英文全称作用
SYNSynchronize Sequence Numbers请求建立连接,三次握手第一步发送 SYN 包
ACKAcknowledgment响应报文标志,用于确认收到数据,确认号字段需配合 ACK 位使用
PSHPush携带数据标志,通知接收方立即从缓冲区读数据,无需等待缓冲区满
FINFinish请求断开连接标志,四次挥手过程中用于发起断开请求
RSTReset复位标志,用于异常断开连接(如连接超时、错误),强制重置连接状态
URGUrgent紧急数据标志,标记数据为紧急,紧急指针字段配合使用,指示紧急数据位置

在这里插入图片描述

从 TCP 头部结构看,这些标志位位于“数据偏移”“保留”之后的控制位区域,与源端口、目的端口、序列号、确认号等共同构成 TCP 报文首部(固定 20 字节,含选项则更长 ),TCP 报文段封装在 IP 数据报的数据部分传输 。

二、TCP 保障安全可靠的机制

(一)连接管理:三次握手 & 四次挥手

  • 三次握手:通过 SYN、SYN + ACK、ACK 交互,确保收发双方通信前就绪,同步序列号,确认双向收发能力 。
  • 四次挥手:通过 FIN、ACK、FIN、ACK 交互,确保双方数据传输完毕,有序释放连接资源,避免数据残留 。

(二)应答机制

TCP 发送数据时,用序列号标记数据包起始编号;接收方回复确认号(为收到的最后一个字节编号 + 1 ),告知发送方已接收数据范围。发送方依据确认号判断数据是否被接收,未确认则触发重传,保障数据可靠。

(三)超时重传机制

数据发送后,若在**超时时间(RTO,Retransmission Timeout )**内未收到确认,发送方认为数据包丢失,重新发送该数据。超时时间会根据网络情况动态调整(如基于往返时间 RTT 计算 ),平衡重传效率与网络开销。

(四)滑动窗口机制

  • 发送方和接收方各维护一个窗口(缓冲区 ),窗口内是已发送未确认、或准备发送的数据 。
  • 发送方无需等每个数据包确认后再发下一个,可连续发送窗口内数据,提升传输效率;接收方通过窗口大小字段告知发送方自己的接收能力,动态调整发送速率,避免拥塞 。

三、TCP 提升效率的机制

(一)延迟应答机制

接收方不立即回复 ACK,等待一段时间(如缓存更多数据、凑齐应用层读取需求 ),再批量确认。减少 ACK 报文数量,降低网络开销,提升整体传输效率。

(二)流量控制机制

结合 TCP 头部窗口大小字段,接收方根据自身缓冲区剩余空间,调整窗口大小告知发送方。发送方按窗口大小控制发送数据量,避免发送过快导致接收方缓冲区溢出,实现收发速率匹配。

(三)捎带应答机制

ACK 报文可与应用层数据合并发送(如接收方有数据要发给发送方时,将 ACK 与数据报文一起传输 ),减少单独发送 ACK 的次数,降低网络报文数量,提升传输效率。

http://www.dtcms.com/a/350459.html

相关文章:

  • 贝叶斯方法和朴素贝叶斯算法
  • tcpdump学习
  • 20250825的学习笔记
  • 2025年09月计算机二级Java选择题每日一练——第七期
  • 配置单区域 OSPF
  • 集群与集群概念
  • 自动修改excel 自动统计文件名称插入 excel辅助工具
  • 升级openssh后ORACLE RAC EM 安装失败处理
  • 【机器学习入门】1.2 初识机器学习:从数据到智能的认知之旅
  • C#_性能优化高级话题
  • MySQL数据备份与恢复全攻略
  • 10-应用调试与性能优化
  • 嵌入式与机器视觉的交叉点:构建智能化设备的实时视频通路
  • [pilot智驾系统] 控制守护进程(controlsd) | 纵向横向 | 比例-积分-微分(PID)
  • AR技术赋能农业机械智能运维
  • imx586手册和相机寄存器部分解读
  • 钉钉推出下一代AI办公应用形态:钉钉ONE
  • 智谱多模态系列:GLM-4.5V 环境配置与本地部署
  • java全局处理Date和LocalDateTime,统一响应固定格式
  • 无刷电机控制 - STM32F405+CubeMX+HAL库+SimpleFOC08,速度闭环控制(有电流环)
  • xm-select多选组件在layer.open中使用、获取、复现
  • 交叉导轨在医疗设备领域中的应用
  • 5G与6G技术演进与创新对比分析
  • 在线旅游及旅行管理系统项目SQL注入
  • 力扣(用队列实现栈)
  • STL——vector的使用(快速入门详细)
  • c++26新功能—带原因说明的删除函数
  • 用 PyTorch 从零实现 MNIST 手写数字识别
  • 微论-神经网络中记忆的演变
  • volatile关键字:防止寄存器操作被优化