計(jì)算機(jī)網(wǎng)絡(luò)英文版課件:chapter-3-2 Transport Layer_第1頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)英文版課件:chapter-3-2 Transport Layer_第2頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)英文版課件:chapter-3-2 Transport Layer_第3頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)英文版課件:chapter-3-2 Transport Layer_第4頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)英文版課件:chapter-3-2 Transport Layer_第5頁(yè)
已閱讀5頁(yè),還剩90頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Chapter3:TransportLayerOurgoalsgoals:

understandprinciplesbehindtransportlayerservices:multiplexing/demultiplexingreliabledatatransferflowcontrolcongestioncontrolinstantiationandimplementationintheInternetOverview:transportlayerservicesmultiplexing/demultiplexingconnectionlesstransport:UDPprinciplesofreliabledatatransferconnection-orientedtransport:TCPreliabletransferflowcontrolconnectionmanagementprinciplesofcongestioncontrolTCPcongestioncontrol13:TransportLayerTransportservicesprovidelogicalcommunicationbetweenapp’processesrunningondifferenthostsRelyonnetworklayerProvidemultiplexing/demultiplexingservicesReliabilitycontrolErrorcheckingRetansmittingthelostsegmentsapplicationtransportnetworkdatalinkphysicalapplicationtransportnetworkdatalinkphysicallogicalend-endtransport23:TransportLayerTransport-layerprotocols(TCP,UDP)Internettransportservices:reliable,in-orderunicastdelivery(TCP)congestioncontrolflowcontrolconnectionmanagementunreliable(“best-effort”),unorderedunicastormulticastdelivery:UDPBothuseerrorcheckingincludedintheirheadersservicesnotavailable:real-timebandwidthguaranteesreliablemulticastapplicationtransportnetworkdatalinkphysicalapplicationtransportnetworkdatalinkphysicalnetworkdatalinkphysicalnetworkdatalinkphysicalnetworkdatalinkphysicalnetworkdatalinkphysicalnetworkdatalinkphysicallogicalend-endtransport33:TransportLayerapplicationtransportnetworkMP2applicationtransportnetworkMultiplexing/demultiplexingsegment-unitofdataexchangedbetweentransportlayerentities

TPDU:transportprotocoldataunitreceiverHtHnDemultiplexing:deliveringreceivedsegmentstocorrectapplayerprocessessegmentsegmentMapplicationtransportnetworkP1MMMP3P4segmentheaderapplication-layerdata43:TransportLayerMultiplexing/demultiplexingmultiplexing/demultiplexing:basedonsender,receiverportnumbers,IPaddressessource,destinationport#sineachsegmentrecall:well-knownportnumbersforspecificapplications(http:80,ftp21,telnet23)gatheringdatafrommultipleappprocesses,envelopingdatawithheadertocreatesegmentsandpassingthesegmentstoIPlayersourceport#destport#32bitsapplicationdata(message)otherheaderfieldsTCP/UDPsegmentformatMultiplexing:53:TransportLayerMultiplexing/demultiplexing:exampleshostAserverBsourceport:xdest.port:23sourceport:23dest.port:xportuse:simpletelnetappWebclienthostAWebserverBWebclienthostCSourceIP:CDestIP:Bsourceport:xdest.port:80SourceIP:CDestIP:Bsourceport:ydest.port:80portuse:WebserverSourceIP:ADestIP:Bsourceport:xdest.port:80Differentprocessesusedifferentsourceportinaclient63:TransportLayerUDPmultiplexing/demultiplexingPortnumber:1024~65535Typically,portnumberofclientapplicationmaybeassignedautomatically;serverportnumberisspecifiedClientIP:BP2clientIP:AP1P1P3serverIP:CSP:6428DP:9157SP:9157DP:6428SP:6428DP:5775SP:5775DP:642873:TransportLayerTCPmultiplexing/demultiplexing

Four-tupleneededsourceIPaddr,destination

ip

