TCP: Overview rFcs:931221323.20182581 口 point-to- point o full duplex data o one sender one receiver o bi-directional data flow D reliable, in-order byte in same connection steam: o MSS: maximum segment size o no "message boundaries 口 pipelined: g connection-oriented: o TCP congestion and flow o handshaking(exchange of control msgs init's control set window size sender receiver state 0 send receive buffers before data exchange 口 flow controlled socket writes data reads data doo I socket o sender will not overwhelm receiver ve bu seamen→ 3: Transport Layer
3: Transport Layer 3b-1 TCP: Overview RFCs: 793, 1122, 1323, 2018, 2581 full duplex data: bi-directional data flow in same connection MSS: maximum segment size connection-oriented: handshaking (exchange of control msgs) init’s sender, receiver state before data exchange flow controlled: sender will not overwhelm receiver point-to-point: one sender, one receiver reliable, in-order byte steam: no “message boundaries” pipelined: TCP congestion and flow control set window size send & receive buffers socket door TCP send buffer TCP receive buffer socket door segment application writes data application reads data
TCP segment structure 32 bits URG: urgent data countin (generally not used) source port #i dest port by bytes sequence number ACK: ACK of data valid acknowledgement number (not segments!) head not PSH: push data now Rused sf rcvr window size (generally not used checksum ptr urgent data bytes rcvr willing RST SYN. FIN Options(variable length) to accept connection estab (setup, teardown commands) applicaTion Internet data checksum (variable length) (as in UDP 3: Transport Layer 3b-2
3: Transport Layer 3b-2 TCP segment structure source port # dest port # 32 bits application data (variable length) sequence number acknowledgement number rcvr window size checksum ptr urgent data UAP RSF head len not used Options (variable length) 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)
TCP seg. *'s and ACKs Seq#'s: Host a ost b byte stream number"of first byte in segment's bes Seq=42, ACK=79, data=C data host ACKs ACKs: receipt of seq of next byte Seq=79, ACK=43, data=C'C echoes back c expected from other side host ACks o cumulative ACK receipt Q: how receiver handles of echoed Seq=43, ACK out-of-order segments o A: TCP spec doesn't say,-up to fime simple telnet scenario Implementor 3: Transport Layer 3b-3
3: Transport Layer 3b-3 TCP seq. #’s and ACKs Seq. #’s: byte stream “number” of first byte in segment’s data ACKs: seq # of next byte expected from other side cumulative ACK Q: how receiver handles out-of-order segments A: TCP spec doesn’t say, - up to implementor Host A Host B User types ‘C’ host ACKs receipt of echoed ‘C’ host ACKs receipt of ‘C’, echoes back ‘C’ time simple telnet scenario
TCP: reliable data transfer event: data received from application above simplified sender, assuming create, send segment .one way data transfer no flow, congestion control wait event: timer timeout for fc segment with seq# y or event retransmit segment event: AcK received with ACK #y ACK processing 3: Transport Layer 3b-4
3: Transport Layer 3b-4 TCP: reliable data transfer simplified sender, assuming wait for event wait for event event: data received from application above event: timer timeout for segment with seq # y event: ACK received, with ACK # y create, send segment retransmit segment ACK processing •one way data transfer •no flow, congestion control
TCP 00 sendbase= initial sequence number 01 nextseqnum=initial sequence number 02 reliable 03 loop(forever)i 04 switch(event) 05 event: data received from application above data create TCP segment with sequence number nextseqnum start timer for segment next 08 transfer pass segment to IP 09 nextseqnum= nextseqnum length(data 10 event: timer timeout for segment with sequence number retransmit segment with sequence numbery compue new timeout interval for segment y Simplified restart timer for sequence number TCP 14 event: ACK received, with ACK field value of y 15 if y > sendbase)(/*cumulative ACK of all data up to y * sender 16 cancel all timers for segments with sequence numbers <y send base y 18 19 else(/* a duplicate ACK for already ACKed segment*/ increment number of duplicate ACKs received fory 21 if (number of duplicate ACKS received fory ==3 i 22 / TCP fast retransmit * 23 resend segment with sequence number restart timer for segment y 25 26)/end of loop forever*/ 3: Transport Layer 3b-5
3: Transport Layer 3b-5 TCP: reliable data transfer 00 sendbase = initial_sequence number 01 nextseqnum = initial_sequence number 02 03 loop (forever) { 04 switch(event) 05 event: data received from application above 06 create TCP segment with sequence number nextseqnum 07 start timer for segment nextseqnum 08 pass segment to IP 09 nextseqnum = nextseqnum + length(data) 10 event: timer timeout for segment with sequence number y 11 retransmit segment with sequence number y 12 compue new timeout interval for segment y 13 restart timer for sequence number y 14 event: ACK received, with ACK field value of y 15 if (y > sendbase) { /* cumulative ACK of all data up to y */ 16 cancel all timers for segments with sequence numbers < y 17 sendbase = y 18 } 19 else { /* a duplicate ACK for already ACKed segment */ 20 increment number of duplicate ACKs received for y 21 if (number of duplicate ACKS received for y == 3) { 22 /* TCP fast retransmit */ 23 resend segment with sequence number y 24 restart timer for segment y 25 } 26 } /* end of loop forever */ Simplified TCP sender