  Reliable broadcast is an important primitive to ensure that a source node can
reliably disseminate a message to all the non-faulty nodes in an asynchronous
and failure-prone networked system. Byzantine Reliable Broadcast protocols were
first proposed by Bracha in 1987, and have been widely used in fault-tolerant
systems and protocols. Several recent protocols have improved the round and bit
complexity of these algorithms. Motivated by the constraints in practical
networks, we revisit the problem. In particular, we use cryptographic hash
functions and erasure coding to reduce communication and computation complexity
and simplify the protocol design. We also identify the fundamental trade-offs
of Byzantine Reliable Broadcast protocols with respect to resilience (number of
nodes), local computation, round complexity, and bit complexity. Finally, we
also design and implement a general testing framework for similar communication
protocols. We evaluate our protocols using our framework. The results
demonstrate that our protocols have superior performance in practical networks.
