Presentation of the project
What is the ROHC library for?
The ROHC library provides an easy and robust way for applications to reduce their bandwidth usage on network links with limited capacity or expensive costs. Headers of network packets are compressed with the ROHC protocol.
Why compressing network headers?
In streaming applications, such as VoIP, network headers corresponds to around 60% of the total amount of data transmitted. Such large overheads may be tolerable in local wired links where capacity is often not an issue, but are excessive for WAN and wireless systems where bandwidth is scarce. Source: Wikipedia.
What is the ROHC protocol?
Robust Header Compression (ROHC) is a standardized method to compress the IP, UDP , RTP and TCP headers of Internet packets.
The ROHC protocol defined by the IETF takes advantage of the information redundancy in headers of:
- one single network packet (eg. the payload lengths in IP and UDP headers),
- several network packets that belongs to one single stream (eg. the IP addresses).
Redundant information is transmitted in first packets only. Next packets contain variable information only, eg. identifiers or sequence numbers. Theses fields are furthermore transmitted in a adequate compressed form to save some more bits.
What performances may be expected?
The ROHC protocol is especially efficient for network traffic with small payloads, such as VoIP traffic. In such scenarios, a 65% bandwidth gain may be expected on IPv4 networks. 73% for IPv6 networks.
For VoIP traffic on IPv4 networks, every packet contains 40 bytes of network headers for only 20 bytes of payload. On IPv6 networks, 60 bytes of headers for 20 bytes of payload. In steady state, theses 40/60-byte network headers may be compressed down to 1 byte.
Which features are supported?
The ROHC library supports several ROHC standards defined by the IETF. The RFC 3095 is probably the most important one.
The library compresses the following types of traffic (IP means IPv4 and IPv6):
- IP / payload
- IP / UDP / payload
- IP / UDP-Lite / payload
- IP / UDP / RTP / payload
- IP / TCP / payload
Double IP headers are supported in order to compress IP tunnels.
Full list of supported RFCs and features…
Which licensing terms?
Since version 1.7.0, the library is published as Opensource under the GNU LGPL license version 2.1 or at your option any later version.
Before version 1.7.0, the library was published under the GNU GPL license version 2 or at your option any later version.
The project is the resulting work of many contributors (large & small companies and individuals).
Releases
Next major release: 2.4.0 Git branch roadmap
Current stable release: 2.3.1 download release notes
Previous stable release: 2.2.0 download release notes
History
2019:
2018:
2017:
2016:
- January: migrate the IP/ROHC tunnel from Bazaar to Git (and GitHub).
- August:major release 2.0.0 with production-ready TCP profile
2015:
- January-October: clean and robustify the TCP profile.
- May: build on Travis CI in addition to Buildbot.
- May: fixes warnings emitted by the Coverity static analyzer.
- May: RFC3095 list compression: handle anonymous lists.
- July-August: Simplify and factorize the RFC3095 profiles.
- October: fix cppcheck warnings.
- November: fix warnings issued by the new Clang 3.7.
2014:
- January-June: design a new public API.
- March: add compatibility mode with versions 1.6.x.
- March: deprecate the ROHC over UDP tunnel.
- March: add new ROHC stats application.
- April: interoperability tests with Aeroflex TM500(LTE).
- April: better support for TCP options.
- May: add compatibility with C++ programs.
- June: library becomes thread-safe wrt feedback handling between compressor and decompressor.
- June: change license to LGPL version 2.1 or later.
- June: major release 1.7.0.
- June: deprecate the ROHC over UDP tunnel in favor of the IP/ROHC tunnel.
- November: migrate the ROHC library from Bazaar to Git (and GitHub).
- December: start to clean and robustify the TCP profile.
2013:
- January: add fuzzer tool to check library robustness.
- March: Linux kernel support.
- May: add RPM packaging.
- June: major release 1.6.0.
- June: OpenBSD support.
- June: add ROHC-over-Ethernet tunnel.
- July: ROHCv1 IP/TCP profile.
- August: repair upon CRC failure support.
- August: extensions support for UO-1-ID packet.
- October: provide man pages.
- December: add new fuzzer tool dedicated to RTP traffic.
- December: dedicated website launched.
2012:
- May: major release 1.4.0.
- May: LLVM/Clang support.
- May: Valgrind support.
- August: ROHCv1 IP/ESP profile.
- September: MinGW support.
- October: major release 1.5.0.
- November: add framework to handle library traces.
- November: improve RTP profile detection.
- November: add new sniffer tool.
- November: constant IP-ID support.
- November: ROHC segment support.
- December: FreeBSD support.
2011:
- November: the project uses continuous integration for its QA.
- November: the library is thread-safe.
2010:
- March: reliable support for large CID added.
- March: version 1.3.0 released.
- April: reliable support for the x86_64 architecture added.
2009:
- August: source code published on Launchpad.
- August: version 1.2.0 released.
2008:
- February: support for IPv6 list compression added.
- February: version 1.1.0 released.
2007:
- January: private fork of the ROHC project on SourceForge run by the CNES, Thales Alenia Space and Viveris.
- March: support for IPv6 added to existing profiles.
- March: ROHC over UDP tunnel added for testing purposes.
- July: support for the RTP profile added.
- November: version 1.0.0 released.