2012-10-18 51 views
48

Wikipedia article on TCP indica che i pacchetti IP che trasportano i segmenti TCP a volte possono andare persi e che TCP "richiede la ritrasmissione dei dati persi".Quali sono le regole di ritrasmissione per TCP?

Quali sono esattamente le regole per richiedere la ritrasmissione di dati persi? A che ora vengono eseguite le richieste di ritrasmissione? C'è un limite superiore al numero? Esiste una funzionalità per il client che indichi al server di dimenticare l'intero segmento TCP per il quale la parte è scomparsa quando il pacchetto IP è scomparso?

+0

in genere il tempo di ritrasmissione = tempo di andata e ritorno * un po 'costante e un ritardo fisso (che è piuttosto pessimista) per il pacchetto 'syn'. –

risposta

44

Quali sono esattamente le regole per richiedere la ritrasmissione dei dati persi?

Il destinatario non richiede la ritrasmissione. Il mittente attende un ACK per l'intervallo di byte inviato al client e quando non viene ricevuto, invia nuovamente i pacchetti, dopo un intervallo particolare. Questo è ARQ (ReQuest ripetizione automatica). Ci sono diversi modi in cui questo è implementato.

Stop-and-wait ARQ 
Go-Back-N ARQ 
Selective Repeat ARQ 

sono dettagliate nel RFC 3366.

A che ora vengono eseguite le richieste di ritrasmissione?

Le ritrasmissioni: i tempi e il numero di tentativi non vengono applicati dallo standard. È implementato in modo diverso da diversi sistemi operativi, ma la metodologia è fissa. (Uno dei modi per impronte digitali dei sistemi operativi forse?)

I timeout sono misurati in termini di tempi RTT (Round Trip Time). Ma questo non è necessario molto spesso a causa della ritrasmissione rapida che interviene quando vengono ricevuti 3 ACK duplicati.

C'è un limite superiore al numero?

Sì, c'è. Dopo un certo numero di tentativi, l'host viene considerato "inattivo" e il mittente si arrende e distrugge la connessione TCP.

Esiste una funzionalità che consente al client di indicare al server di dimenticare l'intero segmento TCP per il quale la parte è scomparsa quando il pacchetto IP è scomparso?

L'intero punto è comunicazione affidabile. Se si desidera che il client dimentichi una parte, in primo luogo non si utilizzerà TCP. (Forse UDP?)

7

Non c'è un orario fisso per la ritrasmissione. Semplici implementazioni stimano l'RTT (round-trip-time) e se nessun ACK per inviare i dati è stato ricevuto in 2x quel tempo, quindi si rispediscono.

Essi quindi doppio il tempo di attesa e re-inviare ancora una volta se ancora una volta non vi è alcuna risposta. Risciacquare. Ripetere.

I sistemi più sofisticati ottengono migliori stime di quanto tempo occorre per l'ACK e indovina esattamente quali dati sono stati persi.

La linea di fondo è che non esiste una regola hard-and-fast su esattamente quando ritrasmettere. Sta alla realizzazione.Tutte le ritrasmissioni vengono attivate esclusivamente dal mittente in base alla mancanza di risposta da parte del destinatario.

TCP mai gocce di dati quindi no, non c'è modo di indicare che un server dovrebbe dimenticare qualche segmento.

+0

"indovina esattamente quali dati sono stati persi" SACK (riconoscimento selettivo) non indovina. Spero tu non intenda SACCO. –

+0

Il ricevitore può ri-ACK i dati precedenti quando è stato ricevuto un segmento fuori ordine. Questo suggerisce al mittente che alcuni ma non tutti i pacchetti in sospeso sono stati persi e quindi il mittente può scegliere di ritrasmettere solo un sottoinsieme di ciò che è nella sua finestra in uscita (e quindi produrre un pacchetto di rete più piccolo e un uso di larghezza di banda inferiore) piuttosto che inviare un pacchetto più grande che includa dati precedentemente inviati in un pacchetto successivo (che altrimenti ridurrebbe la latenza e il numero di pacchetti inviati in caso di perdite multiple). Non c'è certezza, quindi chiamiamola "congettura istruita". –

+1

vedi SACK. È un'intestazione aggiuntiva che indica al mittente esattamente ciò che il ricevitore ha. Credo che quasi tutti gli stack TCP contemporanei implementino SACK al giorno d'oggi –

Problemi correlati