zeroconf研究笔记(1) ——zeroconf初步认识

2023-10-31

原文:http://blog.cnnbboy.net/?cat=95

最近对zeroconf协议进行了一系列深入的研究,深深地被这一技术折服,在1999年就出现的该协议,在技术的应用上已经走向成熟,走向向大众普及之路了。
apple的airplay,airprint都是依赖了zeroconf的基础上,才展现出强大的功能。

zeroconf介绍

Zeroconf全称为Zero configuration networking,中文名则为零配置网络服务规范,是一种用于自动生成可用IP地址的网络技术,不需要额外的手动配置和专属的配置服务器。

“零配置网络服务”的目标,是让非专业用户也能便捷的连接各种网络设备,例如计算机,打印机等。整个搭建网络的过程都是通过程式自动化实现。如果没有zeroconf,用户必须手动配置一些服务,例如DHCP、DNS,计算机网络的其他设置等。这些对非技术用户和新用户们来说是很难的事情。

使用例子来形象地说明:
用户拥有一台apple tv和一台iPhone4s,那之只要都连入到同一个无线局域网内,iphone4s就会自动找出apple tv,那么在播放音乐或者视频时候,用户只要点击推送,就可以讲音乐和视频推送到apple tv上播放。

zeroconf协议的实现

zeroconf是协议,因此对应的是各种产品的实现,现在最主要的实现是apple的Bonjour和开源的Avahi。
这两套实现在程序接口上是可以兼容的,因此可以对zeroconf技术依赖的产品,可以使用兼容的开发接口,而不需要考虑到底是使用了Bonjour还是avahi。

Apple的zeroconf协议技术实现 – Bonjour

Bonjour是由apple实现的zeroconf协议的技术产品,Bonjour来源于法语,意思为你好。
使用了zeroconf技术的产品和服务,在网络中自动传播它们自己的服务信息并聆听其它设备的服务信息,设备之间就象在打招呼,这也是命名为Bonjour(法语:你好)的原因。
Bonjour是一套跨平台的产品,可以使用在Mac,Linux和Winows,以及是兼容POSIX的操作系统上,并且apple已经將其开源,所以也可以方便应用于各个产品。
Bonjour是由纯C编写的,同时也提供了Java的接口,目前如python或者ruby语言也可以很方便地调用使用它。

开源的zeroconf协议技术实现 – Avahi

Avahi 是Zeroconf规范的开源实现,基本是使用在Linux和FreeBSD上。包含了一整套多播DNS(multicastDNS)/DNS-SD网络服务的实现,使用的发布授权是LGPL。
在程序接口上,它使用DNSD与apple的Bonjour进行兼容,方便原来使用Bonjour的产品进行迁移。
目前在绝大多数的Linux发行版本中,都讲avahi作为系统启动进程,并且大量的服务也依赖于avahi。
Avahi也是用纯C编写的,同样也可以使用诸如Java的语言去调用使用开发产品或者服务。

嵌入式中的zeroconf – WiSe-Zeroconf

Wise-Zeroconf是Wise公司基于开源的Bonjour的基础上,提供给嵌入式产品的zeroconf技术实现。
由于是商业产品,详细资料不想,但是基本功能与Bonjour应该基本相同。

zeroconf最基础原理

zerconf协议主要是定义了三个层次:
1.不需利用dhcp server取得 设备地址如IP的相关资料
RFC 3927 , Dynamic Configuration of IPv4 Link-Local Addresses

http://www.ietf.org/rfc/rfc3927.txt

2.不需要通过DNS server就转换domain name和IP的关系
Multicast DNS

http://files.multicastdns.org/draft-cheshire-dnsext-multicastdns.txt

3.利用 DNS-SD来取得设备服务,而不需通过directory server
DNS-based Service Discovery, or DNS-SD.

http://files.dns-sd.org/draft-cheshire-dnsext-dns-sd.txt

zeroconf的未来分析

虽然zeroconf协议名声不大,即使是计算机专业开发人员也知之甚少,但是其实由于这几年apple发展的强势,其应用已经越来越广。
比如在iOS4.2推出时候的airplay,以及airprint都是在这基础上实现的,甚至iOS5.0后的air mirroing技术,也是在zeroconf技术上实现的。
可以预想在未来,zeroconf和DLNA將会有激烈的竞争关系。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

