Computer networks
Download
1 / 24

Computer Networks - PowerPoint PPT Presentation

Computer Networks Project 0 Prof. Jerry Breecher CSCI 280 Fall 2003 What You Will Do In This Project.

Related searches for Computer Networks

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha

Download Presentation

Computer Networks

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Computer networks l.jpg
Computer Networks

Project 0

Prof. Jerry Breecher

CSCI 280

Fall 2003

Networks - Project 0


What you will do in this project l.jpg
What You Will Do In This Project.

The purpose of this project is to help you become familiar with the UNIX/LINUX on the lab network. This means being able to do editing, compiling, etc. of simple programs. These programs will be written in C, so you may have some more learning/reviewing ahead of you.

You have one task before you:

  • Using your favorite editor, type in (or paste) the program given later in this document. Compile it and run it and show that it produces communication between two instances of the program.

  • You will know you are done when you have demonstrated to me that your program works.

Networks - Project 0


Where to get documentation l.jpg
Where To Get Documentation

There are many sources of information to help you with this project. Here are some of those sources:

Learning C:

Learning GDB – how to debug:

Learning UNIX:

All of these skills can be acquired (I hope) from the documentation available on my webpage – see the bottom of the page at babbage.clarku.edu/~jbreecher

If you don’t like these documents, there are plenty of other ones out on the web. Go wild!

Networks - Project 0


Where to get documentation4 l.jpg
Where To Get Documentation

For information in more detail than is available off of my home page, see the following links:

GNU Debugger – remote copy is at:

http://www.gnu.org/manual/gdb-4.17/html_mono/gdb.html

Local copy is at: http://babbage.clarku.edu/~jbreecher/docs/gdb.html

GCC – Compiler: - remote copy is at:

http://gcc.gnu.org/onlinedocs/gcc-3.0.1/gcc.html

Networks - Project 0


Detour a gdb quickstart l.jpg
Detour – a gdb quickstart

Here’s all you need to know to get started using gdb:

Start the debugger with “gdb program_name”

List the lines with “l”

Set a breakpoint with “b <line_number>”

Print the value of a variable with “p <variable_name>”

To run the first time, say “run <optional arguments>

To continue from a breakpoint, use “c”

To single step, use “s”

To stop the debugger, use “q”

Networks - Project 0


Project 0 l.jpg
Project 0:

Here’s the code for this project. We will be going through it so that you understand what it does.

Type it in using your favorite editor. In this example, the source file is named proj0.c

Get a port number from me. This way you won’t all be colliding with each other.

To compile this code, say “gcc –g proj0.c –o proj0”

This will produce an output file that you can run.

As the code explains, there are several modes of execution.

proj0 s& creates a process running the code as a server

proj0 c creates a process running the code as a client

Networks - Project 0


Computer chat l.jpg
Computer Chat

  • How do we make computers talk?

  • How are they interconnected?

    Internet Protocol (IP)

Networks - Project 0


Internet protocol ip l.jpg
Internet Protocol (IP)

  • Datagram (packet) protocol

  • Best-effort service

    • Loss

    • Reordering

    • Duplication

    • Delay

  • Host-to-host delivery

Networks - Project 0


Ip address l.jpg
IP Address

  • 32-bit identifier

  • Dotted-quad: 134.111.10.43

  • www.clarku.edu -> 140.232.1.19

  • Identifies a host interface (not a host)

192.18.22.13

209.134.16.123

Networks - Project 0


Transport protocols l.jpg
Transport Protocols

Best-effort not sufficient!

  • Add services on top of IP

  • User Datagram Protocol (UDP)

    • Data checksum

    • Best-effort

  • Transmission Control Protocol (TCP)

    • Data checksum

    • Reliable byte-stream delivery

    • Flow and congestion control

Networks - Project 0


Ports l.jpg
Ports

Identifying the ultimate destination

  • IP addresses identify hosts

  • Host has many applications

  • Ports (16-bit identifier)

Application WWW E-mail Telnet

Port 80 25 23

140.232.1.19

Networks - Project 0


Socket l.jpg
Socket

How does one speak TCP/IP?

  • Sockets provides interface to TCP/IP

  • Generic interface for many protocols

Networks - Project 0


Sockets l.jpg
Sockets

  • Identified by protocol and local/remote address/port

  • Applications may refer to many sockets

  • Sockets accessed by many applications

Networks - Project 0


Tcp ip sockets l.jpg
TCP/IP Sockets

  • mySock = socket(family, type, protocol);

  • TCP/IP-specific sockets

  • Socket reference

    • File (socket) descriptor in UNIX

    • Socket handle in WinSock

Networks - Project 0


Specifying addresses l.jpg
Specifying Addresses

  • struct sockaddr

    {

    unsigned short sa_family;/* Address family (e.g., AF_INET) */

    char sa_data[14]; /* Protocol-specific address information */

    };

  • struct sockaddr_in

    {

    unsigned short sin_family;/* Internet protocol (AF_INET) */

    unsigned short sin_port; /* Port (16-bits) */

    struct in_addr sin_addr; /* Internet address (32-bits) */

    char sin_zero[8]; /* Not used */

    };

    struct in_addr

    {

    unsigned long s_addr; /* Internet address (32-bits) */

    };

Generic

IP Specific

Networks - Project 0


Overview of the connection mechanism l.jpg

TCP Server

socket()

Overview of The Connection Mechanism

