浅谈TCP的发展和UDP的优化(1)

一. 前言

  UDP和TCP是我们常用的网络通信协议,两者的区别导致了其不同的应用场景,两者的优缺点互补的特点导致了二者互相借鉴优化,从而出现了可靠UDP和TCP的优化算法。这里简单的记录个人在学习UDP/TCP的过程中的一些感想,并简单的做一个知识总结,不完善、错误的地方会逐步改进不断更新。

  本篇介绍UDP和TCP的特点以及他们为何如此设计,后文逐步介绍TCP30年以来的优化、发展过程以及可靠UDP的发展,最后给出一些个人对于使用、开发可靠UDP的经验和感想。

二.UDP和TCP的特点及设计思路

  说到UDP和TCP的优缺点,大部分人都能给出答案(这也是面试常见的一个问题,划重点):

  1. 基于连接与无连接
  2. 对系统资源的要求(TCP较多,UDP少)
  3. UDP程序结构较简单
  4. 流模式与数据报模式
  5. TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证

  对于TCP,很多人直观的感觉就是复杂的状态机,较长的包头,怎么优化也做不好的拥塞控制算法,各种定时器,重传的设计等等,这里从开发者的角度谈一下为什么要做这些设计,比起死记硬背这样也许更易于理解和记忆,也更容易对其问题进行分析和优化。

  首先我们要知道TCP即传输控制协议,要做的核心思想就是可靠传输,即可以控制的传输。因此,我们需要解决以下几个问题:

  1. 是否收到,是否回复,以及包的正确性和顺序性需要得到保证
    针对这个问题,TCP
    (1)采用了三次握手保证成功建立连接
    (2)在包头部分加入序号和标记位,用以握手、挥手、数据的发送,并且可以记录包的正确性和顺序
    (3)设计了重传定时器用以完成重传操作,通过ACK的收到来判断是否丢包,丢包则重传
    (4)通过滑动窗口来允许一定的乱序同时提高传输速率

  2. 若网络拥塞如何及时处理
    针对这个问题,TCP
    (1)设置了滑动窗口和拥塞窗口,通过拥塞窗口大小的控制来调节传输速率
    (2)采用了慢开始、快恢复以及后续各种优化的拥塞控制算法来进行拥塞处理
    (3)设计缓冲区队列和缓冲区算法

  3. 若发生网络断开如何处理
    针对这个问题,TCP
    (1)设计坚持定时器处理零窗口通知
    (2)设计保活计时器探测客户端状态
    (3)对于正常断开过程采用四次挥手完成
    (4)对于四次挥手设计了时间等待计时器

  关于每一点的具体内容就不做展开介绍了,可以阅读TCP/IP详解深入学习。TCP的复杂性来源于其既要保证可靠又要尽可能提高性能,而往往越是复杂的东西问题就越多,这也就带来了TCP不断地优化以及采纳TCP优点而不带其缺点的可靠UDP的研究工作。

三. 拥塞控制

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

三.总结

  本文较为简单的总结了TCP和UDP的特点,之后将会对TCP的优化过程进行梳理。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ch_ty

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值