Course Content
Overview of IPv6
- IPv4 vs. IPv6
- IPv6 Addressing
- Unicast Addresses
- Anycast Addresses
- Multicast Addresses
- 64-bit MAC Address Assignment
- Loopback and Unspecified Addresses
- IPv6 Header Information
- New Header Format
- IPv6 Extension Headers
- DNS infrastructure
- IPv6 Tunneling
- IPSec Tunneling
Basic Socket Programming
- What is a socket?
- Types of Internet Sockets
- Low level Nonsense and Network Theory
- IP Addresses and structs
- IP Addresses, versions 4 and 6
- Byte Order
- structs
- IPv4 Socket Programming
- IPv6 Socket Programming
- Changes socket API for IPv6 Support
- Typical IPv6 Code sequence
- IPv6 Socket Programming
- IPv4 Socket API
- IPv6 Socket API
- Changes to existing API
- Porting applications to IPv6
- Socket address structures
- Socket functions
- Address conversion functions
- Resolving names
- Multicasting
- New application design guidelines
- Real examples of porting process
- Porting Applications to Support IPv6
- Tips in IPv6 Programming
- A Practical Example
- IPv6 APIs
- Basic Socket Interface Extensions for IPv6
- Advanced Sockets API for IPv6
- IPv4-Mapped Address API
- Possible Abuse Against IPv6 Transition Technologies
- An Extension of format for IPv6 Scoped Addresses
- ProtocolIndependenceUsing the Sockets API
Migration from IPv4 to IPv6
- System Calls or Bust
- getaddrinfo(): Prepare to launch!
- socket(): Get the File Descriptor!
- bind(): What port am I on?
- connect(): Hey, you!
- listen(): Will somebody please call me?
- accept(): Thank you for calling port 3490
- send() and recv(): Talk to me, baby!
- sendto() and recvfrom(): Talk to me, DGRAM-style
- close() and shutdown(): Get outta my face!
- getpeername(): Who are you?
- gethostname(): Who am I?Porting IPv4 applications to IPv6
- using the correct structures
- INADDR_ANY and INADDR_LOOPBACK
- address and protocol family constants
- IPv6 functions for older IPv4 ones where necessary
- flexible functions that work in both IPv4 and IPv6 environments
- Data structures
- sockaddr_in and in_addr
- in6_addr to store the 128-bit network address
- sockaddr_in6
- To port this code to IPv6
- AF_INET6
- PF_INET6
Client-Server Background
- A Simple Stream Server
- A Simple Stream Client
- Datagram Sockets
- Blocking
- select(): Synchronous I/O Multiplexing
- Handling Partial send()s
- Serialization: How to Pack Data
- Son of Data Encapsulation
- Broadcast Packets: Hello, World!
Cross-Platform IPv6 Socket Programming
- Linux and Mac
- Windows
- Socket
- Storing Addresses
- Resolving Addresses
- Historic Name and Address Lookup
- Modern Address Lookup
- AI_ADDRCONFIG
- AI_CANONNAME
- AI_V4MAPPED
- AI_ALL
- IPv6 format
- AI_IDN
- AI_CANONIDN
- Modern Host Name Lookup
- Printing and Scanning Addresses
- Interface Checklist
- Obsolete Interface
- Protocol Independent Interface
- Example Client Code
- Example Server Code
changed Socket Interface
- New protocol family name: PF_INET6
- Address data structures
- Net address family name: AF_INET6
- Net address family name: AF_INET6
- sockaddr_in6 structure
- Name-to-address translation functions
- inet_pton, inet_ntop
- Address conversion functions
- getnameinfo
- getaddrinfo
- Sockets
- Socket Programming
- Port Numbers
- Sockets
- Socket=IP address + port number
- Socket Basics
- How do sockets work?
- Socket Functions
- Typical flow of events for a connection-oriented socket
- Socket APIs
- Socket characteristics
- Sockets characteristics
IPv6 Programming APIs and examples
- Porting applications in IPv6
- C
- C++
- Java
- Perl
- PHP