UDP 和TCP的区别

缘起

1、什么是一对一 什么是一对多?
2、tcp为什么是三次握手四次挥手?为什么不是别的次数
3、每次握手和挥手都是做了什么操作?
4、为什么HTTP是基于tcp的 可以基于udp么?
5、什么是连接?为什么tcp是面相连接的udp则不是?

连接是什么?

是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的状态,
用这样的数据结构来保证所谓的面向连接的特性

三次握手

四次挥手

建立连接有什么特征表现?

1、tcp是面向字节流的,没头没尾,这也是导致粘包和拆包的问题,udp是发送ip包

2、tcp支持拥塞控制,会根据网络情况去调整自己的发送行为

3、tcp是有状态的服务 会标记是否发送和是否接受,udp则是无状态的,不知道是否接受到了,

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

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

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

udp使用的场景
概览
  1. 需要资源少,在网络情况比较好的内网,或者对于丢包不敏感的应用

  2. 不需要一对一沟通,建立连接,而是可以广播的应用

    UDP的不面向连接的功能,可以使得可以承载广播或者多播的协议。DHCP就是一种广播的形式,就是

    基于UDP协议的

  3. 需要处理速度快,时延低,可以容忍少数丢包,但是要求即便网络拥塞,也毫不退缩,一往无前的时候

具体例子
  1. QUIC (全称 Quick UDP Internet Connections**,快速UDP互联网连接)是Google提出的一种基

于UDP改进的通信协议,其目的是降低网络通信的延迟,提供更好的用户互动体验。QUIC在应用层上,会自己实现快速连接建立、减少重传时延,自适应拥塞控制

  1. 流媒体的协议

    直播协议多使用RTMP,而这个RTMP协议也是基于TCP的。TCP的严格顺序传输要保证前一个收到了,下一个才能确认,如果前一个收不到,下一个就算包已经收到了,在缓存里面,也需要等着。对于直播来讲,这显然是不合适的,因为老的视频帧丢了其实也就丢了,就算再传过来用户也不在意了,他们要看新的了,如果老是没来就等着,卡顿了,新的也看不了,那就会丢失客户,所以直播,实时性比较比较重要,宁可丢包,也不要卡顿的。另外,对于丢包,其实对于视频播放来讲,有的包可以丢,有的包不能丢,因为视频的连续帧里面,有的帧重要,有的不重要,如果必须要丢包,隔几个帧丢一个,其实看视频的人不会感知,但是如果连续丢帧,就会感知了,因而在网络不好的情况下,应用希望选择性的丢帧。还有就是当网络不好的时候,TCP协议会主动降低发送速度,这对本来当时就卡的看视频来讲是要命的,应该应用层马上重传,而不是主动让步。因而,很多直播应用,都基于UDP实现了自己的视频传输协议。

  2. 实时游戏

    游戏有一个特点,就是实时性比较高。快一秒你干掉别人,慢一秒你被别人爆头,所以很多职业玩家会

    买非常专业的鼠标和键盘,争分夺秒。

    因而,实时游戏中客户端和服务端要建立长连接,来保证实时传输。但是游戏玩家很多,服务器却不

    多。由于维护TCP连接需要在内核维护一些数据结构,因而一台机器能够支撑的TCP连接数目是有限

    的,然后UDP由于是没有连接的,在异步IO机制引入之前,常常是应对海量客户端连接的策略。

    另外还是TCP的强顺序问题,对战的游戏,对网络的要求很简单,玩家通过客户端发送给服务器鼠标和

    键盘行走的位置,服务器会处理每个用户发送过来的所有场景,处理完再返回给客户端,客户端解析响

    应,渲染最新的场景展示给玩家。

    如果出现一个数据包丢失,所有事情都需要停下来等待这个数据包重发。客户端会出现等待接收数据,

    然而玩家并不关心过期的数据,激战中卡1秒,等能动了都已经死了。

    游戏对实时要求较为严格的情况下,采用自定义的可靠UDP协议(🤔 udp不是需要建立连接的吗),自定义重传策略,能够把丢包产生的延迟降到最低,尽量减少网络问题对游戏性造成的影响

    1. IOT 物联网

      一方面,物联网领域终端资源少,很可能只是个内存非常小的嵌入式系统,而维护TCP协议代价太大;

      另一方面,物联网对实时性要求也很高,而TCP还是因为上面的那些原因导致时延大。Google旗下

      的Nest建立Thread Group,推出了物联网通信协议Thread,就是基于UDP协议的

    2. 移动通信领域

      在4G网络里,移动流量上网的数据面对的协议GTP-U是基于UDP的。因为移动网络协议比较复杂,

      而GTP协议本身就包含复杂的手机上线下线的通信协议。如果基于TCP,TCP的机制就显得非常多余,

