第10讲 | UDP协议:因性善而简单,难免碰到“城会玩”

前面讲的IP层属于网络层,接下来我们开始讲传输层。传输层有两个重要的协议,一个是TCP,一个是UDP。对于开发应用的人来讲,最常用的就是这两个协议。

TCP和UDP有哪些区别?

TCP是面向连接的,UDP是面向无连接的。

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

TCP提供可靠交付。通过TCP连接传输的数据保证无差错、不丢失、不重复、按顺序送达。我们知道IP包是不保证可靠的,数据包丢了就丢了,TCP能做到上述的特性,需要做很多额外的工作。UDP继承IP包的特性,不保证不丢失,不保证按顺序到达。

TCP是面向字节流的。即发送的数据当作一个流,没头没尾。IP包本身不是一个流,而是一个个的包。之所以变成流,也是TCP做的事情。UDP继承了IP的特性,基于数据包,一个个的发,一个个的收。

TCP是可以有拥塞控制的。即TCP可以控制收发数据的速度,当网络好的时候快点发,当网络不好的时候慢点发。UDP没有这个特性,应用让我发,我就发。

TCP是一个有状态的服务。简单地讲就是它知道发送了没有,接收了没有,发到哪儿了。UDP是无状态的,发出去就发出去了。

如果说MAC定义了局域网的传输行为,IP层定义了整个网络端到端的传输行为,这两层的特点是:网络传输以包为单位,二层叫帧,网络层叫包,传输层叫段。我们笼统地称为包。包单独传输,自行选路,不保证到达。

UDP包头什么样?

当发送的UDP包到达目标机器后,发现MAC地址匹配,于是就接收,将MAC头取下来,剩下的包传给处理IP层的代码。IP层将IP头取下来,发现目标IP匹配,接下来怎么办?IP包的数据部分给谁呢?

IP头里面有一个8位协议,这个协议标识是TCP还是UDP,我们这里是UDP。我们知道UDP头的格式,然后将数据解析出来。解析出来的数据给谁处理呢?

应用程序无论是使用TCP还是UDP,都要监听一个端口。这个端口就是用来区分应用程序的,根据端口号传输层把数据包交给对应的应用。

UDP的报文格式相比TCP来说,十分简单。

UDP的三大特点:

UDP像小孩子一样,有三大特点:

第一,沟通简单。它相信网络世界是美好的,默认网络是很容易送达的。

第二,轻信他人。它不建立连接,谁都可以给它传数据,也可以传给任何人数据。

第三,不懂变通。不会根据网络情况拥塞控制,就按照自己的方式发。

UDP的三大使用场景

基于UDP的这些特点,可以考虑在以下场景使用:

第一,需要资源少,网络状况好的内网,或对于丢包不敏感的应用。

DHCP就是基于UDP的协议。一般获取IP地址都是内网请求,一次获取不到也没事,还有下一次机会。PXE可以在启动时候安装操作系统,操作系统镜像下载使用TFTP,这个协议也是基于UDP。因为还没有操作系统的时候,客户端拥有的资源少,不适合维护一个复杂的状态机。

第二,不需要建立连接,可以广播的应用。UDP的不面向连接特性,可以承载广播或多播的协议。DHCP就是一种广播的形式,就是基于UDP协议的。VXLAN协议,也用到组播,也是基于UDP协议的。

第三,需要处理速度快,时延低,可以容忍少数丢包,但是即便网络拥塞,也要不退让。UDP简单、处理速度快,不需要重传、保证顺序等复杂操作,所以时延低。

当前许多应用都是要求低时延的,它们不想用TCP的复杂的传输机制,而是应用根据需要实现自己的可靠和连接保证。

由于UDP十分简单,也就给了应用“城会玩”的机会。

基于UDP的“城会玩”的五个例子

1. 网页或者APP的访问

原来访问网页和手机APP都是基于HTTP协议。HTTP协议是基于TCP的,建立连接需要多次交互,很耗时。

QUIC(Quick UDP Internet Connections,快速UDP互联网协议)是Google的基于UDP改进的通信协议,目的是降低网络通信的延迟。QUIC在应用层上,实现快速建立连接、减少重传时延,自适应拥塞控制。

2. 流媒体的协议

直播协议多使用RTMP,RTMP协议是基于TCP的。TCP是严格保证顺序的,前一个包收到了,下一个才能确认,如果前一个没收到,下一个包就是收到了,也得等着。这对直播来讲显然是不合适的。

对于直播来讲,实时性比较重要,宁可丢包,也不要卡顿。

因而,很多应用都基于UDP实现自己的视频传输协议。

3. 实时游戏

游戏对实时性的要求比较高,很多游戏就是在毫秒之间定胜负。

实时游戏的客户端和服务端要建立长连接保证实时传输。服务器维护TCP连接需要维护一些数据结构,所以能够支持的TCP连接数是有限的。由于UDP是没有连接的,在异步IO引入之前,应对海量客户端常常用UDP。

对战游戏,对网络的要求很简单,玩家通过客户端发送给服务器鼠标和键盘行走的位置,服务器处理用户发过来的所有场景,处理完再返回给客户端。如果出现一个数据包丢失,所有事情都停下来等待这个数据包重发,这显然是不合适的。

所以游戏对实时性要求比较高的情况下,采用自定义的可靠的UDP协议,自定义重传策略。

4. IoT物联网

物联网领域的终端资源少,一般都是非常小的嵌入式系统,维护TCP协议i的代价又太大;物联网对实时性的要求也很高。Google推出的物联网协议Thread,就是基于UDP协议的。

5. 移动通信领域

4G网络里,GTP-U是基于UDP的。

小结

  • 如果将TCP比作成熟的社会人,UDP就是头脑简单的小朋友。TCP复杂,UDP简单;TCP维护连接,UDP谁都相信;TCP知进退,UDP愣头青。

  • UDP虽然简单,但有自己的用处。可以在简单的环境、需要多播、应用层自己控制的地方。例如DHCP、VXLAN,QUIC等。

两个思考题:

1. 都说TCP是面向连接的,在计算机看来,怎么样才算一个连接呢?

2. TCP的连接是如何建立的,又是如何关闭的?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值