Bài giảng Mạng máy tính - Chương 3: Tầng giao vận (Phần 2) - Hồ Phương Đắc
TCP:ꢀTꢁng quan RFCs:ꢀ793,ꢀ1122,ꢀ1323,ꢀ2018,ꢀ2581
ꢀ ðiꢌm nꢇi ñiꢌm:
ꢀ Truyꢂn songꢀcông:
ꢁ Mꢈt gꢑi,ꢀMꢈt nhꢎn
ꢁ Dꢃ liꢄu truyꢂn theo cꢅ hai
hưꢆng
ꢀ Tinꢀcꢎy,ꢀtheo ñúng thꢒ tꢓ:
ꢁ MSS:ꢀKích thưꢆc tꢇi ña mꢈt
ꢁ Không quan tâm ñꢍn khuôn
segment
dꢔng thông ñiꢄp.
ꢀ Hưꢆng nꢇi:
ꢀ ðưꢕng ꢇng:
ꢁ Bꢉt tay,ꢀchào hꢊi trưꢆc khi
nói chuyꢄn (trao ñꢋi thông
tinꢀñiꢂu khiꢌn).ꢀThiꢍt lꢎp bꢈ
ñꢄm hai ñꢏu.
ꢁ Cꢑa sꢋ kiꢌm soát tꢉc nghꢖn
và ñiꢂu khiꢌn lưu lưꢐng.
ꢀ Bꢀ ñꢁm ꢂ phía Nhꢃn và Gꢄi
ꢀ Kiꢌm soát lưu lưꢐng:
application
writesꢀdata
application
readsꢀdata
ꢁ Nói quá nhanh,ꢀnghe quá
socket
door
socket
door
TCP
sendꢀbuffer
TCP
receiveꢀbuffer
chꢎm
segment
3:ꢀTransportꢀLayer 3bꢁ1
Cꢂu trúc TCPꢀsegment
32ꢀbits
URG:ꢀdꢃ liꢄu khꢈn cꢂp
ðưꢊc xác ñꢐnh
theo STTꢀcꢑa
byteꢀtrong luꢒng
dꢃ liꢄu
sourceꢀportꢀ#
sequenceꢀnumber
acknowledgementꢀnumber
dest portꢀ#
(ít sꢉ dꢆng)
ACK:ꢀACKꢀ#
Hꢊp lꢄ
head not
UAP
R S rcvr windowꢀsize
F
PSH:ꢀchuyꢋn dꢃ liꢄu
ngay (ít sꢉ dꢆng)
len used
Sꢍ lưꢊng byte
mà bên nhꢎn
có khꢏ năng
nhꢎn
checksum
ptr urgentꢀdata
RST,ꢀSYN,ꢀFIN:
Kiꢋm soát kꢌt nꢍi
(Lꢄnh Thiꢌt lꢎp và
ðóng )
Optionsꢀ(variableꢀlength)
Dꢃ liꢄu ꢅng dꢆng
(kích thưꢇc tùy ý)
Internet
checksum
(giꢍng UDP)
3:ꢀTransportꢀLayer 3bꢁ2
TCP:ꢀSꢍ thꢅ tꢓ và Sꢍ biên nhꢎn
Sꢍ thꢅ tꢓ (STT):
Máy B
Máy A
ꢁ Là Sꢇ thꢒ tꢓ cꢗa byteꢀ
ñꢏu tiên trong luꢘng
dꢃ liꢄu
Ngưꢕi dùng
ñánh chꢃ
‘C’
Biên nhꢎn
chꢃ ‘C’,ꢀphꢅn
hꢘi
Sꢍ biên nhꢎn:
ꢁ Là Sꢇ thꢒ tꢓ cꢗa byteꢀ
kꢍ tiꢍp mà bên nhꢎn
muꢇn nhꢎn.
lꢔi chꢃ ‘C’
ꢁ Biên nhꢎn tích lũy
Biên nhꢎn
lꢔi cho chꢃ
‘C’ phꢅn hꢘi
Q? Bên nhꢎn xꢑ lý gói tinꢀ
không ñúng thꢒ tꢓ ntn ?
ꢁ A:ꢀTCPꢀkhông quy
ñꢙnh.ꢀTùy thuꢈc vào
ngưꢕi cài ñꢚt.
Thꢕi gian
ꢔng dꢆng telnetꢀñơn giꢏn
3:ꢀTransportꢀLayer 3bꢁ3
TCP:ꢀTruyꢕn Tinꢀcꢎy
Sꢓ kiꢄn: nhꢎn dꢃ liꢄu
tꢜ phía bên trên
FSMꢀbên Gꢑi ñơn giꢏn,ꢀgiꢅ
ñꢙnh rꢛng:
Tꢔo và Gꢑi segment
•Dꢃ liꢄu truyꢂn theo mꢈt hưꢆng
•Không kiꢌm soát tꢉc nghꢖn
•Không ñiꢂu khiꢌn lưu lưꢐng
Sꢓ kiꢄn: timerꢀtimeoutꢀcho
wait
segmentꢀcó STTꢀlà y
forꢀ
Gꢑi lꢔi segment
Sꢓ kiꢄn
Sꢓ kiꢄn: Nhꢎn biên nhꢎn cho
gói có STTꢀlà y
Xꢑ lý ACK
3:ꢀTransportꢀLayer 3bꢁ4
Nhanh chóng truyꢕn lꢖi
ꢀ Khoꢅng thꢕi gian Timeoutꢀ ꢀ Nꢍu phía gꢑi nhꢎn ñưꢐc 3ꢀ
thưꢕng tương ñꢇi dài:
ꢁ Chꢎm trꢝ trong viꢄc gꢑi lꢔi
ACKꢀtrùng lꢚp,ꢀcó thꢌ giꢅ
thiꢍt gói tinꢀngay sau gói
tinꢀñưꢐc biên nhꢎn 3ꢀlꢏn
liên tiꢍp bꢙ mꢞt:
gói tinꢀbꢙ mꢞt
ꢀ Phát hiꢄn mꢞt gói tinꢀquaꢀ
ꢁ Gꢑi lꢔi kꢌ cꢅ khi gói này
chưa timeout
các ACKꢀtrùng lꢚp
ꢁ Phía gꢑi thưꢕng gꢑi nhiꢂu
gói tin
ꢁ Nꢍu gói tinꢀbꢙ mꢞt,ꢀsꢖ có
ACKꢀtrùng lꢚp
3:ꢀTransportꢀLayer 3bꢁ5
FastꢀRetransmit:
event: ACKꢀreceived,ꢀwithꢀACKꢀfieldꢀvalueꢀofꢀyꢀ
ifꢀ(yꢀ>ꢀSendBase)ꢀ{
…
SendBase =ꢀy
ifꢀ(thereꢀareꢀcurrentlyꢀnotꢁyetꢁacknowledgedꢀsegments)
startꢀtimerꢀ
…
}ꢀ
elseꢀ{ꢀ
incrementꢀcountꢀofꢀdupꢀACKs receivedꢀforꢀy
ifꢀ(countꢀofꢀdupꢀACKs receivedꢀforꢀyꢀ=ꢀ3)ꢀ{
resendꢀsegmentꢀwithꢀsequenceꢀnumberꢀy
…
ACKꢀtrùng lꢁp cho gói tin
ðã ñưꢂc biên nhꢃn
Truyꢄn lꢅi nhanh chóng
3:ꢀTransportꢀLayer 3bꢁ6
00 sendbase =ꢀinitial_sequenceꢀnumberꢀagreedꢀbyꢀTWH
01ꢀꢀꢀꢀnextseqnum =ꢀinitial_sequenceꢀnumberꢀbyꢀTWH
02ꢀꢀꢀꢀꢀloopꢀ(forever)ꢀ{
03ꢀꢀꢀꢀꢀꢀꢀswitch(event)
04ꢀꢀꢀꢀꢀꢀꢀevent: dataꢀreceivedꢀfromꢀapplicationꢀabove
05ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀif (windowꢀallowꢀsend)
06ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀcreateꢀTCPꢀsegmentꢀwithꢀsequenceꢀnumberꢀnextseqnum
06ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀif (noꢀtimer)ꢀstartꢀtimer
07ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀpassꢀsegmentꢀtoꢀIP
08ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀnextseqnum =ꢀnextseqnum +ꢀlength(data)
else putꢀpacketꢀinꢀbuffer
TCP:ꢀ
09ꢀꢀꢀꢀꢀꢀꢀꢀevent: timerꢀtimeoutꢀforꢀsendbase
10ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀretransmitꢀsegment
11ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀcomputeꢀnewꢀtimeoutꢀinterval
12ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀrestartꢀtimer
13ꢀꢀꢀꢀꢀꢀꢀꢀevent: ACKꢀreceived,ꢀwithꢀACKꢀfieldꢀvalueꢀofꢀyꢀ
14ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀif (yꢀ>ꢀsendbase)ꢀ{ꢀ/*ꢀcumulativeꢀACKꢀofꢀallꢀdataꢀupꢀtoꢀyꢀ*/ꢀ
15ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀcancelꢀtheꢀtimerꢀforꢀsendbase
Truyꢕn
tinꢀcꢎy
16
sendbase =ꢀy
17
17
18
ifꢀ(noꢀtimerꢀandꢀpacketꢀpending)ꢀstartꢀtimerꢀforꢀnewꢀsendbase
whileꢀ(thereꢀareꢀsegmentsꢀandꢀwindowꢀallow)
sentꢀaꢀsegment;
TCPꢀphía Gꢉi
ñơn giꢏn
18ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ}ꢀ
19ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀelse {ꢀ/*ꢀy==sendbase,ꢀduplicateꢀACKꢀforꢀalreadyꢀACKed segmentꢀ*/ꢀ
20ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀincrementꢀnumberꢀofꢀduplicateꢀACKs receivedꢀforꢀyꢀ
21ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀifꢀ(numberꢀofꢀduplicateꢀACKSꢀreceivedꢀforꢀyꢀ==ꢀ3)ꢀ{ꢀ
22ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ/*ꢀTCPꢀfastꢀretransmit */ꢀ
23ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀresendꢀsegmentꢀwithꢀsequenceꢀnumberꢀyꢀ
24ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀrestartꢀtimerꢀforꢀsegmentꢀyꢀ
25ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ}ꢀ
26ꢀꢀꢀꢀꢀꢀꢀ}ꢀꢀ/*ꢀendꢀofꢀloopꢀforeverꢀ*/
TCP:ꢀChính sách ACK [RFCꢀ1122,ꢀRFCꢀ2581]
Bên nhꢃn (TCP)
Sꢆ kiꢇn
Trì hoãn ACK.ꢀðꢉi segmentꢀkꢂ tiꢂp
trong 500ms.ꢀNꢂu không có segment,
gꢌi ACK
Segmentꢀtheo ñúng STTꢀñꢂn,ꢀ
Không thiꢂu dꢃ liꢄu,
Không có ACKꢀtreo
Ngay lꢍp tꢎc gꢌi mꢅt ACKꢀmang giá
trꢆ tích lũy
Segmentꢀtheo ñúng STTꢀñꢂn,ꢀ
Không thiꢂu dꢃ liꢄu,
Có mꢅt ACKꢀbꢆ treo
Gꢌi ACKꢀtrùng lꢏp,ꢀchꢐ STTꢀcꢑa
byteꢀdꢃ liꢄu mình muꢈn nhꢍn
Segmentꢀtheo ñúng STTꢀñꢂn
(STTꢀñꢂn lꢇn hơn sꢈ mong
ñꢉi).ꢀThiꢂu dꢃ liꢄu
Biên nhꢍn STTꢀbên nhꢍn mong muꢈn
nhꢍn
Mꢅt segmentꢀñꢂn ñiꢊn vào
ñoꢋn dꢃ liꢄu bꢆ khuyꢂt
3:ꢀTransportꢀLayer 3bꢁ8
TCP:ꢀVí dꢆ vꢕ Truyꢕn lꢖi
HostꢀA
HostꢀB
HostꢀA
HostꢀB
X
loss
time
time
Timeoutꢀtrưꢆc khi nhꢎn
Ví dꢟ mꢞt ACK
ACK,ꢀbên gꢑi biên nhꢎn tích lũy
3:ꢀTransportꢀLayer 3bꢁ9
ðiꢕu khiꢋn lưu lưꢊng trong TCP
ðiꢕu khiꢋn
lưu lưꢊng
Phía Nhꢎn: Thông báo rõ
ràng cho phía Gꢑi khꢅ
năng nhꢎn dꢃ liꢄu cꢗa
mình (thay ñꢋi thưꢕng
xuyên)ꢀ
Không cho bên Gꢌi gꢌi
quá nhiꢊu,ꢀquá nhanh
RcvBuffer =ꢀKích thưꢆc Bꢈ ñꢄm nhꢎn
RcvWindow =ꢀKích thưꢆc vùng còn trꢇng trong Bꢈ ñꢄm
Phía Gꢉi: Giꢃ khꢇi lưꢐng dꢃ
liꢄu gꢑi ñi nhưng chưa
ñưꢐc biên nhꢎn nhꢊ hơn
lưꢐng bên kia chꢞp nhꢎn
ñưꢐc
Bꢗ ñꢄm phía Nhꢎn
3:ꢀTransportꢀLayer 3bꢁ10
ðiꢕu khiꢋn lưu lưꢊng trong TCP
sourceꢀportꢀ#
sequenceꢀnumber
acknowledgementꢀnumber
dest portꢀ#
head not
len used
UA P
R S rcvr windowꢀsize
F
checksum
ptr urgentꢀdata
ꢀ Chꢠ trꢇng trong Bꢈ ñꢄm
Optionsꢀ(variableꢀlength)
= RcvWindow
application
dataꢀ
(variableꢀlength)
TCPꢀRoundꢀTripꢀTimeꢀandꢀTimeout
Q: Làm thꢍ nào ñꢌ ưꢆc lưꢐc RTT?
Q: Thiꢍt lꢎp giá trꢙ
timeoutꢀntn ?
ꢀ SampleRTT: khoꢅng thꢕi gian tꢜ khi
gꢑi gói tinꢀcho ñꢍn khi nhꢎn ñưꢐc biên
nhꢎn
ꢀ Timeoutꢀ>ꢀꢀRTT
ꢁ Chú ý:ꢀRTTꢀthay ñꢋi
ꢁ Bꢊ quaꢀtruyꢂn lꢔi
thưꢕng xuyên
ꢀ SampleRTT thay ñꢋi thưꢕng xuyên.ꢀ
Chúng ta muꢇn ưꢆc lưꢐng RTTꢀ“mꢙn
hơn”
ꢀ Quá bé:ꢀtimeoutꢀngay
ꢁ Truyꢂn lꢔi không cꢏn
thiꢍt
ꢁ Sꢑ dꢟng nhiꢂu giá trꢙ ño ñưꢐc
trong quá khꢒ,ꢀkhông phꢅi chꢡ có
mꢈt SampleRTT gꢏn nhꢞt
ꢀ Quá lꢇn:ꢀxꢑ lý viꢄc mꢞt
gói tinꢀbꢙ chꢎm trꢝ
3:ꢀTransportꢀLayer 3bꢁ12
TCPꢀRoundꢀTripꢀTimeꢀvà Timeout
EstimatedRTT = (1-x)*EstimatedRTT + x*SampleRTT
ꢀ Trꢢng sꢇ sꢖ thay ñꢋi giá trꢙ trung bình
ꢀ ꢣnh hưꢤng cꢗa SampleRTT
ꢀ xꢀthưꢕng chꢢn giá trꢙ 0.1
Thiꢍt ñꢚt giá trꢙ timeout
ꢀ EstimtedRTT cꢈng thêm mꢈt “giá trꢙ anꢀtoàn”
ꢀ Biꢍn thiên EstimatedRTT càng lꢆn -> tăng “giá trꢙ anꢀtoàn”
Timeout = EstimatedRTT + 4*Deviation
Deviation = (1-x)*Deviation +
x*|SampleRTT-EstimatedRTT|
3:ꢀTransportꢀLayer 3bꢁ13
TCPꢀ:ꢀQuꢏn lý Kꢌt nꢍi
Bꢘt tay ba bưꢇc:
Chú ý:ꢀTrong TCP,ꢀphía Gꢑi và
Nhꢎn thiꢍt lꢎp “kꢍt nꢇi” trưꢆc
khi trao ñꢋi các segmentꢀdꢃ
liꢄu.
ꢀ Khꢤi tꢔo các biꢍn TCP:
ꢁ Sꢇ thꢒ tꢓ
ꢁ Bꢈ ñꢄm,ꢀThông tinꢀvꢂ lưu
lưꢐng (RcvWindow)
ꢀ client: Khꢤi tꢔo kꢍt nꢇi
Bưꢆc 1: Phía clientꢀgꢑi gói tinꢀñiꢂu
khiꢌn TCPꢀSYNꢀtꢆi server
ꢁ Chꢒa Sꢇ thꢒ tꢓ khꢤi ñꢏu
Bưꢆc 2: Nhꢎn ñưꢐc gói SYN,ꢀnꢍu chꢞp
nhꢎn kꢍt nꢇi,ꢀserverꢀgꢑi trꢅ lꢕi gói tinꢀ
ñiꢂu khiꢌn SYNACK
ꢁ Biên nhꢎn cho gói SYNꢀvꢜa
nhꢎn
Socket clientSocket = new
Socket("hostname","port
ꢁ Cꢞp phát bꢈ ñꢄm
ꢁ Thông báo vꢂ STTꢀkhꢤi ñꢏu cꢗa
number");
server
ꢀ server: ðꢐi kꢍt nꢇi tꢜ client
Socket connectionSocket =
welcomeSocket.accept();
3:ꢀTransportꢀLayer 3bꢁ14
Bꢘt tay ba bưꢇc
ꢀ ðꢌ ñꢅm bꢅo rꢛng bên kia thꢓc sꢓ mong muꢇn thiꢍt lꢎp kꢍt nꢇi
A
B
A
B
Chꢈp nhꢃn?
Không có yêu
cꢉu như vꢃy
Tꢊ chꢋi
3:ꢀTransportꢀLayer 3bꢁ15
TCP:ꢀQuꢏn lý Kꢌt nꢍi (tiꢌp)
client
server
ðóng mꢈt kꢍt nꢇi:
close
clientꢀñóng socket:
clientSocket.close();
Bưꢆc 1: client gꢑi gói ñiꢂu khiꢌn
FINꢀtꢆi server
close
Bưꢆc 2: server nhꢎn ñưꢐc gói
FIN,ꢀbiên nhꢎn cho gói tinꢀnày.ꢀ
ðóng kꢍt nꢇi,ꢀgꢑi gói FIN.ꢀ
closed
3:ꢀTransportꢀLayer 3bꢁ16
TCP:ꢀQuꢏn lý Kꢌt nꢍi (tiꢌp)
client
server
Bưꢆc 3: client nhꢎn gói FIN,ꢀ
biên nhꢎn lꢔi ACK.ꢀ
closing
ꢁ Bưꢆc vào trꢔng thái “timedꢀ
wait” – sꢖ biên nhꢎn ACKꢀ
cho các gói FINꢀnhꢎn ñưꢐc
closing
closed
Bưꢆc 4: server nhꢎn ñưꢐc ACK,ꢀ
ñóng kꢍt nꢇi.ꢀ
Chú ý: Vꢆi vài cꢅi tiꢍn nhꢊ,ꢀta có
thꢌ xꢑ lý ñꢘng thꢕi nhiꢂu gói
FIN.
closed
3:ꢀTransportꢀLayer 3bꢁ17
ðóng kꢌt nꢍi
ꢀ Mꢒc tiêu:
client
server
ꢁ Mꢓiꢀphíaꢀgiꢔiꢀphóngꢀ
tàiꢀnguyênꢀvà xóaꢀbꢕ
trꢋngꢀtháiꢀvꢊ kênhꢀ
truyꢊn
Yêuꢀcꢉu
ꢀñóng
Giꢅiꢀphóngꢀ
Tàiꢀnguyên?
ðóng
Giꢅiꢀ
phóngꢀ
Tàiꢀ
ðóng
Giꢅiꢀphóngꢀ
Tàiꢀnguyên
nguyên
3:ꢀTransportꢀLayer 3bꢁ18
Vꢂnꢀñꢕ tꢁngꢀquát: QuânꢀXanhꢙTrꢘng
Haiꢀphíaꢀquânꢀxanhꢀcꢏnꢀthꢇngꢀnhꢞtꢀthꢕiꢀñiꢌmꢀñꢌ cùngꢀtꢞnꢀcôngꢀquânꢀtrꢉng. Hꢢ thꢊaꢀthuꢎnꢀbꢛngꢀ
cáchꢀgꢑiꢀthôngꢀñiꢄpꢀchoꢀnhau. Nꢍuꢀcùngꢀñꢘngꢀýꢀ:ꢀtꢞnꢀcông,ꢀcònꢀkhôngꢀsꢖ khôngꢀtꢞnꢀcông. Chú ýꢀ
rꢛngꢀngưꢕiꢀtruyꢂnꢀtinꢀcó thꢌ bꢙ bꢉtꢀ!ꢀNꢍuꢀcùngꢀtꢞnꢀcông,ꢀbênꢀxanhꢀthꢉng,ꢀcònꢀnꢍuꢀtꢞnꢀcôngꢀriêngꢀlꢥ,ꢀ
bênꢀtrꢉngꢀthꢉng
3:ꢀTransportꢀLayer 3bꢁ19
ðóngꢀkꢌtꢀnꢍiꢀtrongꢀbꢍnꢀbưꢇc
A
B
ðꢂ nghꢙꢀñóng
Aꢁ>B
ðóng
Aꢁ>Bꢀñóng
ðꢂ nghꢙꢀñóng
ðóng
Aꢁ>Bꢀñóng
Bꢁ>A
ꢁ Có thꢌ truyꢌnꢀlꢔiꢀACKꢀ
nꢍuꢀACKꢀnàyꢀbꢙ mꢞt
ðóng
Xóaꢀbꢊ tꢞtꢀ
cꢅ trꢔngꢀthái
ðóng
Xóaꢀbꢊ tꢞtꢀ
cꢅ trꢔngꢀthái
3:ꢀTransportꢀLayer 3bꢁ20
Tải về để xem bản đầy đủ
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Mạng máy tính - Chương 3: Tầng giao vận (Phần 2) - Hồ Phương Đắc", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
File đính kèm:
bai_giang_mang_may_tinh_chuong_3_tang_giao_van_phan_2_ho_phu.pdf