⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readme

📁 ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework)
💻
字号:
Introduction------------RMCast is a reliable source-ordered multicast protocol implementationfor message-oriented multi-sender group communication built on top ofIPv4 multicast. It uses sequence numbers for re-ordering, duplicatesuppression and loss detection. Negative acknowledgments (NAK) withretransmissions are used to recover from losses.One new and interesting idea implemented in this protocol is historytransmission (dubbed negative retransmission). In a nutshell, eachsender, along with normal payload, transmits a list of other sender'sIDs along with sequence numbers of last messages received from thosesenders by this member. This, in some sense, builds a pyramid ofinformation: each subsequent message carries some information for anumber of previous messages (from other senders). This helps otherreceivers detect losses.The protocol does not track group membership. Messages are retainedfor retransmission for a predefined amount of time. The "last messageor lost message" dilemma is solved by periodic history transmissionsin cases when there is no useful traffic (idle network).Examples--------There is a simple example available in examples/RMCast/Send_Msg withthe corresponding README file.Protocol--------Over-the-wire representation is little-endian CDR. The protocol ismessage-based with information encapsulated into one or multipleprofiles (Protocol.h):struct Profile{  u16 id;    // Profile id.  u16 size;  // Profile size.};struct Message{  u32 size;                   // Total size of the message.  sequence<Profile> profiles; // Sequence of profiles.}The following profiles are defined (Protocol.h):struct From: Profile{  u32 addr;  // IPv4 address.  u16 port;};The 'From' profile appears in each message. It is never transmittedover the wire. Instead the 'Link' layer (see below) adds it.struct To: Profile{  u32 addr;  // IPv4 address.  u16 port;};The 'To' profile also appears in each message. It is also nevertransmitted over the wire since all communications are done viawell-known group address. It is added by the 'Link' layer and is usedby a group member to identify messages from itself ('From' == 'To').struct Data: Profile{  sequence<octet> data;};The 'Data' profile is used to transmit user payload.struct SN: Profile{  u64 sn;};The 'SN' profile carries sequence number for 'Data' and 'NoData' profiles.struct NAK: Profile{  u32 addr;  // IPv4 address.  u16 port;  sequence<u64> sns;};The 'NAK' profile carries sequence numbers of all the messages originatedfrom the member identified by addr:port that the receiver detected werelost.struct NRTM: Profile{  struct Pair  {    u32 addr;  // IPv4 address.    u16 port;    u64 max_sn;  };  sequence<Pair> nrtm;};The 'NRTM' profile carries highest sequence numbers known to this memberfor (some sub-) set of members. It is used by other members to detect loses.This profile is normally combined with 'Data' transmission.struct NoData: Profile{};The 'NoData' profile is send in reply to 'NAK' when the lost message isno longer available.Below is the list of actions that trigger messages with variousprofiles:user calls send():  SN                    Data                    NRTMdetected loss:      NAKreceived NAK:       SN     or   SN                    Data        NoData                    NRTM        NRTMImplementation--------------This section describes high-level architecture of the implementation.The protocol is implemented as a stack (Stack.h) of the followingelements:'Socket''Acknowledge''Retransmit''Link'The 'Socket' element is the user interface of the member. When a usercalls send() 'Socket' creates a new message with 'SN' and 'Data' profilesand forwards it to the 'Acknowledge' element. It also receives (from'Acknowledge') and queues incoming messages that are delivered to the userwhen recv() is called.The 'Acknowledge' element is responsible for re-ordering, duplicatesuppression, loss detection and negative acknowledgments. It maintains adynamically changing "window" (which slides toward higher sequencenumbers) of received messages. Messages that arrive out of order are heldin this window. Presence of a hole in the windows for a long period of timeindicates loss and triggers a negative acknowledgment.The 'Retransmit' element is responsible for message retention, aging andretransmission in response to NAKs. Each message received from the 'Socket'element is held for predetermined amount of time in case retransmission isrequired. Upon reception of a NAK duplicate is send if the requested messageis still available. Otherwise 'NoData' profile is sent.The 'Link' element is responsible for interfacing with the IPv4 multicastsocket. It also parses over-the-wire representation into in-memory messageswith individually-accessible profiles.--Boris Kolpackov <boris@kolpackov.net>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -