240 likes | 256 Views
CSS432 Point-to-Point Links Textbook Ch2.1 – 2.5. Professor: Munehiro Fukuda. Basic Knowledge about Links. Full-duplex versus Half-duplex Full Half Local cable types Category 5 twisted pair Coax Multimode fiber LED-based, 2km
E N D
CSS432 Point-to-Point LinksTextbook Ch2.1 – 2.5 Professor: Munehiro Fukuda CSS 432
Basic Knowledge about Links • Full-duplex versus Half-duplex • Full • Half • Local cable types • Category 5 twisted pair • Coax • Multimode fiber LED-based, 2km • Single-mode fiber laser-diode-based, 40km • Carrier-supported cables/fibers • DS1 (T1): 1.544Mbps, 24-digital voice circuits of 64 Kbps each • DS3 (T3): 44.736Mbps, 28 DS1 links • STS-1 (OC-1): Synchronous Transport signal, the base link speed= 51.840Mbps • STS-3, 12, 48, 192 (OC-3, OC-12, OC-48, OC-192) at time t at time u CSS 432
Basic Knowledge (Cont’d) Voice line 28.8~56Kbps • Last-Mile Links • POTS: Plain Old Telephone Service • ISDN: Integrated Services Digital Network • ADSL: Asynchronous Digital Subscriber Line • VDSL: Very high data rate Digital Subscriber Line • Wireless Links • AMPS, PCS, GSM: Wide-area analog/digital-based mobile phone services • IEEE 802.11: wireless LAN with up to 54Mbps transfer rate • BlueTooth radio interface: 1Mpbs piconet in 10m CODEC Digital line 64-128Kbps 1.554-8.448Mbps 16-640Kbps 12.96~ 55.2Mbps STS-N CSS 432
Focusing on ADSL Long distance Residence B Residence A To telephone switch 255 frequencies for downstream 31 use for upsreams 2 taken for control • Preparing 286 frequencies and agreeing at the available frequencies between two modems • Fitting to most usages where a user tends to retrieve Internet information. CSS 432
Bits 0 0 1 0 1 1 1 1 0 1 0 0 0 0 1 0 NRZ Encoding • Signals propagate over a physical medium • modulate electromagnetic waves • e.g., vary voltage • Encode binary data onto signals • e.g., 0 as low signal and 1 as high signal • known as Non-Return to zero (NRZ) • Consecutive 1s and 0s • Baseline wander: if the receiver averages signals to decide a threshold • Clock recovery: both sides must be strictly synchronized CSS 432
Alternative Encodings • Non-return to Zero Inverted (NRZI) • Encode 1: make a transition from current signal • Encode 0: stay at current signal to encode a zero • solves the problem of consecutive 1s • Signal flips every 1 is encountered. • Manchester • Transmit XOR of the NRZ encoded data and the clock • Only 50% efficient. • Used by Ethernet/Token Ring 0 1 CSS 432
4B/5B Encoding • Every 4 bits of data encoded in a 5-bit code • 5-bit codes selected to have • no more than one leading 0 • no more than two trailing 0s • See textbook Table 2.4 on page 79 • Thus, never get more than three consecutive 0s • Resulting 5-bit codes are transmitted using NRZI • Achieves 80% efficiency • Because 5th bit is redundant. • Used by FDDI 01??? but not 001?? ??100 but not ?1000 CSS 432
Bits 0 0 1 0 1 1 1 1 0 1 0 0 0 0 1 0 NRZ Clock Manchester NRZI Encoding Example CSS 432
Framing • Break sequence of bits into a frame • Typically implemented by a network adaptor Bits Node A Adaptor Adaptor Node B Frame CSS 432
Frame error 8 16 16 8 Frame error Beginning Ending Header Body CRC sequence sequence Approaches • Sentinel-based • delineate frame with special pattern: 01111110 • e.g., HDLC, SDLC, PPP • problem: ending sequence appears in the payload • solution: bit stuffing • sender: insert 0 after five consecutive 1s • receiver: delete 0 that follows five consecutive 1s • Counter-based • include payload length in header • e.g., DDCMP • problem: count field corrupted (frame error) • solution: • Wait for the next beginning sequence • Catch when CRC fails CSS 432
Approaches (cont) • Clock-based • each frame is 125us long • e.g., SONET: Synchronous Optical Network • STS-n (STS-1 = 51.84 Mbps) Interleaved every byte: keep 51Mbps for each STS-1 CSS 432
Error Detections • Add k bits of redundant data to an n-bit message • want k << n (i.e. k is extremely small as compared to n) • e.g., k = 32 and n = 12,000 (1500 bytes) in CRC-32 • Parity Bit • Internet Checksum Algorithm • Cyclic Redundancy Check CSS 432
1 0 1 1 0 1 0101001 1101001 1011110 0110100 1011111 0001110 0 1111011 Parity Parity bits • Odd parity • Even parity • Two-dimensional parity Data Parity byte CSS 432
Internet Checksum Algorithm • View message as a sequence of 16-bit integers; • Convert each 16-bit integer into a ones-complement arithmetic • Sum up each integer • Increment the result upon a carryout • Example: Ones-complement message u_short cksum(u_short *buf, int count) { register u_long sum = 0; while (count--) { sum += *buf++; if (sum & 0xFFFF0000) { // carry occurred, so wrap around sum &= 0xFFFF; sum++; } } return ~(sum & 0xFFFF); } 5: 0 00000000 00000101 3: 0 00000000 00000011 -5: 0 11111111 11111010 -3: 0 11111111 11111100 -5 + (-3): 1 11111111 11110110 w/ carry: 0 11111111 11110111 This corresponds to -8 What if 5 and 3 were changed In 6 and 2 ? CSS 432
Cyclic Redundancy Check • Represent n-bit message as n-1 degree polynomial • e.g., MSG=10011010 as M(x) = x7 + x4 + x3 + x1 • Let k be the degree of some divisor polynomial • e.g., C(x) = x3 + x2 + 1 receiver sender M(x)2k – M(x) 2k % C(x) = C(x)-divisible message: P(x) If P(x) % C(x) == 0 P(x) was sent successfully CSS 432
10011010000 eor 1101 1001 eor 1101 1000 eor 1101 1011 eor 1101 1100 eor 1101 1000 eor 1101 101 Just appended CRC (cont) • Sender polynomial M(x) • M(x) = 10011010, C(x) = 1101, thus k = 3 • M(x)23 = 10011010000 (<< 3) • M(x)23 % C(x) = 101 • M(x)23– M(x)23 % C(x) = 10011010101 = P(x) • Noise polynomial E(x) • Receiver polynomial P(x) + E(x) • E(x) = 0 implies no errors • (P(x) + E(x)) % C(x) == 0 if: • E(x) was zero (no error), or • E(x) is exactly divisible by C(x) • To retrieve M(x): P(x)/ 23, (truncate the last 3 bits) CSS 432
1 0 0 1 x2 1 1 x2 1 0 0 1 1 0 0 x1 x1 0 0 0 1 0 0 1 0 0 0 1 0 0 x0 x0 0 1 1 0 0 0 1 0 0 1 CRC Calculation Using Shift Register sender receiver C(x) = 1101 M(x) M(x) CRC + M(x) CRC CRC’ If CRC == CRC’, no errors Example: M(x) = 10011010 0 000 010 000 01011001 000 01 000 0101100 000 0 000 010110 101 will be transferred. 000 000 01011 00 000 0101 CSS 432
Frame Transfer Algorithms Sender Receiver Frame 0 Ack 0 Frame 1 Ack 1 Frame 0 Ack 0 Sender Receiver … Time … • Stop and wait • Stop a transmission and wait for ack to return or timeout • Add 1-bit sequence number to detect a duplication of the same frame • Sliding window • Allow multiple outstanding (un-ACKed) frames • Upper bound on un-ACKed frames, called window CSS 432
Stop and Wait timeout // Test 2: client stop-and-wait message send ---------------------------------- int clientStopWait( UdpSocket &sock, const int max, int message[] ) { int retransmits = 0; // # retransmits int ack; // prepare a space to receive ack // transfer message[] max times for ( int sequence = 0; sequence < max; ) { message[0] = sequence; // message[0] has a sequence number sock.sendTo( (char *)message, MSGSIZE ); // udp message send // until a timeout (1500msecs) occurs // keep calling sock.poolRecvFrom( ) // if an ack came, exame if its ack sequence is the same as my sequence // if so, increment my sequence and go back to the loop top // if a timeout occurs, resend the same sequence and increment retransmits } return retransmits; } 2 0 1 1 seq=1 seq=1 tardy ack=1 ack=0 seq=0 // Test 2: server reliable message receive ------------------------------------ void serverReliable( UdpSocket &sock, const int max, int message[] ) { int ack; // an ack message // receive message[] max times for ( int sequence = 0; sequence < max; ) { sock.recvFrom( (char *)message, MSGSIZE ); // udp message receive // check if this is a message expected to receive // if so, send back an ack with this sequence number and increment sequence } } 2 1 0 2 discarded CSS 432
Stop and Wait • Problem: Can’t utilize the link’s capacity • Example 1 • 1.5Mbps link x 45ms RTT = 67.5Kb (8KB) • If the frame size is 1KB and the sender waits for 45ms RTT • 1KB for 45ms RTT • 1/8th link utilization • Example 2 • Ping from uw1-320-21 to uw1-320-22: 0.200msec = 2 x 10-4sec • 1Gbps x (2 x 10-4) = 109 x 2 x 10-4 = 2 x 105 = 200Kbits = 25KB • Unless you send 25KB for every 0.2msec, you make the network idle • Or, you should send 25KB ÷ 1.5KB/packet = 16.7 packets consecutively. CSS 432
Sliding Window // Test 3: client sliding window + early-retransmission ----------------------- int clientSlidingWindow( UdpSocket &sock, const int max, int message[], const int windowSize ){ int retransmits = 0; // # retransmits int ack; // prepare a space to receive ack int ackSeq = 0; // the ack sequence expected to receive // transfer message[] max times for ( int sequence = 0; sequence < max || ackSeq < max; ) { if ( ackSeq + windowSize > sequence && sequence < max ) { // within the sliding window message[0] = i; // message[0] has a sequence number sock.sendTo( (char *)message, MSGSIZE ); // udp message send // check if ack arrived and if ack is the same as ackSeq, increment ackSeq // increment sequence } else { // the slinding window is full! // until a timeout (1500msecs) occurs // keep calling sock.poolRecvFrom( ) // if an ack came, exame if ack >= ackSeq // if so, ackSeq = ack + 1 // else resend the message with this ack number and increment retransmits // if a timeout occurs, resend the same ackSeq and increment retransmits } } return retransmits; } window max = 5 3 7 6 3 5 3 3 8 2 4 1 0 3 lost lost // Test 3: server early retransmission ---------------------------------------- void serverEarlyRetrans(UdpSocket &sock, const int max, int message[], const int windowSize ){ int ack[3]; // an ack message bool array[max]; // indicates the arrival of message[i] for ( int j = 0; j < max; j++ ) array[j] = false; // no message has arrived yet // receive message[] max times for ( int sequence = 0; sequence < max; ) { sock.recvFrom( (char *)message, MSGSIZE ); // receive a UDP message // if message[0] is the same as sequence. // mark array[sequence], and scan array[sequence] through to array[max] // advance sequence to the last consecutive true element’s index +1. // else // mark arrray[message[0]]. // send back the ack for a series of messages I received so far, ack[0] = sequence } } 3 sequence 7 3 7 8 0 3 3 2 7 1 CSS 432
Sliding Window CSS 432
Sequence Number Space • SeqNum field is finite; sequence numbers wrap around • MaxSeqNum: Sequence number space must be larger than # outstanding frames • SWS: Sender’s Window Size • RWS: Receiver’s Window Size • SWS <= MaxSeqNum-1 is not sufficient • suppose 3-bit SeqNum field (0..7) • SWS=RWS=7 • sender transmit frames 0..6 • arrive successfully, but ACKs lost • sender retransmits 0..6 • receiver expecting 7, 0..5, but receives second incarnation of 0..5 • SWS < (MaxSeqNum+1)/2 or 2 x SWS – 1 < MaxSeqNum CSS 432
Reviews • Encoding (NRZ, NRZI, Manchester, and 4B/5B) • Framing (Sentinel and counter-based) • Error Detections (Parity, Internet checksum, and CRC) • Stop-and-wait • Sliding window • Exercises in Chapter 2 • Ex. 2 and 5 (4B/5B, NRZI, and bit stuffing) • Ex. 16 (Internet Checksum) • Ex. 18 (CRC) • Ex. 24 (Sliding Window) CSS 432