zoukankan      html  css  js  c++  java
  • 【T08】避免重新编写TCP

    1、有时候为了所谓的性能,我们倾向于使用udp,但是我们又期望数据的传输是可靠的,因此需要在应用层提供可靠性。
    2、可靠、健壮的udp必须提供:
        a、在合理的时间内没有收到回复,进行重传
        b、保证应答和请求的匹配
    3、基于udp协议,在应用层提供可靠性,需要做很多事情,比如:滑动窗口,拥塞控制,对这些事情都进行研究,就相当于重写tcp
    4、因此,如果要可靠的网络传输,就直接使用tcp,而不是使用udp,在应用程序提供可靠性。原因有:
        a、应用程序实现的tcp功能肯定比不上真正的tcp协议,tcp协议实现是大量实现和研究的结果,也在不断改进。
        b、tcp协议的实现在内核中执行,性能更高。
        c、有时候在应用层超时重传并不是用户期望的,比如客户端发送一个转账请求,超时没有收到回复,然后重传,
            导致一次转账请求,在服务端处理了两次,这不是我们所期望的。而tcp的超时重传,在传输层会丢弃收到的重复请求,
            在应用层只收到一次请求。
        因此,使用udp,在应用层提供可靠性并没有什么意义。
    5、因此,udp的使用场景是:对可靠性的要求不是很高,允许丢包,丢包不影响应用程序。
        tcp的使用场景是:对可靠性的要求很高。
    6、如果既想拥有tcp的可靠性,同时减少建立连接和拆除连接的开销,可以使用T/TCP,T/TCP是对tcp的扩展,
        避免了建立连接的三次握手,同时缩短拆除连接时的TIME_WAIT阶段。
    
  • 相关阅读:
    Java安全之Filter权限绕过
    Java学习之struts2使用
    Java学习之Hibernate框架使用
    Java学习之Maven使用
    .Net Core3.1中SameSite的使用方法、遇到的问题以及解决办法
    .Net Core 3.1简单搭建微服务
    在VM虚拟机中安装FTP服务
    Hyper-V中的虚拟机(Centos)安装FTP服务
    Docker相关操作
    .Net Core 3.1 服务端配置跨域
  • 原文地址:https://www.cnblogs.com/nzbbody/p/6389596.html
Copyright © 2011-2022 走看看