自己试着实现飞鸽 01

飞鸽传书
原名:IP Messenger
原作者:白水啓章
许可协议:BSD License
官方网站:http://www.ipmsg.org/

“飞鸽传书”是简单的即时消息/文件传输程序。P2P结构,无须服务器;适合(但不限于)局域网使用。在日本和中国很流行。

这个软件初成于上个实际90年代中期。作者受Mac上的一个叫BroadCast的软件的启发,开发了一个即时通软件,竟在公司内(然后MailingList上)一举成名。

飞鸽传书的通信协议是UDP和TCP/IP,因此得名。邻居发现和即时消息使用UDP协议,而文件传输则使用TCP。

协议很简单,基于文本的通信协议。

下面是协议简述:

---------------------------------

=== 报文格式 ===

UDP报文格式是以冒号“:”隔开的文本格式,如下:

[quote]协议版本:报文编号:发送方用户名:发送方主机名:命令编号:附加字段[/quote]

其中,协议版本是1;命令编号可以在IPMSG.H里面查到。
命令编号(转换成二进制)的低8位是命令名,高24位都是标志位(flags),标志位用“或”运算结合。
用户名不是“昵称“,后文细说。

下面是一个例子:
[quote]1:100:shirouzu:jupiter:32:Hello[/quote]
命令是32(IPMSG_SENDMSG),附加字段是Hello,是消息内容,后文细说。


=== 邻居发现 ===

一个节点加入网络时,广播IPMSG_BR_ENTRY命令,告知其他成员。

收到IPMSG_BR_ENTRY的成员,应当将发送方加入自己的通讯录,并向新加入的成员发送IPMSG_ANSENTRY消息。

新加入的节点通过返回的IPMSG_ANSENTRY消息,就能知道网络中的所有成员。但是由于IP协议有数据包的丢失,UDP不保证成功传输,因此,应该尽可能保留原有的通讯录,不要完全更新。

“离开”状态或者“昵称“的变更,都通过广播IPMSG_BR_ABSENCE消息通知所有成员。这个消息无须回应。

对于IPMSG_BR_ENTRY, IPMSG_ANSENTRY和IPMSG_BR_ABSENCE命令,如果一个成员处于“离开”状态,那么它们都要设置IPMSG_ABSENCEOPT标志位。它们的附加字段是“昵称”。另外,对于拨号用户,或者无法收到广播的用户,还要设置IPMSG_DIALUPOPT标志位。这样,邻居发现类的命令就单独对这些节点进行单播。


=== 消息传输 ===

发送消息使用IPMSG_SENDMSG命令,扩展字段是消息本体。接收方如果发现IPMSG_SENDCHECKOPT标志位被设置,还要返回IPMSG_RECVMSG命令,扩展字段是发来的消息的报文编号。


---------------------------------


实现了以上协议,就可以完成邻居发现和基本的消息传递功能。消息传递还有“广播”的方式,还有消息加密和文件传送功能,以后再讨论。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值