You are on page 1of 82

Транспортен слој

Предавањата се изработени врз основа на слајдовите од J.F Kurose и


K.W. Ross, Computer Networking: A Top Down Approach, 7 th ed Транспортен слој 3-1
Транспортен слој
Цели:
 Да се разберат  Да се научат
услугите кои ги протоколите на
нуди транспортен слој:
транспортниот • UDP: безконекциски
слој: пренос на податоци
• Мултиплексирањ • TCP: конекциски,
е, надежен пренос на
демултиплексира податоци
ње • TCP контрола на
• Надежен пренос застој
на податоци
• Контрола на Транспортен слој 3-2
Содржина
3.1 Услуги на 3.5 Конекциски пренос
транспортен слој на податоци: TCP
3.2 • структура на
Мултиплексирање сегмент
и • надежен пренос на
демултиплексира податоци
ње • контрола на проток
• управување со
3.3 Безконекциски конекција
пренос: UDP
3.6 Принципи на
3.4 Принципи на контрола на застој
надежен пренос
на податоци 3.7 TCP контрола на
Транспортен слој 3-3
Услуги и протоколи на транспортен слој
application
transport
 обезбедува логичка комуникација network
помеѓу процесите кои работат на data link
physical
различни хостови
 транспортните протоколи работат

ло
ги
во крајните системи

чк
• испраќач: ги дели

и
кр
ај
пораките од апликациски


ра
слој во сегменти, и истите

јп
ре
ги праќа до мрежниот слој

но
с
• примач: ги составува
сегментите во пораки и ги application
transport
праќа до апликацискиот network
data link
слој physical

 Постојат повеќе транспортни


протоколи:
• Интернет: TCP и UDP
Транспортен слој 3-4
Интернет протоколи на
транспортен слој
application
 надежна достава по transport
network

редослед (TCP) data link


physical
network
• контрола на застој network data link

Ло
data link physical

ги
• контрола на проток physical

ч
network

ки
data link
• воспоставување на врска

кр
physical

ај

 ненадежна достава, вон network

ра
data link

јп
physical
редослед: UDP

ре
network

но
data link
• Без многу додатни

с
physical
network

функционалности над data link


physical
network
application
transport
“best-effort” IP data link
physical
network
data link

 услуги кои не се нудат:


physical

• загарантирано доцнење
• загарантиран пропусен
опсег
Транспортен слој 3-5
Содржина
3.1 Услуги на 3.5 Конекциски пренос
транспортен слој на податоци: TCP
3.2 • структура на
Мултиплексирање сегмент
и • надежен пренос на
демултиплексира податоци
ње • контрола на проток
• управување со
3.3 Безконекциски конекција
пренос: UDP
3.6 Принципи на
3.4 Принципи на контрола на застој
надежен пренос
на податоци 3.7 TCP контрола на
Транспортен слој 3-6
Мултиплексирање/демултиплексирање
Мултиплексирање кај испраќачот:
Податоците се добиваат од повеќе Демултиплексирање кај примачот:
сокети (sockets), и се додава Се користи заглавието за
заглавие (подоцна се користи за примените сегменти да се пратат
демултиплексирање) до точниот сокет

application

application P1 P2 application сокет


P3 transport P4
процес
transport network transport
network link network
link physical link
physical physical

Транспортен слој 3-7


Како работи демултиплексирањето
 Хостот добива IP датаграми 32 бита
• Секој датаграм има изворна source port # dest port #
IP адреса, дестинациска IP
адреса
• Секој датаграм содржи еден Останати полиња
сегмент од транспортен слој
• Секој сегмент има изворен и
дестинациски број на порта Апликациски
податоци
 Хостовите ја користат IP (payload)
адресата и бројот на
порта за да го достават
сегментот до точниот сокет TCP/UDP формат на сегмент

Транспортен слој 3-8


Безконекциско демултиплексирање
DatagramSocket
DatagramSocket serverSocket = new
DatagramSocket DatagramSocket
mySocket2 = new mySocket1 = new
DatagramSocket (6428); DatagramSocket
(9157); application
(5775);
application P1 application
P3 P4
transport
transport transport
network
network link network
link physical link
physical physical

source port: 6428 source port: ?


dest port: 9157 dest port: ?

source port: 9157 source port: ?


dest port: 6428 dest port: ?
Транспортен слој 3-9
Конекциско демултиплексирање
 TCP сокет се  Серверот може
идентификува со 4-рка: истовремено да
• изворна IP адреса поддржува повеќе
• број на изворна порта
• дестинациска IP адреса
TCP сокети:
• број на дестинациска • секој сокет се
порта идентификува со
 демулт.: примачот ги четворката
користи сите четири  Web серверите
вредности за да го имаат различни
пренесе сегментот до сокети за секој
соодветниот сокет клиент
• non-persistentТранспортен
HTTP слој 3-10
Конекциско демултиплексирање

application
application P4 P5 P6 application
P3 P2 P3
transport
transport transport
network
network link network
link physical link
physical сервер: IP physical
адреса B

хост: IP source IP,port: B,80 хост: IP


адреса A dest IP,port: A,9157 source IP,port: C,5775 адреса C
dest IP,port: B,80
source IP,port: A,9157
dest IP, port: B,80
source IP,port: C,9157
dest IP,port: B,80

три сегменти со дестинација со IP адреса: B,


и дестинациска порта: 80 се демултиплексираат во различни сокети Транспортен слој 3-11
Конекциско демултиплексирање
сервер со нишки
application
application application
P4
P3 P2 P3
transport
transport transport
network
network link network
link physical link
physical сервер: IP physical
адреса B

хост: IP source IP,port: B,80 хост: IP


адреса A dest IP,port: A,9157 source IP,port: C,5775 адреса C
dest IP,port: B,80
source IP,port: A,9157
dest IP, port: B,80
source IP,port: C,9157
dest IP,port: B,80

Transport Layer 3-12


Содржина
3.1 Услуги на 3.5 Конекциски пренос
транспортен слој на податоци: TCP
3.2 • структура на
Мултиплексирање сегмент
и • надежен пренос на
демултиплексира податоци
ње • контрола на проток
• управување со
3.3 Безконекциски конекција
пренос: UDP
3.6 Принципи на
3.4 Принципи на контрола на застој
надежен пренос
на податоци 3.7 TCP контрола на
Транспортен слој 3-13
UDP: User Datagram Protocol [RFC 768]
 “bare bones” Интернет  UDP се користи за:
транспортен протокол  апликации за пренос на
 “best effort” услуга, UDP мултимедија
сегментите може: (толерантни на загуба,
• да се загубат осетливи на брзина)
 DNS
• да се пренесат вон-
 SNMP
редослед до
протоколот од  Надежен пренос со
апликацискиот UDP?
слој  надежноста се вметнува
 безконекциски: во апликацискиот слој
• нема
воспоставување
конекција помеѓу
Транспортен слој 3-14
UDP праќач и
Заглавие на UDP сегмент
должина (во бајти),
32 bits вклучувајќи го и
source port # dest port # заглавието

length checksum
Зошто UDP?
 нема воспоставување на
апликациски податоци врска (се намалува
(payload) доцнењето)
 едноставен: нема состојба на
врска кај примачот и
испраќачот
 мало заглавје
UDP формат на сегмент
 нема контрола на застој:
UDP може да работи со
посакуваната брзина

Транспортен слој 3-15


UDP checksum
Цел: да се откријат “грешки” (пр. променети
битови) во пренесениот сегмент
испраќачот: примачот:
 го третира сегментот
(содржина + заглавје) како  ја пресметува вредноста на
низа од 16 битни цели checksum на примениот
броеви сегмент
 прави checksum: го собира  проверува дали
(прв комплемент) збирот соодветствува со вредноста
на содржината на во полето checksum:
сегментот
 испраќачот ја става • НЕ – детекција на
checksum вредноста во грешка
UDP полето checksum
• ДА – нема грешка
Транспортен слој 3-16
Интернет checksum: пример
пример: собери два 16-битни цели броеви (integers)
1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0
1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

преносот се 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1
додава
збир 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0
checksum 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1

Забелешка: кога се собираат броевите, преносот од


најмногу значајниот бит треба да се додаде на резултатот

Транспортен слој 3-17


Содржина
3.1 Услуги на 3.5 Конекциски пренос
транспортен слој на податоци: TCP
3.2 • структура на
Мултиплексирање сегмент
и • надежен пренос на
демултиплексира податоци
ње • контрола на проток
• управување со
3.3 Безконекциски конекција
пренос: UDP
3.6 Принципи на
3.4 Принципи на контрола на застој
надежен пренос
на податоци 3.7 TCP контрола на
Транспортен слој 3-18
Принципи на надежен податочен пренос (rdt)
 Важен концепт кај транспортниот и податочниот слој
• меѓу 10-те најважни теми во компјутерски мрежи!

 карактеристиките на ненадежниот канал ја одредуваат


комплексноста на rdt протоколот Транспортен слој 3-19
Принципи на надежен податочен пренос (rdt)
 Важен концепт кај транспортниот и податочниот слој
• меѓу 10-те најважни теми во компјутерски мрежи!

 карактеристиките на ненадежниот канал ја одредуваат


комплексноста на rdt протоколот
Транспортен слој 3-20
Принципи на надежен податочен пренос (rdt)
 Важен концепт кај транспортниот и податочниот слој
• меѓу 10-те најважни теми во компјутерски мрежи!

 карактеристиките на ненадежниот канал ја одредуваат


комплексноста на rdt протоколот
Транспортен слој 3-21
Вовед во надежен податочен пренос (rdt)

rdt_send(): се повикува од deliver_data(): се повикува од


апликацискиот слој rdt за испорака на податоците
кон апликацискиот слој

Испраќач Примач

udt_send(): се повикува од rdt_rcv(): се повикува кога


rdt, пакетот се пренесува преку пристигнува пакет кај примачот
ненадажен канал до примачот

Транспортен слој 3-22


Вовед во надежен податочен пренос (rdt)
Ќе:
 го надградуваме испраќачот и примачот кои користат
надежен податочен протокол за пренос на податоци -
reliable data transfer protocol (rdt)
 разгледаме пренос на податоци во една насока
• каде контролните податоци ќе бидат двонасочни!
 користиме конечни автомати / finite state machines (FSM) за
да ги опишеме испраќачот и примачот
настан кој предизвикува промена на состојба
акции кои се превземаат при промена на состојба
состојба: кога е во оваа
состојба
состојба/state 1
состојба
наредната состојба е настан 2
одредена од акции
следниот настан

Транспортен слој 3-23


rdt1.0: надежен пренос преку надежен канал

 Каналот за комуникација е надежен


• нема бит грешки
• нема губење на пакети
 посебни FSMs за испраќачот, примачот:
• испраќачот испраќа податоци по надежен
канал
• примачот прима податоци по надежен канал
Чека rdt_send(data) Чека rdt_rcv(packet)
повик од повик од extract (packet,data)
горе packet = make_pkt(data) долу deliver_data(data)
udt_send(packet)

испраќач примач

Транспортен слој 3-24


