pptx - Dongsu Han

Download Report

Transcript pptx - Dongsu Han

NETWORK PROGRAMMING
INTRO TO DISTRIBUTED SYSTEMS
FALL 2015
Some material taken from publicly available lecture slides
including Srini Seshan’s and David Anderson’s
Dongsu Han
L3-socket
Today’s Lecture

Lecture
 Transport
protocols: UDP and TCP
 Version control using SVN

TA-led programming session
 Editor,
socket programming
 Debugging with gdb

Announcement
 Programming
Assignment 1 is out. (Due in two weeks--추석)
Review of Previous Lectures

What is a distributed system? (L1)
 Definition
 Example

What are some of the important decisions made in the Internet
architecture? (L2)
 Narrow
 Why?:
waist: Network provides minimal functionality (best-effort)
to connect existing networks that are heterogeneous
 Stateless
architecture: no per-flow state inside network
 Why?
 For
survivability
Principles






P1: IP over all network (narrow waist)
P2: Layering
Principle 3: Fate Sharing
Principle 4: Soft-state
Principle 5: End-to-End Argument  Next lecture
Principle 6: network layer provides one simple service: best
effort datagram (packet) delivery
Principle 4: Soft-state
5

Soft-state (as oppose to hard-state)
 Announce
state
 Refresh state
 Timeout state


Penalty for timeout – poor performance
Robust way to identify communication flows (firewall)
 Possible

mechanism to provide non-best effort service
Helps survivability
Goal 2: Types of Service
6


Principle 6: network layer provides one simple service: best effort datagram (packet)
delivery
 All packets are treated the same
Network layer (IP) provides “best effort” service.


Other functions are implemented at the end-host at the transport layer (TCP/UDP)



Relatively simple core network elements
Building block from which other services (such as reliable data stream) can be built
Contributes to scalability of network
Issues: No QoS support assumed from below
 Hard to implement without network support
 QoS is an ongoing debate…
Summary
7

Successes: IP on everything!

Drawbacks…
but perhaps they’re totally
worth it in the context of the
original Internet. Might not have
worked without them!
“This set of goals might seem to be
nothing more than a checklist of all the
desirable network features. It is
important to understand that these
goals are in order of importance, and
an entirely different network
architecture would result if the order
were changed.”
Transport Protocols

Lowest level end-to-end protocol.
Header generated by sender is interpreted
only by the destination
 Routers view transport header as part of the
payload; they are not supposed to see the
transport header.

7
7
6
6
5
5
Transport
Transport
IP
IP
IP
Datalink
2
2
Datalink
Physical
1
1
Physical
router
8
What does the transport layer do?

No per-flow (connection) state in the network
 Transport
layer maintains the connection state. Transport layer identifies an
end-to-end connection.

How does the transport layer identify an end-point (application)?
De-multiplexing: Port numbers




Network layer gets you to the host.
A port identifies the sending or receiving socket (application).
A socket is one endpoint of a two-way communication between two
programs running on the network. A socket is bound to a port number
so that the transport layer can identify the application that data is
destined to be sent.
Identifying two end-points: An endpoint = <IP address, Port #>
Source endpoint = <SrcIPAddr, SrcPort>
 destination endponit = <DestIPAddr, DestPort>

Protocol and Port Demultiplexing
11


Multiple choices at each layer
Applications open a socket (identified by the port number)
Port 80
Port 22 Port 80 Port 22
TCP
UDP
Network
IP
TCP/UDP
IP
NET1
NET2
…
NETn
Type Field
=IP
Protocol Field Port Number
= TCP
= 80
Server and Client
Server and Client exchange messages over the
network through a common Socket API
Clients
Server
TCP/UDP
user
space
ports
Socket API
TCP/UDP
IP
IP
Ethernet Adapter
Ethernet Adapter
12
kernel
space
hardware
Transport protocols

UDP
 Provides

only integrity and de-multiplexing
TCP adds…
UDP: User Datagram Protocol [RFC 768]
14


“bare bones” Internet transport
protocol, “Best effort” service
UDP segments may be:
Lost, duplicated (bug, spurious retransmission a
t L2)
 Delivered out of order to app


Connectionless:
No handshaking between UDP sender, receiver
 Each UDP segment handled independently

Why is there a UDP?
• No connection establishment
(which can add delay)
• Simple: sender, receiver stat
e is minimal
• Small header
• No congestion control: UDP
can blast away as fast as de
sired
UDP, cont.
15

Often used for streaming multimedi
a apps (e.g., Skype)
Length, in
 Loss
tolerant
 Rate sensitive

Other UDP uses (why?):
bytes of UDP
segment,
including
header
32 bits
Source port #
Dest port #
Length
Checksum
 DNS

