SlideShare a Scribd company logo
Chapter 3 Transport Layer Computer Networking: A Top Down Approach  5 th  edition.  Jim Kurose, Keith Ross Addison-Wesley, April 2009.  ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Chapter 3: Transport Layer ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Chapter 3 outline ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Transport services and protocols ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],application transport network data link physical application transport network data link physical logical end-end transport
Transport vs. network layer ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Internet transport-layer protocols ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],application transport network data link physical network data link physical network data link physical network data link physical network data link physical network data link physical network data link physical application transport network data link physical logical end-end transport
Chapter 3 outline ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Multiplexing/demultiplexing application transport network link physical P1 application transport network link physical application transport network link physical P2 P3 P4 P1 host 1 host 2 host 3 = process = socket delivering received segments to correct socket gathering data from multiple sockets, enveloping data with  header (later used for  demultiplexing) Demultiplexing at rcv host: Multiplexing at send host:
How demultiplexing works ,[object Object],[object Object],[object Object],[object Object],[object Object],source port # dest port # 32 bits application data  (message) other header fields TCP/UDP segment format
Connectionless demultiplexing ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Connectionless demux (cont) ,[object Object],SP provides “return address” Client IP:B P2 client IP: A P1 P1 P3 server IP: C SP: 6428 DP: 9157 SP: 9157 DP: 6428 SP: 6428 DP: 5775 SP: 5775 DP: 6428
Connection-oriented demux ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Connection-oriented demux (cont) Client IP:B server IP: C SP: 9157 DP: 80 D-IP:C S-IP: A D-IP:C S-IP: B D-IP:C S-IP: B P1 client IP: A P1 P2 P4 SP: 9157 DP: 80 P5 P6 P3 SP: 5775 DP: 80
Connection-oriented demux: Threaded Web Server Client IP:B server IP: C SP: 9157 DP: 80 P4 D-IP:C S-IP: A D-IP:C S-IP: B D-IP:C S-IP: B P1 client IP: A P1 P2 SP: 9157 DP: 80 P3 SP: 5775 DP: 80
Chapter 3 outline ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
UDP: User Datagram Protocol  [RFC 768] ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
UDP: more ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],source port # dest port # 32 bits Application data  (message) UDP segment format length checksum Length, in bytes of UDP segment, including header
UDP checksum ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Goal:  detect “errors” (e.g., flipped bits) in transmitted segment
Internet Checksum Example ,[object Object],[object Object],[object Object],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 1   0  1  0  0  0  1  0  0  0  1  0  0  0  0  1  1 wraparound sum checksum
Chapter 3 outline ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Principles of Reliable data transfer ,[object Object],[object Object],[object Object]
Principles of Reliable data transfer ,[object Object],[object Object],[object Object]
Principles of Reliable data transfer ,[object Object],[object Object],[object Object]
Reliable data transfer: getting started send side receive side rdt_send():   called from above, (e.g., by app.). Passed data to  deliver to receiver upper layer udt_send():   called by rdt, to transfer packet over  unreliable channel to receiver rdt_rcv():   called when packet arrives on rcv-side of channel deliver_data():   called by  rdt  to deliver data to upper
Reliable data transfer: getting started ,[object Object],[object Object],[object Object],[object Object],[object Object],event causing state transition actions taken on state transition state:  when in this “state” next state uniquely determined by next event state 1 state 2 event actions
Rdt1.0:  reliable transfer over a reliable channel ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Wait for call from above packet = make_pkt(data) udt_send(packet) rdt_send(data) extract (packet,data) deliver_data(data) Wait for call from below rdt_rcv(packet) sender receiver
Rdt2.0:  channel with bit errors ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
rdt2.0: FSM specification Wait for call from above snkpkt = 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) sender receiver rdt_send(data)  udt_send(NAK) rdt_rcv(rcvpkt) &&  corrupt(rcvpkt) Wait for ACK or NAK Wait for call from below
rdt2.0: operation with no errors Wait for call from above snkpkt = 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) Wait for call from below rdt_send(data)  udt_send(NAK) rdt_rcv(rcvpkt) &&  corrupt(rcvpkt) Wait for ACK or NAK
rdt2.0: error scenario Wait for call from above snkpkt = 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) Wait for call from below rdt_send(data)  udt_send(NAK) rdt_rcv(rcvpkt) &&  corrupt(rcvpkt) Wait for ACK or NAK
rdt2.0 has a fatal flaw! ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Sender sends one packet,  then waits for receiver  response stop and wait
rdt2.1: sender, handles garbled ACK/NAKs Wait for call 0 from above sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_send(data) udt_send(sndpkt) rdt_rcv(rcvpkt) &&  ( corrupt(rcvpkt) || isNAK(rcvpkt) ) sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) rdt_send(data) rdt_rcv(rcvpkt)  && notcorrupt(rcvpkt)  && isACK(rcvpkt)  udt_send(sndpkt) rdt_rcv(rcvpkt) &&  ( corrupt(rcvpkt) || isNAK(rcvpkt) ) rdt_rcv(rcvpkt)  && notcorrupt(rcvpkt)  && isACK(rcvpkt)     Wait for ACK or NAK 0 Wait for call 1 from above Wait for ACK or NAK 1
rdt2.1: receiver, handles garbled  ACK/NAKs sndpkt = make_pkt(NAK, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) &&  not corrupt(rcvpkt) && has_seq0(rcvpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)  && has_seq1(rcvpkt)   extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) 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) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) &&  not corrupt(rcvpkt) && has_seq1(rcvpkt) rdt_rcv(rcvpkt) && (corrupt(rcvpkt) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) sndpkt = make_pkt(NAK, chksum) udt_send(sndpkt) Wait for  0 from below Wait for  1 from below
rdt2.1: discussion ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
rdt2.2: a NAK-free protocol ,[object Object],[object Object],[object Object],[object Object]
rdt2.2: sender, receiver fragments sndpkt = 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)  && notcorrupt(rcvpkt)  &&  isACK(rcvpkt,0)   sender FSM fragment rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)  && has_seq1(rcvpkt)  extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ACK1, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) &&  (corrupt(rcvpkt) || has_seq1(rcvpkt)) udt_send(sndpkt) receiver FSM fragment  Wait for call 0 from above Wait for ACK 0 Wait for  0 from below
rdt3.0: channels with errors  and  loss ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
rdt3.0 sender sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) start_timer rdt_send(data) rdt_rcv(rcvpkt) &&  ( corrupt(rcvpkt) || isACK(rcvpkt,1) ) sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) start_timer rdt_send(data) rdt_rcv(rcvpkt)  && notcorrupt(rcvpkt)  && isACK(rcvpkt,0)   rdt_rcv(rcvpkt) &&  ( corrupt(rcvpkt) || isACK(rcvpkt,0) ) rdt_rcv(rcvpkt)  && notcorrupt(rcvpkt)  && isACK(rcvpkt,1)   stop_timer stop_timer udt_send(sndpkt) start_timer timeout udt_send(sndpkt) start_timer timeout rdt_rcv(rcvpkt)  rdt_rcv(rcvpkt)    Wait for ACK0 Wait for  call 1 from above Wait for  call 0from above Wait for ACK1
rdt3.0 in action
rdt3.0 in action
Performance of rdt3.0 ,[object Object],[object Object],[object Object],[object Object],[object Object]
rdt3.0: stop-and-wait operation first packet bit transmitted, t = 0 sender receiver RTT   last packet bit transmitted,  t = L / R first packet bit arrives last packet bit arrives, send ACK ACK arrives, send next  packet,  t = RTT + L / R
Pipelined protocols ,[object Object],[object Object],[object Object],[object Object]
Pipelining: increased utilization first packet bit transmitted, t = 0 sender receiver RTT  last bit transmitted, t = L / R first packet bit arrives last packet bit arrives, send ACK ACK arrives, send next  packet, t = RTT + L / R last bit of 2 nd  packet arrives, send ACK last bit of 3 rd  packet arrives, send ACK Increase utilization by a factor of 3!
Pipelining Protocols ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Selective repeat: big picture ,[object Object],[object Object],[object Object],[object Object]
Go-Back-N ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
GBN: sender extended FSM start_timer udt_send(sndpkt[base]) udt_send(sndpkt[base+1]) … udt_send(sndpkt[nextseqnum-1]) timeout rdt_send(data)   if (nextseqnum < base+N) { sndpkt[nextseqnum] = make_pkt(nextseqnum,data,chksum) udt_send(sndpkt[nextseqnum]) if (base == nextseqnum) start_timer nextseqnum++ } else refuse_data(data) base = getacknum(rcvpkt)+1 If (base == nextseqnum) stop_timer else start_timer rdt_rcv(rcvpkt) &&  notcorrupt(rcvpkt)  base=1 nextseqnum=1 rdt_rcv(rcvpkt)  && corrupt(rcvpkt)    Wait
GBN: receiver extended FSM ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Wait udt_send(sndpkt) default rdt_rcv(rcvpkt) && notcurrupt(rcvpkt) && hasseqnum(rcvpkt,expectedseqnum)  extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(expectedseqnum,ACK,chksum) udt_send(sndpkt) expectedseqnum++ expectedseqnum=1 sndpkt =  make_pkt(expectedseqnum,ACK,chksum) 
GBN in action
Selective Repeat ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Selective repeat: sender, receiver windows
Selective repeat ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],sender receiver
Selective repeat in action
Selective repeat:  dilemma ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Chapter 3 outline ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
TCP: Overview   RFCs: 793, 1122, 1323, 2018, 2581 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
TCP segment structure URG: urgent data  (generally not used) ACK: ACK # valid PSH: push data now (generally not used) RST, SYN, FIN: connection estab (setup, teardown commands) # bytes  rcvr willing to accept counting by bytes  of data (not segments!) Internet checksum (as in UDP) source port # dest port # 32 bits application data  (variable length) sequence number acknowledgement number Receive window Urg data pnter checksum F S R P A U head len not used Options (variable length)
TCP seq. #’s and ACKs ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Host A Host B Seq=42, ACK=79, data = ‘C’ Seq=79, ACK=43, data = ‘C’ Seq=43, ACK=80 User types ‘ C’ host ACKs receipt  of echoed ‘ C’ host ACKs receipt of ‘ C’, echoes back ‘C’ simple telnet scenario time
TCP Round Trip Time and Timeout ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
TCP Round Trip Time and Timeout EstimatedRTT = (1-   )*EstimatedRTT +   *SampleRTT ,[object Object],[object Object],[object Object]
Example RTT estimation:
TCP Round Trip Time and Timeout ,[object Object],[object Object],[object Object],[object Object],TimeoutInterval = EstimatedRTT + 4*DevRTT DevRTT = (1-  )*DevRTT +  *|SampleRTT-EstimatedRTT| (typically,    = 0.25) Then set timeout interval:
Chapter 3 outline ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
TCP reliable data transfer ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
TCP sender events: ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
TCP  sender (simplified) NextSeqNum = InitialSeqNum SendBase = InitialSeqNum loop (forever) {   switch(event)   event:  data received from application above  create TCP segment with sequence number NextSeqNum  if (timer currently not running) start timer pass segment to IP  NextSeqNum = NextSeqNum + length(data)  event:  timer timeout retransmit not-yet-acknowledged segment with  smallest sequence number start timer event:  ACK received, with ACK field value of y  if (y > SendBase) {  SendBase = y if (there are currently not-yet-acknowledged segments) start timer  }  }  /* end of loop forever */   ,[object Object],[object Object],[object Object],[object Object],[object Object]
TCP: retransmission scenarios Host A Seq=100, 20 bytes data ACK=100 premature timeout Host B Seq=92, 8 bytes data ACK=120 Seq=92, 8 bytes data ACK=120 Seq=92 timeout SendBase = 100 SendBase = 120 SendBase = 120 Sendbase = 100 time Seq=92 timeout Host A Seq=92, 8 bytes data ACK=100 loss timeout lost ACK scenario Host B X Seq=92, 8 bytes data ACK=100 time
TCP retransmission scenarios (more) SendBase = 120 Host A Seq=92, 8 bytes data ACK=100 loss timeout Cumulative ACK scenario Host B X Seq=100, 20 bytes data ACK=120 time
TCP ACK generation   [RFC 1122, RFC 2581] Event at Receiver Arrival of in-order segment with expected seq #. All data up to expected seq # already ACKed Arrival of in-order segment with expected seq #. One other  segment has ACK pending Arrival of out-of-order segment higher-than-expect seq. # . Gap detected Arrival of segment that  partially or completely fills gap TCP Receiver action Delayed ACK. Wait up to 500ms for next segment. If no next segment, send ACK Immediately send single cumulative  ACK, ACKing both in-order segments  Immediately send  duplicate ACK ,  indicating seq. # of next expected byte Immediate send ACK, provided that segment starts at lower end of gap
Fast  Retransmit ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Figure 3.37 Resending a segment after triple duplicate ACK Host A timeout Host B time X resend 2 nd  segment
Fast retransmit algorithm: 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 } a duplicate ACK for  already ACKed segment fast retransmit
Chapter 3 outline ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
TCP Flow Control ,[object Object],[object Object],[object Object],sender won’t overflow receiver’s buffer by transmitting too much, too fast flow control
TCP Flow control: how it works ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Chapter 3 outline ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
TCP Connection Management ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
TCP Connection Management (cont.) ,[object Object],[object Object],[object Object],[object Object],client FIN server ACK ACK FIN close close closed timed wait
TCP Connection Management (cont.) ,[object Object],[object Object],[object Object],[object Object],client FIN server ACK ACK FIN closing closing closed timed wait closed
TCP Connection Management (cont) TCP client lifecycle TCP server lifecycle
Chapter 3 outline ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Principles of Congestion Control ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Causes/costs of congestion: scenario 1   ,[object Object],[object Object],[object Object],[object Object],[object Object],unlimited shared output link buffers Host A  in  :  original data Host B  out
Causes/costs of congestion: scenario 2   ,[object Object],[object Object],finite shared output link buffers Host A  in  : original data Host B  out  ' in  : original data, plus retransmitted data
Causes/costs of congestion: scenario 2   ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object], in  out =  in  out >  in  out R/2 R/2  in  out b. R/2 R/2  in  out a. R/2 R/2  in  out c. R/4 R/3
Causes/costs of congestion: scenario 3   ,[object Object],[object Object],[object Object],Q:   what happens as  and  increase  ? finite shared output link buffers  in  : original data  out  ' in  : original data, plus retransmitted data  in  in Host A Host B
Causes/costs of congestion: scenario 3   ,[object Object],[object Object], out Host A Host B
Approaches towards congestion control ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Two broad approaches towards congestion control:
Case study: ATM ABR congestion control ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Case study: ATM ABR congestion control ,[object Object],[object Object],[object Object],[object Object],[object Object]
Chapter 3 outline ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
TCP congestion control:  additive increase, multiplicative decrease ,[object Object],[object Object],[object Object],time congestion window size Saw tooth behavior: probing for bandwidth
TCP Congestion Control: details ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],rate =   CongWin   RTT   Bytes/sec
TCP Slow Start ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
TCP Slow Start (more) ,[object Object],[object Object],[object Object],[object Object],Host A one segment RTT Host B two segments four segments time
Refinement: inferring loss ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Philosophy:
Refinement ,[object Object],[object Object],[object Object],[object Object],[object Object]
Summary: TCP Congestion Control ,[object Object],[object Object],[object Object],[object Object]
TCP sender congestion control SS or CA SS or CA SS or CA Congestion Avoidance (CA)  Slow Start (SS) State CongWin and Threshold not changed Increment duplicate ACK count for segment being acked Duplicate ACK Enter slow start Threshold = CongWin/2,  CongWin = 1 MSS, Set state to “Slow Start” Timeout Fast recovery, implementing multiplicative decrease. CongWin will not drop below 1 MSS. Threshold = CongWin/2,  CongWin = Threshold, Set state to “Congestion Avoidance” Loss event detected by triple duplicate ACK Additive increase, resulting in increase of CongWin  by 1 MSS every RTT CongWin = CongWin+MSS * (MSS/CongWin) ACK receipt for previously unacked data Resulting in a doubling of CongWin every RTT CongWin = CongWin + MSS,  If (CongWin > Threshold) set state to “Congestion  Avoidance” ACK receipt for previously unacked data  Commentary TCP Sender Action  Event
TCP throughput ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
TCP Futures: TCP over “long, fat pipes” ,[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],TCP Fairness TCP connection 1 bottleneck router capacity R TCP  connection 2
Why is TCP fair? ,[object Object],[object Object],[object Object],R R equal bandwidth share Connection 1 throughput Connection 2 throughput congestion avoidance: additive increase loss: decrease window by factor of 2 congestion avoidance: additive increase loss: decrease window by factor of 2
Fairness (more) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Chapter 3: Summary ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

