int21h.exe Posted March 28, 2014 Report Posted March 28, 2014 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)Cuprins1. Cum functioneaza TCP2. Caracteristici principale TCP3. Explicatii caracteristici4. Segmentul TCP:5. TCP Flags7. Stabilirea si incheierea conexiuniiProtocol : 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 TCPTCP, 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), etcTCP : 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 inchisaTCP : 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 caracteristiciTCP - 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: classification : end of options : 1 byte, utilizat ca padding la sfarsitul optiunilor; no operation (used for padding): 1 byte, utilizat pentru a umple spatiul intre optiuni si ca padding; setting maximum segment size : defineste marimea maxima a unei bucati de date -chunk ; setting window scale factor; 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 TCPPort -- Protocol Description -- RFC/STD #7 -- Echo -- Echoes a received data back to its sender -- STD209 -- Discard -- Discards any data that are received -- STD2113 -- Daytime -- Returns the date and the time in ASCII string format -- STD2519 -- Chargen -- Sends back arbitrary characters until connection closed -- STD2220 -- FTP -- Data File Transfer Protocol (data transmission connection, unencrypted) -- STD921 -- FTP -- Control File Transfer protocol (control connection, unencrypted) -- STD922 -- SSH -- Secure Shell (SSH)—used for secure logins, file transfers (scp, sftp),and port forwarding -- RFC4250-425623 -- Telnet -- Telnet (unencrypted) -- STD8, STD27-3225 -- SMTP -- Simple Mail Transfer Protocol (sending email) -- STD1037 -- Time -- Returns the current time in seconds since 1/1/1900 in a 32 bit format -- STD2653 -- Nameserver -- Domain Name Service -- STD1380 -- HTTP -- Hypertext Transfer Protocol -- RFC2616110 -- POP3 -- Post Office Protocol 3 (email download) -- STD53111 -- RPC -- SUN Remote Procedure Call -- RFC5531143 -- IMAP -- Interim Mail Access Protocol v2 (email access) -- RFC2060443 -- SHTTP -- Secure Hypertext Transfer Protocol -- RFC2660995 -- POP3 -- POP3 over TLS/SSL -- RFC2595=============================================================================================================================================7. Stabilirea si incheierea conexiunii-> Stabilirea conexiunii intre 2 hosturi (A si B)se face in 4 pasi: 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 hostul B trimite un segment confirmand (ACK) primirea cererii de la A; hostul B trimite un segment cu informatia despre traficul de la B la A(SYN); 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" hostul A trimite hostului B un segment prin care anunta ca vrea sa inchida conexiunea (FIN); 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. cand hostul B este pregatit sa incheie si el conexiunea trimite un segment in care anunta acest lucru (FIN) 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========================================================================================================== 2 Quote
Nytro Posted March 28, 2014 Report Posted March 28, 2014 Stabilirea conexiunii se face in 3 pasi. Three way handshake, nu 4 way.SYNSYN + ACK (un singur pachet cu ambii biti setati)ACK Quote
compile Posted March 28, 2014 Report Posted March 28, 2014 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 Ydar in practica 2) si 3) sunt uniti in acelasi pachet (dupa cum a zis si el) Quote
int21h.exe Posted March 28, 2014 Author Report Posted March 28, 2014 Stabilirea conexiunii se face in 3 pasi. Three way handshake, nu 4 way.SYNSYN + ACK (un singur pachet cu ambii biti setati)ACKSalut, 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" Quote