zoukankan      html  css  js  c++  java
  • 计算机网络-tcp的可靠性

    在理想的传输条件下是不需要tcp这类协议来保证可靠传输的,所谓理想是指:
    • 传输过程中数据不会出错、丢失(现在的网络质量很好,这种情况多数不会出现);
    • 不论发送端多块发送,接收端都可以接收(这是主要问题)。
    但真实传输条件远不能达到理想情况,所以才需要tcp来保证可靠传输。
     

    可靠传输的工作原理

    ARQ(automatic repeated request,自动重传请求)保证了:
    • 请求报文段在网络传输过程中出错,接收端通过校验会将其丢弃;
    • 确认报文在网络中延迟、丢失,发送端超时重发,但接收端会丢弃重复的的报文段;
    停止等待ARQ,发送端都需要得到接收端的确认才会发送下一个请求;
    连续ARQ,利用滑动窗口,实现了一次发送多个请求,接收端只需要对连续接收到的最大的请求进行确认即可。如下图,发送窗口大小为5,发送方发送5个报文段后,等待接收方确认,收到确认1后向前滑动,发送6。
     
    滑动窗口和缓存的关系(以字节为单位发送、接收)

    TCP流量控制

    借用滑动窗口很容易实现流量控制

    当发送方收到窗口为0时会启动一个计时器,计时器到期后会向接收端发送一个探测报文,接收方的响应中就会携带窗口大小。
    传输效率的问题,可以使用nagle算法尽量避免小数据传输(假设数据为1b,tcp、ip头部就有40b,再加上帧结构,网络利用率会很低),当然在要求实时性的场景下,小数据也需要随时发送。
     

    TCP拥塞控制

    注意和流量控制相区别,流量控制的对象是某tcp连接的两个端点,而拥塞控制的对象是整个网络(通过控制网络中的端点,最终达到控制网络的目标)。
    经典的拥塞控制算法有慢开始、拥塞避免、快重传、快恢复。发送方会维护一个cwnd(拥塞窗口,只是一个数值),该窗口大小变换与所采用的算法和网络拥塞状况有关,最终拥塞窗口(cwnd)大小会和接收方窗口(rwnd)大小一起作用于滑动窗口大小(发送方滑动窗口上限=Min(cwnd, rwnd))。

  • 相关阅读:
    IE表单拦截器
    使用网站作为WCF服务宿主的几种做法
    Javascript执行效率小结
    Ajax无刷新技术实现省市县三级联动下拉菜单Asp.Net
    序列化DataContractSerializer
    变化多端的列表
    腾讯微信
    Mac OS 和 iOS 操作系统架构
    程序员远离你的细节思维
    ObjectiveC概述
  • 原文地址:https://www.cnblogs.com/holoyong/p/7295655.html
Copyright © 2011-2022 走看看