博客
关于我
计算机网络知识——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/

    你可能感兴趣的文章
    None还可以是函数定义可选参数的一个默认值,设置成默认值时实参在调用该函数时可以不输入与None绑定的元素...
    查看>>
    NoNodeAvailableException None of the configured nodes are available异常
    查看>>
    Vue.js 学习总结(16)—— 为什么 :deep、/deep/、>>> 样式能穿透到子组件
    查看>>
    nopcommerce商城系统--文档整理
    查看>>
    NOPI读取Excel
    查看>>
    NoSQL&MongoDB
    查看>>
    NoSQL介绍
    查看>>
    NoSQL数据库概述
    查看>>
    Notadd —— 基于 nest.js 的微服务开发框架
    查看>>
    NOTE:rfc5766-turn-server
    查看>>
    Notepad ++ 安装与配置教程(非常详细)从零基础入门到精通,看完这一篇就够了
    查看>>
    Notepad++在线和离线安装JSON格式化插件
    查看>>
    notepad++最详情汇总
    查看>>
    notepad++正则表达式替换字符串详解
    查看>>
    notepad如何自动对齐_notepad++怎么自动排版
    查看>>
    Notes on Paul Irish's "Things I learned from the jQuery source" casts
    查看>>
    Notification 使用详解(很全
    查看>>
    NotImplementedError: Cannot copy out of meta tensor; no data! Please use torch.nn.Module.to_empty()
    查看>>
    NotImplementedError: Could not run torchvision::nms
    查看>>
    nova基于ubs机制扩展scheduler-filter
    查看>>