Jump to content
int21h.exe

[Protocoale] TCP - Transmission Control Protocol | Rezumat

Recommended Posts

Randurile de mai jos constituie ceea ce mi s-a parut ca este important de stiut/retinut despre acest protocol.

Nu exista o sursa anume, este o comasare a informatiilor(asadar se pot repeta unele chestii) asa cum le-am inteles eu (deci pot sa apara unele erori)

TCP - Transmission Control Protocol

==================================================================================

Specificatii complete, oficiale : RFC 793 (Request For Coment - RFC)

Cuprins

1. Cum functioneaza TCP

2. Caracteristici principale TCP

3. Explicatii caracteristici

4. Segmentul TCP:

5. TCP Flags

7. Stabilirea si incheierea conexiunii

Protocol : un set de reguli ce prezinta formatul utilizat la comunicarea intre sisteme.

==================================================================================

1. Cum functioneaza TCP

-> inainte ca transferul datelor sa inceapa, TCP stabileste o conexiune intre doua procese de aplicatie prin stabilirea/setarea parametrilor de protocol. Acesti parametrii sunt stocati intr-o structura variabila denumita TCB (transmission control blocks). Odata ce conexiunea a fost stabilita, transferul datelor poate incepe. In timpul transmisiei parametrii se pot modifica pentru a eficientiza transmisia sau pentru a preveni congestiile. La sfarsit,conexiunea este inchisa. in anumite imprejurari conexiunea poate fi terminata fara o inchidere formala (FIN-> FIN/ACK..)

=============================================================================================================================================

2. Caracteristici principale TCP

TCP, Protocol la nivelul transport (transport layer) - peste IP- este:

-> orientat pe flux

-> sparge datele trimise in bucati mai mici la nivelul sursei si le reasambleaza la nivelul destinatarului

-> de incredere , verifica starea pachetelor, erorile, daca pachetele au fost primite etc,

-> orientat/bazat pe conexiune (deschide/ inchide o comunicatie intre 2 hosturi)

-> complex

-> doar unicast

-> utilizat pentru cele mai multe aplicatii : web(HTTP), email (SMTP), transfer fisiere(FTP), terminal (telnet), etc

TCP : furnizeaza servicii complete la nivelul transport aplicatiilor.

TCP : furnizeaza o conexiune de incredere intre ambele capete ale transmisiunii. Aceasta conexiune trebuie setata, mentinuta si apoi inchisa

TCP : divizeaza fluxul de date in in unitati de marimi limitate numite "segmente". Aceste segmente sunt reasamblate intr-o maniera de incredere la nivelul destinatarului. Increderea se obtine prin mentinerea secventei originale la asamblarea segmentelor si cererea de retransmisie a datelor pierdute sau corupte. In timp ce protocolul IP furnizeaza adresarea logica a segmentelor si este responsabil pentru transmiterea lor in retele, protocolul TCP furnizeza o adresare aditionala care permite infiintarea/setarea unor conexiuni pentru mai multe aplicatii si servicii in acelasi timp. Fiecare aplicatie care cauta conexiune TCP este asignata unui port.

TCP : furnizeaza o conexiune logica in ambele sensuri concomitent (full duplex) intre 2 procese la nivelul aplicatie(layer 5).

TCP : da voie destinatarului sa controleze rata la care (cantitatea in care) sender-ul ii trimite date, pentru a evita buffer overflow-ul.

===============================================================================================================================================

3. Explicatii caracteristici

TCP - Protocol orientat pe conexiune:

-> procesele participante stabilesc o conexiune si negociaza parametrii acesteia. Negocierea se face prin transmiterea unor blocuri de control (TCB -transmission control blocks). La sfarsitul transmisiei conexiunea trebuie inchisa : TCP inchide fiecare sens al conexiunii in mod separat, ceea ce permite ca fluxul de date intr-un sens sa continue chiar si dupa ce celalalt sens a fost inchis.

TCP - Protocol de incredere:

-> inseamna fie ca toate segmentele/datele au fost livrate cu succes fie conexiunea e "stricata". TCP este creat sa mearga peste IP si astfel nu isi asuma ca serviciile care stau la baza retelei sunt de incredere: pentru a asigura increderea, fiecarei bucati de data ii este atribuit un numar si este angajata o cerere repetitiva automata (ARQ - automatic repeat request) selectiva, care sa ceara retransmiterea bucatilor pierdute sau corupte.

TCP: In secventa(secvential)

-> garanteaza ca datele sunt primite de procesul destinatar in aceasi ordine in care au fost trimse. Secventierea este implementata prin acelasi mecanism utilizat la detectarea bucatilor lipsa. Toate datele primite sunt stocate intr-un bufer de intrare in functie de numarul primit de fiecare bucata in parte. Procesul care destinatar, citeste datele din buffer in secventa corecta.

