版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗信息化与医疗质量管理优化
- 医疗行业市场机会与挑战
- 妇产科主任临床护理策略
- 毕业生会计实习报告15篇
- 2026年教师资格证(小学)(教育教学知识与能力)自测试题及答案
- 2025萍乡市工程咨询管理顾问有限责任公司招聘第三批外聘人员6人笔试模拟试题及答案解析
- 2026中国石油大学(北京)非教师岗位招聘24人备考笔试题库及答案解析
- 2025福建省南平人力资源服务有限公司延平分公司招聘就业见习专岗参考笔试题库及答案解析
- 2025广东广州市中山大学肿瘤防治中心实验研究部杨江教授课题组博士后招聘2人参考笔试题库及答案解析
- 2026年湖北国土资源职业学院非事业编辅导员招聘9人笔试模拟试题及答案解析
- 广东省深圳市罗湖区2024-2025学年高一上学期1月期末物理试题(含答案)
- 《危险化学品安全法》全文学习课件
- 星罗棋布的港口课件
- 2025年下半年贵州遵义市市直事业单位选调56人考试笔试备考题库及答案解析
- 2026年企业生产计划制定优化与订单交付率提升方案
- 借用土地合同范本
- 支撑梁钢筋自动计算表模板
- 2025天津大学管理岗位集中招聘15人笔试考试备考题库及答案解析
- 请结合材料理论联系实际分析如何正确评价人生价值?人生价值的实现需要哪些条件?参考答案
- 2026年党支部主题党日活动方案
- 2025年福鼎时代面试题及答案
评论
0/150
提交评论