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

TCP 协议的相关特性

  • TCP更复杂一些。16位源端口号、16位目的端口号,32位序号、32位确认序号... 还有四位首部长度(报头长度,单位4字节),6位保留位(考虑可扩展性);6个标志位(TCP最核心的属性);16位窗口;16位校验和;16位紧急指针;选项;数据

  1. 确认应答ack应答报文。可以通过编号区分数据先后,每一个字节都有编号,连续递增,即“TCP序号“,应答报文是”TCP的确认序号“。在报头中。“可靠传输机制”:确认应答和超时重传。

  2. TCP是字节流的,一个TCP数据报和下一个天然就是可拼接的,不像UDP存在传输的上限。

  3. 应答报文在六个标志位中的第二个ack就是1,序号和确认序号都有效,默认情况下不携带数据。普通报文ack0,序号有效确认序号无效。

  4. 丢包:有可能是丢数据或者ack。发送方会有设置超时时间,到时间后会重传数据。接收方有接收缓冲区,确保数据不重复。 每重传一次,超时时间的间隔会变大,重传的频率会降低。重传达到一定次数后,会尝试“重置/复位连接”发一个特殊的数据包“复位报文”,如果能成功就会重置连接,使通信可以继续进行。如果还是有严重问题,复位报文无回应,TCP会单方面放弃连接。

  5. 连接:通信双方各自保存对方的信息。

  6. 连接管理“三次握手(建立连接),四次挥手(断开连接)”。握手是打招呼,不携带业务数据,只有报头。syn同步。三次握手的意义:

    1. 投石问路,初步验证通信链路是否畅通,是可靠传输的“前提条件”。

    2. 确认通信双方各自的发送能力和接收能力是否都正常。

    3. 让通信双方在进行通信之前,对通信过程中需要用到的一些关键参数进行协商。确立tcp起始序号。

  7. 断开连接:双方各自把对方的信息删除掉。断开连接不一定是客户端主动。四次挥手。其中ack是内核控制触发的,但是fin的触发是通过应用程序调用close/进程退出来触发。

  8. 几个状态:

    • listen 服务器把端口绑定好,进入的状态,初始化完毕准备迎接客户端。

    • established 客户端和服务器都会进入的状态。

    • close_wait被动断开连接的一方进入这个状态,即先收到fin的一方,等待代码执行close方法。Server端出现大量的CLOSE_WAIT状态,是由于Server没有发送FIN ACK报文,导致Server状态一直是CLOSE_WAIT状态。

    • time_wait主动断开连接的一方,等待一段时间后就会释放。防止最后一个ack丢包。2MSL 数据报在网络传输在消耗的最大时间。可以帮助 TCP 的全双工连接可靠释。是为了保证重新生成的 socket 不受之前延迟报文的影响。是为了让旧数据包消失在网络中。

  9. 滑动窗口,把“发送一个等待一个”改成“发送一批等待一批”,缩短了等待时间。一批发送的数据的字节数称为窗口大小。收到一条的ack就立刻发下一条。降低可靠性带来的损失。

    • ack丢了,无需处理。后一个ack能涵盖前一个ack的含义。

    • 数据包丢了。

  10. 流量控制让接收方的处理能力反向制约发送方。通过接收缓冲区剩余空间大小用ack包返回,发送方根据其调整。窗口探测包、窗口更新通知。

  11. 拥塞控制,在传输链路的视角控制传输速度。根据丢包率控制发送速度。慢启动,指数增长,线性增长,丢包,减小

  12. 延时应答提升效率。返回ack时间慢一些。

  13. 捎带应答

  14. 面向字节流。粘包问题,粘的是TCP携带的载荷(应用层数据包),明确包之间的边界。

    • 可以指定分隔符/指定数据的长度。用xml、json等解决

  15. 异常情况处

http://www.xdnf.cn/news/639307.html

相关文章:

  • How to balance work and personal life?
  • 前端流行框架Vue3教程:28. Vue应用
  • PostgreSQL windows安装
  • Vue3编译器:静态提升原理
  • VBox共享文件夹
  • 2025一带一路暨金砖国家技能发展与技术创新大赛第三届企业信息系统安全赛项
  • Go语言--语法基础5--基本数据类型--循环语句
  • [ACTF新生赛2020]easyre
  • Bolt.new:重塑 Web 开发格局的 AI 利器
  • MFC:获取所有打印机的名称(打印机模块-2)
  • 【Siggraph Asia 2023】低光增强Diffusion-Low-Light-main(引入diffusion与DWT) -- part1论文精读
  • AutoGen SelectorGroupChat 示例:社会热搜话题事件榜单
  • 成功解决ImportError: cannot import name ‘DTensor‘ from ‘torch.distributed.tensor‘
  • 选择排序算法研究
  • 【NIPS 2024】Towards Robust Multimodal Sentiment Analysis with Incomplete Data
  • C++异步(1)
  • [Protobuf] 快速上手:安全高效的序列化指南
  • SymAgent:一种用于知识图谱复杂推理的神经符号自学Agent框架
  • Oracle中的[行转列]与[列转行]
  • 【目标检测】【医学图像目标检测】BGF-YOLO:脑肿瘤检测的多尺度注意力特征融合
  • 【linux】systemctl基本语法
  • 康佳Java开发面试题及参考答案
  • 前端vue3实现图片懒加载
  • 【LCEL深度解析】LangChain表达式语言的工程化实践指南
  • 基于stm32单片机的智能盲杖研究
  • # YOLO11解决方案之区域追踪探索
  • Python 数据类型方法(1)
  • Docker 一键部署倒计时页面:Easy Countdown全设备通用
  • 2025年5月18日蓝桥stema省选拔赛答案解析
  • GDB调试工具详解