* QUESTION : Feature length about the non-negotiable feature
@ 2008-06-17 10:42 Wei Yongjun
2008-06-17 11:02 ` Gerrit Renker
` (8 more replies)
0 siblings, 9 replies; 10+ messages in thread
From: Wei Yongjun @ 2008-06-17 10:42 UTC (permalink / raw)
To: dccp
Now non-negotiable feature does not has a fix size, it's length is
decide by the value of the non-negotiable feature. For example, the
client send Sequence Window Feature as the following: 0x23 0x04 0x03
0x64, the Sequence Window Feature has the length of 1-byte only.
But RFC4340 said:
7.5.2. Sequence Window Feature
Sequence Window has feature number 3 and is non-negotiable. It
takes 48-bit (6-byte) integer values, like DCCP sequence numbers.
Change and Confirm options for Sequence Window are therefore 9 bytes long.
Is this correct? Or there are some RFCs said the non-negotiable feature
has variable length?
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: QUESTION : Feature length about the non-negotiable feature
2008-06-17 10:42 QUESTION : Feature length about the non-negotiable feature Wei Yongjun
@ 2008-06-17 11:02 ` Gerrit Renker
2008-06-17 14:08 ` Eddie Kohler
` (7 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Gerrit Renker @ 2008-06-17 11:02 UTC (permalink / raw)
To: dccp
Quoting Wei Yongjun:
> Now non-negotiable feature does not has a fix size, it's length is
> decide by the value of the non-negotiable feature. For example, the
> client send Sequence Window Feature as the following: 0x23 0x04 0x03
> 0x64, the Sequence Window Feature has the length of 1-byte only.
>
> But RFC4340 said:
>
> 7.5.2. Sequence Window Feature
> Sequence Window has feature number 3 and is non-negotiable. It takes
> 48-bit (6-byte) integer values, like DCCP sequence numbers. Change and
> Confirm options for Sequence Window are therefore 9 bytes long.
>
> Is this correct? Or there are some RFCs said the non-negotiable feature
> has variable length?
>
You are correct - the RFC states fixed lenghts, even if values can be
communicated in much smaller options.
The implementation does not implement the fixed lengths suggested by the
RFC, since this does not make sense. The implementation will always chose
the smallest-possible container length.
I believe that this is the preferrable approach. In particular since
DCCP is a protocol which has a special header flag (`X') to allow saving
3 bytes. Why use 6 bytes when the value fits comfortably in a single
byte?
Moreover, a lot of problems are generated by all these copious option
lengths - unless using very small payloads, it is easily possible to
exceed the maximum packet size.
Thus, although the RFC says otherwise, I think that using the smallest
option size for a given value is the right thing to do.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: QUESTION : Feature length about the non-negotiable feature
2008-06-17 10:42 QUESTION : Feature length about the non-negotiable feature Wei Yongjun
2008-06-17 11:02 ` Gerrit Renker
@ 2008-06-17 14:08 ` Eddie Kohler
2008-06-18 0:56 ` Wei Yongjun
` (6 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Eddie Kohler @ 2008-06-17 14:08 UTC (permalink / raw)
To: dccp
Implementing this option as variable length is not RFC compliant. If you
would like to be forwarded the discussion about fixed vs. variable length --
the option was originally variable length -- please let me know. Until then
it is best to follow the RFC, assuming that you are trying to implement DCCP
rather than something else.
Eddie
Gerrit Renker wrote:
> Quoting Wei Yongjun:
>> Now non-negotiable feature does not has a fix size, it's length is
>> decide by the value of the non-negotiable feature. For example, the
>> client send Sequence Window Feature as the following: 0x23 0x04 0x03
>> 0x64, the Sequence Window Feature has the length of 1-byte only.
>>
>> But RFC4340 said:
>>
>> 7.5.2. Sequence Window Feature
>> Sequence Window has feature number 3 and is non-negotiable. It takes
>> 48-bit (6-byte) integer values, like DCCP sequence numbers. Change and
>> Confirm options for Sequence Window are therefore 9 bytes long.
>>
>> Is this correct? Or there are some RFCs said the non-negotiable feature
>> has variable length?
>>
> You are correct - the RFC states fixed lenghts, even if values can be
> communicated in much smaller options.
>
> The implementation does not implement the fixed lengths suggested by the
> RFC, since this does not make sense. The implementation will always chose
> the smallest-possible container length.
>
> I believe that this is the preferrable approach. In particular since
> DCCP is a protocol which has a special header flag (`X') to allow saving
> 3 bytes. Why use 6 bytes when the value fits comfortably in a single
> byte?
>
> Moreover, a lot of problems are generated by all these copious option
> lengths - unless using very small payloads, it is easily possible to
> exceed the maximum packet size.
>
> Thus, although the RFC says otherwise, I think that using the smallest
> option size for a given value is the right thing to do.
> --
> To unsubscribe from this list: send the line "unsubscribe dccp" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: QUESTION : Feature length about the non-negotiable feature
2008-06-17 10:42 QUESTION : Feature length about the non-negotiable feature Wei Yongjun
2008-06-17 11:02 ` Gerrit Renker
2008-06-17 14:08 ` Eddie Kohler
@ 2008-06-18 0:56 ` Wei Yongjun
2008-06-18 6:36 ` Gerrit Renker
` (5 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Wei Yongjun @ 2008-06-18 0:56 UTC (permalink / raw)
To: dccp
Gerrit Renker wrote:
> Quoting Wei Yongjun:
>
>> Now non-negotiable feature does not has a fix size, it's length is
>> decide by the value of the non-negotiable feature. For example, the
>> client send Sequence Window Feature as the following: 0x23 0x04 0x03
>> 0x64, the Sequence Window Feature has the length of 1-byte only.
>>
>> But RFC4340 said:
>>
>> 7.5.2. Sequence Window Feature
>> Sequence Window has feature number 3 and is non-negotiable. It takes
>> 48-bit (6-byte) integer values, like DCCP sequence numbers. Change and
>> Confirm options for Sequence Window are therefore 9 bytes long.
>>
>> Is this correct? Or there are some RFCs said the non-negotiable feature
>> has variable length?
>>
>>
> You are correct - the RFC states fixed lenghts, even if values can be
> communicated in much smaller options.
>
> The implementation does not implement the fixed lengths suggested by the
> RFC, since this does not make sense. The implementation will always chose
> the smallest-possible container length.
>
> I believe that this is the preferrable approach. In particular since
> DCCP is a protocol which has a special header flag (`X') to allow saving
> 3 bytes. Why use 6 bytes when the value fits comfortably in a single
> byte?
>
> Moreover, a lot of problems are generated by all these copious option
> lengths - unless using very small payloads, it is easily possible to
> exceed the maximum packet size.
>
> Thus, although the RFC says otherwise, I think that using the smallest
> option size for a given value is the right thing to do.
>
>
Yes, you can save some space for store more data, but this break the
compatibility. If the other system implement follow the RFC, since those
feature will be treat as invalid value. Also if it is set as mandatory
option, assoc will be reset. endpoint with different implement can not
talk to each other. That is the problem.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: QUESTION : Feature length about the non-negotiable feature
2008-06-17 10:42 QUESTION : Feature length about the non-negotiable feature Wei Yongjun
` (2 preceding siblings ...)
2008-06-18 0:56 ` Wei Yongjun
@ 2008-06-18 6:36 ` Gerrit Renker
2008-06-18 8:16 ` Gerrit Renker
` (4 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Gerrit Renker @ 2008-06-18 6:36 UTC (permalink / raw)
To: dccp
>>
>> Thus, although the RFC says otherwise, I think that using the smallest
>> option size for a given value is the right thing to do.
>>
>>
>
> Yes, you can save some space for store more data, but this break the
> compatibility. If the other system implement follow the RFC, since those
> feature will be treat as invalid value. Also if it is set as mandatory
> option, assoc will be reset. endpoint with different implement can not
> talk to each other. That is the problem.
>
After your email yesterday I checked the RFC and found it indeed uses
fixed lengths. I have therefore updated the code so that the NN options
have the described fixed lengths (Ack Ratio = 2, Sequence Window = 6).
This has been tested, I will post the changelog for the test tree
shortly and upload the amended tree. I would be grateful if you could
give this a spin with your test cases.
Thanks again.
Gerrit
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: QUESTION : Feature length about the non-negotiable feature
2008-06-17 10:42 QUESTION : Feature length about the non-negotiable feature Wei Yongjun
` (3 preceding siblings ...)
2008-06-18 6:36 ` Gerrit Renker
@ 2008-06-18 8:16 ` Gerrit Renker
2008-06-19 7:18 ` Wei Yongjun
` (3 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Gerrit Renker @ 2008-06-18 8:16 UTC (permalink / raw)
To: dccp
> Implementing this option as variable length is not RFC compliant. If you
> would like to be forwarded the discussion about fixed vs. variable length
> -- the option was originally variable length -- please let me know.
Yes, it would be good to forward this as input. I found three problems
with using fixed-length (as opposed to variable-length) NN-options:
(1) Non-negotiable options are much more part of the traffic than some
server-priority options such as e.g. the CCID or Allow Short Seqnos:
- Sequence Window should be set as the connection progresses (7.5.2);
- Ack Ratio is updated for each congestion window (RFC 4341, 6.1.2).
(2) Increased overhead
The feature default values of Ack Ratio (2) and Sequence Window (100)
both fit into one byte. For small Sequence Windows, using a fixed-size
option incurs an overhead of unused header space up to 5 bytes. For
Ack Ratio this is less (1 byte), but the overheads accumulate on a global
basis when the sizesare subtracted from the MPS.
(3) Consistency with other uses of header options
(a) NDP Count
The NDP Count option is variable-length (1..6 bytes), RFC 4340, 7.7
encourages to use the smallest container format.
(b) Timestamp Echo Option
When the Elapsed Time area of the Timestamp Echo Option is used,
section 13.3 encourages to use the smallest variant of the option
that can hold the relevant Elapsed Time value.
From what I can see, fixed lengths for NN options are mentioned in
sections 6.5, 6.6.8, 7.5.2, and 11.3.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: QUESTION : Feature length about the non-negotiable feature
2008-06-17 10:42 QUESTION : Feature length about the non-negotiable feature Wei Yongjun
` (4 preceding siblings ...)
2008-06-18 8:16 ` Gerrit Renker
@ 2008-06-19 7:18 ` Wei Yongjun
2008-06-19 8:21 ` Gerrit Renker
` (2 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Wei Yongjun @ 2008-06-19 7:18 UTC (permalink / raw)
To: dccp
Gerrit Renker wrote:
>>> Thus, although the RFC says otherwise, I think that using the smallest
>>> option size for a given value is the right thing to do.
>>>
>>>
>>>
>> Yes, you can save some space for store more data, but this break the
>> compatibility. If the other system implement follow the RFC, since those
>> feature will be treat as invalid value. Also if it is set as mandatory
>> option, assoc will be reset. endpoint with different implement can not
>> talk to each other. That is the problem.
>>
>>
> After your email yesterday I checked the RFC and found it indeed uses
> fixed lengths. I have therefore updated the code so that the NN options
> have the described fixed lengths (Ack Ratio = 2, Sequence Window = 6).
>
> This has been tested, I will post the changelog for the test tree
> shortly and upload the amended tree. I would be grateful if you could
> give this a spin with your test cases.
>
>
With the patch, it is OK for send non-negotiable features. But not valid
for check invalid value when recv.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: QUESTION : Feature length about the non-negotiable feature
2008-06-17 10:42 QUESTION : Feature length about the non-negotiable feature Wei Yongjun
` (5 preceding siblings ...)
2008-06-19 7:18 ` Wei Yongjun
@ 2008-06-19 8:21 ` Gerrit Renker
2008-06-19 11:42 ` Eddie Kohler
2008-06-19 13:38 ` Gerrit Renker
8 siblings, 0 replies; 10+ messages in thread
From: Gerrit Renker @ 2008-06-19 8:21 UTC (permalink / raw)
To: dccp
>> This has been tested, I will post the changelog for the test tree
>> shortly and upload the amended tree. I would be grateful if you could
>> give this a spin with your test cases.
>>
>>
>
> With the patch, it is OK for send non-negotiable features. But not valid
> for check invalid value when recv.
>
>
Thank you for testing. I don't understand your second sentence: all NN
options are value-checked, i.e. if you try a Sequence Window of less
than 32 or greater than 2^46-1, the connection should be reset.
Likewise, Ack Ratio is checked to be in the range 0..0xFFFF.
I guess you are meaning `length' rather than `value'.
It is certainly possible to implement that.
But it will kill any connection which has NN options with a valid value but
unorthodox length. If that is what people want, then the following happens:
* NN Change L arrives with valid value, but results in an empty
Confirm R since the length is unorthodox with regard to RFC 4340;
* receiving empty Confirm R resets the connection;
* with mandatory options the Reset will happen even earlier;
* a NN Confirm R with valid value (i.e. corresponding to the original
value of the Change L) resets the connection as per RFC 4340, 6.6.8.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: QUESTION : Feature length about the non-negotiable feature
2008-06-17 10:42 QUESTION : Feature length about the non-negotiable feature Wei Yongjun
` (6 preceding siblings ...)
2008-06-19 8:21 ` Gerrit Renker
@ 2008-06-19 11:42 ` Eddie Kohler
2008-06-19 13:38 ` Gerrit Renker
8 siblings, 0 replies; 10+ messages in thread
From: Eddie Kohler @ 2008-06-19 11:42 UTC (permalink / raw)
To: dccp
The RFC doesn't really require that you reset the connection just if the
length is strange. Accepting valid values expressed in an strange length, but
generating only the required lengths, seems like a good application of the TCP
robustness principle ("be conservative in what you do, be liberal in what you
accept from others", explicitly in RFC4340 3.6).
The discussion on whether Sequence Window should be variable-length begins here:
http://www.ietf.org/mail-archive/web/dccp/current/msg01257.html
search for "MW5: Section 7.5.2, second paragraph"
The two followups have a bit more.
Magnus Westerlund was one of the IETF's expert reviewers for DCCP; his opinion
carried some weight. Probably I folded too early (I thought the extra
"complexity" of a variable-length option wouldn't matter, and the option might
occur frequently).
One solution might be a "dccp_pedantic" sysctl, defaulting to 0, where Linux
DCCP is guaranteed to be RFC compliant only if "dccp_pedantic" is 1. (And
Sequence Window is variable-length if "dccp_pedantic" is 0.)
Eddie
Gerrit Renker wrote:
>>> This has been tested, I will post the changelog for the test tree
>>> shortly and upload the amended tree. I would be grateful if you could
>>> give this a spin with your test cases.
>>>
>>>
>> With the patch, it is OK for send non-negotiable features. But not valid
>> for check invalid value when recv.
>>
>>
> Thank you for testing. I don't understand your second sentence: all NN
> options are value-checked, i.e. if you try a Sequence Window of less
> than 32 or greater than 2^46-1, the connection should be reset.
> Likewise, Ack Ratio is checked to be in the range 0..0xFFFF.
>
> I guess you are meaning `length' rather than `value'.
>
> It is certainly possible to implement that.
>
> But it will kill any connection which has NN options with a valid value but
> unorthodox length. If that is what people want, then the following happens:
>
> * NN Change L arrives with valid value, but results in an empty
> Confirm R since the length is unorthodox with regard to RFC 4340;
> * receiving empty Confirm R resets the connection;
> * with mandatory options the Reset will happen even earlier;
> * a NN Confirm R with valid value (i.e. corresponding to the original
> value of the Change L) resets the connection as per RFC 4340, 6.6.8.
> --
> To unsubscribe from this list: send the line "unsubscribe dccp" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: QUESTION : Feature length about the non-negotiable feature
2008-06-17 10:42 QUESTION : Feature length about the non-negotiable feature Wei Yongjun
` (7 preceding siblings ...)
2008-06-19 11:42 ` Eddie Kohler
@ 2008-06-19 13:38 ` Gerrit Renker
8 siblings, 0 replies; 10+ messages in thread
From: Gerrit Renker @ 2008-06-19 13:38 UTC (permalink / raw)
To: dccp
> The RFC doesn't really require that you reset the connection just if the
> length is strange. Accepting valid values expressed in an strange
> length, but generating only the required lengths, seems like a good
> application of the TCP robustness principle ("be conservative in what you
> do, be liberal in what you accept from others", explicitly in RFC4340
> 3.6).
>
Thank you for the input. I had written this with possible forthcoming
inter-op tests in mind. What Wei is doing is in principle also an
inter-op test, with the difference that it uses and automated test stack.
> The discussion on whether Sequence Window should be variable-length begins here:
>
> http://www.ietf.org/mail-archive/web/dccp/current/msg01257.html
> search for "MW5: Section 7.5.2, second paragraph"
>
> The two followups have a bit more.
>
> Magnus Westerlund was one of the IETF's expert reviewers for DCCP; his
> opinion carried some weight. Probably I folded too early (I thought the
> extra "complexity" of a variable-length option wouldn't matter, and the
> option might occur frequently).
>
There are several arguments which raise questions:
(1) Making it variable-length increases code complexity
I think this is not very relevant. The reason is that any option
also needs to be converted into network-byte order (3.1). When the
quantities are not 16 or 32 bit, the htons/htonl functions can not
be used. Arnaldo has written a very clever function dccp_encode_value_var()
which does both the byte-order conversion and the variable-length copy
in one swoop. So there is little overhead in making it variable-lengh.
And for the receiver code the case is similar.
(2) This option occurs infrequently
Agree with the above point: NN options are exchanged during the
established phase and so it depends how frequently they appear.
In any case they are retransmitted until acknowledged, which is
one point that increases the frequency.
If there is a path change or the application increases/decreases
the sending rate then Sequence Window also needs to be updated,
hence "occurs infrequently" is not always true.
It is costly for the loss detection and the Ack Vector length to
get out of synch, so it seems better to update the Sequence Window
frequently (i.e. when it changes) rather than risking a "Step 6
failed" (8.5).
(3) Header compression
This did not occur in the discussion but someone mentioned a
header compression argument as a possible cause for keeping the
option fixed length. The gain for header compression seems low,
since Change options are only sent if one endpoint leaves the STABLE
state (6.6.2) and thus the value of subsequent Change options on
the same path will always have different values.
> One solution might be a "dccp_pedantic" sysctl, defaulting to 0, where
> Linux DCCP is guaranteed to be RFC compliant only if "dccp_pedantic" is
> 1. (And Sequence Window is variable-length if "dccp_pedantic" is 0.)
I think this refers to the length of outgoing options? In any event,
if people wanted to test different behaviours, it could be made a
Kconfig menu option.
Gerrit
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2008-06-19 13:38 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-06-17 10:42 QUESTION : Feature length about the non-negotiable feature Wei Yongjun
2008-06-17 11:02 ` Gerrit Renker
2008-06-17 14:08 ` Eddie Kohler
2008-06-18 0:56 ` Wei Yongjun
2008-06-18 6:36 ` Gerrit Renker
2008-06-18 8:16 ` Gerrit Renker
2008-06-19 7:18 ` Wei Yongjun
2008-06-19 8:21 ` Gerrit Renker
2008-06-19 11:42 ` Eddie Kohler
2008-06-19 13:38 ` Gerrit Renker
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.