1 / 28

Network Programming in Python

Network Programming in Python. CS 401/601 Computer Network Systems Mehmet Gunes. Modified from: Steve Holden, Dan Rubenstein, DK Moon. Objectives. Review principles of networking Contrast TCP and UDP features Show how Python programs access networking functionality

ernestg
Download Presentation

Network Programming in Python

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Network Programmingin Python CS 401/601 Computer Network Systems Mehmet Gunes Modified from: Steve Holden, Dan Rubenstein, DK Moon

  2. Objectives • Review principles of networking • Contrast TCP and UDP features • Show how Python programs access networking functionality • Give examples of client and server program structures • Demonstrate some Python network libraries • Give pointers to other network functionality

  3. Inter-Layer Relationships • Each layer uses the layer below • The lower layer adds headers to the data from the upper layer • The data from the upper layer can also be a header on data from the layer above … Upper layer PROTOCOL DATA Lower layer HDR DATA

  4. IP Characteristics • Logical (32-bit or 128-bit) addresses • Unrelated to physical addressing • Leading bits determine network membership • Datagram-based • Connectionless • Unreliable • Best effort delivery • No delivery guarantees

  5. UDP Characteristics • Also datagram-based • Connectionless, unreliable, can broadcast • Applications usually message-based • No transport-layer retries • Applications handle (or ignore) errors • Processes identified by port number • Services live at specific ports • Usually below 1024, requiring privilege

  6. TCP Characteristics • Connection-oriented • Two endpoints of a virtual circuit • Reliable • Application needs no error checking • Stream-based • No predefined blocksize • Processes identified by port numbers • Services live at specific ports

  7. Sockets • Various sockets… Any similarity? • Endpoint of a connection • Identified by IP address and Port number • Primitive to implement high-level networking interfaces • e.g., Remote procedure call (RPC)

  8. host or server host or server process process socket socket TCP with buffers, variables TCP with buffers, variables Socket Programming API Application Programming Interface • Socket analogous to door • sending process shoves message out door • sending process assumes transport infrastructure on other side of door which brings message to socket at receiving process • host-local, application created/owned, OS-controlled • connection between sockets set-up/ managed by OS controlled by app developer Internet controlled by OS

  9. Socket: Conceptual View socket()

  10. SOCK_DGRAM a.k.a. UDP unreliable delivery no order guarantees no notion of “connection” – app indicates dest. for each packet can send or receive socket socket D1 3 2 1 Dest. 3 2 D2 1 App App D3 Two essential types of sockets • SOCK_STREAM • a.k.a. TCP • reliable delivery • in-order guaranteed • connection-oriented • bidirectional

  11. Types of Sockets • When sending “Hi!” and “Hope you’re well” • TCP treats them as a single bytes stream • UDP treats them as separate messages Bytes stream l l e w … e p o H ! i H Hope you’re well Hi!

  12. Types of Sockets (cont’d) • Thus, TCP needs application-level message boundary. • By carrying length in application-level header Bytes stream l l e w … o H 16 ! i H 3

  13. Client/Server Concepts • Server opens a specific port • The one associated with its service • Then just waits for requests • Server is the passive opener • Clients get ephemeral ports • Guaranteed unique, 1024 or greater • Uses them to communicate with server • Client is the active opener

  14. A Socket-eye view of the Internet • Each host machine has an IP address cse.unr.edu (134.197.20.22) newworld.cs.umass.edu (128.119.245.93) cluster.cs.columbia.edu (128.59.21.14, 128.59.16.7, 128.59.16.5, 128.59.16.4)

  15. Ports • Each host has 65,536 ports • Some ports are reserved for specific apps • 20,21: FTP • 23: Telnet • 80: HTTP • see RFC 1700 • about 2000 ports are reserved Port 0 Port 1 Port 65535 A socket provides an interface to send data to/from the network through a port

  16. socket() bind() recvfrom() socket() bind() recvfrom() Connectionless Services sendto() [blocked] [blocked] sendto() SERVER CLIENT

  17. Simple Connectionless Server from socket import socket, getfqdn, AF_INET, SOCK_DGRAM s = socket(AF_INET, SOCK_DGRAM) s.bind(('127.0.0.1', 11111)) print 'server at', getfqdn('') while True: data, addr = s.recvfrom(1024) print "Connection from", addr s.sendto(data.upper(), addr) Note that the bind() argument is a two-element tuple of address and port number Empty -> all interfaces

  18. Simple Connectionless Client from socket import socket, AF_INET, SOCK_DGRAM s = socket(AF_INET, SOCK_DGRAM) s.bind(('127.0.0.1', 0)) # OS chooses port server = ('127.0.0.1', 11111) s.sendto("MixedCaseString", server) data, addr = s.recvfrom(1024) print "received", data, "from", addr s.close()

  19. TCP state diagram

  20. socket() connect() read() write() read() write() listen() bind() socket() accept() Connection-Oriented Services Server Client [blocked] [blocked] [blocked] When interaction is over, server loops to accept a new connection

  21. Connection-Oriented Server from socket import socket, AF_INET, SOCK_STREAM s = socket(AF_INET, SOCK_STREAM) s.bind(('127.0.0.1', 9999)) s.listen(5) # max queued connections while True: sock, addr = s.accept() print "connection from", addr while True: data = sock.recv(1024) if not data: break print "received data:", data sock.send(data) # echo sock.close() • Client connection creates new socket • - Returned with address by accept() • Server handles one client at a time

  22. Active participant step 2: request & establish connection step 4: data transfer l-sock a-sock-1 socket socket a-sock-2 Connection setup cont’d • Passive participant • step 1: listen(for incoming requests) • step 3: accept (a request) • step 4: data transfer • The accepted connection is on a new socket • The old socket continues to listen for other active participants Passive Participant Active 1 Active 2

  23. Connection-Oriented Client from socket import socket, AF_INET, SOCK_STREAM (SERVER, PORT) = ('127.0.0.1', 9995) s = socket(AF_INET, SOCK_STREAM) s.connect((SERVER, PORT)) s.send('Hello, world') data = s.recv(1024) print 'received', data s.close() print 'Received', data • This is a simple example • Sends message, receives response • Server receives 0 bytes after close()

  24. 128 128 119 119 40 40 12 12 Some socket Utility Functions • htonl(i), htons(i) • 32-bit or 16-bit integer to network format • ntohl(i), ntohs(i) • 32-bit or 16-bit integer to host format • inet_aton(ipstr), inet_ntoa(packed) • Convert addresses between regular strings and 4-byte packed strings Little-Endian machine Big-Endian machine 12.40.119.128 128.119.40.12 WRONG!!!

  25. Summary of Address Families • socket.AF_UNIX • Unix named pipe (NOT Windows…) • socket.AF_INET • Internet – IP version 4 • The basis of this class • socket.AF_INET6 • Internet – IP version 6

  26. Summary of Socket Types • socket.SOCK_STREAM • TCP, connection-oriented • socket.SOCK_DGRAM • UDP, connectionless • socket.SOCK_RAW • Gives access to subnetwork layer • SOCK_RDM, SOCK_SEQPACKET • Very rarely used

  27. Handling Names & Addresses • getfqdn(host='') • Get canonical host name for host • gethostbyaddr(ipaddr) • gethostbyname_ex(hostname) • Returns (hostname, aliases, addresses) • Hostname is canonical name • Aliases is a list of other names • Addresses is a list of IP address strings

  28. Timeout Capabilities • Can set a default for all sockets • socket.setdefaulttimeout(seconds) • Argument is float # of seconds • Or None (indicates no timeout) • Can set a timeout on an existing socket s • s.settimeout(seconds)

More Related