Re: Packet size s on CCID3

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Ian,

what you prove is right, you there is no contradiction, just confusion due
to the numerical example, cf. inline. 

Quoting Ian McDonald:
|  > I disagree with this reading of the RFC.  The RFC explicitly allows the sender
|  > to calculate X as if every packet had size 's = MSS'.  As usual, the
|  > implementation can then implement any simplifications such an assumption would
|  > allow.  An implementation that assumes 's = MSS' can therefore calculate a
|  > sending rate in packets per second.
|  >
|  > Eddie
|  >
|  OK. Time for some maths with the TCP throughput equation. I am using
|  an online version here backed up with testing with my modified DCCP
|  stack - this matches on runs to within 10% of this equation. The
|  online equation is here - http://wand.net.nz/~perry/max_download.php -
|  in the examples below I have changed rtt to 250 ms and loss to 5 %.
|  
|  In this online calculator the value for s is put into MSS. The reason
|  for this is we are assuming we are sending maximum size packets which
|  may not be applicable for DCCP but is for TCP. So we vary the MSS to
|  reflect s here.
|  
|  Now starting with a s of 1460 bytes we get a throughput (Xcalc) of
|  15221 bytes/sec. Now t_ipi is s/X_inst and X_inst on average is X_calc
|  (it is just adjusted to prevent oscillation). So t_ipi is 96 msecs.
|  
|  Now change s to 300 bytes we get a Xcalc of 3128 and a t_ipi of 96
|  msecs. Put in ANY number for s and you will get the same t_ipi of 96
|  msecs.
No numerical example is needed, this follows from:
1) X_calc = s * f(rtt, b, p)  [RFC 4342, 3.1]
2) by [RFC 4342, 4.3], 
   X_inst = X_calc whenever R is constant (and then R_sqmean = R)
3) t_ipi = s/X_inst 
         = s/X_calc
         = s/(s * f(rtt, b, p)
         = 1/f(rtt, b, p)

==> Hence t_ipi is independent of `s' when RTT is constant. 

If RTT is not constant, then X_inst = k * X_calc (where 
k = R_sqmean / sqrt(R_sample) is a real number); therefore
  t_ipi = s/X_inst
        = 1/k * s/X_calc
        = 1/k * 1/f(rtt, b, p)

==> Hence t_ipi is again independent of `s'.

You have therefore shown a point made the last email:
	If `s' is clamped to a fixed value such as the MSS, but
	is allowed to change over time (in the extreme case s is
	very small compared to MSS), then an update to the loss
	interval estimation procedure is needed. This will change
	p in the above equation, with that X_calc and t_ipi. The
	throughput equation is ignorant of this issue, the point is
	in how the input `p' to the equation is sampled.

|  This illustrates my point that CCID3 is a packet per second based
|  congestion control.
|  
|  Now if we specify the s is 300 to the implementation we get the
|  desired result, if we average it we get the correct result. However we
|  can't switch to a packet based equation because if we do the spec says
|  we should use s=MSS. Lets assume MSS=1460. Now Xcalc is 15221
|  bytes/sec. t_ipi is 96 msecs. And we can send the correct rate of
|  packets.
|  
|  OK Now working through the example shows that my logic was wrong. I
|  guess thats what defence of ideas is about - proving it and my idea
|  was wrong. I apologise for wasting everybody's time!
|  
|  However this does show an application can't cheat by specifying the
|  wrong packet size which the spec worries about. Maybe my working
|  through this helps resolve this a little...


[Index of Archives]     [Linux Kernel Development]     [Linux DCCP]     [IETF Annouce]     [Linux Networking]     [Git]     [Security]     [Linux Assembly]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [DDR & Rambus]

  Powered by Linux