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阶段。

【T08】避免重新编写TCP的更多相关文章

  1. 用汇编语言(ARM 32位)编写TCP Bind Shell的菜鸟教程

    用汇编语言(ARM 32位)编写TCP Bind Shell的菜鸟教程 来源 https://www.4hou.com/info/news/9959.html Change 新闻 2018年1月19日 ...

  2. QT编写TCP入门+简单的实际项目(附源程序)

    我个人感觉学习QT不需要那么深入的了解,因为我就是编写一下界面来实现理想的功能而已,我不是靠这个吃饭,当然以后要是从事这个方向那就好好深入底层好好学了. 学习QT的TCP:第一步:去百度看看TCP的介 ...

  3. QT编写TCP的问题

    ---->>>TCP编写实战的小项目 TCP套接字:主机(IP+端口) 和 服务器(IP+端口) 进行通讯,需要中间的一个锁套进行  啮合,这个锁套就是套接字的作用. 其中套接字的使 ...

  4. Golang 编写 Tcp 服务器

    Golang 作为广泛用于服务端和云计算领域的编程语言,tcp socket 是其中至关重要的功能.无论是 WEB 服务器还是各类中间件都离不开 tcp socket 的支持. Echo 服务器 拆包 ...

  5. php编写tcp服务器和客户端程序

    这是我从别的地方看到的. 1.修改php.ini,打开extension=php_sockets.dll 2.客户端程序 SocketClient.php <?php set_time_limi ...

  6. php编写TCP服务端和客户端程序

    1.修改php.ini,打开extension=php_sockets.dll 2.服务端程序SocketServer.php <?php //确保在连接客户端时不会超时 set_time_li ...

  7. 动手编写TCP服务器系列之一:日志文件

    前言 在几个月之前,笔者想自己实现一个性能比较良好的基于tcp的服务器.于是断断续续写了个把月,因为还需要找工,还有论文什么的.拖了这么久.现在开辟这样的一个博客,我想记录下自己的思路,也和大家分享自 ...

  8. 29-ESP8266 SDK开发基础入门篇--编写TCP 客户端程序(Lwip RAW模式,非RTOS版,精简入门)

    https://www.cnblogs.com/yangfengwu/p/11456667.html 由于上一节的源码长时间以后会自动断开,所以再做这一版非RTOS版的,咱直接用lua源码里面别人写的 ...

  9. C#高性能TCP服务的多种实现方式

    哎~~ 想想大部分园友应该对 "高性能" 字样更感兴趣,为了吸引眼球所以标题中一定要突出,其实我更喜欢的标题是<猴赛雷,C#编写TCP服务的花样姿势!>. 本篇文章的主 ...

随机推荐

  1. 性能测试十九:jmeter参数优化+排错

    一:参数优化 1,控制台取样间隔的设置,在jmeter/bin/jmeter.properties文件中修改 summariser.interval=10,默认为30s,最低可修改为6s 2,Jvm参 ...

  2. python 全栈开发,Day137(爬虫系列之第4章-scrapy框架)

    一.scrapy框架简介 1. 介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数据.但目前S ...

  3. 【noip模拟赛5】细菌

    描述 近期,农场出现了D(1<=D<=15)种细菌.John要从他的 N(1<=N<=1,000)头奶牛中尽可能多地选些产奶.但是如果选中的奶牛携带了超过 K (1<=K ...

  4. this关键字的用法(包括this语句)

    一:概述 this代表它所在函数所属对象的引用. 简单说:哪个对象在调用this所在的函数,this就代表哪个对象. 二:关于运用的程序 同龄人的比较. 三:关于this语句的使用 用于构造函数之间进 ...

  5. python--yield and generator(生成器)简述

    1.想象一个场景:       设想,我想要100个素数,然后对它们累加求和. 通常的想法是,找一个一次性至少能提供100个素数的工具(函数),让它把这100个素数交给我(用return 一次性返回含 ...

  6. PEP 8 - Python代码样式指南

    PEP 8 - Python代码样式指南 PEP: 8 标题: Python代码风格指南 作者: Guido van Rossum <python.org上的guido>,Barry Wa ...

  7. Pytorch 基础

    Pytorch 1.0.0 学习笔记: Pytorch 的学习可以参考:Welcome to PyTorch Tutorials Pytorch 是什么? 快速上手 Pytorch! Tensors( ...

  8. 我的Java自学之路

    其实在转正之后我就想抽个时间好好的梳理一下我的 Java 上车之路 ,但是一直拖到现在 ,因为有学弟问到 ,所以也就给了我动力 .毕竟答应了人家的事要做到 . 首先要有相应的背景介绍 ,不然说个毛线啊 ...

  9. kali 解决Metasploit拿到shell后显示中文乱码问题

    拿到对方shell后显示的问题如下: 中文乱码解决: chcp 65001 然后 上传下载文件

  10. shell 安装使用VIM

    安装:http://jingyan.baidu.com/article/046a7b3efd165bf9c27fa915.html ubuntu系统: 普通用户下输入命令:sudo apt-get i ...