admin管理员组

文章数量:1532076

2024年5月30日发(作者:)

精心打造飞鸽协议教程,欢迎大家交流

本文重点在于对飞鸽协议原理及部分网络知识进行普及性的介绍,尽量避免用专业的术

语吓跑非计算机专业朋友,如果有介绍的不合理的地方,也欢迎高手出来拍砖。

飞鸽概述

飞鹆传书作为免费的开源软件,在全世界各国享有声誉,其原作者是zu,其

windows平台的C++源码下载地址为/IPMsg/。除

windows平台的实现以外,还存在大量其它平台的飞鸽实现,如Mac,Linux,甚至还存

在平台无关的Java版本。

本人开发的飞鸽传书,实际上是在M8平台上实现了该协议子集。从而能够实现局域网

内用户发现,接收PC版飞鸽传入的消息、文件、文件夹。

本人实现的飞鸽,可参考如下两个帖子:

1 /

2 /

飞鸽能够实现这种异构平台之间的通信,在于它的源码和协议是开放的,只要遵守相应

的传输协议,就可以实现通信。

这里要强调一个概念,网络传输类应用程序,协议是重中之重。那么,协议到底是什么

呢?协议可以让运行于两个不同平台的程序之间做到“心有灵犀一点通”,也有点像黑

帮内部的切口:A说了天王盖地虎,B就要说宝塔镇荷妖。

有点扯远了,计算机网络应用中的协议,是要解决一些很实际的问题,比如,以飞鸽为

例,计算机A向计算机B可以发消息,也可以传文件。都是通过网络传递数据,B如何

能知道,这些数据中什么是消息,什么是文件呢?这就需要设计通信协议,通过一些命

令字描述当前或即将传送的数据是什么内容。从而使得接收方,能够正确理解发送方发

出的内容。

网络基础,TCP/IP协议简介

TCP/IP是很复杂的,要介绍这个已经远远超出我的能力范围,但我仍然可以对它的上层

使用做简单的介绍。

前面我们花了大量的篇幅加口水强调协议在网络应用中的重要性。那所谓的飞鸽协议,

与我们平时常常听到的TCP/IP有什么区别和联系呢?这个问题问的好(我自己问的)!

计算机网络的设计有着非常多的成功的可取之处,其中之一就是分层。按照问题所在的

领域,将问层划分到不同的层中去解决(读者可自行参考OSI的七层模型以及TCP/IP

的五层模型)。TCP/IP协议在传输层提供的UDP和TCP传输协议,成为了我们构建应用

层软件(如,聊天,下载,邮件,http等等)的基础。

TCP传输协议规定了通信双方需要一个“连接-接受”这样的连接确认过程,既所谓的三

次握手过程。一但连接建立成功,双方可以通过该连接,进行可靠的数据通信。

UDP传输协议不需要双方进行连接,发送方只需要指定接收方的地址和端口,若接收方

此时正在该端口等待接收,那接收方就有可能(网络质量不好的话,可能会丢,不过局

域网里通常不会发生这样的情况)收到消息。

除此之外,还有一个重要的概念是广播,将数据包发送到广播地址(用UDP协议发送),

则该网段的所有用户,都可以收到这条数据。

飞鸽协议分析

飞鸽的协议也属于应用层协议,它描述了飞鸽程序通信时的语法和语义。

其语法定义如下(所有的命令字,都必需符合这样的格式要求):

Ver(1): PacketNo:SenderName:SenderHost:CommandNo:AdditionalSection

每部分分别对应为:版本号(现在是1):数据包编号:发送主机:命令:附加数据

其中:

数据包编号,一般是取毫秒数。利用这个数据,可以唯一的区别每个数据包;

SenderName指的是发送者的昵称(m8飞鸽被我统一的写死为m8,现在知道怎么定制了

吧?);

发送主机,指的是发送主机的主机名;

命令,指的是飞鸽协议中定义的一系列命令,具体见下文;

附加数据,指的是对应不同的具体命令,需要提供的数据,具体见下文。

上面介绍了数据包的语法,即格式,这些命令都是通过UDP协议向其它主机发送的。

接下来列出协议的命令,包括命令字及附加选项:

1) Command functions (Low 8 bits from command number 32 bits)

IPMSG_NOOPERATION No Operation

IPMSG_BR_ENTRY Entry to service (Start-up

with a Broadcast command)

IPMSG_BR_EXIT Exit from service (End with

a Broadcast command)

IPMSG_ANSENTRY Notify a new entry

IPMSG_BR_ABSENCE Change absence mode

本文标签: 协议飞鸽接收