udp重发机制_UDP 协议

86219b5e521f42d42d536442bc44b7df.png

UDP 简介

UDP的数据包同样分为头部(header)和数据(payload)两部分。UDP是传输层(transport layer)协议,这意味着UDP的数据包需要经过IP协议的封装(encapsulation),然后通过IP协议传输到目的电脑。随后UDP包在目的电脑拆封,并将信息送到相应端口的缓存中。

UDP 头部

UDP协议的首部有8个字节,一共四个字段,每个字段的长度都是2个字节,16比特(位)。

4ecaecbf9a41dd8c86a4db8e1d1e8e1e.png

1、16位源端口号:发送方的端口号,不用的话可以置0

2、16位目的端口号:接受方的端口号。

3、16位UDP长度:首部 + 数据的总长度,单位为字节。也就是说一个UDP能传输的数据最大长度是64K(包含UDP首部,因为udp包头有2个byte用于记录包体长度. 2个byte可表示最大值为: 2^16-1=64K-1=65535;udp包头占8字节, ip包头占20字节, 65535-28 = 65507);然而我们需要传输的数据超过64K,就需要在应用层手动的分包,多次发送,并在接收端手动拼装。

4、16位UDP检验和:是为了接收方进行数据校验设计的,如果校验不通过的话数据会被丢弃,后面会单独讲解。当源主机不想计算校验和,则直接令该字段全为0。

checksum的算法与IP协议的header checksum算法相类似。然而,UDP的checksum所校验的序列包括了整个UDP数据包,以及封装的IP头部的一些信息(主要为出发地IP和目的地IP)。这样,checksum就可以校验IP:端口的正确性了。在IPv4中,checksum可以为0,意味着不使用checksum。IPv6要求必须进行checksum校验。

UDP 特点

1、无连接:UDP是无连接的协议,他在进行数据传输之前不需要先建立连接,也没有各种重传机制、拥塞控制和流量控制,所以传输速度很快,消耗很低,延迟小,数据传输效率高,适合对可靠性要求不高的应用程序,或者可以保障可靠性的应用程序,如DNS、TFTP、SNMP等。

2、不可靠:只负责数据的发送,不关心数据是否送达,没有确认机制,主机收到数据也不会有响应

3、分组首部开销小,TCP的首部是20字节,UDP的首部是8字节

4、面向报文的:TCP(面向连接的传输控制协议)是面向字节传输,而UDP是面向报文传输,对于应用层交下来的报文段不进行拆分合并,直接保留原有报文段的边界然后添加UDP的首部就交付给网络层。不论报文的长短,UDP都不会进行处理。因此为了避免报文段过短降低传输效率以及报文段过长导致网络层对IP数据进行分片操作,应用层应该选择合适长度的报文交付给运输层的UDP。

基于UDP的应用场景

1、网页或者 APP 的访问

原来访问网页和手机 APP 都是基于 HTTP 协议的。HTTP 协议是基于 TCP 的,建立连接都需要多次交互,对于时延比较大的目前主流的移动互联网来讲,建立一次连接需要的时间会比较长,然而既然是移动中,TCP 可能还会断了重连,也是很耗时的。而且目前的 HTTP 协议,往往采取多个数据通道共享一个连接的情况,这样本来为了加快传输速度,但是 TCP 的严格顺序策略使得哪怕共享通道,前一个不来,后一个和前一个即便没关系,也要等着,时延也会加大。而 QUIC(全称 Quick UDP Internet Connections,快速 UDP 互联网连接)是 Google提出的一种基于 UDP 改进的通信协议,其目的是降低网络通信的延迟,提供更好的用户互动体验。

2、流媒体的协议

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

3、实时游戏

游戏有一个特点,就是实时性比较高。快一秒你干掉别人,慢一秒你被别人爆头,所以很多职业玩家会买非常专业的鼠标和键盘,争分夺秒。因而,实时游戏中客户端和服务端要建立长连接,来保证实时传输。但是游戏玩家很多,服务器却不多。由于维护 TCP 连接需要在内核维护一些数据结构,因而一台机器能够支撑的 TCP连接数目是有限的,然后 UDP 由于是没有连接的,在异步 IO 机制引入之前,常常是应对海量客户端连接的策略。另外还是 TCP 的强顺序问题,对战的游戏,对网络的要求很简单,玩家通过客户端发送给服务器鼠标和键盘行走的位置,服务器会处理每个用户发送过来的所有场景,处理完再返回给客户端,客户端解析响应,渲染最新的场景展示给玩家。如果出现一个数据包丢失,所有事情都需要停下来等待这个数据包重发。客户端会出现等待接收数据,然而玩家并不关心过期的数据,激战中卡 1 秒,等能动了都已经死了。游戏对实时要求较为严格的情况下,采用自定义的可靠 UDP 协议,自定义重传策略,能够把丢包产生的延迟降到最低,尽量减少网络问题对游戏性造成的影响。

