Stabilirea unei conexiuni

Efectuarea unei conexiuni

„Strângere de mână cu trei căi“ - o procedură folosită la stabilirea unei conexiuni. Această procedură este, de obicei, inițiată de un singur TCP și a răspuns de către un alt TCP. Această procedură funcționează, de asemenea, în cazul în care două TCP inițiatului simultan. Când inițializează o încercare se realizează la ambele capete, în același timp, fiecare TCP primeste un segment de „SYN“, care nu are nici o confirmare dupa ce a trimis „SYN“. Desigur, „SYN“ segment de sosirea duplicatelor vechi pot impresiona destinatarul, că o conexiune simultană. Utilizarea corectă a segmentelor „reset“ poate discrimina aceste cazuri.

Mai jos sunt câteva exemple de compuși initializare. Cu toate că aceste exemple nu arată conexiunea de sincronizare, utilizând segmente care transportă date, este perfect legitim, deoarece programul TCP primit segmente nu livreze datele clientului până când este clar datele sunt valabile (adică, datele de utilizator trebuie să fie „depozitate“ până atâta timp cât conexiunea nu merge într-o stare de ESTABLISHED). Cu trei căi strângere de mână reduce posibilitatea de conexiuni false. Obținerea de informații pentru o astfel de verificare se realizează prin punerea în aplicare a schimbului între memoria calculatorului și care circulă în rețeaua de mesaje.

Aici, programul protocolului TCP „de stat“ corespunde momentului imediat după trimiterea sau primirea de segment (conținutul segmentului prezentat în coloana din mijloc a fiecărui rând). Continutul segmentelor sunt prezentate în formă prescurtată, cu numărul de secvență, steaguri de control și câmpul ACK. Alte domenii, cum ar fi lungimea ferestrei și câmpul de date rămân în afara domeniului de aplicare al interesului nostru.

Fig. 7 semnal duplicat vechi SYN Prepararea

Ca un exemplu simplu, ia în considerare situația de a obține două exemplare vechi în figura 7. În linia 3 semnal vechi SYN ajunge la un TCP B. duplicat din urmă Programul nu se poate stabili că este o copie veche, și, prin urmare, îndeplinește modul obișnuit (linia 4).

TCP Un program detectează o valoare de eroare în domeniu și, prin urmare, returnează RST semnal ACK (reset). Astfel SEQ valoarea câmpului este aleasă astfel încât să facă segment plauzibil. Pro grame TCP B la primirea modificărilor semnalului RST starea LISTEN. Atunci când pe linia 6 SYN semnal valid și nu atinge depășite de program TCP B, procesul de sincronizare se produce în mod normal. În cazul în care semnalul SYN pe linia 6 ajunge TCP B semnal de program RST înainte, poate fi o combinație mai complexă, cu incinta de schimb RST în ambele direcții.

conexiuni deschise jumătate și alte anomalii

conexiune deja stabilită se numește un „semi-deschis“, în cazul în care una dintre conexiunea TCP închis, sau l-au abandonat. Și a făcut-o la sfârșitul lui, fără a spune partenerul lor. De asemenea, această situație poate apărea dacă sincronizarea este deranjat la capetele liniei din cauza unei defecțiuni care a dus la pierderea de informații în memorie. În cazul în care astfel de compuși este o încercare de a trimite date în ambele sensuri, atunci conexiunea de repornire. Dar este de așteptat ca conexiunile semi-deschise sunt o raritate, iar procedura de recuperare este implicat ușor.

Dacă la sfârșitul compusului A este considerat a fi inexistentă, iar clientul la sfârșitul B încearcă să trimită date, aceasta va duce la faptul că, la sfârșitul TCP B va primi mesajul de control la repornire. Acest mesaj apare programul TCP la sfârșitul B, că ceva este greșit și se propune să desființeze conexiunea.

Să presupunem că doi clienți de la punctele A și B să comunice unul cu celălalt, iar în acest moment există colaps, ceea ce duce la pierderea de informații în memoria programului la sfârșitul TCP A. În funcție de sistemul de operare, programul de serviciu TCP A, este probabil să fie implicat un mecanism pentru corectarea erorii. Când TCP Un program va fi lansat din nou, este probabil să re-înceapă activitatea de la început sau de la un punct de recuperare. Ca urmare, programul A, probabil va încerca să deschidă compusul (OPEN) sau trimite informații (TRIMITERE) prin intermediul unui compus care crede că este deschis. În acest din urmă caz, din TCP programul local (la capătul A) este primit un mesaj de „conexiune nu este deschis.“ Atunci când încearcă să stabilească o conexiune TCP Un program va trimite un segment care conține SYN semnal. Acest scenariu rezultat în situația prezentată în figura 8. După TCP A se blochează, utilizatorul încearcă să deschidă conexiunea. Programul TCP B, între timp, continuă să creadă că conexiunea va rămâne deschisă.

Fig. 8 Detectarea semideschis

Atunci când pe linia 3 SYN semnal ajunge la programul B TCP, care este sincronizat, iar segmentul de intrare este în afara ferestrei, programul TCP B răspunde la această confirmare, arată numărul liniei pe care dorește să le primească (ACK = 100). TCP Un program, văzând că pe segmentul linia 4 nu este confirmat trimis, acesta fixează absența sincronizării și trimite o resetare (RST), așa cum a descoperit că compusul este întredeschisă. Pe linia 5 Programul TCP B intrerupe conexiunea. TCP Un program va continua să încerce să stabilească o conexiune.