addr.SourcePortnumber,destinationportnumberEveryclientapplicationwithportnumberdirectstoasocketonserverClientIP:BP1clientIP:AP1P2P4serverIP:CSP:9157DP:80SP:9157DP:80P5P6P3D-IP:CS-IP:AD-IP:CS-IP:BSP:5775DP:80D-IP:CS-IP:B83:TransportLayerUDP:UserDatagramProtocol[RFC768]“nofrills,”“barebones”InternettransportprotocolMultiplexing/demultimplexingError-checkingTheapplicationisalmostdirectlytalkingwithIP“besteffort”service,UDPsegmentsmaybe:lostdeliveredoutofordertoappconnectionless:nohandshakingbetweenUDPsender,receivereachUDPsegmenthandledindependentlyofothers93:TransportLayerUDPApplicationsRemotefileserver(NFS)StreamingmultimediaInternettelephonyNetworkmanagementRoutingprotocol(RIP)Nametranslation(DNS)MulticastingReal-timeinvolvedapps(RTP)TFTPFeaturesofUDPsimple:noconnectionstateatsender,receiverNobuffers,noccparametersNosn,noacknumbersmallsegmentheader(8Bytes)Fast:nocontrols:UDPcanblastawayasfastasdesired,besteffortnoconnectionestablishmentTypicallyapplications103:TransportLayerUDPsegmentstructure(RFC768)8bytesheaderSourceportDestinationportLengthchecksumDatafieldsourceport#destport#32bitsApplicationdata(message)UDPsegmentformatlengthchecksumLength,inbytesofUDPsegment,includingheader113:TransportLayerUDPchecksumSender:treatsegmentcontentsassequenceof16-bitintegerschecksum:addition(1’scomplementsum)ofsegmentcontentsNegatingBitsenderputschecksumvalueintoUDPchecksumfieldReceiver:computechecksumofreceivedsegmentcheckifcomputedchecksumequalschecksumfieldvalue:NO-errordetectedYES-noerrordetectedBut,doesnotcorrectitGoal:detect“errors”(e.g.,flippedbits)intransmittedsegment123:TransportLayerExampleforchecksumSender:316-bitwords:0110011001100110+01010101010101010000111100001111110010101100101001:0011010100110101putthisvalueintochecksumfieldReceiver:allwordsandchecksum:0110011001100110+0101010101010101000011110000111100110101001101011111111111111111Ifthesum<>all1,meansatleastanerroroccurs133:TransportLayerPrinciplesofReliabledatatransferMaybeimplementedinapp.,transport,linklayerscharacteristicsofunreliablechannelwilldeterminecomplexityofreliabledatatransferprotocol(rdt)unreliabledatatransferprotocol(udt)143:TransportLayerBuildingreliabledatatransferprotocolsendingsidereceivingsiderdt_send():

calledfromabove,(e.g.,byapp.).Passeddatatodelivertoreceiverupperlayerudt_send():

calledbyrdt,totransferpacketoverunreliablechanneltoreceiverrdt_rcv():

calledwhenpacketarrivesonrcv-sideofchanneldeliver_data():

calledbyrdttodeliverdatatoupper153:TransportLayerBuildingreliabledatatransferprotocolWewillspecifytherdtfromsimplenesstocomplexityincrementallydevelopsender,receiversidesofreliabledatatransferprotocol(rdt)consideronlyunidirectionaldatatransferbutcontrolinfowillflowonbothdirections!usefinitestatemachines(FSM)tospecifysender,receiverstate1state2eventcausingstatetransitionactionstakenonstatetransitionstate:wheninthis“state”nextstateuniquelydeterminedbynexteventeventactions163:TransportLayerRdt1.0:reliabletransferoverareliablechannelunderlyingchannelperfectlyreliablenobiterrorsnolossofpacketsseparateFSMsforsender,receiver:sendersendsdataintounderlyingchannelreceiverreaddatafromunderlyingchannelUnidirectionalchannel,nofeedbackisneededWaitforcallfromabovepacket=make_pkt(data)udt_send(packet)rdt_send(data)extract(packet,data)deliver_data(data)Waitforcallfrombelowrdt_rcv(packet)senderreceiver173:TransportLayerRdt2.0:channelwithbiterrorsunderlyingchannelmayflipbitsinpacketCandetectbutcannotcorrect:checksumthequestion:howtorecoverfromerrors:acknowledgements(ACKs):receiverexplicitlytellssenderthatpktreceivedOKnegativeacknowledgements(NAKs):receiverexplicitlytellssenderthatpkthaderrorssenderretransmitspktonreceiptofNAK1bitlongdatamaybesufficient:0forNAKand1forACKnewmechanismsinrdt2.0:errordetectionreceiverfeedback:controlmsgs(ACK,NAK)rcvr->senderRetransmissionThisistheknownARQ—automaticRepeatrequest!183:TransportLayerrdt2.0:FSMspecificationWaitforcallfromabovesndpkt=make_pkt(data,checksum)udt_send(sndpkt)extract(rcvpkt,data)deliver_data(data)udt_send(ACK)rdt_rcv(rcvpkt)&&