rdt2.0: канал со бит грешка
 каналот може да ги промени битовите во пакетот
• се користи checksum за детекција на грешки
 како да се справиме со грешките:
• потврди - acknowledgements (ACKs): примачот експлицитно
му кажува на испраќачот дека пакетот е примен без грешка
• негативни потврди - negative acknowledgements (NAKs):
примачот експлицитно му кажува на испраќачот дека
настанала грешка во пакетот
• испраќачот го препраќа пакетот по примање на NAK
 нов механизам во rdt2.0 (дополнување на rdt1.0):
• детекција на грешка
• повратна информација: контролни пораки (ACK,NAK) од
примачот кон испраќачот

Транспортен слој 3-25


rdt2.0: FSM репрезентација
rdt_send(data)
sndpkt = make_pkt(data, checksum) примач
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Чека Чека rdt_rcv(rcvpkt) &&
повик од ACK или udt_send(sndpkt) corrupt(rcvpkt)
горе NAK
udt_send(NAK)

rdt_rcv(rcvpkt) && isACK(rcvpkt)


Чека
L
повик од
испраќач доле

rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)

Транспортен слој 3-26


rdt2.0: сценарио без грешки
rdt_send(data)
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Чека Чека rdt_rcv(rcvpkt) &&
повик од ACK или udt_send(sndpkt) corrupt(rcvpkt)
горе NAK
udt_send(NAK)

rdt_rcv(rcvpkt) && isACK(rcvpkt)


Чека
L повик од
доле

rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)

Транспортен слој 3-27


rdt2.0: сценарио со грешки
rdt_send(data)
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Чека Чека rdt_rcv(rcvpkt) &&
повик од ACK или udt_send(sndpkt) corrupt(rcvpkt)
горе NAK
udt_send(NAK)

rdt_rcv(rcvpkt) && isACK(rcvpkt)


Чека
L повик од
доле

rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)

Транспортен слој 3-28


rdt2.0 има голема маана!
што ако се оштети справување со
ACK/NAK? дупликати:
 испраќачот не знае што  испраќачот го препраќа
се случило кај примачот! пакетот ако е
оштетен/corrupted ACK/NAK
 не може само да
 испраќачот додава секвентен
препрати: можни број на секој пакет
дупликати
 примачот го отфрла
дупликатот (не го пренесува
нагоре)

stop and wait


испраќачот праќа еден
пакет, потоа чека
одговор од примачот Транспортен слој 3-29
rdt2.1: испраќач, оштетени ACK/NAKs
rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt) rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
Чека Чека ACK isNAK(rcvpkt) )
повик 0 од или NAK 0
горе udt_send(sndpkt)
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt) rdt_rcv(rcvpkt)
&& isACK(rcvpkt) && notcorrupt(rcvpkt)
&& isACK(rcvpkt)
L
L
Чека ACK Чека
или NAK повик
rdt_rcv(rcvpkt) && 1 1 од горе
( corrupt(rcvpkt) ||
isNAK(rcvpkt) ) rdt_send(data)

udt_send(sndpkt) sndpkt = make_pkt(1, data, checksum)


udt_send(sndpkt)

Транспортен слој 3-30


rdt2.1: примач, оштетени ACK/NAKs
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq0(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) && corrupt(rcvpkt) rdt_rcv(rcvpkt) && corrupt(rcvpkt)
sndpkt = make_pkt(NAK, chksum) sndpkt = make_pkt(NAK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
Чека Чека 1
rdt_rcv(rcvpkt) && 0 од од rdt_rcv(rcvpkt) &&
not corrupt(rcvpkt) && долу долу not corrupt(rcvpkt) &&
has_seq1(rcvpkt) has_seq0(rcvpkt)
sndpkt = make_pkt(ACK, chksum) sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq1(rcvpkt)

extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)

Транспортен слој 3-31


rdt2.1: дискусија
примачот:
испраќачот:
 мора
додавадасекв.
провери
бр. на
дали
пакетот
примениот пакет е
 дупликат
дали два секв. броеви (0,1) се доволни?
• состојбата покажува дали 0 или 1 е
Зошто?
очекуваниот секв. бр.
 мора да провери дали примениот
 забелешка:
ACK/NAK епримачот
оштетен не може да знае
 дали неговиот последен
двојно повеќе состојби ACK/NAK
успешно ги примил испраќачот
• во состојбата мора да се „памти“ дали
„очекуваниот“ пакет треба да има секвентен
број 0 или 1
Транспортен слој 3-32
rdt2.2: протокол без NAK
 иста функционалност како rdt2.1, користи
само ACKs
 наместо NAK, примачот испраќа ACK за
последниот успешно примен пакет
• примачот мора експлицитно да го вклучи секв.
број на пакетот за кој испраќа ACK
 двојни ACK кај испраќачот значат исто
како и примање NAK во rdt2.1: повторно
испраќање на тековниот пакет

Транспортен слој 3-33


