乐趣区

关于计算机网络:笔记计算机网络-4-UDP

综述

网络层的 IP 协定为主机之间提供了逻辑通信,而 IP 的服务模型是尽力而为提供服务。这就意味着 IP 尽力在主机之间交付报文,然而它并不做任何保障。不确保报文段的交付,不保障报文段的按序交付,也不保障报文段中数据的完整性。所以 IP 是不牢靠的服务

而运输层 (TCP 和 UDP) 将两个端系统间的 IP 的交付服务扩大为运行在端系统上的两个过程间的交付服务。而 UDP 仅提供了过程到过程的数据交付和过错查看两种服务,所以 UDP 也是一种不牢靠的服务

TCP 和 UDP 的比照

“TCP 是 面向连贯 的,而 UDP 是 无连贯 的”

建设连贯指的是,为了在客户端和服务端保护连贯,而建设肯定的数据结构来保护单方交互的状态,用这样的数据结构来保障所谓的面向连贯的个性。

面向连贯的意思是,在互通之前,面向连贯的协定会先建设连贯,例如 TCP 会进行三次握手,而 UDP 不会。应用 UDP 时,在发送报文之前,发送方和接管方的运输实体之间没有握手,如此 UDP 才被称为是无连贯的。
所以 TCP 和 UDP 的不同之处,次要体现在上面几个方面:

  • 牢靠交付。通过 TCP 传输的数据,无差错、不失落、不反复、并且按序达到。而 UDP 继承了 IP 包的个性,不保障不失落,不保障按程序达到
  • 面向对象不同。TCP 是面向字节流的,发送的时候是一个流,没头没尾。而之所以发送的是流,也是 TCP 本人的状态保护做的事件。然而 UDP 继承了 IP 包的个性,是基于数据包的,一个一个地发,一个一个地收
  • 拥塞管制。TCP 有本人地拥塞管制机制,当它意识到包抛弃了或者是网络不好了,就会依据状况调整本人地行为,例如升高发送速度。而 UDP 没有拥塞管制,只会依据应用层地指令发包,即使是网络环境差,只有下层有指令发包,就会始终发
  • 有无状态。TCP 通过给数据编号,准确地记录了某个数据发送了没有,接管到没有,发送到哪个了,应该接管哪个。而 UDP 则是无状态的,不记录发送的包的信息

UDP 包的构造

UDP 包是无连贯的,那么首次发送 UDP 包时,目标端口号如何得悉?服务器上的服务,应用的是 1024 以内的周知端口号,例如 DNS 服务器,那么源主机发送 UDP 时在目标端口号处填写 53 即可。(然而总感觉这个起因逻辑性不强)

解析 UDP 包之前的动作:接管方收到一个包之后,会先查看目标 MAC 地址和本人的 MAC 地址是否统一。若统一就把 MAC 头部取下来,再把剩下的局部交给 IP 层。IP 层取下 IP 头部之后,若发现目标 IP 地址和本人的 IP 地址雷同,而后再查看 IP 头部里的协定类型,发现 IP 数据包的局部是 UDP 协定。于是就开始解析 UDP 包。将 UDP 包解析进去之后,查看头部的目标端口号,而后把外面的数据交给监听这个端口的某个利用解决。

UDP 的特点

  • 构造简略。UDP 的头部只有源端口和目标端口,以及报文长度和校验和,除此之外就是数据局部了。如此应用层就能够进行准确的管制
  • 它不会建设连贯,尽管有端口号,然而监听时,谁都能够传给他数据,他也能够传给任何人数据,甚至能够同时传给多集体数据
  • 无连贯状态。TCP 须要保护连贯状态,包含接管和发送缓存、拥塞控制参数以及序号与确认号的参数。而 UDP 不保护连贯状态,也就没有这些参数。所以运行在 UDP 之上的服务器个别都能反对更多的沉闷用户
  • 首部开销小。UDP 首部只有 8 个字节,而 TCP 有 20 个字节

