0% found this document useful (0 votes)
47 views

Error Control: An Engineering Approach To Computer Networking

The document discusses various techniques for error control in computer networks, including CRC, sequence numbers, and retransmissions. CRC can detect all single bit errors and many multiple bit errors. Sequence numbers are used to detect lost, duplicated, or reordered packets, and retransmissions are used for correction. The optimal size of sequence numbers depends on factors like transmission rate and maximum packet lifetime in the network. Retransmission schemes include go back N and selective retransmission. Fast retransmit allows detecting lost packets before timeout by looking for repeated acknowledgment numbers.

Uploaded by

Pushkar Joshi
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
47 views

Error Control: An Engineering Approach To Computer Networking

The document discusses various techniques for error control in computer networks, including CRC, sequence numbers, and retransmissions. CRC can detect all single bit errors and many multiple bit errors. Sequence numbers are used to detect lost, duplicated, or reordered packets, and retransmissions are used for correction. The optimal size of sequence numbers depends on factors like transmission rate and maximum packet lifetime in the network. Retransmission schemes include go back N and selective retransmission. Fast retransmit allows detecting lost packets before timeout by looking for repeated acknowledgment numbers.

Uploaded by

Pushkar Joshi
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 32

Error control

An Engineering Approach to Computer Networking


CRC

■ Detects
◆ all single bit errors
◆ almost all 2-bit errors
◆ any odd number of errors
◆ all bursts up to M, where generator length is M
◆ longer bursts with probability 2^-m
Implementation

■ Hardware
◆ on-the-fly with a shift register
◆ easy to implement with ASIC/FPGA
■ Software
◆ precompute remainders for 16-bit words
◆ add remainders to a running sum
◆ needs only one lookup per 16-bit block
Software schemes

■ Efficiency is important
◆ touch each data byte only once
■ CRC
■ TCP/UDP/IP
◆ all use same scheme
◆ treat data bytes as 16-bit integers
◆ add with end-around carry
◆ one’s complement = checksum
◆ catches all 1-bit errors
◆ longer errors with prob 1/65536
Packet errors

■ Different from bit errors


◆ types
✦ not just erasure, but also duplication, insertion,etc.
◆ correction
✦ retransmission, instead of redundancy
Types of packet errors

■ Loss
◆ due to uncorrectable bit errors
◆ buffer loss on overflow
✦ especially with bursty traffic
• for the same load, the greater the burstiness, the more the
loss
✦ loss rate depends on burstiness, load, and buffer size
◆ fragmented packets can lead to error multiplication
✦ longer the packet, more the loss
Types of packet errors (cont.)

■ Duplication
◆ same packet received twice
✦ usually due to retransmission
■ Insertion
◆ packet from some other conversation received
✦ header corruption
■ Reordering
◆ packets received in wrong order
✦ usually due to retransmission
✦ some routers also reorder
Packet error detection and correction

■ Detection
◆ Sequence numbers
◆ Timeouts
■ Correction
◆ Retransmission
Sequence numbers

■ In each header
■ Incremented for non-retransmitted packets
■ Sequence space
◆ set of all possible sequence numbers
◆ for a 3-bit seq #, space is {0,1,2,3,4,5,6,7}
Using sequence numbers

■ Loss
◆ gap in sequence space allows receiver to detect loss
✦ e.g. received 0,1,2,5,6,7 => lost 3,4
◆ acks carry cumulative seq #
◆ redundant information
◆ if no ack for a while, sender suspects loss

■ Reordering
■ Duplication
■ Insertion
◆ if the received seq # is “very different” from what is expected
✦ more on this later
Sequence number size

■ Long enough so that sender does not confuse sequence


numbers on acks
■ E.g, sending at < 100 packets/sec (R)
◆ wait for 200 secs before giving up (T)
◆ receiver may dally up to 100 sec (A)
◆ packet can live in the network up to 5 minutes (300 s)
(maximum packet lifetime)
◆ can get an ack as late as 900 seconds after packet sent out
◆ sent out 900*100 = 90,000 packets
◆ if seqence space smaller, then can have confusion
◆ so, sequence number > log (90,000), at least 17 bits
■ In general 2^seq_size > R(2 MPL + T + A)
MPL

■ How can we bound it?


■ Generation time in header
◆ too complex!
■ Counter in header decremented per hop
◆ crufty, but works
◆ used in the Internet
◆ assumes max. diameter, and a limit on forwarding time
Sequence number size (cont.)

■ If no acks, then size depends on two things


◆ reordering span: how much packets can be reordered
✦ e.g. span of 128 => seq # > 7 bits
◆ burst loss span: how many consecutive pkts. can be lost
✦ e.g. possibility of 16 consecutive lost packets => seq # > 4 bits
◆ In practice, hope that technology becomes obselete before
worst case hits!
Packet insertion

■ Receiver should be able to distinguish packets from other


