ma come può il selective repeat funzionare in quel modo è sbagliato

per essere un vero selective repeat deve inviare i pacchetti allo strato superiore (il tuo programma) SE E SOLO SE ha una sequenza ordinata pronta

Il ricevitore controlla la correttezza della PDU. Se lo è la consegna al livello superiore, se non è in sequenza o la memorizza o la scarta, dipendendo dalla finestra di ricezione.
non devi risolvere un problema di ordinamento dei pacchetti nella gestione dei file, è strutturalmente sbagliato. Trattandosi di un problema di rete deve essere risolto dal protocollo di rete e non da quello che c'è dopo. Questo perchè, in caso contrario, se ora volessi riutilizzare il protocollo che hai creato dovresti assicurarti che ogni programma che ci si interfaccia debba, per cavoli suoi, riordinare i pacchetti arrivati. Cosa caldamente sconsigliata.