Ordinea pachetelor (tcp)

Pachetele, desigur, pot veni într-o ordine diferită. Dar nucleul va da datele aplicației dvs. întotdeauna în ordinea corectă.

Ie chiar dacă pachetele vin cu SEQ = 1, și o lungime de 1000, și SEQ = 2501 și lungimea de 500, înțelegerea de bază că ceva lipsește (lipsește 1500 octeți în mijlocul - a doua din SECV, adică numărul de octeți, 2501 , și am avut încă octeți de până la 1000 inclusiv), nu va da cel de-al doilea pachet la nivelul aplicației. Și în rețea, kernelul va trimite ACK 1000, că a primit primul pachet, sugerând că nu mai există.







Imediat ce pachetul vine cu SEQ 1001 și o anumită lungime, acesta va fi dat la kernel. Pachete cu SEQ = 2501, deși este la baza pentru o lungă perioadă de timp deja, aplicația nu va fi dat până când toate 1500 bytes de la 1001 la 2500 inclusiv, nu ajunge, pentru cât de multe pachete pot fi împrăștiate (cel puțin 1500 de pachete de la un byte). Dacă în procesul de transferare timeout pachet intermediar se întâmplă, pachetul cu SEQ = 2501, iar cererea dvs. nu va vedea, chiar dacă sistemul destinatarului a fost miezul său.

(Vreau să atrag atenția asupra faptului că sacii nu sunt numerotate sunt numerotate bytes câmpul SEQ în pachet - numărul de serie al primului octet al pachetului One subtilitatea: .. Numerotarea nu începe cu 0 și 1, dar cu un număr aleatoriu, care este determinată de către expeditor în momentul instalării. compuși - în pachet cu SYN pavilion exemplul de mai sus ar trebui să fie înțeles, astfel încât SYN a fost cu SEQ = 1) ..







Aceasta este, nu trebuie să vă faceți griji cu privire la TCP în cazul TCP. Dacă sunteți la un capăt de octeți scrise la mufa într-o anumită ordine, sunteți la celălalt capăt, sau le obține în exact același mod, sau nu a primit deloc.

În cazul tău, comportamentul sistemului nu poate fi prezis; ați furnizat date insuficiente. A fost necesar să se cunoască pachetul seqno «sin» flag: 1, iar tu ești un astfel de pachet, fie nu capturat, sau a uitat să scrie aici.

Presupunând că primul pachet în acest sens este real „primul“, apoi sin-pack în cazul seqno dvs. a fost egal cu 1455343061, și aplicația dvs., asculta priza nu va primi nici un fel de date și evenimente din acest soclu (de exemplu, selectați (. ) nu va fi înapoi, iar dacă te întorci, atunci acest soclu nu va fi în ea poate fi citit), în timp ce sistemul nu primește un pachet cu următoarele = 1455343061, după primirea care detaliază din ea va da cererea, și ea se va adăuga la acest număr dimensiunea pachetului (în acest caz, - 1440) și cererea de lângă care urmează să fie emise de seqno de pachete de date = 1455343061 + 1455344501 = 1440, cum Nu ar fi venit din rețea în ordine.

selectați încă cum va reveni. după fin, teoretizarea în cifre - nu uitați de rfc și implementările acestora.
Mai mult decât atât, în tcp syn (vorbiți despre TCP, da?) Nu poate fi arbitrar seqno, acesta este începutul "fluxului".







Articole similare

Trimiteți-le prietenilor: