TCP - dalis I Orientuotis y Lab 5. Pirmas TCP modulis, kuris apima duomenų paketų formatą,duomenų perdavimą ir ryšio valdymą. 1 Overview Byte Stream Byte Stream TCP = Transmission Control Protocol (persiuntimo valdymo protokolas) • Orientuoto ryšio protokolas • Tiekia patikimą unicast(Field-networking,ty. darbas tinkle) transliavimą end-to-end bitų srautą per nepatikimą internetworką(tarptinklinį ryšį). TCP TCP IP Internetwork 2 Orientuotas ryšys • Prieš perduodant bet kokius duomenis, TCP sudaro ryšį: • Vienas TCP objektas laukia ryšio (“server”) • Kitas TCP objektas (“client”) susijungia su serveriu • Tikrasis procesas sudarant ryšį yra sudėtingesnis • Kiekvienas ryšys yra pilnai dvipusis CLIENT SERVER Request a co nnection onnection Accept a c Data Transer waiting for connection request Disconnect 3 Patikimas • Baitų srautas suskaidomas į dideles dalis, kurios yra vadinamos segmentais • Gavėjas siunčia gavimo pranešimą (ACKs) segmentams • TCP palaiko ir laikmatį (taimerį). Jei ACK negautas laiku, tada segmentas yra persiunčiamas dar kartą. •Išsiaiškinant klaidas: • TCP turi kontrolines sumas headeriui ir duomenims. Segmentai su klaidingom kontrolinėm sumom yra atmetami • Kiekvienas baitas, kuris yra persiųstas turi sekos numerį 4 Baito srauto aptarnavimas • Žemesniuose lygiuose, TCP sutvarko duomenis į blokus ir segmentus. • Aukštesniuose lygiuose TCP sutvarko duomenis kaip baitų seką ir nenustato ribos tarp baitų • Taigi: Aukštesni lygiai nežino apie segmentų pradžią, bei pabaigą ! Application Application 1. read 40 bytes 2. read 40 bytes 3. read 40 bytes 1. write 100 bytes 2. write 20 bytes TCP queue of bytes to be transmitted Segments TCP queue of bytes that have been received 5 TCP Formatas • TCP segmentai turi 20 bitų headerį su >= 0 bitų informacija. IP header TCP header 20 bytes TCP data 20 bytes 0 15 16 Source Port Number 31 Destination Port Number Sequence number (32 bits) header length 0 Flags TCP checksum 20 bytes Acknowledgement number (32 bits) window size urgent pointer Options (if any) DATA 6 TCP header Fields • Porto numeris: • Porto numeris nustato galutinį jungimosi punktą. • Tai pora <IP address, port number> nustato galutinį jungimosi punktą. • Dvi poros <client IP address, server port number> ir <server IP address, server port number> identifikuoja TCP jungimąsi, koks jis yra . Applications Ports: 23 80 104 Applications 7 80 16 TCP TCP IP IP Ports: 7 TCP header Fields • Eiles numeris (SeqNo): – Eilės numeris yra 32 bito ilgio. – Taigi sekos numerio diapazonas yra 0 <= SeqNo <= 232 -1 4.3 Gbyte – Kiekvienas sekos numeris atpažįsta baitą, baitų sraute – Pradinis ryšio sekos numeris (ISN) yra nustatomas prieš ryšio sukūrimą Q: What are possible requirements for ISN ? 8 TCP header Fields • Patvirtinimo numeris (AckNo): – Acknowledgements are piggybacked, I.e segmentas iš A -> B gali turėti patvirtinimą duomenims nusiųstiems iš B -> A kryptį Q: Why is piggybacking good ? – Hostas naudoja gavimų pranešimų numerio lauką, siųst patvirtinimams . (If a host sends an AckNo in a segment it sets the “ACK flag”) – Gavimų pranešimų numeris turi sekantį eiles nr. Kurį hostas nori gauti Pvz: The acknowledgement for a segment with sequence numbers 0-1500 is AckNo=1501 9 TCP headr Fields • Patvirtinimo numeris (cont’d) – TCP naudoja sliding window flow protocolą (see CS 457) reguliuoti duomenų srautą tarp siuntėjo ir gavėjo – TCP naudoja sekantį sliding window variantą : – jokių NACKs (neigiami gavimo pranešimai) – Tiktai kaupiamieji ACKs • Pvz: Tarkim: Siuntėjas siunčia du segmentus “1..1500” ir “1501..3000”, bet gavėjas gauna tiktai antrą segmentą. Šiuo atveju: gavėjas negali patvirtinti kad gavo antrą paketą. Tai gali būti siunčiamas tik AckNo=1 10 TCP header fields • Header Length ( 4bits): – Headerio ilgis yra 32-bitų žodžiuose – Atkreipkit dėmesį, kad TCP headeris turi kintamą ilgį (su mažiausiai 20 bitais) 11 TCP header fields • Flag bits: – URG: Urgent pointer is valid – If the bit is set, the following bytes contain an urgent message in the range: SeqNo <= urgent message <= SeqNo+urgent pointer – ACK: Patvirtinimo numeris yra teisingas – PSH: PUSH Flag – Pranešimas iš siuntėjo gavėjui, kad gavėjas turėtų praleist visus duomenis siunčiamus aplikacijai (programai). – Paprastai nustatomas siuntėjo, kai jo bufferis yra tuščias 12 TCP header fields • Flag bits: – RST: Reset the connection – nustatyti iš naujo ryšį – The flag causes the receiver to reset the connection – Gavėjas su RST nutraukia ryšį ir nurodo aukštesnį aplikacijos (programos) lygį kuriam bus resetas – SYN: Synchronize sequence numbers – Siunčiamas pirmam pakete pradedant ryšį – FIN: Sender is finished with sending – Used for closing a connection – Both sides of a connection must send a FIN 13 TCP header fields • Lango dydis: – Kiekviena ryšio pusė paskelbia lango dydį – Window size is the maximum number of bytes that a receiver can accept. – Maximum window size is 216-1= 65535 bytes • TCP Checksum(kontrolinė suma): – TCP checksum covers over both TCP header and TCP data (also covers some parts of the IP header) • Urgent Pointer: – Only valid if URG flag is set 14 TCP header fields • Options: End of Options kind=0 1 byte NOP (no operation) kind=1 1 byte Maximum Segment Size Window Scale Factor Timestamp kind=2 len=4 maximum segment size 1 byte 1 byte 2 bytes kind=3 len=3 shift count 1 byte 1 byte 1 byte kind=8 len=10 timestamp value timestamp echo reply 1 byte 1 byte 4 bytes 4 bytes 15 TCP header fields • Options: – NOP is used to pad TCP header to multiples of 4 bytes – Maximum Segment Size – Window Scale Options » Increases the TCP window from 16 to 32 bits, I.e., the window size is interpreted differently Q: What is the different interpretation ? » This option can only be used in the SYN segment (first segment) during connection establishment time – Timestamp Option » Naudojama apeit, patikrint išmatavimus 16 Connection Management in TCP • • • • Atidarymas TCP ryšio Uždarymas TCP ryšio Spec.scenarijus(galimų įvykių seka) Būsenos diagrama(apibendrinant) 17 TCP Connection Establishment • TCP uses a three-way handshake)to open a connection: (1) ACTIVE OPEN: Client sends a segment with – SYN bit set * – port number of client – initial sequence number (ISN) of client (2) PASSIVE OPEN: Server responds with a segment with – SYN bit set * – initial sequence number of server – ACK for ISN of client (3) Client acknowledges by sending a segment with: – ACK ISN of server (* counts as one byte) 18 Three-Way Handshake aida.poly.edu mng.poly.edu SYN (Seq No = x) y, AckNo = o N q e (S N SY =x+1) (SeqNo = x +1, AckNo = y+1) 19 A Closer Look with tcpdump aida issues an "telnet mng" aida.poly.edu mng.poly.edu 1 aida.poly.edu.1121 > mng.poly.edu.telnet: S 1031880193:1031880193(0) win 16384 <mss 1460,nop,wscale 0,nop,nop,timestamp> 2 mng.poly.edu.telnet > aida.poly.edu.1121: S 172488586:172488586(0) ack 1031880194 win 8760 <mss 1460> 3 aida.poly.edu.1121 > mng.poly.edu.telnet: . ack 172488587 win 17520 4 aida.poly.edu.1121 > mng.poly.edu.telnet: P 1031880194:1031880218(24) ack 172488587 win 17520 5 mng.poly.edu.telnet > aida.poly.edu.1121: P 172488587:172488590(3) ack 1031880218 win 8736 6 aida.poly.edu.1121 > mng.poly.edu.telnet: P 1031880218:1031880221(3) ack 172488590 win 17520 20 Three-Way Handshake aida.poly.edu mng.poly.edu S 103188 0193:103 1880193( win 16384 0) < ms s 1 4 6 0, ...> 8586(0) 8 4 2 7 :1 6 8 5 8 8 S 1724 < ms s 1 4 6 0 > 0 6 7 8 in w 4 9 1 ack 1031880 ack 172488 587 win 17 520 21 Why is a Two-Way Handshake not enough? aida.poly.edu S 1031 880193 :10318 win 16 384 <m 80193(0) ss 1 46 0, ...> S 1532 211235 win 163 4:1532211235 4 8 4 < ms s 1460, (0) ...> 86(0) 5 8 8 4 :172 6 8 5 8 48 460> 2 1 7 s 1 s S 0 <m 6 7 8 win mng.poly.edu The red line is a delayed duplicate packet. Bus išmestas kaip dublikuotas sinchronizavimas When aida initiates(pradeda) the data transfer (starting with SeqNo=15322112355), mng will reject all data. 22 TCP Connection Termination • Kiekviena duomenų srauto pabaiga turi būti išjungta nepriklausomai (“half-close”) • Jei yranors vienas srautas uždaromas, jis siunčia FIN segmentą. Tai reiškia, kad nebus daugiau jokiu duomenų siunčiama • Keturi žingsniai galimi: (1) X sends a FIN to Y (active close) (2) Y ACKs the FIN, (at this time: Y can still send data to X) (3) and Y sends a FIN to X (passive close) (4) X ACKs the FIN. 23 Connection termination with tcpdump aida issues an "telnet mng" aida.poly.edu mng.poly.edu 1 mng.poly.edu.telnet > aida.poly.edu.1121: F 172488734:172488734(0) ack 1031880221 win 8733 2 aida.poly.edu.1121 > mng.poly.edu.telnet: . ack 172488735 win 17484 3 aida.poly.edu.1121 > mng.poly.edu.telnet: F 1031880221:1031880221(0) ack 172488735 win 17520 4 mng.poly.edu.telnet > aida.poly.edu.1121: . ack 1031880222 win 8733 24 TCP Connection Termination aida.poly.edu mng.poly.edu F 172488734:172488734(0) ack 1031880221 win 8733 . ack 1 7 2488735 win 174 84 F 10318 80221:1 0318802 ack 1 72 21(0) 488735 win 175 20 222 win 0 8 8 1 3 0 1 k c a . 8733 25 TCP States State Description CLOSED LISTEN SYN RCVD SYN SENT ESTABLISHED FIN WAIT 1 FIN WAIT 2 TIMED WAIT CLOSING CLOSE WAIT LAST ACK No connection is active or pending The server is waiting for an incoming call A connection request has arrived; wait for Ack The client has started to open a connection Normal data transfer state Client has said it is finished Server has agreed to release Wait for pending packets (“2MSL wait state”) Both Sides have tried to close simultanesously Server has initiated a release Wait for pending packets 26 TCP States in “Normal” Connection Lifetime SYN_SENT (active open) SYN (SeqNo = x) No = x + 1 ) k c A , y = o N q SYN (Se LISTEN (passive open) SYN_RCVD (AckNo = y + 1 ) ESTABLISHED ESTABLISHED FIN_WAIT_1 (active close) FIN_WAIT_2 TIME_WAIT FIN (SeqNo = m) (AckNo = m+ 1 ) CLOSE_WAIT (passive close) FIN (SeqNo = n ) (AckNo = LAST_ACK n+1) CLOSED 27 TCP State Transition Diagram Opening A Connection CLOSED passive open send: . / . LISTEN recv: RST close or timeout active open send: SYN Application sends data send: SYN recv: SYN send: SYN, ACK SYN RCVD recvd: ACK send: . / . send: FIN simultaneous open recv: SYN send: SYN, ACK SYN SENT recv: SYN, ACK send: ACK ESTABLISHED recvd: FIN send: FIN 28 TCP State Transition Diagram Closing A Connection active close send: FIN ESTABLISHED FIN_WAIT_1 recv: ACK send: . / . passive close recv: FIN send: ACK recv: FIN send: ACK recv: FIN, ACK send: ACK FIN_WAIT_2 recv: FIN send: ACK CLOSING recvd: ACK send: . / . CLOSE_WAIT application closes send: FIN LAST_ACK TIME_WAIT Timeout (2 MSL) recv: ACK send: . / . CLOSED 29 2MSL Wait State 2MSL Wait State = TIME_WAIT • When TCP does an active close, and sends the final ACK, the connection must stay in in the TIME_WAIT state for twice the maximum segment lifetime. 2MSL= 2 * Maximum Segment Lifetime • Why? TCP is given a chance to resent the final ACK. (Server will timeout after sending the FIN segment and resend the FIN) • The MSL is set to 2 minutes or 1 minute or 30 seconds. 30 Resetting Connections • Resetting connections is done by setting the RST flag • When is the RST flag set? – Connection request arrives and no server process is waiting on the destination port – Abort (Terminate) a connection Causes the receiver to throw away buffered data. Receiver does not acknowledge the RST segment 31