notcorrupt(rcvpkt)rdt_rcv(rcvpkt)&&isACK(rcvpkt)udt_send(sndpkt)rdt_rcv(rcvpkt)&&

isNAK(rcvpkt)udt_send(NAK)rdt_rcv(rcvpkt)&&

corrupt(rcvpkt)WaitforACKorNAKWaitforcallfrombelowsenderreceiverrdt_send(data)Ludt_re-send(sndpkt)193:TransportLayerrdt2.0:operationwithnoerrorsWaitforcallfromabovesnkpkt=make_pkt(data,checksum)udt_send(sndpkt)extract(rcvpkt,data)deliver_data(data)udt_send(ACK)rdt_rcv(rcvpkt)&&

notcorrupt(rcvpkt)rdt_rcv(rcvpkt)&&isACK(rcvpkt)udt_send(sndpkt)rdt_rcv(rcvpkt)&&

isNAK(rcvpkt)udt_send(NAK)rdt_rcv(rcvpkt)&&

corrupt(rcvpkt)WaitforACKorNAKWaitforcallfrombelowrdt_send(data)L203:TransportLayerrdt2.0:errorscenarioWaitforcallfromabovesnkpkt=make_pkt(data,checksum)udt_send(sndpkt)extract(rcvpkt,data)deliver_data(data)udt_send(ACK)rdt_rcv(rcvpkt)&&

notcorrupt(rcvpkt)rdt_rcv(rcvpkt)&&isACK(rcvpkt)udt_send(sndpkt)rdt_rcv(rcvpkt)&&

isNAK(rcvpkt)udt_send(NAK)rdt_rcv(rcvpkt)&&

corrupt(rcvpkt)WaitforACKorNAKWaitforcallfrombelowrdt_send(data)L213:TransportLayerrdt2.0hasafatalflaw!WhathappensifACK/NAKcorrupted?senderdoesn’tknowwhathappenedatreceiver!can’tjustretransmit:possibleduplicateWhattodo?senderACKs/NAKsreceiver’sACK/NAK?WhatifsenderACK/NAKlost?retransmit,butthismightcauseretransmissionofcorrectlyreceivedpkt!ErrorcorrectionforbiterrorHandlingduplicates:senderaddssequencenumbertoeachpktsenderretransmitscurrentpktifACK/NAKgarbledreceiverdiscards(doesn’tdeliverup)duplicatepktSendersendsonepacket,thenwaitsforreceiverresponsestopandwaitThisisrdt2.1223:TransportLayerrdt2.1:sender,handlesgarbledACK/NAKsWaitforcall0fromabovesndpkt=make_pkt(0,data,checksum)udt_send(sndpkt)rdt_send(data)WaitforACKorNAK0udt_send(sndpkt)rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||isNAK(rcvpkt))sndpkt=make_pkt(1,data,checksum)udt_send(sndpkt)rdt_send(data)rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&isACK(rcvpkt)udt_send(sndpkt)rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||isNAK(rcvpkt))rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&isACK(rcvpkt)

Waitforcall1fromaboveWaitforACKorNAK1LL233:TransportLayerrdt2.1:receiver,handlesgarbledACK/NAKsWaitfor0frombelowsndpkt=make_pkt0(ACK,chksum)udt_send(sndpkt)rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&has_seq0(rcvpkt)rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&has_seq1(rcvpkt)extract(rcvpkt,data)deliver_data(data)sndpkt=make_pkt1(ACK,chksum)udt_send(sndpkt)Waitfor1frombelowrdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&has_seq0(rcvpkt)extract(rcvpkt,data)deliver_data(data)sndpkt=make_pkt0(ACK,chksum)udt_send(sndpkt)sndpkt=make_pkt1(ACK,chksum)udt_send(sndpkt)rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&has_seq1(rcvpkt)rdt_rcv(rcvpkt)&&

