【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阶段。
posted on 2017-02-11 19:19  Andy Niu  阅读(272)  评论(0编辑  收藏  举报