• 拿捏网络之TCP协议如何保证数据可靠(通俗版)


    校验和(CheckSum)

            位于TCP报文中的校验和字段是TCP头部和数据部分进行校验和计算结果。校验和的作用是校验接收数据完整性,毕竟如果你不告诉我什么数据是完整的,我就不知道他完不完整。这个思想在安全要求高的项目中也可以使用。

    数据包拆分和报文序号

            为了减少网络波动对数据传输的影响。TCP协议会将一大段数据分解成若干个小的数据块。就像吃牛排一样,一次吃一整块不方便,所以切成适当大小的小条,吃起来更方便。另外为了避免因为网络的无序传输对可靠性的影响,TCP会对每个数据包进行编号,然后接收时根据序号排序,抛弃其中编号重复或者编号低于预期的数据包。

    超时重传

            TCP协议要求每发送一个数据包就启动一个计时器,并等待接收端成功接收数据发回确认消息。在规定时间内没有收到确认信息,则被视为数据包丢失,需要重新再发一次。即使接收端重复收到相同数据包也会被丢弃。这也是为了消除网络波动产生的影响。

    流量控制

            流量控制是发送方根据接收方的实际接收能力控制发送的数据量,是对本次连接的控制,目的是避免因发送方的网络带宽远远大于接收方的网络带宽,导致接收方的接收速率远远低于发送方发送速率,防止数据丢失。流量控制的实现是滑动窗口机制。发送方和接收方都有一个窗口,发送方的窗口称为cwnd,接收方的窗口称为rwnd。

            滑动窗口的第一个作用其实是提高信道利用率:让发送端发送一批数据再接收确认信号,但是极端情况会导致过度的回退,反而效率变低了。第二个作用是既然采用了这种批量发送的方式,我们再通过控制窗口大小来控制一次发送的数据量大小。

    拥塞控制

            拥塞控制是全局性的流量控制,避免一方的带宽过大击溃对方网络。当出现网络拥塞时,发送方减少数据的发送,从而让接收方能及时处理。通过慢启动和快重传来实现

  • 相关阅读:
    动态一键换肤实现思路和demo
    golang学习笔记01——基本数据类型
    【每日一题Day47】LC1687从仓库到码头运输箱子
    linux下通过wifi连接网络
    linux查询java进程的指令,查询内存的指令
    Mybatis——Mybatis对象分析、SQL配置文件优化以及动态代理描述总结
    epoll与socket缓冲区的恩恩怨怨
    游戏测试的概念是什么?测试方法和流程有哪些?
    【Day25】常用类(日期时间设置)
    IPWorks SFTP Delphi版—组件消耗的资源
  • 原文地址:https://blog.csdn.net/qq_22156459/article/details/126384412