corrupt(rcvpkt)sndpkt=make_pkt0(NAK,chksum)udt_send(sndpkt)rdt_rcv(rcvpkt)&&

corrupt(rcvpkt)sndpkt=make_pkt1(NAK,chksum)udt_send(sndpkt)Discardduplication!Discardduplication!243:TransportLayerrdt2.1:discussionSender:seq#addedtopkttwoseq.#’s(0,1)willsuffice.Why?mustcheckifreceivedACK/NAKcorruptedtwiceasmanystatesstatemust“remember”whether“current”pkthas0or1seq.#Receiver:mustcheckifreceivedpacketisduplicatestateindicateswhether0or1isexpectedpkt

seq#note:receivercannotknowifitslastACK/NAKreceivedOKatsender253:TransportLayerrdt2.2:aNAK-freeprotocolsamefunctionalityasrdt2.1,usingACKsonlyinsteadofNAK,receiversendsACKforlastpktreceivedOKreceivermustexplicitlyincludeseq#ofpktbeingACKed

duplicateACKatsenderresultsinsameactionasNAK:retransmitcurrentpkt263:TransportLayerrdt2.2:senderWaitforcall0fromabovesndpkt=make_pkt(0,data,checksum)udt_send(sndpkt)rdt_send(data)udt_send(sndpkt)rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||

isACK(rcvpkt,1))rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&isACK(rcvpkt,0)

WaitforACK0senderFSMLWaitforcall1fromaboveWaitforACK1sndpkt=make_pkt(1,data,checksum)udt_send(sndpkt)rdt_send(data)rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||

isACK(rcvpkt,0))udt_send(sndpkt)rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&isACK(rcvpkt,1)

L273:TransportLayerrdt2.2:receiver

Waitfor0frombelowrdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&has_seq1(rcvpkt)extract(rcvpkt,data)deliver_data(data)sndpkt=make_pkt(ACK1,chksum)udt_send(sndpkt)receiverFSMWaitfor1frombelowrdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&has_seq1(rcvpkt)udt_send(sndpkt)rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&has_seq0(rcvpkt)extract(rcvpkt,data)deliver_data(data)sndpkt=make_pkt(ACK0,chksum)udt_send(sndpkt)udt_send(sndpkt)rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&has_seq0(rcvpkt)rdt_rcv(rcvpkt)&&

corrupt(rcvpkt)udt_send(sndpkt)rdt_rcv(rcvpkt)&&

corrupt(rcvpkt)udt_send(sndpkt)283:TransportLayerrdt3.0:channelswitherrorsandlossNewassumption:underlyingchannelcanalsolosepackets(dataorACKs)checksum,seq.#,ACKs,retransmissionswillbeofhelp,butnotenoughQ:howtodealwithloss?senderwaitsuntilcertaindataorACKlost,thenretransmitsHowlongtimeisneeded?Approach:senderwaits“reasonable”amountoftimeforACKretransmitsifnoACKreceivedinthistimeifpkt(orACK)isjustdelayed(notlost):retransmissionwillbeduplicate,butuseofseq.#’salreadyhandlesthisreceivermustspecifyseq#ofpktbeingACKedrequirescountdowntimer293:TransportLayerrdt3.0sendersndpkt=make_pkt(0,data,checksum)udt_send(sndpkt)start_timerrdt_send(data)WaitforACK0rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||isACK(rcvpkt,1))Waitforcall1fromabovesndpkt=make_pkt(1,data,checksum)udt_send(sndpkt)start_timerrdt_send(data)rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&isACK(rcvpkt,0)

rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||isACK(rcvpkt,0))rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&isACK(rcvpkt,1)

stop_timerstop_timerudt_send(sndpkt)start_timertimeoutudt_send(sndpkt)start_timertimeoutrdt_rcv(rcvpkt)Waitforcall0fromaboveWaitforACK1Lrdt_rcv(rcvpkt)LLLAck(rcvpkt,0)Ack(rcvpkt,1)303:TransportLayerRdt3.0receiverWaitfor0frombelowrdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&has_seq1(rcvpkt)extract(rcvpkt,data)deliver_data(data)sndpkt=make_pkt(ACK1,chksum)udt_send(sndpkt)receiverFSMWaitfor1frombelowrdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||

