TCP

advertisement
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
Download