More Related Content
Similar to Linux Network Management
Similar to Linux Network Management (20)
More from Anil Kumar Pugalia
More from Anil Kumar Pugalia (16)
Linux Network Management
- 1. © 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Linux Network Management
- 2. 2© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
What to Expect?
W's of Networking
Introduction to Sockets
Addressing at the Layers
Programming the Sockets
Client-Server Concepts
- 3. 3© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
W's of Networking
Communication is the Key
User Space & User Space
Signals, IPC, Shared Address Space
Kernel Space & User Space
System Calls, Signals
Kernel Space & Kernel Space
Kernel Communication & Synchronization Mechanisms
Hardware Space & Kernel Space
Interrupts, Device Access Mechanisms
What's common in all of these?
All within the same system
Networking extends a hand outside the system
- 4. 4© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Network Stack & Sockets
Physical
Data Link
Network
Transport
Session
Presentation
Application
Stream
Socket
Interface
Datagram
Socket
Interface
Raw
Socket
Interface
IP
Application Program
7 Layers
TCP UDP
Interface Layer (Ethernet, SLIP, loopback, etc)
Media
- 5. 5© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
System I
Inter System Communication
User Space
...Process Process
Socket Interface
Kernel Space
Hardware Space
System II
User Space
...Process Process
Socket Interface
Kernel Space
Hardware Space
Network Link
D
- 6. 6© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Examples
Network Daemons (Servers) with default socket numbers
ftpd (Port 21)
sshd (Port 22)
telnetd (Port 23)
smtp (Port 25)
httpd (Port 80)
Network Applications (Clients)
ftp
ssh
telnet
Mail Clients (pine, mutt, ...)
Web Browsers (firefox, ...)
- 7. 7© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
System Dependence
Wire Transmission – Bit-wise
MSB first
System Data – Word-wise
Which end first?
Depends on the Processor
Two prevalent Endians
Little Endian (x86 systems, PPC, ...)
Big Endian (Sun systems, PPC, ...)
- 8. 8© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Little Endian
00101000 01111100 00101110 00101010 Data
MS Byte LS Byte
Memory
A
A+1
A+2
A+3
00101010
00101110
01111100
00101000
- 9. 9© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Big Endian
00101000 01111100 00101110 00101010
00101010
00101110
01111100
00101000
Memory
Data
MS Byte LS Byte
A
A+1
A+2
A+3
- 10. 10© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Trivial functions
uint16_t htons(uint16_t host_short);
uint16_t ntohs(uint16_t network_short);
uint32_t htonl(uint32_t host_long);
uint32_t ntohl(uint32_t network_long);
Header: <arpa/inet.h>
- 11. 11© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Addressing at Layers
Physical
Data Link
Network
Transport
Session
Presentation
Application
IP
TCP UDP
Application Program
Physical Networks
Physical Address
(MAC Address)
IP Address
Port Address
(Socket Address)
User-specific
- 12. 12© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Socket Address
Basic Structure (16 bytes)
struct sockaddr
{
sa_family_t sa_family; // Protocol Family
char sa_data[14]; // Protocol Address
}
typedef unsigned short sa_family_t;
- 13. 13© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Socket Address ...
With Internet Address
struct sockaddr_in
{
sa_family_t sin_family; // Protocol Family
in_port_t sin_port; // Port Number / Socket Address
struct in_addr sin_addr; // IP Protocol Address
unsigned char sin_zero[8]; // Pad to sizeof(struct sockaddr)
}
typedef uint16_t in_port_t;
struct in_addr { in_addr_t s_addr; }
typedef uint32_t in_addr_t;
- 14. 14© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Socket Programming Usage
Socket Creation: socket()
Attaching with an address: bind()
Preparing for accepting connections: listen()
Waiting for & Accepting connections: accept()
Setting up the connection: connect()
Sending data: send(), sendto(), sendmsg()
Receiving data: recv(), recvfrom(), recvmsg()
Cleaning up: close()
Example Pairs
Connection-oriented (TCP based): sock_server.c, sock_client.c
Connection-less (UDP based): sock_dgram_*.c
- 15. 15© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Creating a socket
fd = socket(family, type, protocol);
Family
AF_UNIX / AF_LOCAL, AF_INET, AF_INET6, ...
Type
SOCK_STREAM, SOCK_DGRAM, SOCK_RAW, ...
Can be or'ed with SOCK_NONBLOCK, SOCK_CLOEXEC
Protocol
Typically one per family. So, pass zero
Returns
file descriptor of the new socket on success
-1 on error (and sets errno)
- 16. 16© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Attaching an address
Done by a server
status = bind(fd, addresssp, addrlen);
fd: File descriptor returned by socket()
addressp: Pointer to address structure
addrlen: Size of address structure
Returns
0 on success
-1 on error (and sets errno)
- 17. 17© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Preparing for connections
Done by a server for transport connections
status = listen(fd, qlen);
fd: File descriptor returned by socket()
qlen
Length of the pending connection queue
Returns
0 on success
-1 on error (and sets errno)
- 18. 18© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Accepting new connections
Done by a server for connection based sockets
newfd = accept(fd, addresssp, addrlen);
fd: File descriptor returned by socket()
addressp (Could be NULL)
Pointer to structure of address of the connected peer
addrlen: Value-result address structure size
Blocking call (by default), waiting for new connections
Returns
File descriptor of the new accepted socket connection
-1 on error (and sets errno)
- 19. 19© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Connecting to server
Done by a client for connection based sockets
status = connect(fd, addresssp, addrlen);
fd
File descriptor returned by socket() to be connected
addressp
Pointer to structure of address to connect to
addrlen: Size of address structure
Returns
0 on success
-1 on error (and sets errno)
- 20. 20© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Connection Establishment
Server Application
socket()
bind()
listen()
accept()
Physical Layer
Transport / Network
Layer
Client Application
socket()
connect()
Transport / Network
Layer
- 21. 21© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Sending Data
Could be done by both server and client
sent = send(fd, buf, len, flags);
fd: File descriptor of the connected socket
buf: Buffer of Data to be sent
len: Length of the data to be sent
flags: MSG_DONTWAIT, MSG_NOSIGNAL, ...
Returns
Bytes of data sent on success
-1 on error (and sets errno)
Other APIs: write(), sendto(), sendmsg()
- 22. 22© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Receiving Data
Could be done by both server and client
received = recv(fd, buf, len, flags);
fd: File descriptor of the connected socket
buf: Buffer to receive Data into
len: Length of the Buffer
flags: MSG_DONTWAIT, MSG_PEEK, MSG_WAITALL, ...
Returns
Bytes of data received on success
-1 on error (and sets errno)
Other APIs: read(), recvfrom(), recvmsg()
- 23. 23© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Closing sockets
To be done by both server and client
On all the not-needed socket file descriptors
Unless they were opened with SOCK_CLOEXEC
Terminates both directions of data transfer
Reading and Writing
Cleans up all the socket related resources
shutdown(fd, how);
fd: File descriptor of the socket to be closed
how: SHUT_RD, SHUT_WR, SHUT_RDWR
Returns
0 on success
-1 on error (and sets errno)
Other API: close()
- 24. 24© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Non-blocking Options
Typical blocking system calls
accept()
send*(), write()
recv*(), read()
Achieving non-blocking behaviour
Non-blocking: Socket opened with SOCK_NONBLOCK
Multiplexing: Use select() or poll() or epoll() on socket fd
Signal driven: Set socket to deliver SIGIO on activity
Using FIOSETOWN cmd of fcntl, Or
Using SIOCSPGRP cmd of ioctl
- 25. 25© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
System Call 'select'
Header File: <sys/select.h>
int select(
int nfds,
fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
struct timeval *timeout
);
File Descriptor Set APIs
void FD_ZERO(fd_set *set);
void FD_SET(int fd, fd_set *set);
void FD_CLR(int fd, fd_set *set);
int FD_ISSET(int fd, fd_set *set);
Select Usage Example: pipe_window.c → pipe_window0, pipe_window1
Server-Client Pair: sock_server_select.c, sock_client.c
- 26. 26© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
System Call 'poll'
Header File: <poll.h>
int poll(
struct pollfd *array_fds, nfds_t nfds,
struct timespec *timeout
);
struct pollfd
int fd;
short events /* requested events */
short revents /* returned events */
Events: POLLIN, POLLOUT, POLLPRI
Additional returned Events: POLLERR, POLLHUP, POLLNVAL
- 27. 27© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Socket related Information
cat /proc/sys/net/core/
rmem_default: Default receive buffer size
rmem_max: Maximum receive buffer size
wmem_default: Default send buffer size
wmem_max: Maximum send buffer size
…
man 7 socket
- 28. 28© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Client-Server Concepts
Types of Connections
Control connections
Data connections
Types of Servers
Iterative servers (Single Process)
Concurrent servers (Multi-Process)
- 29. 29© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Iterative Servers
Client Server Client
Ephemeral Port Well-known Port
Example: sock_server_select.c(, sock_client.c)
- 30. 30© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Concurrent Servers
Client Server Client
Child
Server
Ephemeral Port Well-known Port
Example: sock_server_concurrent.c(, sock_client.c)
Child
Server
- 31. 31© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Miscellaneous Examples
Named (AF_UNIX / AF_LOCAL) Sockets
named_socket_server.c
named_socket_client.c
Multicast Operations
mcast_recv.c
mcast_send.c
- 32. 32© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
What all have we learnt?
W's of Networking
Introduction to Sockets
Networking with 'Endian'
Addressing at the Layers
Programming the Sockets
Client-Server Concepts