On Saturday 06 July 2002 00.38, Henrik Nordstrom wrote:

> To deal with 2, may I propose that the following symmetric FIN
> state machine is used instead of the odd assymetric one used today:
>
>
> ESTABLISHED / FIN  -> FIN_WAIT
>
> FIN_WAIT / ACK(R) -> CLOSE_WAIT
>
> CLOSE_WAIT / FIN(R) -> TIME_WAIT (or a new FIN_WAIT2 state)
>
> TIME_WAIT / ACK -> TIME_WAIT

On a second reflection it gets a little bit more complex than this. 
Need to keep track of which side has closed down, causing a small 
explosion in states...

FIN_WAIT_ORIGINAL
FIN_WAIT_REPLY
CLOSE_WAIT_ORIGINAL
CLOSE_WAIT_REPLY
FIN_WAIT2_ORIGINAL
FIN_WAIT2_REPLY
TIME_WAIT

State descriptions:

FIN_WAIT        -> Wait for ACK to FIN

CLOSE_WAIT      -> Wait for FIN in other direction



ESTABLISHED / FIN       -> FIN_WAIT_ORIGINAL

FIN_WAIT_ORIGINAL / ACK(R) -> CLOSE_WAIT_ORIGINAL

FIN_WAIT_ORIGINAL / FIN(R) -> FIN_WAIT2_ORIGINAL

CLOSE_WAIT_ORIGINAL / FIN(R) -> FIN_WAIT2_ORIGINAL

FIN_WAIT2_ORIGINAL / ACK -> TIME_WAIT


And identical in the other direction, s/ORIGINAL/REPLY/


Can be simplified by using TIME_WAIT for FIN_WAIT2_* if one likes, but 
isn't really fair if tuning is to be allowed for FIN_WAIT..

Regards
Henrik

Reply via email to