connections
■ Why?
◆ receive packets on VCI 1
◆ connection closes
◆ new connection also with VCI 1
◆ delayed packet arrives
◆ could be accepted
■ Solution
◆ flush packets on connection clos
◆ can’t do this for connectionless networks like the Internet
Packet insertion in the Internet

■ Packets carry source IP, dest IP, source port number,


destination port number
■ How we can have insertion?
◆ host A opens connection to B, source port 123, dest port 456
◆ transport layer connection terminates
◆ new connection opens, A and B assign the same port
numbers
◆ delayed packet from old connection arrives
◆ insertion!
Solutions

■ Per-connection incarnation number


◆ incremented for each connection from each host
◆ - takes up header space
◆ - on a crash, we may repeat
✦ need stable storage, which is expensive
■ Reassign port numbers only after 1 MPL
◆ - needs stable storage to survive crash
Solutions (cont.)

■ Assign port numbers serially: new connections have new ports


◆ Unix starts at 1024
◆ this fails if we wrap around within 1 MPL
◆ also fails of computer crashes and we restart with 1024
■ Assign initial sequence numbers serially
◆ new connections may have same port, but seq # differs
◆ fails on a crash
■ Wait 1 MPL after boot up (30s to 2 min)
◆ this flushes old packets from network
◆ used in most Unix systems
3-way handshake

■ Standard solution, then, is


◆ choose port numbers serially
◆ choose initial sequence numbers from a clock
◆ wait 1 MPL after a crash
■ Needs communicating ends to tell each other initial sequence
number
■ Easiest way is to tell this in a SYNchronize packet (TCP) that
starts a connection
■ 2-way handshake
3-way handshake

■ Problem really is that SYNs themselves are not protected with


sequence numbers
■ 3-way handshake protects against delayed SYNs
Loss detection

■ At receiver, from a gap in sequence space


◆ send a nack to the sender
■ At sender, by looking at cumulative acks, and timeing out if no
ack for a while
◆ need to choose timeout interval
Nacks

■ Sounds good, but does not work well


◆ extra load during loss, even though in reverse direction
■ If nack is lost, receiver must retransmit it
◆ moves timeout problem to receiver
■ So we need timeouts anyway
Timeouts

■ Set timer on sending a packet


■ If timer goes off, and no ack, resend
■ How to choose timeout value?
■ Intuition is that we expect a reply in about one round trip time
(RTT)
Timeout schemes

■ Static scheme
◆ know RTT a priori
◆ timer set to this value
◆ works well when RTT changes little
■ Dynamic scheme
◆ measure RTT
◆ timeout is a function of measured RTTs
Old TCP scheme

■ RTTs are measured periodically


■ Smoothed RTT (srtt)
■ srtt = a * srtt + (1-a) * RTT
■ timeout = b * srtt
■ a = 0.9, b = 2
■ sensitive to choice of a
◆ a = 1 => timeout = 2 * initial srtt
◆ a = 0 => no history
■ doesn’t work too well in practice
New TCP scheme (Jacobson)

■ introduce new term = mean deviation from mean (m)


■ m = | srtt - RTT |
■ sm = a * sm + (1-a) * m
■ timeout = srtt + b * sm
Intrinsic problems

■ Hard to choose proper timers, even with new TCP scheme


◆ What should initial value of srtt be?
◆ High variability in R
◆ Timeout => loss, delayed ack, or lost ack
✦ hard to distinguish

■ Lesson: use timeouts rarely


Retransmissions

■ Sender detects loss on timeout


■ Which packets to retransmit?
■ Need to first understand concept of error control window
Error control window

■ Set of packets sent, but not acked


■ 123456789 (original window)
■ 123456789 (recv ack for 3)
■ 123456789 (send 8)
■ May want to restrict max size = window size
■ Sender blocked until ack comes back
Go back N retransmission

■ On a timeout, retransmit the entire error control window


■ Receiver only accepts in-order packets
■ + simple
■ + no buffer at receiver
■ - can add to congestion
■ - wastes bandwidth
■ used in TCP
■ if packet loss rate is p, and
Selective retransmission

■ Somehow find out which packets lost, then only retransmit them
■ How to find lost packets?
◆ each ack has a bitmap of received packets
✦ e.g. cum_ack = 5, bitmap = 101 => received 5 and 7, but not 6
✦ wastes header space
◆ sender periodically asks receiver for bitmap
◆ fast retransmit
Fast retransmit

■ Assume cumulative acks


■ If sender sees repeated cumulative acks, packet likely lost
■ 1, 2, 3, 4, 5 , 6
■ 1, 2, 3 3 3
■ Send cumulative_ack + 1 = 4
■ Used in TCP
SMART

■ Ack carries cumulative sequence number


■ Also sequence number of packet causing ack
■ 1234567
■ 123 333
■ 123 567
■ Sender creates bitmap
■ No need for timers!
■ If retransmitted packet lost, periodically check if cumulative ack
increased.

You might also like