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

【刷题Day21】TCP(浅)

说说 TCP 的四次挥手?

TCP的四次挥手事用于安全关闭一个已建立的连接的过程,它确保双方都能完成数据传输并安全地释放连接资源。

简述步骤:

  1. 第一次挥手(FIN --> ACK):客户端主动关闭连接,发送FIN包,进入FIN_WAIT_1状态。服务器收到FIN后,表示不再接收数据,但仍可能继续发送数据。
  2. 第二次挥手(ACK):服务器发送ACK包,确认已收到FIN。此时服
  3. 务器进入CLOSE_WAIT状态,客户端进入FIN_WAIT_2状态。
  4. 第三次挥手(FIN --> ACK):服务器完成所有数据传输后,发送FIN包,进入LAST_ACK状态。客户端收到FIN后,准备关闭连接。
  5. 第四次挥手(ACK):客户端发送最后一个ACK包,进入TIME_WAIT状态,等待可能迟到的FIN包。服务器收到ACK后,关闭连接,进入CLOSED状态。客户端在TIME_WAIT计时结束后(2MSL),正式关闭连接。

TCP 的粘包和拆包能说说吗?

  • 粘包与拆包(也称半包)现象:
    • 粘包:TCP传输中,发送方的多个数据包在接收方被合并成一个包接收,导致多条消息数据粘在一起,接收方无法正确区分这些消息的边界。
    • 拆包:指的是发送方的一个数据包在接收方被分成了多个包接收,导致一条完整的消息被拆成多个部分,接收方无法一次性接收到完整的数据。
  • 原因:
    • 粘包:主要由于TCP是面向字节流的协议,它不关心数据边界,数据在发送方可能被一次性发送,接收方在读取时可能会将多个消息拼接在一起。
    • 拆包:可能由于网络传输中的MTU(最大传输单元)限制或发送缓冲区大小限制,一个大包被分成了多个小包传输。
  • 解决方法:
    • 使用定长消息:每个消息都有固定的长度,接收方按照固定长度读取数据。
    • 添加消息分隔符:在每个消息之间添加特定的分隔符(如换行符),接收方可以通过分隔符来区分消息。
    • 使用消息头:在消息的头部添加一个长度字段,指示消息的长度,接收方根据这个长度来读取响应长度的数据。

说说 TCP 拥塞控制的步骤?

  1. 慢启动(Slow Start)

    发送方在连接建立初期,缓慢地增加数据发送速率。初始地拥塞窗口(cwnd)通常为一个MSS(最大报文段大小),然后再每次收到ACK后成倍增加cwnd,直到达到慢启动阈值(ssthresh)或检测到网络拥塞。

  2. 拥塞避免(Congestion Avoidance)

    当cwnd达到ssthresh后,TCP进入拥塞避免阶段,拥塞窗口地增长速度从指数变为线性增长,即每个RTT(往返时间)增加一个MSS。这一阶段旨在避免激烈的拥塞反应,保持网络稳定性。

  3. 快速重传(Fast Retransmit)

    发送方在收到三个重复的ACK后,立即重传被认为丢失的报文段,而无需等待超时。这减少了重传的延迟,迅速应对数据丢失。

  4. 快速恢复(Fast Recovery)

    在快速重传后,TCP不进入慢启动,而是减小cwnd到当前的一半,并设置ssthresh为当前新的cwnd的值,然后开始线性增加cwnd,以快速恢复到丢包前的传输速率。

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

相关文章:

  • Java枚举
  • 排序算法-快速排序
  • 【数据结构 · 初阶】- 带环链表
  • Spring Boot 集成Poi-tl实现动态Word文档生成
  • pnpm确认全局下载安装了还是显示cnpm不是内部或外部命令,也不是可运行的程序
  • Windows 中使用 `netstat` 命令查看端口占用
  • shell 正则表达式与文本处理器
  • C语言之高校学生信息快速查询系统的实现
  • mysql——基础知识
  • 百级Function架构集成DeepSeek实践:Go语言超大规模AI工具系统设计
  • 深入解析主流数据库体系架构:从关系型到云原生
  • LeetCode第158题_用Read4读取N个字符 II
  • HTML 如何改变字体颜色?深入解析与实践指南
  • 大数据学习栈记——MapReduce技术
  • 在 Anaconda 上安装多版本 Python 解释器并在 PyCharm 中配置
  • Pandas的应用
  • OpenCV 找出两个图像之间的差异 cv2.absdiff
  • 大数据开发知识1:数据仓库
  • KWDB MCP Server:解锁 LLM 与数据库的无缝协作
  • python之计算平面曲线离散点的曲率
  • Vector的学习
  • 第五章 SQLite数据库:5、SQLite 进阶用法:ALTER 命令、TRUNCATE 操作、视图创建、事务控制和子查询的操作
  • 一文总结通信电路中LC谐振回路中各公式以及对深入解读品质因数Q
  • Retinex系列图像/视频增强算法介绍
  • 损失函数总结
  • OpenLayers:视图变换的方法
  • 【AI论文】ColorBench:视觉语言模型能否看到并理解多彩的世界?一个全面的色彩感知、推理和鲁棒性基准测试
  • 各种诈骗、骚扰电话
  • linux网络管理
  • 【单倍型理解及计算系列之二】单倍型基本概念以及其与遗传定位中Bin的定义区别