Introduction to Network Programming with Sockets Network Programming Kansas State University at...

Post on 01-Jan-2016

218 views 0 download

Tags:

Transcript of Introduction to Network Programming with Sockets Network Programming Kansas State University at...

Introduction to Network Programming with Sockets

Network Programming

Kansas State University at Salina

Protocols

Rules that determine how communication is achieved.

Human protocols: vocal cords to ears, sign language to eyes, English, French, Spanish…

Layers of protocols – may replace any protocol with another functionally equivalent.

Network protocols – Ethernet, IP, TCP, UDP, HTTP, SMTP, etc…

TCP/IP

Transmission Control Protocol/Internet Protocol (TCP/IP) Suite of small,

specialized protocols called subprotocols

OSI Model TCP/IP

TCP/IP compared to the OSI Model

Internet Protocol (IP)

IP datagram IP portion of

TCP/IP frame that acts as an envelope for data

Contains information necessary for routers to transfer data between subnets

Components of an IP datagram

Transport Control Protocol (TCP)

TCP provides reliable end to end communication.

A TCP segment

User Datagram Protocol (UDP)

Connectionless transport service Only four fields in UDP header (10 in TCP

header) Unreliable Used for broadcast applications and

voice/video data.

Getting Data from Source to Destination

IP address – IP header Protocol (TCP or UDP) – IP header Port – TCP or UDP protocol

A port is a rendezvous point between TCP and the application.

A socket allows the application to read from and write to the port.

Postal Mail Analogy

• IP gets the data to the right place.

• TCP puts the data in the right port (mail box).

• The socket goes and gets the data from the port (mail box) and delivers it to the application.

Sockets

API for applications to read and write data from TCP/IP or UDP/IP

File abstraction (open, read, write, close) Abstract operating system resource. First introduced with BSD UNIX De-facto standard API for TCP/IP

Ports

Well Known Ports are in the range of 0 to 1023 only the operating system or an Administrator of the system can access

Registered Ports are in the range of 1024 to 49151.

Dynamic and/or Private Ports are those from 49152 through 65535 and are open for use without restriction

The Socket API Commands

See example session Initialize

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

Will always use above options. First option says it is IP version 4 (another value for IP

version 6), in UNIX it can also be set to a named pipe. Second option says that it will connect to a TCP port. These names are the original ones used.

Socket API (cont.) Server Side sock.bind(( hostname, port ))

Hostname can be one of: socket.gethostname(), ‘localhost’ or the machine host name as a string.

The port should usually be between 1024 to 49151.

Can not bind to a port with another socket bound to it.

Note the double parenthesis, bind() takes a single tuple argument. The extra set of parenthesis makes the two values a tuple.

Socket API (cont.) Server Side sock.listen(n)

Tells the socket to listen for incoming connections n here is an integer for number of new

connections to hold in queue. For now, we can set n to 1.

(newsock, address) = ss.accept() Wait for a connection – blocking Returns a tuple of a new allocated socket and the

IP address and port number of the client. The address is a tuple.

A new socket is allocated because a server will usually want to continue listening to the old socket.

Socket API (cont.) Client Side sock.connect(( hostname, portNumber ))

Connect to a server that is listening for connections

For most exercises in this class, just set hostname to ‘localhost’.

portNumber should match the port number that the sever was bound to.

A blocking statement, until the connection is established.

Socket API (cont.)

message = sock.recv(N) Read a message from the socket and return a string. N is the maximum message size in characters. Blocking

sock.send( msg ) Send a string messages (msg) over an established socket

connection. sock.close()

Always a good idea to close sockets when finished with them.