More Related Content

What's hot

Application Layer
Application LayerApplication Layer
Application Layer
ushabarad142
 
Lecture2 mac learning
Lecture2 mac learningLecture2 mac learning
Lecture2 mac learning
denizgurkan_UH
 
Transport layer (computer networks)
Transport layer (computer networks)Transport layer (computer networks)
Transport layer (computer networks)
Fatbardh Hysa
 
Unit 4 - Network Layer
Unit 4 - Network LayerUnit 4 - Network Layer
Unit 4 - Network Layer
Chandan Gupta Bhagat
 
Network Layer
Network LayerNetwork Layer
Network Layer
Dr Shashikant Athawale
 
CS6551 COMPUTER NETWORKS
CS6551 COMPUTER NETWORKSCS6551 COMPUTER NETWORKS
CS6551 COMPUTER NETWORKS
Kathirvel Ayyaswamy
 
CN_Lec 5_OSI
CN_Lec 5_OSICN_Lec 5_OSI
CN_Lec 5_OSI
Rijutha Kumar
 
Transport layer
Transport layerTransport layer
Transport layer
reshmadayma
 
Transport services
Transport servicesTransport services
Transport services
Navin Kumar
 
Transport layer
Transport layer Transport layer
Transport layer
Mukesh Chinta
 