UDP 利用场景

  1. 须要资源少,网络状况好的内网;或者是对于丢包不敏感的利用。例如应用 DHCP,获取 IP 个别都是在内网进行,就算数据包没有达到,因为是内网,所以也无影响。还有 PXE 装置操作系统时,应用 TFTP 下载操作系统也是应用的 UDP,因为此时客户机还没有操作系统,领有的资源很少,难以保护较为简单的 TCP
  2. 不须要进行一对一沟通、建设连贯,能够播送的利用。UDP 无连贯,所以能够利用在播送或者多播的协定中。上述提到的 DHCP 就是播送
  3. 须要处理速度快,时延低,能够容忍多数丢包,然而要求即使网络拥塞,也必须发包的时候。UDP 构造简略,处理速度快,不像 TCP 要保障程序、还须要重传,因为这会减少时延。而且 UDP 没有拥塞管制,即使网络情况不好,也会发包。而 TCP 此时就会升高发送速度,使得本来卡顿的利用变得更加卡顿。

因为 UDP 构造简略,所以能够由利用本人做一些工作,并利用 UDP 速度快低时延、构造简略的个性,进而开发自定义的利用:

  1. 网页或 APP 的拜访。原先的网页和 APP 都是基于 HTTP 协定的,而 HTTP 协定是基于 TCP 的。建设连贯时须要屡次交互,就造成了时延较高的状况。此外手机处于挪动过程中,TCP 可能会断开连接,进行重连又会减少时延。而且目前的 HTTP 协定,往往采取多个数据通道共享一个连贯的状况,这样原本为了放慢传输速度,然而 TCP 的严格程序策略使得哪怕共享通道,前一个不来,后一个和前一个即使没关系,也要等着,时延也会加大

    Chrome 中应用的 QUIC 协定,将 UDP 作为撑持运输协定并在 UDP 之上的应用层协定中实现可靠性

  2. 流媒体协定。直播协定多应用 RTMP 协定,而这个协定也是基于 TCP 的。TCP 严格保证数据的程序性对于直播是不适合的,因为老的视频帧丢了其实也就丢了,就算再传过来用户也不在意了,他们要看新的了。如果老是没来就等着,卡顿了,新的也看不了。所以直播,实时性比拟比拟重要,宁肯丢包,也不要卡顿的。当网络不好的时候,TCP 协定会被动升高发送速度,这就使得本来卡顿的视频更加卡顿。实际上,应用层应该马上重传,而不是被动退让

    以下是对于视频帧的阐明。视频都是由一张一张的图片造成的,疾速播放一组图片也就造成了视频,一张图片在视频里叫做一帧。保留视频时,并不是将每一帧都残缺保留,而是保留与上一帧的不同之处,从而升高占用的存储空间。实践上,能够只保留视频的第一帧,当前都保留相较于第一帧的变动。但理论中会隔几帧就保留一整个帧,目标是为了避免传输中呈现谬误。

    这个原理相当于保留 [1000, 1001, 1002, 1003, 1004] 这个数组时,若依照 [1000, 1, 1, 1, 1] 的模式保留,1000 当前的项都保留与前一项之间的大小差距,那么将节俭很多存储空间

  3. 实时游戏。游戏对时效性的要求比拟高,实时游戏中客户端和服务端要建设长连贯,来保障实时传输。保护 TCP 连贯须要在内核保护一些数据结构,因此一台机器可能撑持的 TCP 连贯数目是无限的,当玩家数量增多之后,一台机器就不够用了。而 UDP 是没有连贯的,在异步 IO 机制引入之前,经常是应答海量客户端连贯的策略。另外还是 TCP 的强程序问题,对战游戏中,客户端发送给服务器鼠标和键盘行走的地位,服务器会解决每个用户发送过去的所有场景,解决完再返回给客户端,客户端解析响应,渲染最新的场景展现给玩家。如果呈现一个数据包失落,所有事件都须要停下来期待这个数据包重发。客户端会呈现期待接收数据,然而玩家并不关怀过期的数据。游戏对实时要求较为严格的状况下,采纳自定义的牢靠 UDP 协定,自定义重传策略,可能把丢包产生的提早降到最低,尽量减少网络问题对游戏性造成的影响。
  4. Iot 物联网。一方面,物联网畛域终端资源少,很可能只是个内存十分小的嵌入式零碎,而保护 TCP 协定代价太大;另一方面,物联网对实时性要求也很高,而 TCP 还是因为下面的那些起因导致时延大
  5. 挪动通信畛域。在 4G 网络里,挪动流量上网的协定 GTP-U 就是基于 UDP 的。因为挪动网络协议比较复杂,而 GTP 协定自身就蕴含简单的手机上线下线的通信协议。如果基于 TCP,TCP 的机制就显得十分多余
退出移动版