zeroconf研究笔记(1) ——zeroconf初步认识 的相关文章

  • 所有平台上的java

    如果您想用 java 为 Windows Mac 和 Linux 编写桌面应用程序 那么所有这些代码都相同吗 您只需更改 GUI 即可使 Windows 应用程序更像 Windows 等等 如果不深入细节 它是如何工作的 Java 的卖点之
  • 如何在Linux内核源代码中打印IP地址或MAC地址

    我必须通过修改 Linux 内核源代码来稍微改变 TCP 拥塞控制算法 但为了检查结果是否正确 我需要记录 MAC 或 IP 地址信息 我使用 PRINTK 函数来打印内核消息 但我感觉很难打印出主机的MAC IP地址 printk pM
  • CentOS:无法安装 Chromium 浏览器

    我正在尝试在 centOS 6 i 中安装 chromium 以 root 用户身份运行以下命令 cd etc yum repos d wget http repos fedorapeople org repos spot chromium
  • Linux 可执行文件与 OS X“兼容”吗?

    如果您在基于 Linux 的平台上用 C 语言编译一个程序 然后将其移植以使用 MacOS 库 它会工作吗 来自编译器的核心机器代码在 Mac 和 Linux 上兼容吗 我问这个问题的原因是因为两者都是 基于 UNIX 的 所以我认为这是真
  • 安装J语言的JQt IDE,出现错误

    我一直按照这里的说明进行操作 http code jsoftware com wiki System Installation Linux http code jsoftware com wiki System Installation L
  • iptables通过注释删除特定规则

    我需要删除一些具有相同评论的规则 例如 我有带有 comment test it 的规则 所以我可以像这样获得它们的列表 sudo iptables t nat L grep test it 但是我怎样才能删除所有带有注释 测试它 的 PR
  • jpegtran 优化而不更改文件名

    我需要优化一些图像 但不更改它们的名称 jpegtran copy none optimize image jpg gt image jpg 但是 这似乎创建了 0 的文件大小 当我对不同的文件名执行此操作时 大小仍然完全相同 怎么样 jp
  • 为什么我可以直接从 bash 执行 JAR?

    我是一个长期从事 Java 工作的人 并且知道运行带有主类的 JAR 的方法MANIFEST MFJar 中的文件很简单 java jar theJar jar 我用它来启动 Fabric3 服务器 包含在bin server jar在其标
  • docker容器大小远大于实际大小

    我正在尝试从中构建图像debian latest 构建后 报告的图像虚拟大小来自docker images命令为 1 917 GB 我登录查看尺寸 du sh 大小为 573 MB 我很确定这么大的尺寸通常是不可能的 这里发生了什么 如何获
  • 查找哪些页面不再与写入时复制共享

    假设我在 Linux 中有一个进程 我从中fork 另一个相同的过程 后forking 因为原始进程将开始写入内存 Linux写时复制机制将为进程提供与分叉进程使用的不同的唯一物理内存页 在执行的某个时刻 我如何知道原始进程的哪些页面已被写
  • ftrace:仅打印trace_printk()的输出

    是否可以只转储trace printk 输出于trace文件 我的意思是过滤掉函数跟踪器 或任何其他跟踪器 中的所有函数 一般来说 您可以在选项目录中关闭选项 sys kernel debug tracing options Use ls显
  • 如何确保应用程序在 Linux 上持续运行

    我试图确保脚本在开发服务器上保持运行 它会整理统计数据并提供网络服务 因此它应该会持续存在 但一天中有几次 它会因未知原因而消失 当我们注意到时 我们只需再次启动它 但这很麻烦 并且某些用户没有权限 或专有技术 来启动它 作为一名程序员 我
  • 如何使用 GOPATH 的 Samba 服务器位置?

    我正在尝试将 GOPATH 设置为共享网络文件夹 当我进入 export GOPATH smb path to shared folder I get go GOPATH entry is relative must be absolute
  • Linux 上的用户空间能否实现本机代码的抢占式多任务处理?

    我想知道是否可以在 Linux 用户空间的单个进程中实现本机代码的抢占式多任务处理 也就是说 从外部暂停一些正在运行的本机代码 保存上下文 交换到不同的上下文 然后恢复执行 所有这些都由用户空间精心安排 但使用可能进入内核的调用 我认为这可
  • 按进程名称过滤并记录 CPU 使用情况

    Linux 下有选项吗顶部命令 https www man7 org linux man pages man1 top 1 html我可以在哪里按名称过滤进程并将每秒该进程的 CPU 使用情况写入日志文件 top pgrep 过滤输出top
  • 需要一些建议来开始在 ARM(使用 Linux)平台上编程

    我 也许 很快就会在托管 Linux 发行版的 ARM 平台上工作 我不知道哪个发行版 我知道该项目涉及视频流 但我无法告诉你更多信息 其实我只收到通知 还没见到任何人 我从来没有在这样的平台上工作过 所以我的想法是在项目开始之前进行测试
  • Linux:如何设置进程的时区?

    我需要设置在 Linux 机器上启动的各个进程的时区 我尝试设置TZ变量 在本地上下文中 但它不起作用 有没有一种方法可以使用与系统日期不同的系统日期从命令行运行应用程序 这可能听起来很愚蠢 但我需要一种sandbox系统日期将被更改的地方
  • 在两次之间每分钟执行一次 Cronjob

    我需要在 crontab 中每分钟运行一个 bash 脚本8 45am and 9 50am每天的 Code 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 8 home pull sh gt ho
  • 子目录中的头文件(例如 gtk/gtk.h 与 gtk-2.0/gtk/gtk.h)

    我正在尝试使用 GTK 构建一个 hello world 其中包括以下行 include
  • 快速像素绘图库

    我的应用程序以每像素的方式生成 动画 因此我需要有效地绘制它们 我尝试过不同的策略 库 但结果并不令人满意 尤其是在更高分辨率的情况下 这是我尝试过的 SDL 好的 但是慢 OpenGL 像素操作效率低下 xlib 更好 但仍然太慢 svg

随机推荐