has_seq1(rcvpkt))udt_send(sndpkt)rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||

has_seq0(rcvpkt))udt_send(sndpkt)rdt_rcv(rcvpkt)&¬corrupt(rcvpkt)&&has_seq0(rcvpkt)extract(rcvpkt,data)deliver_data(data)sndpkt=make_pkt(ACK0,chksum)udt_send(sndpkt)313:TransportLayerrdt3.0inaction323:TransportLayerrdt3.0inaction333:TransportLayerPerformanceofrdt3.0rdt3.0works,butperformancestinksexample:1Gbpslink,15mse-eprop.delay,1KBpacket:Ttransmit=8kb/pkt10**9b/sec=8microsecUsender:utilization–fractionoftimesenderbusysending1KBpktevery30msec->33kB/secthruputover1GbpslinkToomuchtimeisspentonwaitingforACKnetworkprotocollimitsuseofphysicalresources!L(packetlengthinbits)R(transmissionrate,bps)=343:TransportLayerrdt3.0:stop-and-waitoperationfirstpacketbittransmitted,t=0senderreceiverRTT

lastpacketbittransmitted,t=L/Rfirstpacketbitarriveslastpacketbitarrives,sendACKACKarrives,sendnextpacket,t=RTT+L/R353:TransportLayerPipelinedprotocolsPipelining:senderallowsmultiple,“in-flight”,yet-to-be-acknowledgedpktsrangeofsequencenumbersmustbeincreasedbufferingatsenderand/orreceiverTwogenericformsofpipelinedprotocols:go-Back-N,selectiverepeat363:TransportLayerPipelining:increasedutilizationfirstpacketbittransmitted,t=0senderreceiverRTTlastbittransmitted,t=L/Rfirstpacketbitarriveslastpacketbitarrives,sendACKACKarrives,sendnextpacket,t=RTT+L/Rlastbitof2ndpacketarrives,sendACKlastbitof3rdpacketarrives,sendACKIncreaseutilizationbyafactorof3!373:TransportLayerGo-Back-NGo-Back-N(GBN):allowthesendertotransmitmultiplepacketswithoutwaitingforanacknowledgement,butthenumberofunacknowledgedpacketsmustbe<=Nk-bitseq#inpktheader:[0~2k-1]circle“window”ofuptoN,consecutiveunack’ed

pktsallowed383:TransportLayerGBNwindowSliding-windowprotocolWhenanack.arrives,thebase++andthewindowsshiftsrightatimeWhenapacketissent,thenxstseqnum++InTCP,thewindowsizeisvariable393:TransportLayerGBNeventsatsenderInvocationfromaboveWhenrdt_sendiscalled,thesenderfirstchecksifthewindowisfullIfthewindowisnotfull,apacketiscreatedandsent,andvariablesareappropriatelyupdatedIfthewindowisfull,returnthedatatoupperlayerorsetsemaphoreACK(n):ACKsallpktsupto,includingseq#n-“cumulativeACK”Ifanacksisreceived,allacksbeforethisarereceivedalsoAtimerisneededforallin-flightpktstimeout(n):retransmitpktnandallhigherseq#pktsinwindownxWindowssize403:TransportLayerGBN:extendedFSMofsenderWaitstart_timerudt_send(sndpkt[base])udt_send(sndpkt[base+1])…udt_send(sndpkt[nextseqnum-1])timeoutrdt_send(data)

if(nextseqnum-base<N){

sndpkt[nextseqnum]=make_pkt(nextseqnum,data,chksum)

udt_send(sndpkt[nextseqnum])if(base==nextseqnum)//allpacketssenthavebeenackedstart_timer

nextseqnum++}elserefuse_data(data)base=getacknum(rcvpkt)+1If(base==nextseqnum)stop_timerelsestart_timerrdt_rcv(rcvpkt)&&

notcorrupt(rcvpkt)base=0nextseqnum=0rdt_rcv(rcvpkt)&&corrupt(rcvpkt)

Lstart_timerudt_send(sndpkt[base])udt_send(sndpkt[base+1])…udt_send(sndpkt[nextseqnum-1])413:TransportLayerGBN:extendedFSMofreceiverACK-only:alwayssendACKforcorrectly-receivedpktwithhighestin-order