在这里插入图片描述

UDP没有服务端和客户端的概念

参考

https://mp.weixin.qq.com/s/iQgqmCJp9FBqgxbgJ7wHJg

参考

http://www.52im.net/thread-560-1-1.html
极客时间趣谈网络协议

### UDP TCP 的主要区别 #### 协议性质 UDP 是一种无连接的协议,而 TCP 则是一种面向连接的协议。这意味着,在使用 UDP 进行通信时,双方不需要事先建立连接即可直接发送数据;而在使用 TCP 时,则需要通过三次握手来建立可靠的连接之后才能开始数据交换[^2]。 #### 可靠性 TCP 提供了一种可靠的数据传输服务,具备确认机制、重传丢失的数据包以及按序组装等功能,从而确保了数据能够完整且有序地抵达目标设备。相比之下,UDP 并不具备这些特性,因此它是不可靠的——即无法保证数据一定能被成功送达或者按照原始顺序重组。 #### 数据处理方式 在数据处理方面存在显著差异: - **UDP** 面向的是应用层提交过来的一个个独立完整的报文段,并将其原封不动地交给下一层去传送,既不会拆分也不会合并多个消息成为更大的单位后再发出[^3]。 - 而 **TCP** 将来自高层的应用程序所递交下来的一系列大小不定的数据块视为连续不断的字节流来进行管理与调度,最终可能会依据实际状况决定如何分割成若干部分分别封装进不同的帧里边再往外推送出去[^3]。 #### 性能表现 由于缺乏诸如流量控制之类的额外功能模块支持的缘故使得基于 UDP 实现起来往往要比采用传统意义上的全功能型解决方案更加高效快捷很多倍以上甚至更多数量级的程度上有所体现出来。另外一方面来看待这个问题的话也可以发现当涉及到某些特定应用场景比如说在线游戏或者是VoIP语音通话之类的服务项目当中经常会优先考虑选用前者作为底层支撑技术方案之一就是因为其本身固有的低延迟优势所在之处非常明显突出显示了出来[^4][^5]。 #### 系统资源消耗 从系统资源占用角度来看待两者之间的对比分析结果表明如果单纯只是为了满足基本需求而已那么毫无疑问应该倾向于选择后者因为它几乎没有什么特别苛刻的前提条件限制因素存在于此同时还能有效减少不必要的内存空间浪费现象发生几率达到优化整体性能指标的目的效果最佳状态水平线附近徘徊波动变化趋势平稳正常范围内运行良好稳定持续时间较长周期性强等特点特征鲜明独特不易混淆误判错误识别率较低准确性较高值得信赖依靠程度高用户满意度评价反馈意见正面积极向上充满希望期待未来发展前景广阔无限可能等待探索挖掘深入研究学习借鉴吸收采纳运用实践推广普及开来形成规模效应带来巨大经济效益社会效益双重收益回报丰厚可观令人欣喜若狂欢呼雀跃不已为之振奋鼓舞士气高涨斗志昂扬勇往直前不断进取追求卓越成就非凡事业辉煌灿烂明天更美好! ```python # 示例代码展示两种协议创建socket的方式 import socket def create_tcp_socket(): tcp_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建TCP套接字 return tcp_sock def create_udp_socket(): udp_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 创建UDP套接字 return udp_sock ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值