[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: [rohc] Role and approach of the ROHC formal notation
> > 1) In Richards last e-mails, he seems to say that the notation
> > itself gives the compressed formats (bits on the wire), and
> > I do not buy that. How could that be possible?
> >
> > I believe Richard's/Mark's idea is that the notation defines all the
> > bits in the compressed packet (its "body"), apart from an initial
> > discriminator. This discriminator is what differs between EPIC and
> > EPIC-lite. The discriminator carries all the information that is
> > needed to parse the body. The body carries information that is too
> > big to carry in the discriminator; essentially orthogonally encodable
> > information. The discriminator can use interesting tricks like EPIC
> > (Huffman on complete discriminators) or, if we want, arithmetic coding
> > (I don't know when those patents run out, though). The notation
> > supplies everything that is needed to go into the discriminator
> > computation (values, probabilities).
Hi,
It might be simpler to avoid mentioning EPIC and EPIC-lite at this stage,
because the notation can generate a decent set of compressed packet
formats without needing to use either.
In RFC 3095 terminology, both EPIC and EPIC-lite are just encoding
methods, which we may or may not want to use when compressing fields in
a header. For simplicity let's avoid them for now, and just stick with
the encoding methods that are available in RFC 3095.
In particular, let's try creating a set of compressed packet formats
using the following three encoding methods from RFC 3095:
Static - Encodes a field that takes the same value as in the previous
header. No "bits on the wire" need to be sent in this case.
Irregular n - Encodes an n-bit field with no discernable pattern (by
sending all n bits in the compressed header).
Self-describing values - Allows a field to be encoded in two different
ways, and sends a 1-bit flag to indicate which way has been chosen. In
the notation, we denote this encoding method using the symbol "/".
Using these three encoding methods, we can apply ROHC-FN to create a
more complex encoding method designed (say) to handle the TCP Source
Port:
tcp_source_port ::= static / irregular (16)
This new encoding method can encode the field either using a single
"0" (if it happens to be the same as in the previous header), or by
sending a "1" followed by the 16-bit Source Port in full.
The new encoding method certainly defines "bits on the wire" - we can
write these out using packet formats as follows:
+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0| or |1| TCP Source Port |
+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The next field in the TCP header can be encoded in the same way:
tcp_destination_port ::= static / irregular (16)
Finally, let's join the two fields together to get a set of packet
formats capable of handling both fields:
mini_tcp_header ::= tcp_source_port
tcp_destination_port
The corresponding packet formats for these two fields are as follows:
+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0|0| or |1| TCP Source Port |0| or
+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0|1| TCP Destination Port | or
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|1| TCP Source Port |1| TCP Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Hopefully it should be clear that we can define how to compress all
of the other fields in a TCP/IP header in a similar manner - then we
just join them up to get our complete "compressed packet formats".
Comments welcome!
Regards,
Richard
_______________________________________________
Rohc mailing list
Rohc@ietf.org
https://www1.ietf.org/mailman/listinfo/rohc