4、IoT 物联网

一方面,物联网领域终端资源少,很可能只是个内存非常小的嵌入式系统,而维护 TCP 协议代价太大;另一方面,物联网对实时性要求也很高,而 TCP 还是因为上面的那些原因导致时延大。Google 旗下的 Nest 建立 Thread Group,推出了物联网通信协议 Thread,就是基于UDP 协议的。

5、移动通信领域

在 4G 网络里,移动流量上网的数据面对的协议 GTP-U 是基于 UDP 的。因为移动网络协议比较复杂,而 GTP 协议本身就包含复杂的手机上线下线的通信协议。如果基于 TCP,TCP 的机制就显得非常多余。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: IP协议(Internet Protocol)是互联网中最基本的协议之一,它负责将数据包从发送方传输到接收方。IP协议是无连接的、不可靠的,它只关注将数据包从一个网络节点传输到另一个网络节点的问题,而不关心数据包传输的可靠性和顺序。 TCP协议(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,它基于IP协议实现,用于在发送端和接收端之间建立可靠的数据传输连接。TCP协议通过三次握手来建立连接,通过数据包确认和重传机制来保证数据的可靠传输。 UDP协议(User Datagram Protocol)是一种无连接的、不可靠的传输协议,它也基于IP协议实现,但与TCP协议不同,UDP协议没有建立连接的过程,也没有确认和重传机制,因此传输速度较快,但数据传输的可靠性较低,容易出现数据丢失或乱序。UDP协议通常用于实时性要求较高的应用,比如视频直播、网络游戏等。 ### 回答2: IP协议、TCP协议UDP协议是互联网通信中常用的协议。 IP协议是互联网协议族中最核心的协议之一,它负责实现在网络中的数据传输与路由功能。IP协议定义了一种网络协议体系结构,使得全球互联网能够互相通信。它通过为每个设备分配一个唯一的IP地址来确保数据包在网络中的正确传递,它是互联网协议通信的基础。 TCP协议是传输控制协议,也是互联网协议族中非常重要的一个协议。TCP协议提供面向连接的可靠数据传输服务。它通过建立起连接、分段、重发机制来保证数据的可靠传输,同时还能够进行流量控制和拥塞控制,使得数据能够按照顺序正确地到达目的地。 UDP协议是用户数据报协议,也是互联网协议族中的一个重要协议UDP协议提供一种无连接、不可靠的数据传输服务。与TCP不同,UDP不会对数据包的传输进行确认和重发,因此传输速度更快,但也更容易丢包。UDP适用于对实时性要求较高,但对数据可靠性要求不高的应用,例如音频和视频流媒体等。 总结来说,IP协议是互联网协议通信的基础,负责数据的传输和路由功能。TCP协议提供可靠的连接服务,确保数据的可靠传输。UDP协议提供快速的无连接服务,适合对实时性要求较高的应用。 ### 回答3: IP协议(Internet Protocol)是一种网络通信协议,它负责在互联网上传输数据包,使得数据可以从发送者到接收者进行传递和路由。IP协议提供了包括IP地址分配、分组封装、错误控制等功能。它是互联网的核心协议之一,使得不同的计算机可以在全球范围内进行通信。 TCP协议(Transmission Control Protocol)是一种可靠的传输协议,它是基于IP协议的,通过将数据切割成小块进行传输,并在接收方进行校验和确认,确保数据的可靠性和顺序性。TCP协议还负责网络拥塞控制和流量控制,以及错误恢复和重传等功能。它适用于大多数需要可靠传输的应用,如网页浏览、文件下载等。 UDP协议(User Datagram Protocol)是一种无连接的传输协议,它也是基于IP协议的,但不提供数据包的可靠性和顺序性。UDP协议通过将数据包封装成数据报发送,没有建立和维护连接的过程,因此传输效率较高。UDP适用于那些对可靠性要求不高,但对传输速度和效率要求较高的应用,如实时视频流、游戏等。 总结来说,IP协议是负责数据包传输的底层协议,而TCP协议UDP协议是基于IP协议的传输协议。TCP协议提供可靠性和顺序性,适用于对数据传输准确性有要求的应用,而UDP协议则注重传输速度和效率,适用于对实时性有要求的应用。根据不同的需求,可以选择使用TCP协议UDP协议来进行数据传输。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值