rdt2.2: фрагменти кај испраќач и примач
rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
Го чека 0 Го чека
ACK 0 isACK(rcvpkt,1) )
од горе
udt_send(sndpkt)
FSM
фрагмент кај rdt_rcv(rcvpkt)
испраќач && notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) && && isACK(rcvpkt,0)
(corrupt(rcvpkt) || L
has_seq1(rcvpkt)) Го чека FSM фрагмент кај
0 од
sndpkt = make_pkt(ACK1, долу примач
chksum)
udt_send(sndpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq1(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK1, chksum)
udt_send(sndpkt) Транспортен слој 3-34
rdt3.0: канали со грешки и губење на пакети

нова претпоставка: пристап: испраќачот чека


„разумно“
пакетите (податочни, ACKs) може време
да засеACK
го препраќа пакетот ако не добие
изгубат низ каналот ACK во одреденото време
 ако пакетот (или ACK) е
• checksum, секв. #, ACKs и препраќањата
задоцнет (не е загубен): ќе
бидат од корист … сепак, ова не е доволно
• препраќањето ќе биде
дупликат, но секв. броеви
го решаваат овој проблем
• примачот мора да го
наведе секв # на пакетот
за кој праќа ACK
 потребен е бројач кој брои
надолу / одбројува
• претставува изминато време

Транспортен слој 3-35


rdt3.0 испраќач
rdt_send(data)
rdt_rcv(rcvpkt) &&
sndpkt = make_pkt(0, data, checksum) ( corrupt(rcvpkt) ||
udt_send(sndpkt) isACK(rcvpkt,1) )
rdt_rcv(rcvpkt) start_timer L
L Го чека Чека
ACK0 timeout
0 од
udt_send(sndpkt)
горе
start_timer
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt) rdt_rcv(rcvpkt)
&& isACK(rcvpkt,1) && notcorrupt(rcvpkt)
stop_timer && isACK(rcvpkt,0)
stop_timer
Чека Го чека
timeout ACK1 1 од
udt_send(sndpkt) горе
start_timer rdt_rcv(rcvpkt)
rdt_send(data) L
rdt_rcv(rcvpkt) &&
sndpkt = make_pkt(1, data, checksum)
( corrupt(rcvpkt) || udt_send(sndpkt)
isACK(rcvpkt,0) ) start_timer
L

Транспортен слој 3-36


rdt3.0 во акција
испраќач примач испраќач примач
праќа pkt0 pkt0 праќа pkt0 pkt0
прима pkt0 прима pkt0
ack0 прати ack0 ack0 праќа ack0
прима ack0 прима ack0
праќа pkt1 pkt1 праќа pkt1 pkt1
прима pkt1 X
ack1 прати ack1 загуба
прима ack1 Истечено
праќа pkt0 pkt0 време
прима pkt0 time-out
ack0 праќа ack0 препраќа pkt1 pkt1
прима pkt1
ack1 праќа ack1
прима ack1
праќа pkt0 pkt0
(a) без загуба прима pkt0
ack0 праќа ack0

(b) загуба на пакет


Транспортен слој 3-37
rdt3.0 во акција
испраќач примач
испраќач примач праќа pkt0 pkt0
праќа pkt0 pkt0 прима pkt0
ack0 праќа ack0
прима pkt0
праќа ack0 прима ack0
ack0 праќа pkt1 pkt1
прима ack0 прима pkt1
праќа pkt1 pkt1
прима pkt1 праќа ack1
ack1 ack1
праќа ack1
X
loss time-out
препраќа pkt1 pkt1
прима pkt1
time-out pkt1 прима ack1 (дет. на дупликат)
препраќа pkt1 прима pkt1 pkt0
(детекција на дупликат)
праќа pkt0 праќа ack1
ack1
ack1 праќа ack1 прима ack1 прима pkt0
прима ack1 ack0 прати ack0
pkt0 праќа pkt0 pkt0
праќа pkt0 прима pkt0
прима pkt0 ack0 (дет. на дупликат)
ack0 праќа ack0 праќа ack0

(c) Загуба на ACK (d) предвремен time-out/ задоцнет ACK

Транспортен слој 3-38


Проточни протоколи
проточност: испраќачот овозможува последователни,
“in-flight”, сè уште непотврдени пакети
• опсегот на секв. бр. мора да се зголеми
• баферирање кај праќачот и/или кај примачот

 има две генерички форми на проточни


протоколи: go-Back-N, selective repeat
Транспортен слој 3-39
Проточни протоколи: споредба
Go-back-N: Selective Repeat:
 испраќачот може да има  испраќачот може да има
најмногу N пакети во најмногу N пакети во
цевката кои не се цевката кои не се потврдени
потврдени  примачот испраќа
 примачот испраќа само индувидуална потврда (ack)
кумулативни ack за секој пакет
• не потврдува пакет ако има
дупка во секв. бр.
 испраќачот има  испраќачот има тајмер за
одбројувач/тајмер за секој непотврден пакет
најстариот непотврден • кога ќе истече времето, го
пакет препраќа само
• кога ќе истече тајмерот, ги непотврдениот пакет
препраќа сите непотврдени
пакети
Транспортен слој 3-40
Go-Back-N: испраќач
 k-битен секв. бр. во заглавието на пакетот
 „прозорец“ (“window”) може да содржи најмногу N,
последоватени непотврдени пакети

 ACK(n): ги потврдува сите пакети до секв.бр. n