Cs8591 Computer Networks
Cs8591 Computer NetworksCs8591 Computer Networks
Cs8591 Computer Networks
Kathirvel Ayyaswamy
 
20CS2008 Computer Networks
20CS2008 Computer Networks20CS2008 Computer Networks
20CS2008 Computer Networks
Kathirvel Ayyaswamy
 
the transport layer
the transport layerthe transport layer
the transport layer
tumetr1
 
Lec 12(Transport Layer)
Lec 12(Transport Layer)Lec 12(Transport Layer)
Lec 12(Transport Layer)
maamir farooq
 
The Transport Layer
The Transport LayerThe Transport Layer
The Transport Layer
adil raja
 
Transport Layer Services : Multiplexing And Demultiplexing
Transport Layer Services : Multiplexing And DemultiplexingTransport Layer Services : Multiplexing And Demultiplexing
Transport Layer Services : Multiplexing And Demultiplexing
Keyur Vadodariya
 
Transport layer
Transport layerTransport layer
Transport layer
reshmadayma
 
20CS2008 Computer Networks
20CS2008 Computer Networks20CS2008 Computer Networks
20CS2008 Computer Networks
Kathirvel Ayyaswamy
 
Transport Protocols
Transport ProtocolsTransport Protocols
Transport Protocols
Peter R. Egli
 
