Course structure
• Principles first
• reliable transfer, building a network,
sharing resources, serving applications
• Protocols in details
• HTTP, SMTP, DNS, TCP, SCTP, UDP, IPv6,
MPLS, RIP, OSPF, BGP, Ethernet, WiFi
• Practice
• Learning by doing
Teaching material
• Second edition, beta version every week
• http://cnp3bis.info.ucl.ac.be
• Feedback/Fixes/Suggestions/Comments
• http://github.com/obonaventure/cnp3
Course organisation
• First pass on the week topic (Tue)
• Students read and prepare exercises
• Multiple choice questions
• Some weeks : practical exercises as well
• Discussion with teaching assistants (Mon)
• Second pass on the week topics (Tue)
Course evaluation
• Group programming project (15%)
• implement one protocol by end October
• Individual Analysis (20%)
• Review of code
• Explain one website -> Dec.
• Exam
• Both exercises and theory (65%)
The physical layer
service
Bits
010100010100010101001010
Physical layer Physical layer
Physical transmission medium
• unreliable service
• transmission errors
• loss/creation of bits
The framing problem
• How to extract frames from a sequence of
bits ?
• Bit stuffing
• Character stuffing
How to reliably
transfer data ?
• Hypothesis
• Reliable physical layer service
A B
Data.request(a) Frame(a)
Data.request(b) Frame(b) Data.ind(a)
Data.request(c) Frame(c) Data.ind(b)
Data.ind(c)
Control frames
A B
Data.req(a) D(a)
Data.req(b) C(OK) Data.ind(a)
D(b)
Data.ind(b)
C(OK)
How to deal with
transmission errors
• Affecting the data frames
• Affecting the control frames
Alternating Bit Protocol
A B
Data.req(a) D(0,a)
Data.req(b) C(OK0) Data.ind(a)
Duplicate detected
D(1,b)
Retransmission timer
D(1,b)
Data.ind(b)
D(1,b) recvd C(OK1)
Data.req(c)
C(OK1)
D(0,c) Lost
D(1,b) recvd
Retransmission timer
D(0,c) Data.ind(c)
Performance
• What is the performance of this reliable
protocol ?
• Two high-end servers
• 10 Gbps interfaces
• 1000 bytes frames
• 1 millisecond delay
Pipelining
A B
• How many frames can A send ?
Data.ind(a)
Data.req(a)
...
D(0,a)
...
D(4,e)
Data.req(b)
Data.req(e)
Data.ind(e)