Subject: Re: perhaps time to check our TCP against spec?
To: Jason Thorpe <thorpej@nas.nasa.gov>
From: Jonathan Stone <jonathan@DSG.Stanford.EDU>
List: tech-net
Date: 04/06/1998 13:01:15
From: Jason Thorpe <thorpej@nas.nasa.gov>

>A`Stretch ACK violation' was failure to generate an ACK for every two segments
>received.  There was actually some confusion about this within the TCPIMPL
>WG.

Sorry, my bad. The problem I've seen persistently over the last year
and a half is *when* the ACKs get generated, not just the absolute
number of them.

NetBSD's TCP seems to consistently process incoming packets before it
generates the ACKs.  This causes loss of self-clocking.

Here's a excerpt from trace typical of what i've been seeing:

02:09:08.868516 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3336057:3336557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.872412 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3336557:3337057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.872413 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3337057:3337557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.872414 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3337557:3338057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.872417 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3338057:3338557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.872418 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3338557:3339057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.872419 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3339057:3339557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.872420 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3339557:3340057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.872421 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3340057:3340557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.872422 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3340557:3341057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.876318 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3341057:3341557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.876319 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3341557:3342057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.876320 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3342057:3342557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.876321 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3342557:3343057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.876322 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3343057:3343557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.876323 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3343557:3344057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.876324 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3344057:3344557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.876327 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3344557:3345057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.880224 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3345057:3345557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.880225 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3345557:3346057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.880226 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3346057:3346557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.880227 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3346557:3347057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.880228 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3347057:3347557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.880229 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3347557:3348057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.880230 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3348057:3348557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.880231 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3348557:3349057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.884131 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3349057:3349557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.884132 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3349557:3350057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.884133 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3350057:3350557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.884134 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3350557:3351057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.884135 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3351057:3351557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.884138 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3351557:3352057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.884139 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3352057:3352557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.884142 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3352557:3353057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.888037 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3353057:3353557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.888040 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3353557:3354057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.888043 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3354057:3354557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.888044 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3354557:3355057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.888045 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3355057:3355557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.888050 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3355557:3356057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.888053 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3356057:3356557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.888056 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3356557:3357057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.888057 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3357057:3357557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.891943 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3357557:3358057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.891944 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3358057:3358557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.891947 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3358557:3359057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.891950 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3359057:3359557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.891951 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3359557:3360057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.891952 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3360057:3360557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.891953 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3360557:3361057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.891954 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3361057:3361557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.895850 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3361557:3362057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.895851 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3362057:3362557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.895852 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3362557:3363057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.895853 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3363057:3363557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.895854 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3363557:3364057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.895855 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3364057:3364557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.895856 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3364557:3365057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.895857 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3365057:3365557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.899756 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3365557:3366057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.899757 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3366057:3366557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.899758 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3366557:3367057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.899759 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3367057:3367557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.899760 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3367557:3368057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.899761 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3368057:3368557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.899762 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3368557:3369057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.899763 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3369057:3369557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.903662 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3369557:3370057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.903663 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3370057:3370557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.903664 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3370557:3371057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.903665 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3371057:3371557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.903666 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3371557:3372057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.903667 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3372057:3372557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.903668 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3372557:3373057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.903669 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3373057:3373557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.907569 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3373557:3374057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.907570 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3374057:3374557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.907571 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3374557:3375057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.907572 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3375057:3375557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.907573 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3375557:3376057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.907574 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3376057:3376557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.907575 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3376557:3377057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.907576 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3377057:3377557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.907577 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3377557:3378057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.911475 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3378057:3378557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.911476 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3378557:3379057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.911477 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3379057:3379557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.911478 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3379557:3380057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.911479 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3380057:3380557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.911480 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3380557:3381057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.911481 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3381057:3381557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.911482 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3381557:3382057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.915381 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3382057:3382557(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>
02:09:08.915382 Cup.DSG.Stanford.EDU.1055 > Cuisinart.Stanford.EDU.5001: . 3382557:3383057(500) ack 1 win 17520 <nop,nop,timestamp[|tcp]>

02:09:08.915405 Cuisinart.Stanford.EDU.5001 > Cup.DSG.Stanford.EDU.1055: . ack 3356057 win 65200 <nop,nop,timestamp[|tcp]>
02:09:08.915406 Cuisinart.Stanford.EDU.5001 > Cup.DSG.Stanford.EDU.1055: . ack 3357057 win 65200 <nop,nop,timestamp[|tcp]>
02:09:08.915407 Cuisinart.Stanford.EDU.5001 > Cup.DSG.Stanford.EDU.1055: . ack 3358057 win 65200 <nop,nop,timestamp[|tcp]>
02:09:08.915408 Cuisinart.Stanford.EDU.5001 > Cup.DSG.Stanford.EDU.1055: . ack 3359057 win 65200 <nop,nop,timestamp[|tcp]>
02:09:08.915409 Cuisinart.Stanford.EDU.5001 > Cup.DSG.Stanford.EDU.1055: . ack 3360057 win 64200 <nop,nop,timestamp[|tcp]>
02:09:08.915410 Cuisinart.Stanford.EDU.5001 > Cup.DSG.Stanford.EDU.1055: . ack 3361057 win 63200 <nop,nop,timestamp[|tcp]>
02:09:08.915411 Cuisinart.Stanford.EDU.5001 > Cup.DSG.Stanford.EDU.1055: . ack 3362057 win 62200 <nop,nop,timestamp[|tcp]>
02:09:08.915412 Cuisinart.Stanford.EDU.5001 > Cup.DSG.Stanford.EDU.1055: . ack 3363057 win 61200 <nop,nop,timestamp[|tcp]>
02:09:08.915413 Cuisinart.Stanford.EDU.5001 > Cup.DSG.Stanford.EDU.1055: . ack 3364057 win 60200 <nop,nop,timestamp[|tcp]>
02:09:08.915414 Cuisinart.Stanford.EDU.5001 > Cup.DSG.Stanford.EDU.1055: . ack 3365057 win 59200 <nop,nop,timestamp[|tcp]>
02:09:08.915415 Cuisinart.Stanford.EDU.5001 > Cup.DSG.Stanford.EDU.1055: . ack 3366057 win 58200 <nop,nop,timestamp[|tcp]>
02:09:08.915416 Cuisinart.Stanford.EDU.5001 > Cup.DSG.Stanford.EDU.1055: . ack 3367057 win 57200 <nop,nop,timestamp[|tcp]>
02:09:08.919288 Cuisinart.Stanford.EDU.5001 > Cup.DSG.Stanford.EDU.1055: . ack 3368057 win 56200 <nop,nop,timestamp[|tcp]>
02:09:08.919289 Cuisinart.Stanford.EDU.5001 > Cup.DSG.Stanford.EDU.1055: . ack 3369057 win 55200 <nop,nop,timestamp[|tcp]>
02:09:08.919290 Cuisinart.Stanford.EDU.5001 > Cup.DSG.Stanford.EDU.1055: . ack 3370057 win 54200 <nop,nop,timestamp[|tcp]>
02:09:08.919291 Cuisinart.Stanford.EDU.5001 > Cup.DSG.Stanford.EDU.1055: . ack 3371057 win 53200 <nop,nop,timestamp[|tcp]>
02:09:08.919292 Cuisinart.Stanford.EDU.5001 > Cup.DSG.Stanford.EDU.1055: . ack 3372057 win 52200 <nop,nop,timestamp[|tcp]>
02:09:08.919293 Cuisinart.Stanford.EDU.5001 > Cup.DSG.Stanford.EDU.1055: . ack 3373057 win 51200 <nop,nop,timestamp[|tcp]>
02:09:08.919294 Cuisinart.Stanford.EDU.5001 > Cup.DSG.Stanford.EDU.1055: . ack 3374057 win 50200 <nop,nop,timestamp[|tcp]>
02:09:08.919295 Cuisinart.Stanford.EDU.5001 > Cup.DSG.Stanford.EDU.1055: . ack 3375057 win 49200 <nop,nop,timestamp[|tcp]>
02:09:08.919296 Cuisinart.Stanford.EDU.5001 > Cup.DSG.Stanford.EDU.1055: . ack 3376057 win 48200 <nop,nop,timestamp[|tcp]>
02:09:08.919297 Cuisinart.Stanford.EDU.5001 > Cup.DSG.Stanford.EDU.1055: . ack 3377057 win 47200 <nop,nop,timestamp[|tcp]>
02:09:08.919298 Cuisinart.Stanford.EDU.5001 > Cup.DSG.Stanford.EDU.1055: . ack 3378057 win 46200 <nop,nop,timestamp[|tcp]>
02:09:08.919299 Cuisinart.Stanford.EDU.5001 > Cup.DSG.Stanford.EDU.1055: . ack 3379057 win 45200 <nop,nop,timestamp[|tcp]>
02:09:08.919300 Cuisinart.Stanford.EDU.5001 > Cup.DSG.Stanford.EDU.1055: . ack 3380057 win 44200 <nop,nop,timestamp[|tcp]>
02:09:08.919301 Cuisinart.Stanford.EDU.5001 > Cup.DSG.Stanford.EDU.1055: . ack 3381057 win 43200 <nop,nop,timestamp[|tcp]>
02:09:08.919302 Cuisinart.Stanford.EDU.5001 > Cup.DSG.Stanford.EDU.1055: . ack 3382057 win 42200 <nop,nop,timestamp[|tcp]>
02:09:08.919303 Cuisinart.Stanford.EDU.5001 > Cup.DSG.Stanford.EDU.1055: . ack 3383057 win 41200 <nop,nop,timestamp[|tcp]>
02:09:08.923194 Cuisinart.Stanford.EDU.5001 > Cup.DSG.Stanford.EDU.1055: . ack 3383057 win 57584 <nop,nop,timestamp[|tcp]>
02:09:08.923195 Cuisinart.Stanford.EDU.5001 > Cup.DSG.Stanford.EDU.1055: . ack 3383057 win 65535 <nop,nop,timestamp[|tcp]>


[followed by ane qually long stream of ACKs



>MTU/MSS calculation is NOT "hosed".  I've personally spoken with several
>TCPIMPL and TCPSAT WG members _at length_ about NetBSD's MSS/MTU behavior,
>and I can't find anyone who sees a problem with how NetBSD does things.
>
>We (actually Kevin) did recently fix a couple of slight problems with it,
>which are documented in the known problems draft, which also happen to exist
>on other systems.  They have to do with TCP option and IP option lengths
>not being considered in "segment size to transmit" computation.  The IP
>option bug was not previously documented, actually, but will be in the
>next version of the known problems draft.
>
>If you can point to a SPECIFIC problem, by all means do, but don't just
>assert that there's a problem without really describing it.

Jason, I *have* reported the *specific* problem to you.  More than
once, in fact.

Netbsd systematically miscomputes the MTU and advertises an
artificailly low MSS on multi-homed hosts with heterogenous
interfaces.  It even does this over loopback. That' s a *bug*.
And it directly impacts my use of NetBSD as a research platform.

Here's a trace showing miscomputation of an ethernet-sized MTU over a
loopback interface with an MTU that was carefully tuned to (multiple
of pagesize plus (epsilon for headers):



02:00:57.456615 localhost.65496 > localhost.5001: S 1699302561:1699302561(0) win 16384 <mss 1460,nop,ws
cale 0,nop,nop,timestamp 63777[|tcp]>
02:00:57.456618 localhost.5001 > localhost.65496: S 1699614725:1699614725(0) ack 1699302562 win 65535 <mss 1460,nop,wscale 0,nop,nop,timestamp 63777[|tcp]>
02:00:57.460517 localhost.65496 > localhost.5001: . ack 1 win 17520 <nop,nop,timestamp 63777 63777>
02:00:57.468330 localhost.65496 > localhost.5001: . 1:1449(1448) ack 1 win 17520 <nop,nop,timestamp 63777 63777>
02:00:57.491768 localhost.5001 > localhost.65496: . ack 1449 win 65535 <nop,nop,timestamp 63777 63777>
02:00:57.491769 localhost.65496 > localhost.5001: . 1449:2897(1448) ack 1 win 17520 <nop,nop,timestamp 63777 63777>
02:00:57.491770 localhost.65496 > localhost.5001: . 2897:4345(1448) ack 1 win 17520 <nop,nop,timestamp 63777 63777>
02:00:57.491771 localhost.5001 > localhost.65496: . ack 4345 win 62804 <nop,nop,timestamp 63777 63777>
02:00:57.491772 localhost.65496 > localhost.5001: . 4345:5793(1448) ack 1 win 17520 <nop,nop,timestamp 63777 63777>
02:00:57.491773 localhost.65496 > localhost.5001: . 5793:7241(1448) ack 1 win 17520 <nop,nop,timestamp 63777 63777>
02:00:57.491774 localhost.65496 > localhost.5001: . 7241:8689(1448) ack 1 win 17520 <nop,nop,timestamp 63777 63777>
02:00:57.491775 localhost.5001 > localhost.65496: . ack 7241 win 59908 <nop,nop,timestamp 63777 63777>
02:00:57.491776 localhost.65496 > localhost.5001: . 8689:10137(1448) ack 1 win 17520 <nop,nop,timestamp 63777 63777>
02:00:57.491777 localhost.65496 > localhost.5001: . 10137:11585(1448) ack 1 win 17520 <nop,nop,timestamp 63777 63777>
02:00:57.491778 localhost.65496 > localhost.5001: . 11585:13033(1448) ack 1 win 17520 <nop,nop,timestamp 63777 63777>
02:00:57.491779 localhost.5001 > localhost.65496: . ack 10137 win 57012 <nop,nop,timestamp 63777 63777>
02:00:57.491780 localhost.5001 > localhost.65496: . ack 13033 win 54116 <nop,nop,timestamp 63777 63777>
02:00:57.491781 localhost.65496 > localhost.5001: . 13033:14481(1448) ack 1 win 17520 <nop,nop,timestamp 63777 63777>
02:00:57.491782 localhost.65496 > localhost.5001: . 14481:15929(1448) ack 1 win 17520 <nop,nop,timestamp 63777 63777>
02:00:57.491783 localhost.65496 > localhost.5001: . 15929:17377(1448) ack 1 win 17520 <nop,nop,timestamp 63777 63777>
02:00:57.491784 localhost.65496 > localhost.5001: . 17377:18825(1448) ack 1 win 17520 <nop,nop,timestamp 63777 63777>
02:00:57.491785 localhost.65496 > localhost.5001: . 18825:20273(1448) ack 1 win 17520 <nop,nop,timestamp 63777 63777>
02:00:57.491786 localhost.65496 > localhost.5001: . 20273:21721(1448) ack 1 win 17520 <nop,nop,timestamp 63777 63777>
02:00:57.491787 localhost.5001 > localhost.65496: . ack 15929 win 51220 <nop,nop,timestamp 63777 63777>
02:00:57.491788 localhost.5001 > localhost.65496: . ack 18825 win 48324 <nop,nop,timestamp 63777 63777>
02:00:57.491789 localhost.5001 > localhost.65496: . ack 21721 win 45428 <nop,nop,timestamp 63777 63777>
02:00:57.491790 localhost.65496 > localhost.5001: . 21721:23169(1448) ack 1 win 17520 <nop,nop,timestamp 63777 63777>
02:00:57.491791 localhost.65496 > localhost.5001: . 23169:24617(1448) ack 1 win 17520 <nop,nop,timestamp 63777 63777>
02:00:57.491792 localhost.65496 > localhost.5001: . 24617:26065(1448) ack 1 win 17520 <nop,nop,timestamp 63777 63777>
02:00:57.491793 localhost.65496 > localhost.5001: . 26065:27513(1448) ack 1 win 17520 <nop,nop,timestamp 63777 63777>
02:00:57.491794 localhost.65496 > localhost.5001: . 27513:28961(1448) ack 1 win 17520 <nop,nop,timestamp 63777 63777>
02:00:57.491795 localhost.65496 > localhost.5001: . 28961:30409(1448) ack 1 win 17520 <nop,nop,timestamp 63777 63777>
02:00:57.491796 localhost.65496 > localhost.5001: . 30409:31857(1448) ack 1 win 17520 <nop,nop,timestamp 63777 63777>



>(And, can you please get your terminology right?  The syn_cache_*()
>funtions are not "SYN-flood compressed state".  The compressed state
>engine is used for all embryonic TCP connetions, not just when we
>believe we are under a SYN-flood attack; this is the main difference
>between us and BSD/OS in this regard.)

But I *am* using the established terminology, as established by BSDI
and as documented in the source-code function names ;).
The referent was perfectly clear.


I *am* sorry if this legitimate terminology clash causes confusion
between Dave Bormans' work and your own.  I do ackowledge you did some
substantial work there; I am sorry if I suggested otherwise.

But if you want people to draw a clear distinction between the two
implemntations, you really *should* have changed the names while
youwere at it.

As it is, objecting to someone calling functions called `syn_cache_*'
as `the syn-cache [flooding] code'' is just crazy.

But what *do* you want us to call it?