Linux/UNIX Network Programming course outline
 
        - Course Introduction
- Sockets: Introduction
            
                - Socket types and domains
- Creating and binding a socket (socket() and bind())
- Overview of stream sockets
- listen() and pending connections
- accept() and connect()
- I/O on stream sockets
- Overview of datagram sockets
- I/O on datagram sockets
 
- UNIX Domain Sockets
            
                - UNIX domain stream sockets
- UNIX domain datagram sockets
- Further details of UNIX domain sockets
 
- UNIX Domain Sockets: Ancillary Data
            
                - Ancillary message types
-  sendmsg(), recvmsg(), and struct msghdr
		
-  struct msghdr in more detail (*)
		
-  Ancillary data and struct cmsghdr (*)
                
- Example: passing a file descriptor over a socket (*)
            
 
- Internet Domain Sockets
            
                - Internet domain sockets
- Data-representation issues
- Presentation-format addresses
- Loopback and wildcard addresses
- Internet domain stream sockets example
 
- Internet Domain Sockets: Address Conversion
            
                - Host addresses and port numbers
- Host and service conversion
- Internet domain sockets example with getaddrinfo()
 
- Sockets: Further Details
            
                - Socket shutdown (shutdown())
- Socket options
- TCP TIME-WAIT state and SO_REUSEADDR
 
- Alternative I/O Models
            
                - Nonblocking I/O
- Signal-driven I/O
- I/O multiplexing: poll()
- Event-loop programming
 
- Alternative I/O Models: epoll
            
                - Problems with poll() and select()
                
- The epoll API
		
- Creating an epoll instance: epoll_create()
		
- Populating the interest list: epoll_ctl()
                
- epoll events
		
- Waiting for events: epoll_wait()
                
- Performance considerations
                
- Edge-triggered notification
                
- epoll API quirks
            
 
- TCP/IP Overview
            
                - The TCP/IP protocol stack
- The link layer
- The network layer: IP
- The transport layer
- Port numbers
- User Datagram Protocol (UDP)
- Displaying sockets and capturing packets
 
- Transmission Control Protocol (TCP)
            
                - Overview of TCP
- Segments
- Sequence numbers
- Acknowledgements and retransmissions
- TCP header
- TCP state machine
- TCP connection establishment and termination
 
- Transmission Control Protocol: Further Details (*)
            
                - Flow control and congestion control
- TCP sliding window
 
- Displaying sockets
            
        
- Capturing network packets
            
                - tcpdump
                
- wireshark
- Packet filtering
 
- Packet filtering: capture filters
            
		- Capture filters
- Capture filters and BPF (*)
 
- Packet filtering: display filters
            
		- wireshark display filters
 
- Other networking Tools (*)
            
                - Displaying devices and addresses
- Testing connectivity and routes
 
- Raw Sockets (*)
            
                - Overview of creating and using raw sockets
- Raw sockets example
 
- Open File Descriptions and Descriptor Duplication (*)
            
                - Relationship between file descriptors and open files
- Duplicating file descriptors
 
    (*) Topics marked with an asterisk are optional,
    and will be covered as necessary and time permits.
Return to the course overview