TCP: Protocol orientat pe flux

-> conexiunea poate fi perceputa ca fiind continua in ciuda faptului ca serviciile care stau la baza retelei trimit datele in bucati. Aceste bucati pot avea diverse marimi si pot avea o limita de marime maxima. Procesul sender poate trimite datele fie in mod continuu fie in rafale/explozie. Toate datele de trimis sunt stocate intr-un buffer de iesire, fiind mai apoi partitionate, sparte in bucati, numite segmente conform protocolului TCP si apoi sunt trimise peste retea. In partea destinatarului, datele(segmentele) primite sunt stocate intr-un bufer de intrare conform cu secventierea discutata anterior si de unde procesul destinatar le poate citi fie bucata cu bucata (segment cu segment)) fie byte dupa byte.

TCP : Protocol full duplex:

-> fiecare parte implicata in transmisiune are control asupra ei. Spre exemplu fiecare parte poate trimite date in orice moment sau poate incheia transmisiunea in orice moment.

===============================================================================================================================================

4. Segmentul TCP

- desi este protocol Byte-oriented, transmiterea unui byte per pachet IP ar fi ineficienta. Asa ca se datele sunt impartite in bucati (chunk) denumite segmente. Ficare segment e incapsulat in datagrama IP si apoi trimis.

- fiecare segment este constituit din header/antet (obligatoriu) si date (optional)

Header-ul este format din:

-> Adresa port sursa : (16 biti) numarul portului asignat procesului care trimite optiunile sau datele din segment;

-> Adresa port destinatar: (16 biti) numarul portului asignat procesului care primeste optiunile sau datele continute in segment;

-> Numar secventa : (32 biti) contine numarul asignat primului byte al datelor trimise in segment; cand este stabilita conexiunea, fiecare parte genereaza propriul sau numar de secventa initial (ISN - initial sequence number) aleator, care este incrementat cu unu cu fiecare byte de date.

-> Numar de confirmare(Acknowledgment No): (32biti) contine numarul secventei pentru urmatorul segment care se asteapta sa fie primit de ceqalalta parte.

-> Lungime antet (header length): (4 biti) contine marimea headerului segmentului, impartita la 4. Deoarece headerul poate avea intre 20-60 bytes plaja de valori este cuprinsa intre 5 si 15.

-> Rezervat : (6 biti) camp rezervat pentru o utilizare viitoare;

-> Control : (6 biti) contine flaguri de control a transmisiunii (URG, ACK, PSH, RST, SYN, FIN);

-> Marime fereastra (window size) : (16 biti) contine contine informatii despre marimea ferestrei de transmisie pe care cealalta parte trebuie sa o mentina.

-> Checksum : (16 biti) contine valoarea de control. Aceasta se obtine astfel: se umple initial cu valoarea 0. Se adauga un pseudo-header cu informatii din IP. Se trateaza intregul segment cu cu pseudo headerul ca un flux de numere de 16 biti. Daca numarul de bytes este par, se adauga 0 la sfarsit. Se adauga toate numerele de 16 biti utilizand metoda "1’s complement binary arithmetic". Se complementeaza rezultatul si se introduce in camplu Checksum.

: Mod de verificare Checksum: destinatarul (receiver-ul) calculaeaza valoarea de control pentru pachetul primit,care include si valoarea de control initiala, dupa adaugarea pseudo-headerului. Daca noua valoare de control nu este 0 inseamna ca pachetul este corupt si se va renunta la el.

-> Pointerul "Urgent " (urgent pointer) : (16 biti) este utilizat doar daca este setat falagul "URG". Defineste locatia ultimului byte urgent din sectiunea de date a segmentului. Datele urgente sunt acele date trimise in afara secventei

-> Optiuni : (pana la 40 bytes) pot fi adaugate headerului optiuni pana la maxim 40 bytes (320 biti). Optiunile sunt umplute/captusite (ha, ha, suna ca dracu padded in romana) cu zero-uri astfel incat numarul total de byte din header sa fie divizibil cu 4.

--->TCP options:

  1. classification :
  2. end of options : 1 byte, utilizat ca padding la sfarsitul optiunilor;
  3. no operation (used for padding): 1 byte, utilizat pentru a umple spatiul intre optiuni si ca padding;
  4. setting maximum segment size : defineste marimea maxima a unei bucati de date -chunk ;
  5. setting window scale factor;
  6. time stamp.

===============================================================================================================================================

5. TCP Flags

CWR: Congestion Window Reduced (ECE ACK)

ECE (ECN-Echo): Indicates congestion

URG: (Urgent pointer field significant) - Urgent. Daca acest bit este setat atunci pointerul urgent este valid.

ACK: (Acknowledgment field significant) - Confirmare. Daca acest bit este setat, numarul de confirmare este valid.