seq#maygenerateduplicateACKswhencorruptoccurs,becauseitresendsanackforthemostrecentlyreceivedcorrectlyneedonlyrememberexpectedseqnumout-of-orderpkt:discard(don’tbuffer)Re-ACKpktwithhighestin-orderseq#Waitudt_send(sndpkt)defaultrdt_rcv(rcvpkt)&¬currupt(rcvpkt)&&hasseqnum(rcvpkt,expectedseqnum)extract(rcvpkt,data)deliver_data(data)sndpkt=make_pkt(expectedseqnum,ACK,chksum)udt_send(sndpkt)expectedseqnum++expectedseqnum=0LAckthepacketcorrectlyreceivedmostrecently423:TransportLayerIsitsillyfordiscardingout-of-orderpackets?InGBN,thereceiverdiscardsout-of-orderpacketsindespiteoftheyarereceivedcorrectlySupposethatpacketnisexpected,butpacketn+1arrives,bufferitbeforedeliverittoupperlayerIfthepacketnarrivesintime,itisingoodsituationIfpacketnislostortimeout,thesenderwillretransmitallpacketsthatnumber>=nasaresultofGBNrule,andthus,packetn+1bufferedwillbewastefulInintegrationconsidering,discardingisadoptedSimple:nolargerreceiverbufferneededDsiadvantage:thatpacketretransmitted(n+1)maybelostorgarbled433:TransportLayerGBNin

action443:TransportLayerSummaryforGBNGBNprotocolincorporatesalmostalloftechniquesofrdtSequencenumberCumulativeacknowledgementChecksumTimeout/retransmitoperationTCPhasanumberofelementsofGBN,butnotallTCPisahybridofGo-Back-Nandselective-repeatprotocols453:TransportLayerDisadvantageofGBNGBNprotocolisbetterthanstop-and-waitprotocolsinavoidingthechannelutilizationproblemsButitsre-transmittingtoomuchunnecessarypacketsmaysufferfromperformanceproblemsalsoInparticular,whenthewindowsizeandbandwidthdelayarebothlarge,manypacketscanbeinthepipelineandasingleerrormaycauseGBNtoretransmitalargenumberofunnecessarypacketsAstheprobabilityofchannelerrorsincreases,thepipelinemayfilledwiththeseunnecessaryretansmissions.So,newprotocolisneeded463:TransportLayerSelectiveRepeatSR:Asthenamesuggests,thesenderretransmitsonlyerrorpacketsreceiverindividuallyacknowledgesallcorrectlyreceivedpktswhetherornotitisinorderbufferspkts,asneeded,foreventualin-orderdeliverytoupperlayersenderonlyresendspktsforwhichACKnotreceivedsendertimerforeachunACKed

pktsenderwindowNconsecutiveseq#’sagainlimitsseq#sofsent,unACKed

pkts473:TransportLayerSelectiverepeat:sender,receiverwindows483:TransportLayerSR—actionsofsenderdatafromabove:Whendatacomesfromabove,SRsenderchecksthenextavailablesequencenumberifnextavailableseq#isinwindow,packetizeandsendpktOtherwise,bufferorreturnitforlatertransmissiontimeout(n):Eachpackethasitsownlogicaltimer,whenpktnissentorresent,restarttimerACK(n)in[sendbase,sendbase+N]:markpktnasreceivedifnissmallestamongunACKed

pkt(=send-base),advancewindowbasetonextunACKed

seq#Ifthewindowmovesandthereareuntransmittedpacketswithsequencenumbersinthewindow,transmitthesepackets493:TransportLayerSR-actionsofreceiverpktnin[rcvbase,rcvbase+N-1]:insidethercvwindowsendACK(n)out-of-order:bufferin-order(packetnumber=rcv-base):deliver(alsodeliverbuffered,in-orderpkts),advancewindowtonextnot-yet-receivedpktbythenumberofpacketsdeliveredpktnin[rcvbase-N,rcvbase-1]:leftofthercvwindowACK(n),eventhoughithaspreviouslyacknowledgedThismeanstheackofpacketnislost,withoutthere-ack,thesenderwillresendpacketnagainandagain,itswindowwillnotmoveotherwise:rightofthercvwindowignorethepacketBecauseofRcv-window<send-window,orlastcycledpkt503:TransportLayerSelectiverepeatinaction513:TransportLayerSelectiverepeat:

