2009.2-182009.2-193服务和传统的IP传输系统相比较,使用Zeroconf是件太过简单的事情了。当你的朋友拿着新买的笔记本电脑一边用电话向朋友求助,一边设着IP地址、DNS、子网掩码,还要一边去网上下载打印机驱动程序的时候,你作为Zeroconf的用户已经由DHCP自动分配了IP地址,并已经可以使用网络打印机、下载流媒体音乐、交换照片等各项服务了,这个过程几乎不需要你设置什么或者需要掌握某些专业的网络知识,只是因为Zeroconf已经在背后帮你做好了一切。Zeroconf的基础构造其实是很简单的,而且造价也并不昂贵,同时消耗的网络流量也是非常的少,占用本地的磁盘空间也是非常的少。对于最终用户而言,网络服务技术中的一个重要的问题就是如何简单浏览和使用那些系统所提供的服务。记住下面三个短语,对于理解Zeroconf来说会变得非常容易。3.1浏览服务对于Zeroconf技术而言,用户其实是希望打开电脑直接浏览到自己所需要的服务,而不是仅仅浏览到硬件。理由很简单但也很重要:例如你现在想打印一些东西,但是却浏览到了一台无法打印的坏打印机,或者发现了一台打印机但是它要使用特殊的驱动程序,而你的电脑又不支持,这对于你来说就比较麻烦;还有一些情况,例如一些PDF打印机并非需要将文件打印到纸张上,而是要将打印的PDF文件烧录到CD上,这个本身不需要一个打印机硬件来完成,但是这个打印服务却是你可能需要的,但它却不是一个打印机硬件;假如你的办公室只有一台廉价的USB打印机,它没有网络接口,所以只能连接到一台代理计算机上,你可以通过连接这台代理电脑来间接地使用这台打印机,但是在你的浏览器上发现的硬件是一台电脑而并非是一台打印机,但是你却要时刻记住这台电脑就是一台打印机……如果用户的电脑只是能识别所有的可用服务,那使用起来就实在是便捷,他无需关心这台物理打印机是否可用,因为只有可用的打印机才会显示出来,对于这个用户无权使用的打印机也不会出现在他的浏览器上;他也不用关心打印机的驱动程序是否是最新版本,因为只有双向自动升级的用户才会浏览到这个打印机;他也无需关心网络上连接的是一台网络打印机还是一台代理电脑。对于Dante浏览软件来说也存在这个问题,因为支持Dante技术的网卡种类繁多,有些可能就是安装在PC机上的普通网卡,但是有些可能是某些音像公司专用的网络接口卡,那么如果在远端看到了这个硬件,而且还想远程遥控使用它,就必须要安装它的驱动程序,若系统中存在多个厂家的几十上百个网卡,那么你在远端怎么去适应这么多驱动程序呢?显然是不现实的。所以对于用户来说只需要看到所有的可用音频源,拿来直接用就可以了,不需要关心它的硬件结构、连接方式和驱动程序版本等问题。3.2可用的服务用户可在他的电脑浏览器中看到本地网络中所有的可用网络服务,如果想使用打印服务,就在打印列表里面选取一个打印机就可以直接完成了,非常的简单。但是另外一个问题又出现了,那就是网络连接效率。这个问题几乎在所有的网络协议设计时都要面临的问题,如果说其源头,那就要回到原始的电路交换还是分组交换方式上的争论了。电信系统中的电话通信是采用的电路交换原理,也就是说,从电话A拨号码到电话B,电话接通以后电话A和B的电路连接就建立起来了,这是一条“专用”的通路,不论是带宽还是连接都是相对固定下来的,直到一方挂机为止。这种电路交换的方式好处是显而易见的,那就是你的电路一旦建立并开始使用,那么就是“独享”的,新网络音频传输技术Dante(4)——Zoroconf协议(续1)解析媒体矩阵(MediaMatrix)(五十五)2009.2-182009.2-19是没有别人跟你争抢的,从A端发送的数据(无论是语音还是传真或者调制解调器转发的计算机信号在这里都是统称为数据信号)一定是按照线性传送到B端。所以固定的短延时和固定的带宽是电路交换的最大好处。当然电路交换的缺陷也是很显然的,一方面就是网络利用率大大降低,因为无论用户A或者B是否讲话或者传送数据,这条线路在此期间始终都是封闭的,不允许别人使用的。通常情况下,A和B之间都不是持续的高数据量通信,这就造成了极大的浪费(据统计,电路连接的两端通信带宽浪费率高达90%以上)。另外一个问题就是安全问题,因为电路交换是建立一条实际的电信通道,而且是唯一的,全部的数据都是从这条线上通过,一旦这条线路出现问题,那么信号传递就中断了。这种电路交换原理下的电信业务模型至今还在广泛的应用。为了避免上述两个大问题,互联网在开发之初就选择了分组交换的方式(也叫数据包交换,或称包交换)。原理就是将数据分割成一个个小的数据包单元,每个数据包都包含了目的地地址、发送地地址和一部分需要传送的数据,它们可以发送到网络中路由器帮助它们寻找最快达到的路径,所以尽管这些数据包发送的时候是连续的,但是传送的时候可能“各走各的路”,这里堵塞了就走那里,反正见缝插针,那条路快就走哪条路。路由器就像GPS导航一样给它们指引方向。这么多数据“胡乱”的传送怎么能保证接收端能收到一个完整的准确的信号呢?不用担心,前面不是说了嘛,每个独立的数据包都包含了目的地、发送地地址,另外它们还有发送顺序的编号,所以尽管可能通过不同的路径到达了相同的目的地的快慢不同,但是先到的未必是前面的数据,接收端会根据每个数据包的发送编号重新把它们组装起来成为一个完整的数据流。如果在这个过程中有“迷路”的数据包最终被路由器“遗弃”了也不要紧,TCP/IP协议会从接收端重新向发送端发送一个“未到数据包”请求,这样原来的发送端再重新发送一次就可以了。当然这样做的结果就是要耽误不少时间,但是对于像电子邮件的传送类型,这样稍微的数秒的耽搁是不成问题的,但是对于时间敏感的流媒体信号(如IP电话、视频聊天)来说,接收端是不能等待发送端重新发送的,那样就破坏了线性实时传送的要求,所以对于丢掉的数据包就丢掉了,这就是为什么在网络繁忙期使用IP电话或者视频聊天会感觉到声音好像有“马赛克”一样,那就是丢包造成的(但是对于专业音频传输来说,这种丢包是绝对不可以出现的,否则就不能叫专业信号了,以后的文章会讲解Dante是怎么做到不丢包的)。了解了分组交换的原理也就知道了它们的优势:网络利用率高、传输路径不固定所以是相对的安全。同样地,分组交换的缺点就是电路交换的优点:分组交换并非独享带宽,所以传输数据可能会时快时慢,这要根据当时的网络压力情况来判断;另一个问题就是由于传送路径不同,所以数据流的延时可能会有差别,虽然这个延时比较短,但是对于时间敏感的流媒体数据来说还是比较麻烦的。网络协议似乎就是在平衡网络带宽和网络效率之间的矛盾,对于Zeroconf来说,用户要在浏览器中浏览到网络提供的所有的服务,浏览器就要不停地发送探测数据到网络的各个节点,并实时返送回全部的网络服务信息,但是这样做会消耗大量的网络带宽,对用户正常使用网络是非常不利的。另一种方式就是用户每次使用的时候按一下“查找”按钮,如果用户没有查找到他想要的服务,可能就会不停地按“刷新”按钮,这样做同样会增加网络的负担。如果用户在第一次查询的时候得到了可用的服务,但使用确实在一段时间以后,也许这个服务不存在或者繁忙,那么用户就必须有个习惯就是每次使用都要手动“刷新”一下服务列表,这么做也是很不符合人们习惯的。Zeroconf采用了另外一种方式解决了这个问题。那就是在一个网络服务开始的时候,它会自动向网络中自动发布一个“hello”广播IP数据包,其中包含了本机地址、服务类别、权限和实效等信息,这样网络中的所有设备都会收到这个服务广播。而当这个设备离线的时候,它会再次发送一个“goodbye”广播数据包,同时在所有的用户界面上消失。如果正在进行的服务(如正在打印)过程中,服务设备或程序突然离线,而且还没来得及发送“goodbye”,此时Zeroconf会自动捕捉它们并保留数据一段时间,再次尝试连接这个服务设备,当超过预先设定的时间接线后,则发出声明放弃连接。在此过程中这个突然离线的设备Zeroconf会通知到所有的用户,并在他们的用户界面上删除它。所以Zeroconf的工作还是相当的智能化。在刚开始讲述Zeroconf的时候提到了有关两个直连设备间如何使用IP传输工具进行通讯,这对于使用广2009.2-202009.2-21播IP数据包来说实在是太简单了,因为这个超小的系统互联不涉及到网络状态查找的问题,广播数据和单播的速度一样快,这也就意味着两个设备直接互联(当然要使用交叉的双绞线,也就是1,3和2,6对调的EIA568B网线)使用IP结构的Zeroconf技术是非常简单的一个应用。有些大公司的局域网电脑甚至成百上千个,如果每个设备都向其它设备广播IP数据包说明提供的服务,那么这个网络的繁忙程度估计已经超出了网络的容量,所以一般来说这样的大结构都是使用中央DNS服务器的方式互相访问以加快速度和提高效率。Dante是一种增强模式的Zeroconf技术,因为Zeroconf协议本身并不是一个同步传输协议,所以它自身的网络延时是不确定的,但是Dante引入了IEEE1588精密时钟协议去解决了同步信号的传输问题,这使得信号发送端并非是像以太网采用的带宽检测机制去判断发送状态。而是在时钟信号的指挥下有序的发送和接受信号,这样就可以避免网络冲突的出现,相对限制了网络延时的范围。所以Dante对网络的使用效率比一般的Zeroconf还要高。3.3简单的浏览浏览的简便是一个非常重要的特性,如果用户浏览服务还必须弹出一个黑色超级终端的窗口,敲入一些个根本无法记住的语句,那么这项技术恐怕根本无法推广了。命令行方式去控制程序或者命令对于开发者或者管理员来说简单而直接,但是对于最终用户来说,这个要求显然太过专业和难于掌握了。例如你使用苹果的iTunes为你的iPod下载歌曲,你只需要点击“共享音乐库”就可以搜索到网络上所有的可以提供的音乐下载服务,并在浏览器上显示出来,而无需你在文本模式下输入“_daap._tcp”语句来触发这个共享命令。另外一个需要提起的事情就是用户只需要输入你希望罗列的共享音乐的类型、关键字等容易理解的词语,例如“摇滚”、“70年代”、“甲壳虫乐队”等,而无需输入“thing.company.com”这样的网址。同样的,你要想连接3楼的打印机,只需要选择“三楼会议室打印机”,而不是“f3mr.company.com”。是不是看着这种访问方式非常类似于网络浏览器的超文本传输协议(HTTP)?事实上Zeroconf就是借鉴了类似的技术使得用户的使用变得更加简捷和方便。在Dante的操作界面上要在一个局域网络中传输和路由音频信号源,尽管每个信号源设备都有自己独立的IP地址,但是在进行音频通道分配的操作时,不用查找每个音频源的IP地址是什么、它位于哪里等等,也不用像CobraNet那样去事先规定好Bundle的号码,还要用另外的一个列表去查找每个Bundle对应什么通道,而是在音频信号源浏览器中直接可以看到每路信号的名称、注释和使用情况。如果你需要它,只是用鼠标把它拖拽到你需要的位置就好了,就这么简单,如图1所示。图1中右侧的是浏览到的所有的网络共享音频通道,如果想把它们拉到本地来听,只要用鼠标拖拽到本地的某个通道就可以了,不用关心它是从哪里来的,也不用关心它是Unicast方式还是Multicast方式。这样使用就非常的简单了。这里要注意一点,音频数据的传输经常是从一点同时传送到多点,这种传输技术叫多点传送技术Multicast,这个和前面说的一个新的服务插入到网络中需要用一个广播的IP数据包向网络中的每个设备发送一个通告一样,这个过程叫广播Broadcast,广播和多点传送的多播是不同的。广播是没有特别的目的性,网络中的所有网络设备都会收到这个数据的,而多播是目的性的传播,可以理解为“多个单播”模式,它是将一个IP数据包复制成多个IP数据包发送到指定的地点接收,所以多播是有目的的多点传送,而且每个点是要对应特定的IP地址的,没有指定的IP地址是不会收到这个多播信号的。这也很类似于Cobra