博客
关于我
计算机网络知识——TCP可靠传输
阅读量:401 次
发布时间:2019-03-05

本文共 1485 字,大约阅读时间需要 4 分钟。

TCP 可靠性保证机制解析

TCP协议作为面向连接的、可靠的传输协议,其核心设计目标是确保数据能够可靠、完整地传输到目标端。以下从可靠性保证、重传机制、滑动窗口协议到流量控制和拥塞控制等方面详细阐述TCP的实现原理。

TCP 可靠性如何保证?

TCP协议通过多层机制确保数据传输的可靠性:

  • 信道可靠性

    TCP使用三次握手和四次挥手机制,确保建立和终止连接的可靠性。三次握手确保连接的建立,四次挥手确保数据的完整发送和连接的正确终止。

  • 数据正确性

    TCP采用序列号、校验和和超时重传机制来保证数据的完整性。序列号确保数据按顺序传输,校验和用于检测数据损坏,超时重传机制用于处理丢失的数据包。

  • 传输控制

    通过流量控制和拥塞控制机制,TCP在端到端和网络层面实现数据传输的有效率和稳定性。流量控制通过滑动窗口协议避免发送过快,拥塞控制则调节发送速率以适应网络状态。

  • TCP 重传机制

    TCP的重传机制是通过序列号和确认应答机制来实现的。当传输过程中出现丢失或损坏的数据包时,TCP协议会触发重传机制以确保数据的完整性。常见的重传机制包括超时重传、快速重传(SACK)、D-SACK等。

  • 超时重传

    TCP协议要求在发送端每发送一个报文段后启动一个定时器。接收端成功接收数据后返回确认信息。如果定时器超时前未收到确认,发送端会认为数据丢失并进行重传。

  • 快速重传

    快速重传机制要求接收方在收到失序报文段后立即发送确认信息。若连续收到三个重复确认,发送方会立即重传丢失的数据段,而无需等待定时器超时。

  • 滑动窗口协议

    滑动窗口协议是TCP用于流量控制和拥塞控制的重要机制。通过维护发送方和接收方的窗口大小,协议确保数据传输的有效率和稳定性。

    滑动窗口实现
    • 窗口大小:接收方根据自身缓冲区大小确定窗口大小,并通过ACK报文通知发送方。
    • 窗口滑动:当接收方成功接收数据包时,窗口向右滑动,允许发送方发送新的数据包。
    • 零窗口问题:接收方若缓冲区已满,会发送零窗口报文,导致发送方暂停发送数据。解决方法是发送窗口探测报文,等待接收方恢复窗口。
    丢包情况

    当数据包丢失或ACK丢失时,发送方会等待定时器超时后进行重传。若长时间未收到ACK,发送方会启动超时重发机制,确保数据的可靠性。

    超时重发

    超时重发机制通过定时器确保发送方在数据丢失时能够及时重传,避免连接中断。

    流量控制

    流量控制通过滑动窗口机制实现,确保发送方的发送速率不超过接收方的处理能力。接收方通过窗口大小字段反馈当前可接收的数据量,发送方根据此调整发送速率。

    窗口关闭与解决方案

    零窗口问题是指接收方因缓冲区已满而发送零窗口报文,导致发送方无法发送数据。解决方法是发送窗口探测报文,等待接收方恢复窗口后继续传输。

    糊涂窗口综合征

    糊涂窗口综合征是指接收方发送小窗口导致发送方发送小数据包,降低传输效率。解决方法包括让接收方不发送小窗口,延迟发送数据或根据窗口大小和数据大小调整发送策略。

    拥塞控制

    TCP拥塞控制通过慢启动、拥塞避免、快速重传和快恢复等算法实现,确保网络资源的公平分配。

    慢启动

    慢启动算法在初始阶段逐步增加发送窗口,防止网络过载。

    拥塞避免

    拥塞避免算法通过线性增长发送窗口,缓慢增加传输速率。

    快重传与快恢复

    快重传和快恢复算法通过快速重传丢失的数据和快速恢复网络状态,减少网络阻塞。

    流量控制与拥塞避免的区别

    • 流量控制:端到端控制,通过滑动窗口管理发送速率。
    • 拥塞控制:全局控制,防止网络过载,涉及所有网络节点和路由器。

    TCP协议通过这些机制确保数据的可靠、高效传输,适用于可靠性要求高的场景。

    转载地址:http://faizz.baihongyu.com/

    你可能感兴趣的文章
    Netty工作笔记0013---Channel应用案例4Copy图片
    查看>>
    Netty工作笔记0014---Buffer类型化和只读
    查看>>
    Netty工作笔记0020---Selectionkey在NIO体系
    查看>>
    Vue踩坑笔记 - 关于vue静态资源引入的问题
    查看>>
    Netty工作笔记0025---SocketChannel API
    查看>>
    Netty工作笔记0027---NIO 网络编程应用--群聊系统2--服务器编写2
    查看>>
    Netty工作笔记0050---Netty核心模块1
    查看>>
    Netty工作笔记0057---Netty群聊系统服务端
    查看>>
    Netty工作笔记0060---Tcp长连接和短连接_Http长连接和短连接_UDP长连接和短连接
    查看>>
    Netty工作笔记0063---WebSocket长连接开发2
    查看>>
    Netty工作笔记0070---Protobuf使用案例Codec使用
    查看>>
    Netty工作笔记0077---handler链调用机制实例4
    查看>>
    Netty工作笔记0084---通过自定义协议解决粘包拆包问题2
    查看>>
    Netty工作笔记0085---TCP粘包拆包内容梳理
    查看>>
    Netty常用组件一
    查看>>
    Netty常见组件二
    查看>>
    netty底层源码探究:启动流程;EventLoop中的selector、线程、任务队列;监听处理accept、read事件流程;
    查看>>
    Netty心跳检测机制
    查看>>
    Netty核心模块组件
    查看>>
    Netty框架内的宝藏:ByteBuf
    查看>>