dilemmaExample:seq#’s:0,1,2,3windowsize=3receiverseesnodifferenceintwoscenarios!incorrectlypassesduplicatedataasnewin(a)Q:whatrelationshipbetweenseq#sizeandwindowsize?523:TransportLayerTCP:Overview

:RFCs:793,1122,1323,2018,2581ConnectionmanagementReliabilitycontrolFlow/congestioncontrolpoint-to-point:onesender,onereceiver

reliable,in-orderbytesteam:no“messageboundaries”pipelined:TCPcongestionandflowcontrolsetwindowsizesend&receivebuffersfullduplexdata:bi-directionaldataflowinsameconnectionMSS:maximumsegmentsize(536bytes)533:TransportLayerTCPsegmentstructuresourceport#Dest.port#32bitsapplicationdata(variablelength)sequencenumberacknowledgementnumberrcvrwindowsizeptrurgentdatachecksumFSRPAUheadlennotusedOptions(variablelength)URG:urgentdata(generallynotused)ACK:ACK#validPSH:pushdatanow(generallynotused)RST,SYN,FIN:connectionestab(setup,teardowncommands)#bytesrcvrwillingtoacceptcountingbybytesofdata(notsegments!)Internetchecksum(asinUDP)MSSWindowscalingfactortimestamp543:TransportLayerTCPseq.#’sandACKsnumbersSeq.#’s:bytestream“number”offirstbyteinsegment’sdataRandomlychooseaninitialsequencenumberACKs:seq#ofnextbyteexpectedfromothersidecumulativeACKQ:howreceiverhandlesout-of-ordersegmentsA:TCPspecdoesn’tsay,-uptoimplementorDiscardingbufferingHostAHostBSeq=42,ACK=79,data=‘C’Seq=79,ACK=43,data=‘C’Seq=43,ACK=80Usertypes‘C’hostACKsreceiptofechoed‘C’hostACKsreceiptof‘C’,echoesback‘C’timesimpletelnetscenario553:TransportLayerTCP:reliabledatatransfersimplifiedsender,assumingwaitforeventwaitforeventevent:datareceivedfromapplicationaboveevent:timertimeoutforsegmentwithseq#yevent:ACKreceived,withACK#ycreate,sendsegmentStart_timerretransmitsegmentRestart_timerACKprocessingonewaydatatransfernoflow,congestioncontrolevent:3ACKsreceived,withACK#yfastretransmissionRestart_timerRetransmitthemissingsegmentBeforethatsegment’timerexpires563:TransportLayerFastretransmitting

HostAtimeoutHostBtimeXresendseqX2seq#x1seq#x2seq#x3seq#x4seq#x5ACK(x2)ACK(x2)ACK(x2)ACK(x2)tripleduplicateACKs573:TransportLayerTCP:reliabledatatransfer00

sendbase=initial_sequencenumber01nextseqnum=initial_sequencenumber0203loop(forever){

04switch(event)

05event:datareceivedfromapplicationabove06createTCPsegmentwithsequencenumbernextseqnum

07starttimerforsegmentnextseqnum

08passsegmenttoIP09nextseqnum=nextseqnum+length(data)

10event:timertimeoutforsegmentwithsequencenumbery11retransmitsegmentwithsequencenumbery12computenewtimeoutintervalforsegmenty

13restarttimerforsequencenumbery14event:ACKreceived,withACKfieldvalueofy15if(y>sendbase){/*cumulativeACKofalldatauptoy*/16cancelalltimersforsegmentswithsequencenumbers<y17sendbase=y18}19else{/*aduplicateACKforalreadyACKedsegment*/20incrementnumberofduplicateACKsreceivedfory21if(numberofduplicateACKSreceivedfory==3){22/*TCPfastretransmit*/23resendsegmentwithsequencenumbery24restarttimerforsegmenty25}26}27}/*endofloopforever*/

SimplifiedTCPsenderaduplicateACKforalreadyACKedsegmentY=sendbase583:TransportLayerTCPACKgeneration

[RFC1122,RFC2581]Eventin-ordersegmentarrival,nogaps,everythingelsealreadyACKedin-ordersegmentarrival,nogaps,onedelayedACKpendingout-of-ordersegmentar

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論