Reliable transfer over UDP
 Must
be at application layer
 Application-specific error recovery
Application
data
(message)
UDP segment format
Transport protocols

UDP
 Provides

only integrity and de-multiplexing
TCP adds…
 Connection-oriented
 Reliable
(error control)
 Ordered byte stream (in-order delivery)
 Bi-directional byte-stream
 Flow and congestion controlled
TCP

Protocol implemented entirely at the ends
 Fate

sharing
Abstraction provided
 Connection
oriented protocol (hand-shake or connection establishment)
 In-order byte-stream

Implemented functionality (next lecture)
 Flow
control
 Reliability (error control)
 Reassembly (in-order delivery)
 Congestion control
TCP Client Example
18
/* get the server host entry */
hp = gethostbyname(argv[1]);
if (hp == NULL) {
perror("gethostbyname");
return -1;
}
/* create stream socket */
sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sockfd < 0) {
perror("socket");
return -1;
}
/* set the destination address */
daddr.sin_family = AF_INET;
memcpy(&daddr.sin_addr.s_addr, hp->h_addr, hp->h_length);
daddr.sin_port = htons(PORT);
TCP Client Example
19
/* connect to the destination */
if (connect(sockfd, (struct sockaddr *)&daddr, sizeof(struct sockaddr_in))) {
close(sockfd);
perror("connect");
return -1;
}
inet_ntop(AF_INET, &daddr.sin_addr, s, sizeof(s));
printf("client: connecting to %s\n", s);
/* receive message sent from the server */
if ((numbytes = recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1) {
perror("recv"); exit(1);
}
/* print the received message */
buf[numbytes] = '\0';
printf("client: received '%s'\n", buf);
close(sockfd);
Difference in abstraction

UDP
 Recv(len)
call gives you a packet (the payload part)
len
len
UDP segment (packet)

UDP segment (packet)
TCP
establishment (hand-shake)  Will see in the TA led session.
Application
 Recv(len) call give you a sequence of bytes
send()
 Connection
len
Application
Recv()
len
Byte stream
Byte stream
Incoming stream
TCP– What goes on underneath
Byte stream
Packet (1~7)
Packet (8~10)
Packet (9~11)
Receive buffer
Packet (8~10)
I need seq# 8.
User Datagram Protocol(UDP):
An Analogy
UDP





Postal Mail
Single socket to receive messages
No guarantee of delivery
Not necessarily in-order delivery
Datagram – independent packets
Must address each packet





Single mailbox to receive letters
Unreliable 
Not necessarily in-order delivery
Letters sent independently
Must address each reply
Example UDP applications
Multimedia, voice over IP
22
Transmission Control Protocol
(TCP): An Analogy
Telephone Call
TCP




Reliable – guarantee delivery
Byte stream – in-order delivery
Connection-oriented – single socket per
connection
Setup connection followed by data
transfer




Guaranteed delivery
In-order delivery
Connection-oriented
Setup connection followed by
conversation
Example TCP applications
Web, Email, Telnet
REVISION CONTROL & MAKE
Overview

Revision control systems
 Motivation
 Features
 Subversion

primer
Make
 Simple
gcc
 Make basics and variables
 Testing

Useful Unix commands
Dealing with large codebases

Complications
 Code
synchronization
 Backups
 Concurrent modifications

Solution: Revision Control System (RCS)
 Store
all of your code in a repository on a server
 Metadata to track changes, revisions, etc…
 Also useful for writing books, papers, etc…
Basic RCS features (1/2)

Infinite undo
 go

Automatic backups
 all

back to previous revisions
your code ever, forever saved
Changes tracking
 see
differences between revisions
Basic RCS features (2/2)

Concurrency
 Multiple

Snapshots
 Save

people working at the same time
stable versions on the side (i.e. handin)
Branching
 Create
diverging code paths for experimentation
Typical RCS workflow
1.
2.
3.
4.
5.
6.
Create repository on RCS server
Checkout the repository to your local machine
Work locally: create, delete and modify files
Update the repository to check for changes other people might ha
ve made
Resolve any existing conflicts
Commit your changes to the repository
RCS implementations

Concurrent Versions System (CVS)


Concurrency, versioning of single files
Subversion (SVN)

File and directory moving and renaming, atomic commits
Git


Modern, de-facto standard
Concurrent edits (1/2)
John
File v1
David
Both check out file
Edits (lines 30-40)
Edits (lines 1-20)
commit
File v2
Update
Merged automatically!
Concurrent edits (2/2)
John
File v1
David
Both check out file
Edits (lines 10-20)
Edits (lines 1-20)
commit
File v2
Update
Conflict needing manual inte
rvention!
Resolving conflicts

When changes can’t be merged automatically

SVN gives you 3 files:




file.mine : your file
file.rx : the remote file
file : original file with marked conflicts
You can



Discard your changes
Discard others’ changes
Go over each conflict and arbitrate as appropriate
Interacting with SVN

Command line


Readily available on your lab machines
Graphical tools



Easier to use
Subclipse for Eclipse gives IDE/SVN integration
tortoiseSVN
실습 server



IP: 143.248.141.40, 143.248.141.42~143.248.141.44
ID: ee<your student id> (e.g., ee20110111)
Password: ee324EE#@$
Svn password


20100456 63900
20100667 26834
20100967 48013
20110198 810
20110227 39617
20110319 16411
20110468 57700
20110548 64302
20110968 30860
20120184 19424
20120277 12976
20120508 17278
20120677 40029
20120973 61034
20121092 42821
20130098 42807
20130185 30791
20130234 13448
20130363 14421
20130394 20796
20130451 13008
20130477 53705
20130478 45122
20130505 4805
20130842 742
20140055 20389
20140244 45336
20140544 23793
20153347 5044
Command line SVN example (1/2)
$ svn co –-username=<<student id>> https://ina.kaist.ac.kr/svn/test
$ cd test
$ vim <<student id>>.txt
$ vim <<student id>>.
$ svn add <<student id>>.txt
$ svn commit -m 'adding a text file with my student id‘
$ svn update
$ cd ../
$ svn cp trunk tags/<<student id>>_submission
$ svn commit -m 'making a tag of the trunk for submission!‘
$ svn up
$ echo -e ”<<student id>>" >> student.txt
$ svn commit –m “added my student id”
Command line SVN example (2/2)
Revision control lets you note (and then see) what you changed:
> svn log student.txt
r986 | ntolia | 2006-08-01 17:13:38 -0400 (Tue, 01 Aug 2006) | 6 lines
This allows the sp to get rid of chunks early before a transfer is complete.
Useful when a file is requested in-order and the file size > mem cache size
> svn diff -r 1:2 student.txt
Index: file
===================================================================
--- file (revision 1)
+++ file (revision 2)
@@-1,2+1,3@@
This isatestfile
-It startedwithtwolines
+It nolongerhastwolines
+it hasthree
General SVN tips





Update, make, test, only then commit
Merge often (svn up)
Comment commits
Avoid commit races
Modular design avoids conflicts
Know more


subversion.tigris.org for SVN software & info
svnbook.red-bean.com for SVN book
Makefile

You are on your own.
Make



Utility for executable building automation
Saves you time and frustration
Helps you test more and better
Simple gcc
If we have files:
• prog.c: The main program file
• lib.c: Library .c file
• lib.h: Library header file
% gcc -c prog.c -o prog.o
% gcc -c lib.c -o lib.o
% gcc lib.o prog.o -o binary
gcc flags
• Useful flags
1. -g: debugging hook
2. -Wall: show all warnings
3. -Werror: treat warning as errors
4. -O0, -O1, -O2, -O3: optimization level
5. -DDEBUG: macro for DEBUG (#define DEBUG)
• Avoid using dangerous optimizations that could affe
ct correctness
More gcc
% gcc -g -Wall -Werror -c prog.c -o prog.o
% gcc -g -Wall -Werror -c lib.c -o lib.o
% gcc -g -Wall -Werror lib.o prog.o -o binary
This gets boring, fast!
Makefile basics
• Build targets
target: dependency1 dependency2 ...
unix command (start line with TAB)
unix command
Makefile example
binary: lib.o prog.o
gcc -g -Wall lib.o prog.o -o binary
lib.o: lib.c
gcc -g -Wall -c lib.c -o lib.o
prog.o: prog.c
gcc -g -Wall -c prog.c -o prog.o
clean:
rm *.o binary
Makefile variables (1/7)
• Variables
CC = gcc
CFLAGS = -g -Wall -Werror
OUTPUT = binary
Makefile variables (2/7)
binary: lib.o prog.o
gcc -g -Wall lib.o prog.o -o binary
lib.o: lib.c
gcc -g -Wall -c lib.c -o lib.o
prog.o: prog.c
gcc -g -Wall -c prog.c -o prog.o
clean:
rm *.o binary
Makefile variables (3/7)
CC = gcc
CFLAGS = -g -Wall
OUTPUT = binary
$(OUTPUT): lib.o prog.o
$(CC) $(CFLAGS) lib.o prog.o -o binary
lib.o: lib.c
$(CC) $(CFLAGS) -c lib.c -o lib.o
prog.o: prog.c
$(CC) $(CFLAGS) -c prog.c -o prog.o
clean:
rm *.o $(OUTPUT)
Makefile variables (4/7)
CC = gcc
CFLAGS = -g -Wall
OUTPUT = binary
$(OUTPUT): lib.o prog.o
$(CC) $(CFLAGS) lib.o prog.o -o binary
lib.o: lib.c
$(CC) $(CFLAGS) -c lib.c -o lib.o
prog.o: prog.c
$(CC) $(CFLAGS) -c prog.c -o prog.o
clean:
rm *.o $(OUTPUT)
Makefile variables (5/7)
CC = gcc
CFLAGS = -g -Wall
OUTPUT = binary
OBJFILES = lib.o prog.o
$(OUTPUT): $(OBJFILES)
$(CC) $(CFLAGS) $(OBJFILES) -o binary
lib.o: lib.c
$(CC) $(CFLAGS) -c lib.c -o lib.o
prog.o: prog.c
$(CC) $(CFLAGS) -c prog.c -o prog.o
clean:
rm *.o $(OUTPUT)
Makefile variables (6/7)
CC = gcc
CFLAGS = -g -Wall
OUTPUT = binary
OBJFILES = lib.o prog.o
$(OUTPUT): $(OBJFILES)
$(CC) $(CFLAGS) $(OBJFILES) -o binary
lib.o: lib.c
$(CC) $(CFLAGS) -c lib.c -o lib.o
prog.o: prog.c
$(CC) $(CFLAGS) -c prog.c -o prog.o
clean:
rm *.o $(OUTPUT)
Makefile variables (7/7)
CC = gcc
CFLAGS = -g -Wall
OUTPUT = binary
OBJFILES = lib.o prog.o
$(OUTPUT): $(OBJFILES)
$(CC) $(CFLAGS) $(OBJFILES) -o binary
%.o: %.c
# $<: dependency (%.c)
# $@: target (%.o)
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm *.o $(OUTPUT)
Simple Test Script (1/2)
% ./server 6667 &
% cat testfile.01 | ./testscript.py
% cat testfile.02 | ./testscript.py
% killall -9 server
Simple Test Script (2/2)
#/bin/sh
echo “Starting server on port 6667.”
./server 6667 &
SERVERPID = $!
echo “Running test files.”
cat testfile.01 | ./testscript.py
cat testfile.02 | ./testscript.py
echo “Killing server process.”
kill $(SERVERPID)
Augmenting the Makefile for testing (1/2)
CC = gcc
CFLAGS = -g -Wall
OUTPUT = binary
OBJFILES = lib.o prog.o
all: $(OUTPUT)
$(OUTPUT): $(OBJFILES)
$(CC) $(CFLAGS) $(OBJFILES) -o binary
%.o: %.c
# $<: dependencies (%.c)
# $@: target (%.o)
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm *.o $(OUTPUT)
Augmenting the Makefile for testing (2/2)
CC = gcc
CFLAGS = -g -Wall
OUTPUT = binary
OBJFILES = lib.o prog.o
all: $(OUTPUT)
test
$(OUTPUT): $(OBJFILES)
$(CC) $(CFLAGS) $(OBJFILES) -o binary
%.o: %.c
# $<: dependencies (%.c)
# $@: target (%.o)
$(CC) $(CFLAGS) -c $< -o $@
test: $(OUTPUT)
sh ./testscript.sh
clean:
rm *.o $(OUTPUT)
Using the Makefile
% make
% make test
% make clean
• Know more
Google
– “makefile example”
– “makefile template”
– “make tutorial”
– Chapter 3 of Dave Andersen’s notes
Extra: useful Unix commands (1/2)
• find “func_name” in files
% grep -r func_name .
• replace “bad_func_name” to “good_func_n
ame”
% sed -e “s/bad_func_name/good_func_name/g”\
prog.c > prog.c.new
Extra: useful Unix commands (2/2)
• find a file named “prog.c”
% find -name prog.c
• download files from the Internet
% wget http://address/to/file.tar.gz
• untar and unzip a file
% tar xzvf file.tar.gz
Assignment




You have access to svn repository at
https://ina.kaist.ac.kr/svn/<student id>
However, we will change your password (to some unknown integer).
Luckily, we made a server that gives you a hint.
When your client asks whether the username and the password match,
the server can tell you whether the password provided is less than,
equal to, or greater than your real password.
Assignment I

Protocol is defined in the document. (See course web page).
Query
Server (provided by the instructor)
Client
Response


Part I: Assume the network is reliable. (due 9/14)
Part II: The server may drop a packet. (due 9/24)