Transport Layer Description By Varun Tiwari
Transport Layer Description By Varun TiwariTransport Layer Description By Varun Tiwari

What's hot (20)

Application Layer
Application LayerApplication Layer
Application Layer
 
Lecture2 mac learning
Lecture2 mac learningLecture2 mac learning
Lecture2 mac learning
 
Transport layer (computer networks)
Transport layer (computer networks)Transport layer (computer networks)
Transport layer (computer networks)
 
Unit 4 - Network Layer
Unit 4 - Network LayerUnit 4 - Network Layer
Unit 4 - Network Layer
 
Network Layer
Network LayerNetwork Layer
Network Layer
 
CS6551 COMPUTER NETWORKS
CS6551 COMPUTER NETWORKSCS6551 COMPUTER NETWORKS
CS6551 COMPUTER NETWORKS
 
CN_Lec 5_OSI
CN_Lec 5_OSICN_Lec 5_OSI
CN_Lec 5_OSI
 
Transport layer
Transport layerTransport layer
Transport layer
 
Transport services
Transport servicesTransport services
Transport services
 
Transport layer
Transport layer Transport layer
Transport layer
 
Cs8591 Computer Networks
Cs8591 Computer NetworksCs8591 Computer Networks
Cs8591 Computer Networks
 
20CS2008 Computer Networks
20CS2008 Computer Networks20CS2008 Computer Networks
20CS2008 Computer Networks
 
