编写自定义网络堆栈时使用不支持的协议回复

Reply with unsupported protocol when writing custom network stack

我一直在编写自己的带有网络堆栈的 802.11 协议版本。这主要是一种学习体验,可以更深入地了解网络的工作原理。

我的问题是,是否有一个标准来回复客户端设备不支持某种协议?

我有一个 android 设备连接到我的自定义 wifi 设备,并立即在我的 UDP 协议的 DNS 端口发送大量请求。因为我想测试其他协议,所以我非常希望我的 wifi 设备有一种方法可以告诉 android 设备 DNS 不可用并将其降低一点。

提前致谢!

无法按照您想要的方式停止 DNS。但是,仅针对您的测试您可以检查 UDP 消息并找出设备正在寻找的名称。然后更新主机文件(google 操作方法:http://www.howtogeek.com/140576/how-to-edit-the-hosts-file-on-android-and-block-web-sites/)并添加这些名称和一些 localoop IP 地址。这可能对你的测试有用。 另一种可能性是将 DNS 服务器更改为某个本地环路 IP 地址:http://xslab.com/2013/08/how-to-change-dns-settings-on-android/ 同样,这只是为了避免所有 DNS 消息都通过 wifi 连接。

我看不到发送服务不可用回复的可能性。

我在 UDP specification.

中找不到有关此案例的任何信息

一个 part of the DNS specification 假定有多个 DNS 服务器并定义如何处理与它们的通信。这解释了您网络中的部分行为,但没有提供太多如何处理它的信息。

4.2.1 消息 - 格式 - UDP 使用

The optimal UDP retransmission policy will vary with performance of the Internet and the needs of the client, but the following are recommended:

  • The client should try other servers and server addresses before repeating a query to a specific address of a server.
  • The retransmission interval should be based on prior statistics if possible. Too aggressive retransmission can easily slow responses for the community at large. Depending on how well connected the client is to its expected servers, the minimum retransmission interval should be 2-5 seconds.

7.2 解析器实现 - 发送查询

  • If a resolver gets a server error or other bizarre response from a name server, it should remove it from SLIST, and may wish to schedule an immediate transmission to the next candidate server address.

据此,您可以尝试将垃圾发送回客户端,但这是一个 hack 或错误,但错误看起来如何?这样的解决方案假定您了解您不支持的服务。

我相信使用 DHCP 可以避免 DNS 请求。 DHCP 允许指定链接页面中列出的 DNS 服务器。这是我所知道的 LAN 中的 DNS 解析器获取初始 DNS 服务器的常用方法,尽管我在 DNS 规范中没有找到任何相关信息。你可以给 Android - 设备一个带 DHCP 的 DNS 服务器,这样它就不需要尝试查询你的设备。查询您的设备可能是一种后备方法。

除 DNS 之外还有 mDNS,它使用网络中的多播发送查询。这似乎不是您必须使用的协议,因为它使用特殊端口 5353。