Acum, problema este rezolvată printr-un simplu de confirmare a celor trei moduri (Figura 5).

O altă poveste interesantă are loc în cazul în care TCP Un program se blochează în program și TCP B, având în vedere ceea ce este în starea de sincronizare, încearcă să trimită datele. Această situație este ilustrată în figura 9.

În acest caz, datele au fost trimise de către programul TCP B, și a venit la programul TCP A (linia 2). Acestea vor fi respinse, deoarece au folosit conexiunea nu există. Pe baza acestui TCP Un program trimite semnalul RST. De îndată ce semnalul RST este primit programul TCP B, acesta va fi examinat și folosit înainte de conexiunea este eliminată.

. TCP A. TCP B 1.sboy. (Număr parcela 300, recepție - 100) 2. (??) <-- <-- ESTABLISHED 3. --> --> (Lichidare !!)

Fig. 9 partea activă conduce la descoperirea
Conexiune semideschis

Figura 10 arată că două programe TCP - A si B -, având o stare pasivă, așteptând SYN semnalul. Vechiul program de semnal duplicat ajunge la TCP B (linia 2), se execută. (Linia 3) Returnată semnal SYN-ACK și cauzele TCP Un program pentru a genera un semnal RST (semnal pe linia 3 ACK inacceptabilă). TCP B acceptă resetare și revine la starea pasivă ASCULTĂ.

Fig. 10 semnal vechi SYN inițiază un duplicat reporniri
două prize pasive

Pot exista multe alte variante, care pot fi explicate prin regulile descrise mai jos pentru a crea și de prelucrare a semnalului RST.

Crearea unui semnal de repornire

Potrivit regula principală, o resetare (RST) trebuie trimise de fiecare dată când sosește un segment, care nu este, evident, destinat pentru această conexiune. În cazul în care nu este clar dacă este cazul, ar trebui să se abțină de la repornire.

trei grupuri de state pot fi distinse pentru conexiunea:

În cazul în care conexiunea este în orice stare non-sincronizate (ASCULTARE, SYN-SENT, SYN-RECEIVED), dacă există o confirmare a segmentului de intrare nu a fost încă trimis (segmentul poartă o valoare inacceptabilă în câmpul ACK) sau în cazul în care un segment de intrare are un nivel de securitate / nu este închis și care corespunde nivelului cerut pentru conexiunea, apoi o resetare este trimis.

În cazul în care SYN nostru nu a fost confirmată, iar nivelul de prioritate al segmentului de intrare este mai mare decât nivelul cerut, sau va crește nivelul de prioritate locală (dacă este acceptabil pentru utilizator și sistemul) sau va trimite o resetare. Sau, dacă nivelul de prioritate al segmentului de intrare este mai mică decât a solicitat, prelucrarea va fi continuată în continuare, ca și în cazul în care nivelul a fost același (în cazul în care TCP-ul de la distanță nu se poate ridica nivelul de prioritate a noastră potrivi acest lucru va fi notat în segmentul următor îl trimite, iar apoi va fi închis compus). În cazul în care SYN nostru a primit confirmare (probabil în acest segment de intrare) nivelul de prioritate a segmentului de intrare trebuie să se potrivească exact locațiile Nome nivel. În cazul în care această ultimă condiție nu este îndeplinită, o resetare este trimis.

În cazul în care segmentul de intrare are un semnal ACK, atunci o resetare va avea un număr de secvență care corespunde numărului de semnal ACK în segmentul de intrare. In caz contrar, o resetare va avea un număr de zero secvență și ACK - un număr egal cu suma numărului segmentului de intrare și aceeași lungime. Conexiunea nu schimbă starea.

În cazul în care conexiunea este într-o stare sincronizata (ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, LAST ACK, TIME-WAIT), orice segment inacceptabil (din numerele de secvență fereastră, care transportă un număr greșit confirmare) ar trebui să conducă la apariția unui câmp segment de confirmare gol care conține numărul curent în coada de așteptare pentru parcela, precum și elemente care să indice următorul număr de secvență de așteptat să fie conexiunea. Conexiunea rămâne în starea sa anterioară. În cazul în care segmentul de intrare are un nivel de protecție, de izolare sau de prioritate, fără compuși corespunzători la nivel local, apoi o resetare este trimis, iar compusul se mută în stare închisă. reset ia numărul de secvență care corespunde numărului ACK al segmentului de intrare.

Procesarea pentru a reporni semnalul

Pentru toate statele cu exceptia SYN-SENT, toate segmentele din semnalul de resetare (RST) testat câmpurile SEQ. O resetare este validă dacă numărul său de secvență este în interiorul ferestrei. In starea SYN-SENT (semnalul RST este primit ca răspuns la un semnal inițial SYN), semnalul RST este recunoscut în cazul în care câmpul Confirmare ACK trimiterea mai devreme de semnal SYN.

Destinatarul RST validează mai întâi, și abia apoi își schimbă starea. În cazul în care receptorul a fost în stare ASCULTARE, îl ignoră. În cazul în care receptorul a fost capabil să syn- primit, se întoarce din nou la starea LISTEN. În alte cazuri, receptorul intrerupe conexiunea si trece la starea ÎNCHIS. În cazul în care beneficiarul este în orice alt stat, intrerupe conexiunea și înainte de a merge la starea CLOSED, notifica clientul.