TCP与UDP的爱恨情仇

很多人都把TCP与UDP拿来比较,那我们今天就来说说他们之间的爱恨情仇!

再奔入主题之前,我们先来看一张图

 

 首先,从这张图中可以发现,tcp、udp属于传输层,那我们就聊聊吧!

首先,我们从以下这几个方面聊:

第一:是什么?

第二:解决了什么问题?

第三:应用场景是什么?

第四:TCP的生命周期?

那我们就开始解答这三个问题吧

我们从广义上来说:

         1) TCP 其实是一个有状态服务(通俗地讲就是有脑子的,里面精确地记着发送了没有,接收到没有,发送到哪个了,应该接收哪个了,错一点儿都不行),TCP头包括:目标端口、源端口、序号、确认序号;

 

        主要有以下这几种特点:

        1、TCP 是面向字节流的,发送的时候发的是一个流,没头没尾;

        2、TCP 提供可靠交付。通过 TCP 连接传输的数据,无差错、不丢失、不重复、并且按序到达;

        3、TCP 是可以有拥塞控制的,它意识到包丢弃了或者网络的环境不好了,就会根据情况调整自己的行为,看看是不是发快了,要不要发慢点;

       2) 而UDP 则是无状态服务(通俗地说是没脑子的,应用让我发多少就发多少,发出去就发出去了);它的请求头只有源端口、目标端口(为什么只有这两个,我们从他的特性来分析);

        主要有以下特点:

        1、继承了 IP 的特性,基于数据报的,一个一个地发,一个一个地收;

          (特性:IP 包可不是一个流,而是一个个的 IP 包)

        2、UDP 继承了 IP 包的特性,不保证不丢失,不保证按顺序到达。

          (IP特性:IP 包是没有任何可靠性保证的,一旦发出去,就像西天取经,走丢了、被妖怪吃了,都只能随它去)

        3、像TCP本身是可以有拥堵控制的,而UDP则不会,它会无头脑的听从应用命令;

接下来,我们通过应用场景来聊解决了什么问题,俗话说,不在业务场景下聊技术,都是在耍流氓;

        我们从他们的特性分析,像UDP他是一种无状态,无感知的协议,需要资源少,在网络情况比较好的内网,或者对于丢包不敏感的应用,所以它会适用于什么场景呢? 对,像视屏,实时游戏应用,他们需要处理速度快,时延低,可以容忍少数丢包,比如我们看个视频,突然卡住了,丢了几帧,其实看视频的人不会有感知,如果连续丢,就会有感知了;

        TCP在我们工作中就会有很多场景,比如:工作中的HTTP请求,HTTPS请求,包括SpringCloud的Feign,他们的底层都是TCP协议,为什么他们对包的要求性非常高,不言而喻,大家都知道,这里我就不过多解释了;

既然我们工作中经常用到TCP,接下来,那我们就细聊一下它;

除了以上我们聊过的TCP相关知识,大家还能想到什么?对,生命周期;TCP的生命周期相对复杂;他需要三次握手四次挥手,但是大家知道为什么是三次握手四次挥手吗?为什么不是一次或者两次?

        如果一次握手,A发起建立连接,B拒绝连接,A不知道,则连接失败;

        如果两次连接,如果A请求建立连接,网络包一入网络深似海,可能走丢可能迷路,A一直接收不到回应,一直重发,过了一段时间,B接收到了迷路的网络包,B就以为建立了连接,但是此时A可能已经挂了,所以两次建立也不成立;

        三次连接,如果A请求建立连接,同样会发出请求连接包,当B接收到了A请求的网络包,会告诉A,我愿意建立连接,给他发送回复包;

       A接收到之后就知道B愿意跟他建立连接;所以没有必要四次五次的握手;

四次挥手也是同样的道理;

建立连接成功后,以下问题我们应该如何处理:

如果建立连接之后,长时间不发数据,如何处理?

开启 keepalive 机制,即使没有真实的数据包,也有探活包

如何保证B接收到的是A发出的网络包?

TCP头包有端口

如何保证这三个包是同一组网络包的?

通过序号(序号是随着时间的变化生成的)

如何维护连接?

双方都会建立一个状态机;

四次挥手还有很多问题:

如果A告诉B想要断开连接,B回复好的之后,B又告诉A我也要断开,直接断开,A还会重复回复B,如何处理?

如果A直接跑路了,A的端口就会空出来,被其他应用占用,则新的应用很可能接收到B的回复包,如何处理?等等一系列问题;等我们下次再一起讨论;

这是本人对UDP、TCP的见解,如有误差,欢迎指正;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值