Session 1: Introduction to Networking and Protocols
Overview of Network Programming
Client-server architecture
OSI and TCP/IP model fundamentals
Key differences between TCP and UDP
Session 2: Introduction to Sockets
What is a socket?
Types of sockets (Stream, Datagram, Raw)
C socket libraries and system calls
Writing a simple socket program in C
Session 3: Environment Setup and Tools
Setting up a Linux environment for C development
Installing and using tools like GCC, GDB, and Wireshark
Introduction to networking utilities (netstat, ifconfig, ip)
Session 4: IP Protocol and Addressing
IP addressing (IPv4, IPv6)
Network and broadcast addresses
Subnetting and CIDR
IP protocol header structure
Session 5: TCP/IP Stack
Layers of the TCP/IP stack
Structure and flow of network packets
Encapsulation and de-encapsulation
Analyzing TCP/IP packets with Wireshark
Session 6: TCP Protocol – Theory and Use Cases
TCP characteristics (connection-oriented, reliable)
TCP connection lifecycle (3-way handshake, teardown)
Use cases of TCP in real-world applications
Key system calls in TCP socket programming
Session 7: Hands-on TCP Socket Programming
Writing a TCP client-server application in C
Key system calls: socket(), bind(), listen(), accept(), connect(), close()
Implementing data exchange between client and server using send() and recv()
Session 8: UDP Protocol – Theory and Use Cases
UDP characteristics (connectionless, unreliable)
Use cases of UDP (e.g., video streaming, DNS)
Key system calls in UDP socket programming
Session 9: Hands-on UDP Socket Programming
Writing a UDP client-server application in C
Key system calls: socket(), sendto(), recvfrom(), bind()
Implementing simple applications using UDP sockets
Session 10: Error Handling and Debugging
Common errors in socket programming
Error handling strategies using errno and perror()
Debugging socket programs using GDB
Introduction to network debugging with tcpdump and Wireshark
Session 11: TCP and UDP Socket Options
Configuring socket options using setsockopt()
TCP_NODELAY, SO_REUSEADDR, SO_RCVTIMEO, SO_SNDTIMEO
Handling socket timeouts and buffer sizes
Session 12: Data Serialization and Application Protocols
How to format and parse data over a network
Working with raw data (byte streams) in C
Introduction to application-layer protocols like HTTP and DNS
Session 13: Non-blocking I/O
Blocking vs non-blocking sockets
Introduction to fcntl() and ioctl() for non-blocking operations
Writing non-blocking socket applications using select()
Session 14: Socket Multiplexing
Concept of multiplexing and concurrent socket handling
Using select() and poll() to handle multiple connections
Implementing a multi-client server using select()
Session 15: Network Timeouts and Resilience
How to handle network timeouts using socket options
Implementing fault tolerance in networked applications
Retransmission and retry logic for reliable communication
Session 16: Introduction to Raw Sockets
What are raw sockets?
Building custom protocols using raw sockets
Working with packet structures and headers (IP, TCP, UDP)
Security considerations and risks of using raw sockets
Session 17: High-Performance Network Programming
Optimizing socket performance using efficient system calls
Managing multiple connections using multithreading (pthread) and multiprocessing
Implementing efficient I/O strategies (asynchronous and event-driven)
Session 18: Secure Socket Programming
Introduction to SSL/TLS for secure communication
Using OpenSSL with C to secure socket connections
Implementing encrypted communication channels with SSL
Session 19: Network Debugging and Performance Tuning
Advanced debugging techniques using GDB and strace
Network performance analysis (latency, throughput)
Tools for tuning and optimizing network applications (iperf, ethtool)
Session 20: EmbLogic Project and Review
Project: Build a complete networked application in C (e.g., chat server, file transfer, HTTP server)
Final review of concepts learned
Q&A, best practices, and guidance for real-world network programming
Continued Project Development and Completion
Detailed development phases of the project with iterative feedback.
Integration of advanced networking concepts and technologies.
Final project presentation and review.