首页 > 其他分享 >TCP 的重传机制;TCP 的粘包和拆包是什么?

TCP 的重传机制;TCP 的粘包和拆包是什么?

时间:2023-10-23 10:09:11浏览次数:34  
标签:包是 重传 SACK 粘包 发送 TCP 拆包

重传包括超时重传、快速重传、带选择确认的重传(SACK)、重复 SACK 四种。

一、TCP重传机制

1.1超时重传

超时重传,是 TCP 协议保证数据可靠性的另一个重要机制,其原理是在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的 ACK 报文,那么就重新发送数据,直到发送成功为止。

1.2快速重传

TCP 还有另外⼀种快速重传(Fast Retransmit)机制,它不以时间为驱动,⽽是以 数据驱动重传。

它不以时间驱动,而是以数据驱动。它是基于接收端的反馈信息来引发重传的。可以用它来解决超时重发的时间等待问题

1.3带选择确认的重传(SACK)

为了解决应该重传多少个包的问题? TCP 提供了带选择确认的重传(即 SACK,Selective Acknowledgment)。

SACK 机制就是,在快速重传的基础上,接收方返回最近收到报文段的序列号范围,这样发送方就知道接收方哪些数据包是没收到的。这样就很清楚应该重传哪些数据包。

1.4重复 SACK(D-SACK)

D-SACK,英文是 Duplicate SACK,是在 SACK 的基础上做了一些扩展,主要用来告诉发送方,有哪些数据包,自己重复接受了。

DSACK 的目的是帮助发送方判断,是否发生了包失序、ACK 丢失、包重复或伪重传。让 TCP 可以更好的做网络流控。

二、TCP 的粘包和拆包

2.1 什么是TCP粘包和拆包

TCP 是面向流,没有界限的一串数据。TCP 底层并不了解上层业务数据的具体含义,它会根据 TCP 缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被 TCP 拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是所谓的 TCP 粘包和拆包问题。

TCP 的重传机制;TCP 的粘包和拆包是什么?_TCP

2.2 为什么会产生粘包和拆包呢?

要发送的数据小于 TCP 发送缓冲区的大小,TCP 将多次写入缓冲区的数据一次发送出去,将会发生粘包;

接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包;

要发送的数据大于 TCP 发送缓冲区剩余空间大小,将会发生拆包;

待发送数据大于 MSS(最大报文长度),TCP 在传输前将进行拆包。即 TCP 报文长度 - TCP 头部长度 > MSS。

2.3 怎么解决呢?

发送端将每个数据包封装为固定长度

在数据尾部增加特殊字符进行分割

将数据分为两部分,一部分是头部,一部分是内容体;其中头部结构大小固定,且有一个字段声明内容体的大小。


标签:包是,重传,SACK,粘包,发送,TCP,拆包
From: https://blog.51cto.com/u_11344924/7982966

相关文章

  • osi七层模型与TCP/IP四层模型
    一.osi七层模型:1.应用层​ 最上层的,也是我们能直接接触到的就是应用层(ApplicationLayer),我们电脑或手机使用的应用软件都是在应用层实现。那么,当两个不同设备的应用需要通信的时候,应用就把应用数据传给下一层,也就是传输层。​ 所以,应用层只需要专注于为用户提供应用功能,比如H......
  • TCP 的拥塞控制
    一、什么是拥塞控制?不是有了流量控制吗?前⾯的流量控制是避免发送⽅的数据填满接收⽅的缓存,但是并不知道整个⽹络之中发⽣了什么。⼀般来说,计算机⽹络都处在⼀个共享的环境。因此也有可能会因为其他主机之间的通信使得⽹络拥堵。在⽹络出现拥堵时,如果继续发送⼤量数据包,可能会导致数......
  • 传输TCP/IP数据
    前言上一章讲到了委托协议栈发送消息我们知道IP地址之后,就可以委托操作系统内部的协栈上向这个目标IP地址,也就是我们要访问的web服务器发送消息了。收发数据的操作大致为以下几点创建套接字(创建套接字阶段)将管道连接到服务器端的套接字上(连接阶段)收发数据(通信阶段)断开管道......
  • 网络tcp与udp协议
    TCP协议TCP(transportcontrolprotocol,传输控制协议)是面向连接的,面向流的,提供高可靠性服务。收发两端(客户端和服务器端)都要有一一成对的socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小且数据量小的数据,合并成一个大的数据块,然......
  • 使用Spring Integration接收TCP与UDP请求
    1.简介SpringIntegration是一个开源的项目,它是Spring生态系统的一部分,旨在简化企业集成(EnterpriseIntegration)的开发。它提供了一种构建消息驱动的、松散耦合的、可扩展的企业应用集成解决方案的方式。SpringIntegration基于SpringFramework构建,使开发者能够更容易地......
  • TCP 的滑动窗口是什么?
    TCP发送一个数据,如果需要收到确认应答,才会发送下一个数据。这样的话就会有个缺点:效率会比较低。“用一个比喻,我们在微信上聊天,你打完一句话,我回复一句之后,你才能打下一句。假如我没有及时回复呢?你是把话憋着不说吗?然后傻傻等到我回复之后再接着发下一句?”为了解决这个问题,TCP引......
  • tcp/ip协议和opc协议对比详解
    TCP/IP协议和OPC协议是两种重要的网络协议,它们在不同的网络层级上运行,并为数据传输和通信提供了不同的功能。TCP/IP协议(TransmissionControlProtocol/InternetProtocol,传输控制协议/互联网协议)是互联网通信的基础协议,它定义了互联网中数据传输的基本规则和标准。TCP/IP协议包括......
  • TCP FOR PGST
     Uplink:1//////////////////////////////////////////////////////////////2EnLength=0;34//flagReport=fGasLowAlarm;5//GasWorker.Alm_Lel=25;67encodingString[EnLength++]=0x5D;//起始符8encodingString[EnLe......
  • TCP/IP--理解TCP三次握手和四次挥手
    本篇结构:前言TCP报文首部格式三次握手四次挥手wireshark抓包三次握手wireshark抓包四次挥手一、前言比较郁闷,明明年纪不大,记性却出奇显出老态,不久前学习过的知识,再回头看发现基本已经忘却。可能也是学得不扎实,不深入的原因吧。抛开这些无关的念头,少年,再来深入理解一下吧,要知道......
  • TCP和UDP
                ......