bind()

TCP Client

listen()

socket()

Connection establishment

accept()

connect()

Data (Request)

write()

read()

Data (Reply)

write()

read()

end-of-file notification

read()

close()

write()

Networks - Project 0


Proj0 c the code l.jpg
proj0.c – the code:

/***************************************************************************

proj0.c Designed as a simple class example. The program waits for

a request. It assumes that request is numerical. It adds

+1 to the input and sends it back.

This program expects two arguments:

proj0 <client|server> <udp|tcp>

The argument says whether this program is running as a client or server.

The second argument says whether the connection is TCP or UDP.

Version 1.0 January, 2002 Jerry Breecher Initial Coding.

****************************************************************************/

#include <stdlib.h>

#include <sys/socket.h>

#include <netinet/in.h>

#define TRUE 1

#define FALSE 0

#define BUFFER_SIZE 20

void SysError( char * );

These say to include more information from include files.

The compiler substitutes these values whenever it sees the define.

A prototype.

Networks - Project 0


Proj0 c the code18 l.jpg
proj0.c – the code:

A C program always starts at main()

main ( int argc, char *argv[] )

{

long input_value;

int family = AF_INET; /* The default for most cases */

int type = SOCK_STREAM; /* Says it's a TCP connection */

in_port_t port = 54321;

int result;

struct sockaddr_in sa;

int lsa = sizeof(sa);

int fdListen, fdConn, fd;

char console_buffer[BUFFER_SIZE];

char ip_input_buffer[BUFFER_SIZE];

char ip_output_buffer[BUFFER_SIZE];

This section is declaring the variables.

Networks - Project 0


Proj0 c the code19 l.jpg
proj0.c – the code:

Check that the argument was input.

if ( argc < 2 ) {

printf( "The program expects arguments\n" );

printf( "tcp <client|server>\n" );

exit(0);

}

if ((fd = socket (family, type, 0)) < 0)

SysError ("Error on socket");

sa.sin_family = family;

sa.sin_port = htons(port); /* client & server see same port*/

sa.sin_addr.s_addr = htonl(INADDR_ANY); /* the kernel assigns the IP addr*/

strcpy( console_buffer, argv[1] );

Open a socket. The socket descriptor is returned in fd.

Fill in the structure that defines how we want to connect to other programs.

Networks - Project 0


Proj0 c the code20 l.jpg
proj0.c – the code:

if ( console_buffer[0] == 's' || console_buffer[0] == 'S' )

{

if (bind (fd, (struct sockaddr *)&sa, sizeof(sa) ) == -1)

SysError ("Error on bind");

if (listen (fd, SOMAXCONN) == -1) /* set up for listening */

SysError ("Error on listen");

fdListen = fd;

Check for an “S”.

If found, it means we want a server program here. Then do the bind and listen.

Networks - Project 0


Proj0 c the code21 l.jpg
proj0.c – the code:

while( TRUE )

{

if ((fdConn = accept (fdListen, (struct sockaddr *)&sa, &lsa )) <0)

SysError ("Error on accept");

bzero( ip_input_buffer, sizeof( ip_input_buffer ));

while ( recv( fdConn, ip_input_buffer, BUFFER_SIZE - 2, 0 ) > 0 )

{

input_value = atoi( ip_input_buffer );

input_value = input_value + 1;

bzero( ip_output_buffer, sizeof( ip_output_buffer ));

sprintf( ip_output_buffer, "%d", input_value );

if ( send( fdConn, ip_output_buffer,

strlen(ip_output_buffer) +1, 0) <= 0 )

SysError( "Error on send" );

} /* End of while recv is successful */

close (fdConn);

} /* End of while TRUE */

} /* End of server case */

Repeat forever

recv from client

Calculate the new value

Send back to the client

recv will keep on working until the client closes the connection. The recv will then take an error in that case.

Networks - Project 0


Proj0 c the code22 l.jpg
proj0.c – the code:

This is the else that says we did NOT ask for a server.

else

{

if (connect(fd, (struct sockaddr *)&sa, sizeof(sa) ) )

SysError ("Error on connect");

So the first thing a client does is a connect to the server.

Networks - Project 0


Proj0 c the code23 l.jpg
proj0.c – the code:

Loop here forever.

while( TRUE )

{

printf( "> " );

scanf( "%s", console_buffer );

if ( atoi( console_buffer ) == -1 )

{

printf( "We Have Successfully Finished.\n" );

exit(0);

}

bzero( ip_output_buffer, sizeof( ip_output_buffer ));

strcpy( ip_output_buffer, console_buffer );

if ( send( fd, ip_output_buffer,

strlen(ip_output_buffer) + 1, 0 ) <= 0 )

SysError( "Error on send" );

bzero( ip_input_buffer, sizeof(ip_input_buffer) );

if ( recv( fd, ip_input_buffer,

sizeof(ip_input_buffer) - 2, 0 ) <= 0 )

SysError( "Error on recv" );

printf( "%s\n", ip_input_buffer );

} /* End of while TRUE */

} /* End of client case */

} /* End of main */

Get data from console

send data to server

recv data from server

Networks - Project 0

End of main


Proj0 c the code24 l.jpg
proj0.c – the code:

void SysError( char *string )

{

printf( "Error found: String given is --> %s\n", string );

exit(0);

}

How to use a subroutine.

Networks - Project 0


ad
  • Login