the transport layer
the transport layerthe transport layer
the transport layer
 
Lec 12(Transport Layer)
Lec 12(Transport Layer)Lec 12(Transport Layer)
Lec 12(Transport Layer)
 
The Transport Layer
The Transport LayerThe Transport Layer
The Transport Layer
 
Transport Layer Services : Multiplexing And Demultiplexing
Transport Layer Services : Multiplexing And DemultiplexingTransport Layer Services : Multiplexing And Demultiplexing
Transport Layer Services : Multiplexing And Demultiplexing
 
Transport layer
Transport layerTransport layer
Transport layer
 
20CS2008 Computer Networks
20CS2008 Computer Networks20CS2008 Computer Networks
20CS2008 Computer Networks
 
Transport Protocols
Transport ProtocolsTransport Protocols
Transport Protocols
 
Transport Layer Description By Varun Tiwari
Transport Layer Description By Varun TiwariTransport Layer Description By Varun Tiwari
Transport Layer Description By Varun Tiwari
 

Similar to Chapter3 transport

Chapter_3_V6.01.ppt
Chapter_3_V6.01.pptChapter_3_V6.01.ppt
Chapter_3_V6.01.ppt
HarisAli552157
 
Chapter3 transport layer
Chapter3 transport layerChapter3 transport layer
Chapter3 transport layer
Khánh Ghẻ
 
Chapter 3 v6.01
Chapter 3 v6.01Chapter 3 v6.01
Chapter 3 v6.01
Savvas Dimopoulos
 
Week4 lec1-bscs1
Week4 lec1-bscs1Week4 lec1-bscs1
Week4 lec1-bscs1
syedhaiderraza
 
Chapter_3_V6.01 (1).pptx
Chapter_3_V6.01 (1).pptxChapter_3_V6.01 (1).pptx
Chapter_3_V6.01 (1).pptx
SIDDHARTHANANDCSE202
 
4_5938019984411199949.ppt
4_5938019984411199949.ppt4_5938019984411199949.ppt
4_5938019984411199949.ppt
HodaKHajeh1
 
Chapter 3 v6.01 (1)
Chapter 3 v6.01 (1)Chapter 3 v6.01 (1)
Chapter 3 v6.01 (1)
Krunal Pawar
 
Lec6
Lec6Lec6
Lec6
amrnaser3
 
Chapter 3 v6.0
Chapter 3 v6.0Chapter 3 v6.0
Chapter 3 v6.0
Sudeep Reddy
 
