欢迎光临散文网 会员登陆 & 注册

Godot 网络游戏开基础 - DNS & IP Address

2023-02-12 04:20 作者:紧果呗  | 我要投稿

### 🟠🔵 DNS & IP Address 域名与地址分类

  • - [RFC 791 - IP(Internet Protocol)](https://www.rfc-editor.org/info/rfc791)

  • - [RFC 793 - TCP(Transmission Control Protocol)](https://www.rfc-editor.org/info/rfc793)

  • - [RFC3986 - Uniform Resource Identifier (URI)](https://www.rfc-editor.org/rfc/rfc3986)

IP 地址包含网络标识(网络号)和主机标识(主机号)两部分,用掩码来分割,掩码为 1 的比特位对应网络号。


IP 协议文档 RFC 791 中将 32-bit 得 IP 地址划分成三个类型:

A 类地址最高位为 0,网络号占 7-bit network number,主机地址占 24-bit,共有 128 个 A 类网络。


B 类地址最高位为 10,网络号占 14-bit,主机地址占 16-bit,可以分配 16,384 个 B 类网络。

C 类地址最高位为 110,网络号占 21-bit,主机地址占 8-bit,可以分配 2,097,152 个 C 类网络。

互联网数字分配机构 IANA - The Internet Assigned Numbers Authority 在 RFC 1918 文档中

说明为私有网络预留出了三个 IP 地址块:


除地址 A、B、C 分类外,还可根据传输的消息特征将 IP 地址分为单播、广播或多播。主机使用IP地址进行单播一对一传输、多播一对多传输,或一对全网主机广播的通信。

单播地址是 IP 网络中最常见的,包含单播目标地址的分组发送给特定主机,例如 192.168.1.5 主机向地址为 192.168.1.200 的服务器请求网页。


要发送和接收单播分组 Packet 数据报,IP 分组报头部中必须有一个目标 IP 地址,而以太网帧报头中必须有相应的目标 MAC 地址。IP 地址和 MAC 地址一起将数据传输到特定的目标主机。


如果目标 IP 地址属于另一个网络,则在帧中使用的目标 MAC 地址将改为与源 IP 地址位于同一个网络中的路由器接口的 MAC 地址。


广播分组的目标 IP 地址的主机部分全为 1,这意味着本地网络中的所有主机都将接收并查看该分组数据报。

诸如 ARP 和 DHCP 等很多网络协议都使用广播。例如,对于 C 类 IP 地址,前 24-bit 为网络号,最后8-bit 为主机号,其对应广播地址为 192.168.1.255,主机部分为十进制数 255 或二进制数 11111111:

在以太网帧中,必须包含与 IP 广播地址对应的 MAC 广播地址。在以太网中,MAC 广播地址长48位,其十六进制表示为 FF-FF-FF-FF-FF-FF,全 1 为 MAC 广播地址,主机地址为全 1 即 IP 广播地址。


多播地址让源设备能够将分组报文 Packet 发送给一组设备。属于多播组的设备将被分配一个多播组 IP 地址,多播地址范围为 224.0.0.0~239.255.255.255。由于多播地址表示一组设备,有时被称为主机组,因此只能用作分组的目标地址,源地址总是为单播地址。


远程游戏就是一个使用多播地址的例子,很多玩家通过远程连接玩同一个游戏;另一例子是通过视频会议进行远程教学,其中很多学生连接到同一个教室。


同单播地址、广播地址一样,IP 多播地址也需要相应的多播 MAC 地址在本地网络中实际传送帧。MAC 多播地址以十六进制值 `01-00-5E` 打头,余下的 6 个十六进制位是根据 IP 多播组地址的最后 23 位转换得到的。例如一个 MAC 多播地址可以是 01-00-5E-0F-64-C5。


由于广播方式无论连接到局域网的客户端想不想接收该数据,Server 都会给客户端发送该数据。进而造成客户端数据拥塞,因此引入组播:Server 数据包只发送给指定组内的客户端,而不发送给指定组外的客户端。


互联网络中有两种经典模型,软件开发常用 TCP/IP 为核心的四层模型,IP 地址是核心元素:

传输层及以下,都涉及相关的硬件进行工作,如:

  • - 传输层:四层交换机、四层路由器;

  • - 网络层:三层交换机、路由器;

  • - 链路层:网卡、网桥、以太网交换机;

  • - 物理层:中继器、集线器,网线。

除直接使用 IP 地址外,还有一种更人性化的 IP 使用方式,就是使用域名指代 IP。通过国际域名森林构架和基础网络协议 Domain Name System (DNS) 的支持,用户只需要提供一个域名,就可以通过域名服务系统查询到相应的 IP 地址,这比直接记住 IP 的方式好太多了。

DNS 域名空间使用分布式的解析方案,整个 DNS 架构是一种层次树状结构,这个树状结构称为 DNS 域名空间。

  •  根域 Root Domain 位于域名空间最顶层,一般用一个 “.” 表示。

  •  顶级域 Top Level Domain (TLD),代表组织机构或国家地区,如 net、com、org、edu、gov、mil、cn、jp、hk。

  •  二级域,用来标明顶级域内的一个特定的组织,如 .com.cn .net.cn .edu.cn 等等。

  •  子域 Sub-Domain,二级域下所创建的各级域统称为子域,如 fanyi.baidu.com 前头的"翻译"。

  •  主机 Host,主机位于域名空间最下层,就是一台具体的计算机,如 www、mail 都是具体的计算机名字。

Fully Qualified Domain Name (FQDN) 完全合格域名是指包含所有域名元素的域名表示方式,也是这台主机在域名中的全名,比较少用,比如 www.fanyi.baidu.com。还有一些特殊的域名,比如本地主机用 loalhost 表示 127.0.0.1。


URI's are transferred as strings. The URI's format is defined in 

[http://tools.ietf.org/html/rfc3986](http://tools.ietf.org/html/rfc3986)

整个 DNS 域名查询过程是递归查询过程,从客户端开始,先向本地域名服务器发起查询请求外,即本机操作系统提供的服务,然后,向本地域名服务器,直到根域服务器逐级查询,直到获取最终结果。

IPv6 的推出,相应出现了 inet_pton() 和 inet_ntop() 两个函数,它们支持 IPv4 和 IPv6 地址

的格式转换,即 "ddd.ddd.ddd.ddd" 格式与数值的转换,presentation 和 numeric 之间的转换。


Godot 中用 `IP` 类型来做域名、IP 地址转换,根据操作系统差别,会在内部方法中调用相应的 API:


Godot 网络游戏开基础 - DNS & IP Address的评论 (共 条)

分享到微博请遵守国家法律