lesson1 - USF Computer Science Department
Download
Report
Transcript lesson1 - USF Computer Science Department
CS 336/621
Computer Networks and
Network Programming
Spring 2009
Professor Allan B. Cruse
University of San Francisco
Course synopsis
• Combines a survey of network principles
with hands-on exercises and experiments
• Utilizes our classroom and CS laboratory
networking hardware infrastructures
• Employs C/C++ programming language
and the standard ‘sockets’ API libraries
Course prerequisites
•
•
•
•
•
Open to USF Computer Science students
Upper-division or graduate-level standing
Familiarity with Linux (or UNIX) systems
Programming experience: C/C++/Python
Prior coursework: CS 110/112 and CS 245
(or the equivalent preparation elsewhere)
methodology
•
•
•
•
•
•
•
Lectures
Readings
Discussions
Demonstrations
Exercises
Projects
Quizzes
Course website
• You will find current course-information at
this website:
<http://cs.usfca.edu/~cruse/cs336>
• Reading-assignments, exam-dates, class
announcements, course-related software,
links to other resources and to the ‘signup’
page for our class’s online discussion-list
Textbook
•
•
•
•
James F. Kurose and Keith W. Ross
Computer Networking: A Top-Down Approach
4th Edition
Pearson/Addison-Wesley (2008)
This up-to-date textbook is very widely used in networking courses
at colleges and universities in the United States and elsewhere.
Lots of material – maybe too much for one semester – the authors
recommend we cover at least the first five chapters in sequence,
then maybe one of the concluding chapters if time allows for that.
Reference Model
The textbook authors have utilized the standard reference model
for network-software’s layered architecture as a principle which
guides their “Top-Down Approach” to organizing the Chapters
introduction
Chapter 1
application layer
Chapter 2
transport layer
Chapter 3
network layer
Chapter 4
link layer
Chapter 5
Network hardware elements
•
•
•
•
•
•
•
NIC (Network Interface Controller)
Cable (e.g., coaxial, fiber optic, twisted pair)
Repeater (boosts signal-strength on long cables)
Hub (promiscuously connects nearby NICs)
Switch (selectively connects nearby NICs)
Bridge (connects multiple network segments)
Router (intelligently forwards network packets)
Network Interface Card (NIC)
Before the internet there was…
… sneaker-net!
host
host
Users often would transfer their data from one computer to another by simply
copying it onto a floppy diskette, and then carrying that diskette over to their
other computer – located, hopefully, not too far away (e.g., just down the hall)
‘crossover’ cable
NIC
host
NIC
cable
host
An improvement over the ‘sneaker net’ approach to data sharing
between two host computers that are a short distance apart is
to utilize a special direct cable connection – inexpensive to
purchase, easy to connect if NICs are installed, less physical
effort is required, no floppy disks are needed, and no risk of
any unwanted ‘virus’ software infecting the host machines
A ‘Point-to-Point’ connection
repeater
host
host
Over a long-distance cable-connection the electrical signals can degrade,
but ‘repeaters’ can be inserted to receive and amplify a weakened signal
before sending it along (i.e., “repeating it”) to the next connection-point
‘Local’ networks
host
host
host
host
host
HUB
host
host
‘ring’ topology
host
host
‘star’ topology
Why do you think the star-topology is more widely deployed nowadays?
‘Hub’ versus ‘Switch’
host
host
host
host
host
host
host
Why are ‘switches’ preferred over ‘hubs’ nowadays?
host
The ‘Bridge’ device
bridge
switch
switch
host
host
host
host
host
host
The ‘Router’ device
switch
router
host
host
switch
host
switch
host
host
host
host
host
host
Network software elements
operating system
kernel
‘socket’
data-structure
function
library
network
application
program
File and I/O
subsystems
(‘protocol stack’)
device driver
NIC
cable
User-space
Kernel-space
Demo: iplookup.py
• This application reports the IP- address for
a particular network host (if it’s known)
• For example:
$ python iplookup.py stargate
The IP-address for ‘stargate’ is 138.202.171.14
$ python iplookup.py pyramid
The IP-address for ‘pyramid’ is 138.202.171.19
$ python iplookup.py neptune
The IP-address for ‘neptune’ is unknown
Source-code (in Python)
#!/usr/bin/python
import sys
try:
hostname = sys.argv[1]
except:
hostname = “localhost”
import socket
try:
hostip = socket.gethostbyname( hostname )
except:
hostip = “unknown”
print “The IP-address for \’” + hostname + “\’ is “ + hostip
Demo: getquote.py
• This internet application reports the latest
price for a share of Intel Corporation stock
• For example:
$ python getquote.py
Intel Stock: $13.53 at “12:05pm” on “1/26/2009”
Internet programming
import socket
try:
host = “download.finance.yahoo.com”
port = 80
sock = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
sock.settimeout( 2 )
sock.connect( ( host, port) )
sock.send( “GET /d/quotes.csv?s=INTC&f=sl1d1t1c1ohgv&e=.csv \r\n” )
sock.send( “\r\n” );
response_string, server = sock.recvfrom( 4096 )
quote = str.split( response_string, ‘,’ )
except socket.error, msg:
print “An error occurred:”, msg
else:
print
print “Intel Stock: “, ‘$’+quote[1], “at”, quote[3], “on”, quote[2]
print
In-class exercise #1
• Can you modify the ‘getquote.py’ program
so that it will report the latest stock-price
for some other famous technology firms?
– Microsoft Corporation
– Red Hat Corporation
– Oracle Corporation
– Siemens Corporation
– Sony Corporation