UDP Learning

Overview

UDP, User Datagram Protocol,是一种不可靠的、无连接的协议,相比于TCP中的 建立连接/数据传输/释放连接 的三个步骤,在 UDP 中不需要如此麻烦的连接建立来传输数据,而是直接传输,同时 UDP 也没有复杂的报文段首部和控制位,而是仅仅简单的加上了源端口和目标端口和其他一些东西以供数据传输。

相比于 TCP 的可靠传输,UDP 更看中的是传输的效率。在 UDP 中,数据段允许被抛弃而不是像 TCP 中需要应答和重新传输数据段,这降低了延迟。同时,在 UDP 中没有差错检测等机制,能够提高更低的延迟和更高的带宽,因此在流媒体(比如视频点播之类的服务)中,UDP 会更加广泛的使用。

UDP Header

UDP 的数据段首部只有仅仅 8Byte,相比 TCP 的 20Byte - 60Byte 来说节省了许多的首部信息,在 UDP 首部中由以下的几个信息组成:

UDP Header

  1. 源端口:报文段发送的源端口,16bits,用以指示该数据段的发送方
  2. 目的端口:报文段发送的目的端口,16bits,用以知识该数据段的接收方
  3. 长度:报文段的长度,包括数据部分和UDP首部部分
  4. 检验和:和 TCP 中相同,都是为了检验首部的正确性(但并不是百分百能够保证检测出错误)

需要注意的是,在 UDP 中,检验和计算不是强制性的,UDP 不提供错误检测和流量控制,因此,UDP 依赖于 IP 和 ICMP 进行错误报告。不进行流量控制说明 UDP 不会像 TCP 一样对上层应用传输的数据进行分片传输,而是上层应用想要传输什么就直接传输什么,因此,在 UDP 协议中,上层会尽量把控好传输的数据长度。

2 UDP Applications

  1. 像 NTP(Network Time Protocol)、DNS(Domain Name Service)、TFTP 等都是基于 UDP 的。
  2. 一些路由表更新操作协议(比如RIP)也使用了 UDP
  3. DHCP(Dynamic Host Configuration Protocol)也使用 UDP 进行工作,主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段

3 NAT

NAT, Network Address Translator,网络地址转换

NAT 允许私有IP地址来连入互联网(私有 IP 地址指的是 10.0.0.0 - 10.255.255.255 / 172.16.0.0 - 172.31.255.255 / 192.168.0.0 - 192.168.255.255)。NAT 是一种解决IP地址资源耗尽的方案,因为在NAT中规定了内网主机统一访问的IP,即内网的多台主机在因特网的其他主机看来都是相同的IP地址,只要访问这个IP地址就能够接触到其中的主机。

通过在路由器上配置 NAT,会生成一个 NAT Table,将 Private IP Address 映射为可以在因特网上传输的地址。网络地址转换 (NAT) 是一个过程,其中一个或多个本地 IP(或者说内网IP) 地址被转换为一个或多个全局 IP 地址,反之亦然,以便为本地主机提供 Internet 访问。此外,它还进行端口号的转换,即在将被路由到目的地的数据包中用另一个端口号屏蔽主机的端口号。然后在 NAT 表中生成对应的 IP 地址和端口号条目(这项技术通常被称为PAT, Port Address Translation,是一种NAT的进化版,能够通过运用同一个IP的不同端口来实现更加好的节约IP地址)。 NAT 通常在路由器或防火墙上运行。

NAT 运行的原理是通过在路由器上配置 NAT,实现由外网到内网的 IP 地址转换,当一个 IP数据报传送到该路由器上的时候,路由器根据NAT Table将映射的公网IP转为内网IP(即更改目的IP地址)或者将内网IP(即源IP地址)变为NAT Table映射的公网IP,这两种转换主要取决于是内网的主机访问外网的主机还是相反。

后面会介绍静态NAT和动态NAT,在动态NAT中,如果地址池中的IP地址被用完,那么内网主机就不可被访问,此时会向发送IP数据报的主机发送一个ICMP-主机不可达数据报。

NAT

3.1 Static NAT

静态 NAT,通过手动指定内部本地地址和内部全局地址映射关系来映射主机,是一种一对一的确定关系,缺点:每一台主机都需要一个内部全局的地址,这样是十分消耗IP地址的,对于一个公司来说可能没办法购买如此多的IP地址,同时,如果新增新的主机,那么就需要配置新的IP地址,其实也是十分不方便的。

3.2 Dynamic NAT

通过配置一个 地址池 来动态分配映射关系,在地址池中预先存放了一些能够被映射的内部全局IP地址,当某个主机需要传输IP数据报的时候,就在地址池中选择一个没有被使用的内部全局地址分配给该主机,此时该地址就无法再被其他的内部主机使用。因此,者是一种先来先服务的关系,如果地址池中的 IP 地址被用完那么就无法为后续的主机分配内部全局地址,此时传输的IP数据包只能够被丢弃。

3.3 PAT

PAT,也叫做 NAT Overload,是为了解决上述所说的对每个内网的主机都需要一个内部全局地址,这是一个IP地址的浪费,也是一个极大的开销,在PAT中,将IP映射变成了端口映射,即原先可能映射到不同IP地址,现在变成了映射同一个IP地址的不同端口。但我们知道,路由器是一个第三层设备,端口是在第四层才做规定的,那么路由器是如何做到修改这个源端口(或者目的端口)的呢?

实际上就是直接操作IP数据报的数据部分,在TCP或者UDP数据段中,源端口和目的端口其实就在开始的4Byte中,路由器只要修改一下这四个Byte即可。

3.4 NAT address types

  1. Inside Local Address(内部本地地址):内网 IP 地址,是私有的地址,通常不是服务提供商分配的IP地址,只能够是以下的三种范围之内:
    1. 10.0.0.0 - 10.255.255.255
    2. 172.16.0.0 - 172.31.255.255
    3. 192.168.0.0 - 192.168.255.255
  2. Inside Global Address(内部全局地址):注册 IP 地址,对外部展示的内部地址
  3. Outside Local Address(外部本地地址):这是本地网络中目标主机经过转换后的实际IP地址。
  4. Outside Global Address(外部全局地址):由主机所有者分配的 IP 地址。通常是注册地址。
文章作者: ZY
文章链接: https://zyinnju.com/2022/06/05/UDP-Learning/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ZY in NJU