Socket programming
Nisheeth
August 22nd 2019
Client-server model
• A server process and one or more client processes
• Server manages some resource
• Server provides service by manipulating resource for clients
Networking 101
• The TCP/IP communication stack has four layers
• Link layer
– Communication protocols for physically linked devices
• Internet layer
– Communication protocols across networks
• Transport layer
– Host-to-host communication services
• Application layer
– Process-to-process communication methods across networks
Networking 101
• The TCP/IP communication stack has four layers
• Link layer
– Communication protocols for physically linked devices
• Internet layer
– Communication protocols across networks
• Transport layer
– Host-to-host communication services – Our main focus today
• Application layer
– Process-to-process communication methods across networks
MAC: A link layer protocol
• Medium access control (MAC) controls the hardware responsible for the machine’s
interaction with the transmission medium
– Cable – Wifi
• Each machine on a LAN has a network interface (e.g. ethernet card) connected to a common
broadcast medium
• Each interface card is associated with a MAC address
MAC address
• 48 bit unique identifier assigned to a network interface controller
• Human readable format: six octets represented in hex– 01-23-45-67-89-AB
– 32:12:34:6F:45:AD
• Of six octets
– First three are manufacturing organization identifiers – Last three are device identifiers assigned by
manufacturer
Ethernet frame format
• Data frames on ethernet are packets of a specific size and format
Ethernet communication protocol
• The sender broadcasts
• Each host connected to the LAN checks
destination address in data frame with own MAC address
• If destination matches, receive the packet
• Is this a good protocol?
Internet layer
• Multiple LANs want to communicate with each other
• Most popular protocol is the internet protocol (IP)– Data packets routed to devices on other networks
• Each network interface of a device connected to the internet has an IP address
– IPv4 uses 32 bit addressing – IPv6 uses 128 bit addressing
• Routing efficiency is a function of IP address allocation protocols
IPv4 problems
• Too few unique addresses available
• Forced lots of hacky solutions
• Example: NAT
– Try to find your IP using ifconfig
– Try to find your IP using a third party lookup service
– Why is there a difference?
• In the process of replacement by IPv6
– For the time being, have to remain aware of hacks
Transport layer
• How is data to be transmitted, once we know how to send a data packet to any other device in the world?
• Two common paradigms
– TCP (connections) – UDP (datagrams)
• Socket programming is an excellent introduction to both
Sockets
• Sockets make network I/O look like file I/O
• Call system functions to control and communicate
• Network code handles packet assembly, fragmentation and routing
Client programs
• Examples of client programs
– http, ftp, telnet, ssh
• How does a client find a server?
– The IP address in the server socket address identifies an adapter on the host
– The port in the server socket address identifies the service
• Port 7 = ping
• Port 22 = ssh
• Port 80 = http
Using ports to identify services
Servers
• Servers are long-running processes (daemons)
– Created at boot-time by the init process
– Run continuously until the machine is turned off
• Do you know what services are running on your Linux installation?
– See /etc/services
– Note that each service’s transport protocol is specified as either TCP or UDP
• A machine that runs a server process is called a server
Sockets overview
Sockets
• The Bible of socket programming
– Beej’s network programming guide
• Helpful and a fun read too
• What is a socket?
– To the kernel, a socket is an endpoint for communication
– To an application, a socket is a file descriptor that lets the application read/write
• The main difference between file I/O and
network I/O is how the application opens the socket descriptors
Socket programming basics
• The most important component of a socket transaction
– The socket address – Stored in a struct
• Internet-based socket addresses get a lot more detail
Internet-based socket addresses
Socket structure
Using socket addresses
• Write a simple C file including the necessary header files
• Create this structure and call the function getaddrinfo()
struct addrinfo {
int ai_flags; // AI_PASSIVE, AI_CANONNAME, etc.
int ai_family; // AF_INET, AF_INET6, AF_UNSPEC int ai_socktype; // SOCK_STREAM, SOCK_DGRAM int ai_protocol; // use 0 for "any"
size_int ai_addrlen; // size of ai_addr in bytes struct sockaddr *ai_addr; // struct sockaddr_in or _in6
char *ai_canonname; // full canonical hostname struct addrinfo *ai_next; // linked list, next node };
Don’t panic
• Beej’s guide is your friend
• I will give you basic client-server socket code as a baseline
• For any function that seems unfamiliar, just read the corresponding entry in beej’s guide
Socket types
Lab this week
• Grab the simple client-server demo in C from my github
• If you run the server code on one local terminal and the client code on another
– It will transmit a Hello world message and quit
Lab this week
• Make the server persistent, such that it doesn’t quit after one message transfer
• Redesign the server such that
– it accepts inputs from the client,
– transforms them into lowercase and – transmits back
• Redesign the server and client such that
– The client requests an HTML page stored on the server, that is displaying some headers and a simple table
– The server sends the file to the client as text
– The client code calls a shell script to display the corresponding webpage on the client’s computer
Lab this week
• Create a version of the server that will allow connectionless (UDP) transfer
– See if you can get the HTML transfer to work on this connection too
• Create a version of the TCP server that will
permit concurrent connections from multiple clients (*)