COE332-Ch03d.pptx
COE332-Ch03d.pptxCOE332-Ch03d.pptx
COE332-Ch03d.pptx
MemMem25
 
TRANSPORT LAYER_DATA STRUCTURE LEARNING MATERIAL
TRANSPORT LAYER_DATA STRUCTURE LEARNING MATERIALTRANSPORT LAYER_DATA STRUCTURE LEARNING MATERIAL
TRANSPORT LAYER_DATA STRUCTURE LEARNING MATERIAL
jainyshah20
 
Computer networks Module 3 Transport layer
Computer networks Module 3 Transport layerComputer networks Module 3 Transport layer
Computer networks Module 3 Transport layer
claudle200415
 
CNS_Module-2-ppt.pptx
CNS_Module-2-ppt.pptxCNS_Module-2-ppt.pptx
CNS_Module-2-ppt.pptx
HIMANKMISHRA2
 
3. transport layer
3. transport layer3. transport layer
3. transport layer
TageleBerihun
 
Week10 transport
Week10 transportWeek10 transport
Week10 transport
kapilpahwabnb
 
Chapter Five - Transport Layer.pptx
Chapter Five - Transport Layer.pptxChapter Five - Transport Layer.pptx
Chapter Five - Transport Layer.pptx
GirT2
 
Jaimin chp-6 - transport layer- 2011 batch
Jaimin   chp-6 - transport layer- 2011 batchJaimin   chp-6 - transport layer- 2011 batch
Jaimin chp-6 - transport layer- 2011 batch
Jaimin Jani
 
TCP Vs UDP
TCP Vs UDP TCP Vs UDP
TCP Vs UDP
Ahmed Elnaggar
 
computer network having transport layer.ppt
computer network having transport layer.pptcomputer network having transport layer.ppt
computer network having transport layer.ppt
HarisKhan35881
 
Chapter_3_V7.01.ppt
Chapter_3_V7.01.pptChapter_3_V7.01.ppt
Chapter_3_V7.01.ppt
Joko523841
 

Similar to Chapter3 transport (20)

Chapter_3_V6.01.ppt
Chapter_3_V6.01.pptChapter_3_V6.01.ppt
Chapter_3_V6.01.ppt
 
Chapter3 transport layer
Chapter3 transport layerChapter3 transport layer
Chapter3 transport layer
 
Chapter 3 v6.01
Chapter 3 v6.01Chapter 3 v6.01
Chapter 3 v6.01
 
Week4 lec1-bscs1
Week4 lec1-bscs1Week4 lec1-bscs1
Week4 lec1-bscs1
 
Chapter_3_V6.01 (1).pptx
Chapter_3_V6.01 (1).pptxChapter_3_V6.01 (1).pptx
Chapter_3_V6.01 (1).pptx
 
4_5938019984411199949.ppt
4_5938019984411199949.ppt4_5938019984411199949.ppt
4_5938019984411199949.ppt
 
Chapter 3 v6.01 (1)
Chapter 3 v6.01 (1)Chapter 3 v6.01 (1)
Chapter 3 v6.01 (1)
 
Lec6
Lec6Lec6
Lec6
 
Chapter 3 v6.0
Chapter 3 v6.0Chapter 3 v6.0
Chapter 3 v6.0
 
COE332-Ch03d.pptx
COE332-Ch03d.pptxCOE332-Ch03d.pptx
COE332-Ch03d.pptx
 
TRANSPORT LAYER_DATA STRUCTURE LEARNING MATERIAL
TRANSPORT LAYER_DATA STRUCTURE LEARNING MATERIALTRANSPORT LAYER_DATA STRUCTURE LEARNING MATERIAL
TRANSPORT LAYER_DATA STRUCTURE LEARNING MATERIAL
 
Computer networks Module 3 Transport layer
Computer networks Module 3 Transport layerComputer networks Module 3 Transport layer
Computer networks Module 3 Transport layer
 
CNS_Module-2-ppt.pptx
CNS_Module-2-ppt.pptxCNS_Module-2-ppt.pptx
CNS_Module-2-ppt.pptx
 
3. transport layer
3. transport layer3. transport layer
3. transport layer
 
Week10 transport
Week10 transportWeek10 transport
Week10 transport
 
Chapter Five - Transport Layer.pptx
Chapter Five - Transport Layer.pptxChapter Five - Transport Layer.pptx
Chapter Five - Transport Layer.pptx
 
Jaimin chp-6 - transport layer- 2011 batch
Jaimin   chp-6 - transport layer- 2011 batchJaimin   chp-6 - transport layer- 2011 batch
Jaimin chp-6 - transport layer- 2011 batch
 
TCP Vs UDP
TCP Vs UDP TCP Vs UDP
TCP Vs UDP
 