(вклучувајќи го и пакетот со секв. бр. n - “кумулативен
ACK”
• Може да прими дупликат ACKs (види примач)
 Тајмер за најстариот непотврден (in-flight) пакет
 timeout(n): се препраќа пакетот n и сите пакети со поголем
секв. бр. во прозорецот
Транспортен слој 3-41
Go-Back-N: примач
ACK-only: секогаш испраќа ACK за успешно
примен пакет со најголем редоследен
секвентен број
• Може да генерира дупликат ACKи
• Треба да го памти само секв. бр. на следниот
редоследен пакет
 пакет кој не е во редослед:
• Се отфрла (не се баферира): нема баферирање
кај примачот!
• Примачот повторно го потврдува пакетот со
најголем редоследен секв. бр.
Транспортен слој 3-42
GBN во акција
Прозорец кај испраќачот
(N=4) испраќач примач
012345678 праќа pkt0
012345678 праќа pkt1
праќа pkt2 прима pkt0, праќа ack0
012345678
праќа pkt3 Xзагуба прима pkt1, праќа ack1
012345678
(чека)
прима pkt3, го отфрла,
0 1 2 3 4 5 6 7 8 прима ack0, праќа pkt4 (пре)праќа ack1
0 1 2 3 4 5 6 7 8 прима ack1, праќа pkt5 прима pkt4, го отфрла,
(пре)праќа ack1
Го игнорира дупликат ACK прима pkt5, го отфрла,
pkt 2 time-out (пре)праќа ack1
012345678 праќа pkt2
012345678 праќа pkt3
012345678 праќа pkt4 прима pkt2, праќа ack2
012345678 праќа pkt5 прима pkt3, праќа ack3
прима pkt4, праќа ack4
прима pkt5, праќа ack5

Транспортен слој 3-43


Selective repeat
 Примачот индивидуално ги потврдува
сите успешно примени пакети
• Ги баферира пакетите по потреба, за
евентуално да ги препрати по редослед до
соодветниот протокол од апликацискиот
слој
 Испраќачот ги препраќа само пакетите
за кои не добил ACK
• Испраќачот стартува тајмер за секој
непотврден пакет
 Испраќачки прозорец
• N последователни секв. броеви
Транспортен слој 3-44
• Непотврдените пакети ги ограничуваат
Selective repeat: прозорци кај испраќач и примач

Транспортен слој 3-45


Selective repeat
испраќач примач
Податоци од горен слој: пакет n во [rcvbase, rcvbase+N-1]
 Ако наредниот слободен секв. бр. е во прозорецот,
 прати ACK(n)
испрати го пакетот  Не е во редослед: бафер
 Во редослед: испорачај (како и
timeout(n): сите баферирани пакети кои се во
 Повторно го испраќа пакетот n, горедослед),
рестартира тајмерот
го поместува
прозорецот до наредниот пакет
ACK(n) во [sendbase,sendbase+N]: кој треба да го прими
 Обележи го пакет n како применпакет n во [rcvbase-N,rcvbase-1]
 ACK(n)
 Ако n е најмалиот непотврден пакет, помести го
Во спротивно:
прозорецот до наредниот непотврден секв. бр.
 игнорирај

Транспортен слој 3-46


Selective repeat во акција
Прозорец кај испраќач (N=4) испраќач примач
012345678 праќа pkt0
012345678 праќа pkt1
праќа pkt2 прима pkt0, праќа ack0
012345678
праќа pkt3 Xзагуба прима pkt1, праќа ack1
012345678
(чека)
прима pkt3, баферира,
0 1 2 3 4 5 6 7 8 прима ack0, праќа pkt4 праќа ack3
0 1 2 3 4 5 6 7 8 прима ack1, праќа pkt5 прима pkt4, баферира,
праќа ack4
Запамти дека пристигнал ack3 прима pkt5, баферира,
праќа ack5
time-out за pkt 2
012345678 праќа pkt2
012345678
0 1 2 3 4 5 6 7 8 Запамти дека пристигнал ack4 прима pkt2; испорачај pkt2,
0 1 2 3 4 5 6 7 8 Запамти дека пристигнал ack5 pkt3, pkt4, pkt5; праќа ack2

П: Што ќе се случи кога ќе пристигне ack2?

Транспортен слој 3-47


Прозорец кај испраќач Прозорец кај примач
Selective repeat:
дилема 0123012 pkt0
pkt1 0123012
0123012
0123012 pkt2 0123012
пример: 0123012 pkt3
0123012

 секв.бр.: 0, 1, 2, 3 0123012
X
 Големина на pkt0 Ќе го прифати пакетот
со секв. бр. 0
прозорец=3 (a) Нема проблем

 Примачот не ги Примачот не ја знае состојбата кај испраќачот.


разликува двете Неговото однесување е идентично во двата случаи!
Нешто не е во ред!
сценарија!
 Податоците кои се 0123012 pkt0
дупликат се примаат 0123012 pkt1 0123012
како нови во 0123012 pkt2 0123012

сценариото под (b) X 0123012

П: која е врската помеѓу time-out


X
опсегот на секвентни препраќа pkt0 X
pkt0
броеви и големината на 0123012
Ќе го прифати пакетот
прозорецот за да се (b) упс!
со секв. бр. 0
избегне проблемот во
(b)? Транспортен слој 3-48
Содржина
3.1 Услуги на 3.5 Конекциски пренос
транспортен слој на податоци: TCP
3.2 • структура на
Мултиплексирање сегмент
и • надежен пренос на
демултиплексира податоци
ње • контрола на проток
• управување со
3.3 Безконекциски конекција
пренос: UDP
3.6 Принципи на
3.4 Принципи на контрола на застој
надежен пренос
на податоци 3.7 TCP контрола на
Транспортен слој 3-49
Преглед на TCP: RFCs: 793,1122,1323, 2018, 2581
 Крај-со-крај:  full duplex (истовремено
• Еден испраќач, еден во две насоки):
примач • двонасочен проток на
податоци во една конекција
 надежен, редоследен • MSS: maximum segment
проток на бајти: size (максимална големина
• нема граница на пораки на сегмент)
- “message boundaries”  Конекциски ориентиран:
• ракување (размена на
 проточен: контролни пораки) се иниц.
• Контролата на застој и состојбата кај испраќачот и
проток кај TCP ја примачот пред да почне
одредуваат големината размената на податоци
на прозорецот  Контрола на проток:
• Брз испраќач, бавен примач

Транспортен слој 3-50


Структура на TCP сегмент
32 бити
URG: итни податоци Броење на
(генер. не се користи) source port # dest port #
податочни бајти
sequence number (различно од
ACK: валиден број
на ACK acknowledgement number сегменти!)
head not
PSH: push data now len used
UAP R S F receive window
(генер. не се користи) бр. на бајти
checksum Urg data pointer
кои може да
RST, SYN, FIN: ги прими
options (променлива големина)
команди за примачот
воспоставување и
затворање на
Апликациски податоци
конекција
(променлива големина)
Интернет
checksum
(како кај UDP)

Транспортен слој 3-51


Секвентни броеви и ACK кај TCP
Испратен сегмент
секвентни броеви: source port # dest port #
sequence number
• број на првиот бајт од acknowledgement number
сегментот од checksum
rwnd
urg pointer
податочниот проток (во
големина на прозорец
бајти) N
потврди:
• секв. бр. на следниот
простор на секв. бр. кај испраќачот
очекуван бајт на другата
страна потврдени испратени, корисни не се
се уште не се користат
• кумулативен ACK нема ACK уште
(“in-flight”)
П: како испраќачот се справува пратени
повратен сегмент
со сегменти кои се вон source port # dest port #
редослед sequence number
• О: Не е специфицирано acknowledgement number
A rwnd
во TCP (зависи од checksum urg pointer

имплементацијата) Транспортен слој 3-52


Секвентни броеви и ACK кај TCP
Хост A Хост B

притиска
‘C’
Seq=42, ACK=79, data = ‘C’
хостот праќа ACK
за ‘C’, и истото ‘C’ го препраќа

Seq=79, ACK=43, data = ‘C’


хостот праќа ACK
за повратното‘C’

Seq=43, ACK=80

едноставно telnet сценарио

Транспортен слој 3-53


TCP време на обиколка (RTT) и time-out
П: како да се постави П: како да се одреди
вредноста за TCP RTT?
time-out ?  SampleRTT: измерено време
 поголема од RTT од испраќањето на сегментот
до примањето на ACK
• но RTT е променливо
• препраќањето не се
 многу мала: зема предвид
предвремени time-  SampleRTT е променливо,
out, непотребни ни треба пофино
предвидување на RTT
препраќања
• средна вредност на
 многу голема: бавна неколку
реакција при губење последователни
на сегмент мерења
Транспортен слој 3-54
TCP време на обиколка (RTT) и time-out
EstimatedRTT = (1- )*EstimatedRTT + *SampleRTT
 подвижна тежинска средна вредност – според
експоненцијален закон
 Влијанието на старите мерења се намалува експоненцијално
 типична вредност:  = 0.125
RTT: gaia.cs.umass.edu to fantasia.eurecom.fr

350

RTT: gaia.cs.umass.edu to fantasia.eurecom.fr


RTT (милисекунди)

300

250
RTT (milliseconds)

200

sampleRTT
150

EstimatedRTT

100
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
време
time (seconnds)
Транспортен слој 3-55
(секунди)
SampleRTT Estimated RTT
TCP време на обиколка (RTT) и time-out

 интервал на time-out: EstimatedRTT + “безбедна


граница”
• големи варијации на EstimatedRTT -> поголема безбедна
граница
 Треба да се одреди отстапувањето на SampleRTT од
EstimatedRTT:
DevRTT = (1-)*DevRTT +
*|SampleRTT-EstimatedRTT|
(типично,  = 0.25)

TimeoutInterval = EstimatedRTT + 4*DevRTT

очекуван RTT “безбедна граница”

Транспортен слој 3-56


Содржина
3.1 Услуги на 3.5 Конекциски пренос
транспортниот на податоци: TCP
слој • структура на
3.2 сегмент
Мултиплексирање • надежен пренос на
и податоци
демултиплексира • контрола на проток
ње • управување со
конекција
3.3 Безконекциски
пренос: UDP 3.6 Принципи на
контрола на застој
3.4 Принципи на
надежен пренос 3.7 TCP контрола на
Транспортен слој 3-57
rdt кај TCP
 TCP креира rdt
услуга над
ненадежниот IP
протокол на почеток да
• проточни сегменти претпоставиме
• кумулативни тајмери поедноставен TCP
• поединечен тајмер испраќач:
• ги игнорира потврдите
за препраќање кои се дупликат
 препраќањето е • нема контрола на проток
иницирано од: • нема контрола на застој
• time-out
• дупликат потврди Транспортен слој 3-58
TCP настани кај праќачот:
кога прима податоци од time-out:
апликациски слој:  го препраќа сегментот
 креира сегмент со секв. кој предизвикал time-out
бр.  го рестартира тајмерот
 секв. бр. е број на прима ack:
првиот податочен бајт  доколку ack потврдува
во сегментот од некој претходно
протокот на бајти непотврден сегмент
 стартува тајмер, • ажурира што е потврдено
доколку моментално • стартува тајмер ако сè
нема активен тајмер уште има непотврдени
• тајмерот е за најстариот сегменти
непотврден сегмент
• интервал на истекување:
TimeOutInterval
Транспортен слој 3-59
Препраќања кај TCP
Хост A Хост B Хост A Хост B

SendBase=92
Seq=92, 8 бајти Seq=92, 8 бајти
time-out

time-out
Seq=100, 20 бајти
ACK=100
X
ACK=100
ACK=120

Seq=92, 8 бајти Seq=92, 8 бајти


SendBase=100
SendBase=120
ACK=100
ACK=120

SendBase=120

изгубен ACK предвремен time-out


Транспортен слој 3-60
Препраќања кај TCP
Хост A Хост B

Seq=92, 8 бајти

Seq=100, 20 бајти
time-out

ACK=100
X
ACK=120

Seq=120, 15 бајти

кумулативен ACK
Транспортен слој 3-61
Креирање на ACK кај TCP [RFC 1122, RFC 2581]
настани кај примачот акции кај примачот
пристигнува редоследен сегмент одложен ACK. Чека до 500ms
со очекуван секв. бр. Сите за нареден сегмент. Ако нема сегмент
податоци до секв. бр. се потврдени праќа ACK

пристигнува редоследен сегмент веднаш се испраќа кумулативен


со очекуван секв. бр. Постои ACK, со кој се потврдуваат двата
сегмент за кој не е пратен ACK сегменти по редослед
пристигнува сегмент кој е вон веднаш испраќа дупликат ACK,
редослед и со поголем секв. бр. од во кој се наведува секв.бр. на наредниот
очекуваниот. Детектира дупка во очекуван бајт
секв. бр.
веднаш испраќа ACK, доколку сегментот
пристигнува сегмент кој парцијално
почнува на долната граница од дупката
или целосно ја исполнува дупката

Транспортен слој 3-62


TCP fast retransmit (брзо препраќање)
 Времето за time-out е
релативно долго: TCP fast retransmit
• Големо доцнење пред Ако испраќачот
да се препрати прими 3 ACK за
изгубениот пакет истиот сегмент
 Изгубените сегменти
(“три дупликат ACK”),
може да се го препраќа
детектираат преку
дупликат ACK.
непотврдениот
• Ако се изгуби
сегмент со најмалиот
сегментот, најверојатно секв. бр.
за него испраќачот
 Нема да чека time-out
примил дупликат ACK.

Транспортен слој 3-63


TCP fast retransmit
Host A Host B

Seq=92, 8 бајти
Seq=100, 20 бајти
X

ACK=100
timeout

ACK=100
ACK=100
ACK=100
Seq=100, 20 бајти

Брзо препраќање откако испраќачот примил три


дупликат ACK Транспортен слој 3-64
Содржина
3.1 Услуги на 3.5 Конекциски пренос
транспортниот на податоци: TCP
слој • структура на
3.2 сегмент
Мултиплексирање • надежен пренос на
и податоци
демултиплексира • контрола на проток
ње • управување со
конекција
3.3 Безконекциски
пренос: UDP 3.6 Принципи на
контрола на застој
3.4 Принципи на
надежен пренос 3.7 TCP контрола на
Транспортен слој 3-65
TCP контрола на проток
Апликациски
Апликацијата може да ги процес
отстранува податоците од TCP апликација
баферите ….
TCP сокет ОС
бафери на примачот
… побавно отколку
што TCP
примачот TCP
испорачува код
(т.е. испраќачот
испраќа)
IP
Контрола на проток код
Примачот го контролира испраќачот,
за да не се преполни баферот кај
примачот кога имаме случај на брз Од испраќач
испраќач
Примач

Транспортен слој 3-66


TCP контрола на проток
 Примачот го “рекламира”
слободниот простор во Кон апликација
баферот со поставување на
променливата rwnd во TCP
заглавието RcvBuffer Баферирани податоци
• RcvBuffer се поставува со
опцијата socket (најчесто
предодредената вредност е 4096 rwnd Слободен простор
бајти)
• ОС автоматски ја нагодуваат
RcvBuffer
 Примачот го ограничува бројот TCP сегменти
на непотврдени податоци (“in-
flight”) со вредноста на rwnd Баферирање кај примачот
 Со тоа се гарантира дека
баферот кај примачот нема да
се преполни
Транспортен слој 3-67
Содржина
3.1 Услуги на 3.5 Конекциски пренос
транспортниот на податоци: TCP
слој • структура на
3.2 сегмент
Мултиплексирање • надежен пренос на
и податоци
демултиплексира • контрола на проток
ње • управување со
конекција
3.3 Безконекциски
пренос: UDP 3.6 Принципи на
контрола на застој
3.4 Принципи на
надежен пренос 3.7 TCP контрола на
Transport Layer 3-68
Управување со конекција
Пред да се разменат податоци, испраќачот и
примачот се „ракуваат“:
 Се договараат да се креира конекција
 Се договараат за параметрите на таа конекција

application application

состојба на конекц.: ESTAB состојба на конекц.: ESTAB


променливи за конекц.: променливи за конекц.:
секв. бр. клиент-сервер секв. бр. клиент-сервер
сервер-клиент сервер-клиент
rcvBuffer големина rcvBuffer големина
кај сервер и клиент кај сервер и клиент

network network

Socket clientSocket = Socket connectionSocket =


newSocket("hostname","port welcomeSocket.accept();
number");
Транспортен слој 3-69
TCP 3-way handshake (ракување)

сост. кај клиент сост. кај сервер


CLOSED LISTEN
Бира иниц. секв. бр., x
праќа TCP SYN порака
SYNSENT SYNbit=1, Seq=x
бира иниц. секв. бр., y
праќа TCP SYNACK
порака, SYN RCVD
SYNbit=1, Seq=y ја потврдува SYN
пораката
ACKbit=1; ACKnum=x+1
прима SYNACK(x)
ESTAB серверот е активен;
праќа ACK за SYNACK;
овој сегмент може да ACKbit=1, ACKnum=y+1
содржи податоци
за серверот прима ACK(y)
клиентот е активен
ESTAB

Транспортен слој 3-70


TCP: затворање на конекција
состојба на клиент состојба на сервер
ESTAB ESTAB
clientSocket.close()
FIN_WAIT_1 не може да FINbit=1, seq=x
праќа, но
може да прима CLOSE_WAIT
податоци ACKbit=1; ACKnum=x+1
може уште
FIN_WAIT_2 чека серверот да да праќа
ја затвори податоци
конекцијата
LAST_ACK
FINbit=1, seq=y
TIMED_WAIT не праќа
податоци
ACKbit=1; ACKnum=y+1
чека дополнително
време од 2*max CLOSED
време на живот на сегмент

CLOSED

Транспортен слој 3-71


Содржина
3.1 Услуги на 3.5 Конекциски пренос
транспортниот на податоци: TCP
слој • структура на
3.2 сегмент
Мултиплексирање • надежен пренос на
и податоци
демултиплексира • контрола на проток
ње • управување со
конекција
3.3 Безконекциски
пренос: UDP 3.6 Принципи на
контрола на застој
3.4 Принципи на
надежен пренос 3.7 TCP контрола на
Транспортен слој 3-72
Принципи на контрола на застој
застој:
 неформално: “многу испраќачи многу
брзо испраќаат многу податоци, со кои
мрежата не може да се справи”
 многу различно од контрола на проток!
 резултат:
• изгубени пакети (се преполнуваат баферите
кај рутерите)
• големи доцнења (пакетите долго време се во
редицата во баферите на рутерите)
 спаѓа во топ 10 мрежни проблеми!
Транспортен слој 3-73
Причини/цена за застој
оригинални податоци: lin пропусна моќ: lout
 два испраќачи, два
примачи хост A

 еден рутер, бесконечни бесконечен


бафери споделен бафер
на излезниот
 капацитет на излезен линк
линк: R
 нема препраќања хост B

R/2

delay
lout

lin R/2 lin R/2


 максимална пропусна  големи доцнења како што
моќ по врска: R/2 генерирањето на нови податоци lin
се приближува до капацитетот
Транспортен слој 3-74
Содржина
3.1 Услуги на 3.5 Конекциски пренос
транспортниот на податоци: TCP
слој • структура на
3.2 сегмент
Мултиплексирање • надежен пренос на
и податоци
демултиплексира • контрола на проток
ње • управување со
конекција
3.3 Безконекциски
пренос: UDP 3.6 Принципи на
контрола на застој
3.4 Принципи на
надежен пренос 3.7 TCP контрола на
Транспортен слој 3-75
TCP контрола на застој: зголемување со
додавање, намалување со делење (AIMD)
 пристап: испраќачот ја зголемува ратата на пренос (window
size), со што ја испитува корисната пропусна моќ, додека не
се случи загуба
• Зголемување со додавање/additive: зголеми го cwnd за
1 MSS при секој RTT доколку нема загуба
• Намалаување со делење/multiplicative: намали го двојно
cwnd по загубата
адитивно зголемувај го прозорецот…
големина на прозорецот за застој

…. по загуба истиот намали го двојно


cwnd: TCP испраќач

AIMD пила:
испитување
на пропусната моќ

време
Транспортен слој 3-76
Детали за TCP контролата на застој
простор на секв.бр. кај испраќачот
cwnd TCP рата на
испраќање:
 приближно:
последно последно
потврден испратен, сè испратен испрати cwnd број
бајт уште не
потврден
бајт
на бајти, чекај RTT
 ограничување на преносот кај за ACK, потоа
испраќачот испрати уште
LastByteSent- < cwnd бајти ~ cwnd
LastByteAcked rate ~ RTT
bytes/sec

 cwnd е динамички, зависи


од сликата кај приемникот за
состојбата на мрежата Транспортен слој 3-77
Контрола на застој и проток

Бројот на непотврдени бајти кај испраќачот


зависи и од примачот (rwnd) и од состојбата
на мрежата (cwnd):
 min(rwnd, cwnd)

Транспортен слој 3-78


TCP Slow Start (бавен старт)
хост A хост B
 кога ќе се воспостави
конекција, зголеми ја
ратата еден сегм
ент

RTT
експоненцијално до два сегме
првата загуба: нт и

• иницијално cwnd = 1
MSS четири се
гменти
• двојно cwnd при
секој RTT
• т.е. cwnd++ при секој
примен ACK време

 заклучок:
иницијалната рата е Транспортен слој 3-79
TCP: детекција и реакција при загуба
 time-out како индикација за загуба:
• cwnd се враќа на 1 MSS;
• прозорецот повторно расте експоненцијално (slow
start) до одреден праг (ssthresh), по што расте
линеарно
 3 дупликат ACK како индикација за загуба:
TCP RENO
• дупликат ACKs покажуваат дека мрежата може да
пренесе дел од сегментите
• cwnd се преполовува, по што расте линеарно
 TCP Tahoe секогаш го поставува cwnd на 1
(при time-out или 3 дупликат ack) Транспортен слој 3-80
TCP: од slow start кон избегнување
на застој (Congestion Avoidance)
П: кога од
експоненцијално
зголемување треба
да се премине на
линеарно?
A: кога cwnd ќе
постигне
половина од
неговата вредност
пред time-out

имплементација:
 променлив ssthresh
 при загуба, ssthresh се поставува на 1/2 од cwnd
пред да настане загубата
Транспортен слој 3-81
Транспортен слој: сумарно
 принципите врз кои се
засноваат услугите на следно:
транспортниот слој:  го напуштаме
• мултиплексирање, работ на
демултиплексирање мрежата
• надежен пренос на (апликациски и
податоци (rdt)
транспортен
• контрола на проток
слој)
• контрола на застој
 ќе го
 Интернет протоколи проучуваме
• UDP мрежното јадро
• TCP • податочна
Транспортен слој 3-82

You might also like