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

【计算机网络】TCP协议特点1


TCP/IP协议头

  • TCP/IP族是一组网络通信协议的集合,一个分层、多协议的通信体系,它是互联网的基础通信协议。这个协议族定义了电子设备如何连入互联网,以及数据如何在它们之间传输。
  • TCP/IP 协议族通常被分为四层,从下到上分别是数据链路层、网络层、传输层和应用层
  • 每层完成不同的功能 上层可以使用下层协议提供的服务
  • 几乎所有的互联网应用,如网页浏览、文件传输、电子邮件、即时通讯等都依赖 TCP/IP 协议族来实现数据的传输。
  • 负责将数据包从源头传输到目的地

ACK机制

  • ACK机制是一种确认机制,用于确认接收方是否已经正确接收了发送方发送的数据。以保证数据的可靠传输,防止数据的丢失或重复传输。

基本原理

  • 发送方发送数据后,接收方会向发送方发送一个 ACK 回执,告知发送方数据已成功接收。
  • 一定时间内没有接收到正确的 ACK,就会重新发送数据,直到接收到 ACK 为止。
  • 通常接收方返回的 ACK 中会包含一些信息,比如发送方发送数据的序号加一,以便发送方知道接下来要发送的数据序号。这样可以确保数据按顺序传输

应用场景

  • TCP协议中的ACK机制:在 TCP 通信中,ACK 机制是保证数据可靠传输的核心,如果发送方在指定时间内没有收到 ACK,就会触发重传机制。
  • 服务端会接收seq返回ACK告诉客户端他接收到了 

超时重传机制

  • 一种在数据通信中保证数据可靠传输的重要手段。当发送方发送数据后,会启动一个定时器。如果在定时器超时之前没有收到接收方的确认(ACK)信息,发送方就会认为数据可能丢失或者损坏,进而重新发送数据。
  • 数据丢失 数据重传

重传流程

  • 定时器的设置
  • 在 TCP 协议中,最初的超时时间通常是根据经验值或者网络环境的估计来设定的,并且在后续的传输过程中会根据网络的实际往返时间动态调整。往返时间是指发送方发送一个数据段到接收方,接收方返回确认信息给发送方所经历的时间。
  • 超时判断
  • 当定时器超时后,发送方会重新发送之前未被确认的数据。
  • 重传操作
  • 如果在传输一个大文件的过程中某个数据块超时未被确认,发送方会重新发送这个数据块,同时可能会稍微放慢后续数据块的发送速度,等待网络状况改善或者确认信息返回。

配合使用

  • 和流量控制机制配合
    • 流量控制主要是为了避免接收方的接收缓冲区溢出。超时重传机制在进行重传时,需要考虑流量控制的限制。
  • 和拥塞控制机制配合
    • 拥塞控制是为了防止网络出现拥塞。当超时重传发生时,发送方可能会认为网络出现了拥塞情况。在 TCP 中,拥塞控制机制如慢启动、拥塞避免等会根据超时重传的情况来调整发送窗口大小,降低发送速率,以缓解网络拥塞。例如,在慢启动阶段,如果发生了超时重传,发送方会减小发送窗口大小,重新进入慢启动过程,谨慎地增加发送速率。

建立连接 三次握手

  • 三次握手就是TCP传输协议 是一种面向连接、可靠的数据传输协议,它是为了在不可靠的互联网上提供可靠的端到端字节流而专门设计的一个传输协议


第一次握手

  • 动作发起方:客户端
  • 第一次握手: 客户端向服务器端发送报文 证明客户端的发送能力正常
  • 一开始 客户端和服务端处于close状态 先使服务端主动监听 某个端口 主要LISTEN状态
  • 然后客户端主动发起SYN 之后处于 SYN-SEND

第二次握手

  • 动作发起方:服务器
  • 第二次握手:服务器端接收到报文并向客户端发送报文证明服务器端的接收能力发送能力正常
  • 客户端收到服务端发送的SYN和ACK之后 发送ACK的ACK 之后一直处于ESTABLISHED 状态 它发收成功了

第三次握手

  • 动作发起方:客户端
  • 第三次握手:客户端向服务器发送报文 证明客户端的接收能力正常
  • 服务端接收到ACK发送ACK之后 处于ESTABLISHED状态 因为它也一收一发了

三次握手原因

  • 为了保证客户端和服务器端的可靠连接,TCP建立连接时必须要进行三次会话
  • TCP三次握手,进行三次握手的目的是为了确认双方的接收能力和发送能力是否正常。

http://www.kler.cn/a/396261.html

相关文章:

  • 前后端分离练习(云客项目)
  • Springboot 使用EasyExcel导出含图片并设置样式的Excel文件
  • String类型
  • SpringCloud-使用FFmpeg对视频压缩处理
  • 服务器上安装Orcale数据库以及PL SQL工具(中文)
  • 一文说清libc、glibc、glib的发展和关系
  • 前端知识点---Window对象(javascript)了解
  • mybatis-spring-boot-starter和mybatis-plus-spring-boot3-starter冲突
  • 更改 Jupyter Notebook 中文件的存放位置
  • PHP承兑汇票识别API-承兑汇票如何快速识别-私有化部署集成
  • 探索 HTML 和 CSS 实现的模拟时钟
  • 鸿蒙学习生态应用开发能力全景图-赋能套件(1)
  • 机器学习:梯度提升树(GBDT)——基于决策树的树形模型
  • 面试时问到软件开发原则,我emo了
  • swagger (一)导出iOS包
  • 奥迪股份如何通过升级至SAP S/4HANA实现财务与后勤的高效整合?
  • 将答题成绩排行榜数据通过前端生成excel的方式实现导出下载功能
  • 【C/C++】序列化使用Json还是Protocol Buffer?
  • debian 系统更新升级
  • R绘制像素风图片
  • SpringBoot开发——整合OAuth2 安全授权框架
  • ROS进阶:使用URDF和Xacro构建差速轮式机器人模型
  • 软件设计师-排序算法
  • 跟踪/追踪程序报错的方法
  • CSMM(软件能力成熟度评估)认证是什么?
  • BERT模型核心组件详解及其实现