computer network having transport layer.ppt
computer network having transport layer.pptcomputer network having transport layer.ppt
computer network having transport layer.ppt
 
Chapter_3_V7.01.ppt
Chapter_3_V7.01.pptChapter_3_V7.01.ppt
Chapter_3_V7.01.ppt
 

Recently uploaded

Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
Zilliz
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
Zilliz
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
innovationoecd
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
IndexBug
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
Daiki Mogmet Ito
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
mikeeftimakis1
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Safe Software
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
Matthew Sinclair
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
Neo4j
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems S.M.S.A.
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
kumardaparthi1024
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
SOFTTECHHUB
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
Neo4j
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
Pixlogix Infotech
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
Neo4j
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
DianaGray10
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
panagenda
 

Recently uploaded (20)

Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
 

Chapter3 transport

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8. Multiplexing/demultiplexing application transport network link physical P1 application transport network link physical application transport network link physical P2 P3 P4 P1 host 1 host 2 host 3 = process = socket delivering received segments to correct socket gathering data from multiple sockets, enveloping data with header (later used for demultiplexing) Demultiplexing at rcv host: Multiplexing at send host:
  • 9.
  • 10.
  • 11.
  • 12.
  • 13. Connection-oriented demux (cont) Client IP:B server IP: C SP: 9157 DP: 80 D-IP:C S-IP: A D-IP:C S-IP: B D-IP:C S-IP: B P1 client IP: A P1 P2 P4 SP: 9157 DP: 80 P5 P6 P3 SP: 5775 DP: 80
  • 14. Connection-oriented demux: Threaded Web Server Client IP:B server IP: C SP: 9157 DP: 80 P4 D-IP:C S-IP: A D-IP:C S-IP: B D-IP:C S-IP: B P1 client IP: A P1 P2 SP: 9157 DP: 80 P3 SP: 5775 DP: 80
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24. Reliable data transfer: getting started send side receive side rdt_send(): called from above, (e.g., by app.). Passed data to deliver to receiver upper layer udt_send(): called by rdt, to transfer packet over unreliable channel to receiver rdt_rcv(): called when packet arrives on rcv-side of channel deliver_data(): called by rdt to deliver data to upper
  • 25.
  • 26.
  • 27.
  • 28. rdt2.0: FSM specification Wait for call from above snkpkt = 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) sender receiver rdt_send(data)  udt_send(NAK) rdt_rcv(rcvpkt) && corrupt(rcvpkt) Wait for ACK or NAK Wait for call from below
  • 29. rdt2.0: operation with no errors Wait for call from above snkpkt = 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) Wait for call from below rdt_send(data)  udt_send(NAK) rdt_rcv(rcvpkt) && corrupt(rcvpkt) Wait for ACK or NAK
  • 30. rdt2.0: error scenario Wait for call from above snkpkt = 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) Wait for call from below rdt_send(data)  udt_send(NAK) rdt_rcv(rcvpkt) && corrupt(rcvpkt) Wait for ACK or NAK
  • 31.
  • 32. rdt2.1: sender, handles garbled ACK/NAKs Wait for call 0 from above sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_send(data) udt_send(sndpkt) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isNAK(rcvpkt) ) sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) rdt_send(data) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt) udt_send(sndpkt) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isNAK(rcvpkt) ) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt)   Wait for ACK or NAK 0 Wait for call 1 from above Wait for ACK or NAK 1
  • 33. rdt2.1: receiver, handles garbled ACK/NAKs sndpkt = make_pkt(NAK, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq0(rcvpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) 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) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq1(rcvpkt) rdt_rcv(rcvpkt) && (corrupt(rcvpkt) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) sndpkt = make_pkt(NAK, chksum) udt_send(sndpkt) Wait for 0 from below Wait for 1 from below
  • 34.
  • 35.
  • 36. rdt2.2: sender, receiver fragments sndpkt = 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) && notcorrupt(rcvpkt) && isACK(rcvpkt,0) sender FSM fragment rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ACK1, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && (corrupt(rcvpkt) || has_seq1(rcvpkt)) udt_send(sndpkt) receiver FSM fragment  Wait for call 0 from above Wait for ACK 0 Wait for 0 from below
  • 37.
  • 38. rdt3.0 sender sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) start_timer rdt_send(data) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isACK(rcvpkt,1) ) sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) start_timer rdt_send(data) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,0) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isACK(rcvpkt,0) ) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,1) stop_timer stop_timer udt_send(sndpkt) start_timer timeout udt_send(sndpkt) start_timer timeout rdt_rcv(rcvpkt)  rdt_rcv(rcvpkt)    Wait for ACK0 Wait for call 1 from above Wait for call 0from above Wait for ACK1
  • 41.
  • 42. rdt3.0: stop-and-wait operation first packet bit transmitted, t = 0 sender receiver RTT last packet bit transmitted, t = L / R first packet bit arrives last packet bit arrives, send ACK ACK arrives, send next packet, t = RTT + L / R
  • 43.
  • 44. Pipelining: increased utilization first packet bit transmitted, t = 0 sender receiver RTT last bit transmitted, t = L / R first packet bit arrives last packet bit arrives, send ACK ACK arrives, send next packet, t = RTT + L / R last bit of 2 nd packet arrives, send ACK last bit of 3 rd packet arrives, send ACK Increase utilization by a factor of 3!
  • 45.
  • 46.
  • 47.
  • 48. GBN: sender extended FSM start_timer udt_send(sndpkt[base]) udt_send(sndpkt[base+1]) … udt_send(sndpkt[nextseqnum-1]) timeout rdt_send(data) if (nextseqnum < base+N) { sndpkt[nextseqnum] = make_pkt(nextseqnum,data,chksum) udt_send(sndpkt[nextseqnum]) if (base == nextseqnum) start_timer nextseqnum++ } else refuse_data(data) base = getacknum(rcvpkt)+1 If (base == nextseqnum) stop_timer else start_timer rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) base=1 nextseqnum=1 rdt_rcv(rcvpkt) && corrupt(rcvpkt)  Wait
  • 49.
  • 51.
  • 52. Selective repeat: sender, receiver windows
  • 53.
  • 55.
  • 56.
  • 57.
  • 58. TCP segment structure URG: urgent data (generally not used) ACK: ACK # valid PSH: push data now (generally not used) RST, SYN, FIN: connection estab (setup, teardown commands) # bytes rcvr willing to accept counting by bytes of data (not segments!) Internet checksum (as in UDP) source port # dest port # 32 bits application data (variable length) sequence number acknowledgement number Receive window Urg data pnter checksum F S R P A U head len not used Options (variable length)
  • 59.
  • 60.
  • 61.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68. TCP: retransmission scenarios Host A Seq=100, 20 bytes data ACK=100 premature timeout Host B Seq=92, 8 bytes data ACK=120 Seq=92, 8 bytes data ACK=120 Seq=92 timeout SendBase = 100 SendBase = 120 SendBase = 120 Sendbase = 100 time Seq=92 timeout Host A Seq=92, 8 bytes data ACK=100 loss timeout lost ACK scenario Host B X Seq=92, 8 bytes data ACK=100 time
  • 69. TCP retransmission scenarios (more) SendBase = 120 Host A Seq=92, 8 bytes data ACK=100 loss timeout Cumulative ACK scenario Host B X Seq=100, 20 bytes data ACK=120 time
  • 70. TCP ACK generation [RFC 1122, RFC 2581] Event at Receiver Arrival of in-order segment with expected seq #. All data up to expected seq # already ACKed Arrival of in-order segment with expected seq #. One other segment has ACK pending Arrival of out-of-order segment higher-than-expect seq. # . Gap detected Arrival of segment that partially or completely fills gap TCP Receiver action Delayed ACK. Wait up to 500ms for next segment. If no next segment, send ACK Immediately send single cumulative ACK, ACKing both in-order segments Immediately send duplicate ACK , indicating seq. # of next expected byte Immediate send ACK, provided that segment starts at lower end of gap
  • 71.
  • 72. Figure 3.37 Resending a segment after triple duplicate ACK Host A timeout Host B time X resend 2 nd segment
  • 73. Fast retransmit algorithm: 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 } a duplicate ACK for already ACKed segment fast retransmit
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81. TCP Connection Management (cont) TCP client lifecycle TCP server lifecycle
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100. TCP sender congestion control SS or CA SS or CA SS or CA Congestion Avoidance (CA) Slow Start (SS) State CongWin and Threshold not changed Increment duplicate ACK count for segment being acked Duplicate ACK Enter slow start Threshold = CongWin/2, CongWin = 1 MSS, Set state to “Slow Start” Timeout Fast recovery, implementing multiplicative decrease. CongWin will not drop below 1 MSS. Threshold = CongWin/2, CongWin = Threshold, Set state to “Congestion Avoidance” Loss event detected by triple duplicate ACK Additive increase, resulting in increase of CongWin by 1 MSS every RTT CongWin = CongWin+MSS * (MSS/CongWin) ACK receipt for previously unacked data Resulting in a doubling of CongWin every RTT CongWin = CongWin + MSS, If (CongWin > Threshold) set state to “Congestion Avoidance” ACK receipt for previously unacked data Commentary TCP Sender Action Event
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.

Editor's Notes

  1. Kurose and Ross forgot to say anything about wrapping the carry and adding it to low order bit