PSH: (Push function) - daca acest bit este setat, cealalta parte nu trebuie sa mai stocheze in buffer datele de trimis ci sa le trimita de indata ce sunt disponibile, fara sa le mai tina in buffer.

RST: (Reset the connection) - daca acest bit este setat, trebuie sa se renunte la conexiune imediat din cauza unei conditii speciale

SYN: (Synchronize sequence numbers) - bitul este setat in segmentul de cerere de conexiune in momentul stabilirii acesteia

FIN: (Finalyze : No more data from sender) - daca acest bit este setat inseamna ca senderul a terminat de transmis datele si nu mai are nimic altceva de transmis iar conexiunea poate fi inchisa. Procesul va astepta date in continuare pana cand cealalta parte trimite de asemenea FIN.

===============================================================================================================================================

6. Porturi bine-cunoscute utilizate cu TCP

Port -- Protocol Description -- RFC/STD #

7 -- Echo -- Echoes a received data back to its sender -- STD20

9 -- Discard -- Discards any data that are received -- STD21

13 -- Daytime -- Returns the date and the time in ASCII string format -- STD25

19 -- Chargen -- Sends back arbitrary characters until connection closed -- STD22

20 -- FTP -- Data File Transfer Protocol (data transmission connection, unencrypted) -- STD9

21 -- FTP -- Control File Transfer protocol (control connection, unencrypted) -- STD9

22 -- SSH -- Secure Shell (SSH)—used for secure logins, file transfers (scp, sftp),and port forwarding -- RFC4250-4256

23 -- Telnet -- Telnet (unencrypted) -- STD8, STD27-32

25 -- SMTP -- Simple Mail Transfer Protocol (sending email) -- STD10

37 -- Time -- Returns the current time in seconds since 1/1/1900 in a 32 bit format -- STD26

53 -- Nameserver -- Domain Name Service -- STD13

80 -- HTTP -- Hypertext Transfer Protocol -- RFC2616

110 -- POP3 -- Post Office Protocol 3 (email download) -- STD53

111 -- RPC -- SUN Remote Procedure Call -- RFC5531

143 -- IMAP -- Interim Mail Access Protocol v2 (email access) -- RFC2060

443 -- SHTTP -- Secure Hypertext Transfer Protocol -- RFC2660

995 -- POP3 -- POP3 over TLS/SSL -- RFC2595

=============================================================================================================================================

7. Stabilirea si incheierea conexiunii

-> Stabilirea conexiunii intre 2 hosturi (A si B)se face in 4 pasi:

  1. hostul A trimite un segment prin care anunta ca vrea sa stabileasca o conexiune(SYN)). Acest segment contine informatiile initiale despre traficul de la A la B
  2. hostul B trimite un segment confirmand (ACK) primirea cererii de la A;
  3. hostul B trimite un segment cu informatia despre traficul de la B la A(SYN);
  4. hostul A trimite un segment confirmand (ACK) primirea cererii de la B;

Pasii 2 si 3 pot fi uniti intr-un singur segment si rezulta "three-way handshaking"

-> Incheierea conexiunii intre 2 hosturi.

Poate fi initiata de oricare dintre procese : "four-way handshaking"

  1. hostul A trimite hostului B un segment prin care anunta ca vrea sa inchida conexiunea (FIN);
  2. hostul B trimite hostului A un segment de confirmare a cererii (ACK) - in acest moment conexiunea de la A la B este inchisa dar de la B la A ramane inca deschisa.
  3. cand hostul B este pregatit sa incheie si el conexiunea trimite un segment in care anunta acest lucru (FIN)
  4. hostul A trimite hostului B un segment de confirmare a cererii de inchidere si astfel conexiunea se inchde la amnele capete

Daca unul din procese doreste sa abandoneze conexiunea in imprejurari anormale va trimite un segment cu RST(ReSeT nu Romanian Security Team! ) pentru a o distruge.

===================================2014@int21h.exe==========================================================================================================

  • Upvote 2
Link to comment
Share on other sites

in RFC sunt specificati patru pasi


1) A --> B SYN my sequence number is X
2) A <-- B ACK your sequence number is X
3) A <-- B SYN my sequence number is Y
4) A --> B ACK your sequence number is Y

dar in practica 2) si 3) sunt uniti in acelasi pachet (dupa cum a zis si el)

Link to comment
Share on other sites

Stabilirea conexiunii se face in 3 pasi. Three way handshake, nu 4 way.

SYN

SYN + ACK (un singur pachet cu ambii biti setati)

ACK

Salut, asa este, am specificat acest lucru separat, dupa explicarea procesului in 4 pasi :

Pasii 2 si 3 pot fi uniti intr-un singur segment si rezulta "three-way handshaking"
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...