socket programming with ipv6. why ipv6? addressing and routing scalability address space exhaustion...

34
Socket Programming with IPv6

Upload: jerome-hoose

Post on 14-Dec-2015

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

Socket Programming with IPv6

Page 2: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

Why IPv6?

Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel Mobile IP Multicast routing IP Security End to end semantics

Page 3: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

3

IPv6 Design Issues

Overcome IPv4 scaling problem lack of address space.

Flexible transition mechanism. New routing capabilities. Quality of service. Security. Ability to add features in the future.

Page 4: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

4

IPv6 Headers

Simpler header - faster processing by routers. No optional fields - fixed size (40 bytes) No fragmentation fields. No checksum

Support for multiple headers more flexible than simple “protocol” field.

Page 5: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

5

IPv4 Header

VERS HL

Fragment Offset

Fragment LengthService

Datagram ID FLAG

TTL Protocol Header Checksum

Source Address

Destination Address

Options (if any)

Data

1 byte1 byte 1 byte 1 byte

Page 6: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

6

IPv6 Header

VERS PRIO

Hop Limit

Flow Label

Payload Length Next Header

1 byte1 byte 1 byte 1 byte

Source Address (128 bits - 16 bytes)

Dest. Address (128 bits - 16 bytes)

Page 7: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

7

IPv6 Header Fields

VERS: 6 (IP version number) Priority: will be used in congestion control Flow Label: experimental - sender can label

a sequence of packets as being in the same flow.

Payload Length: number of bytes in everything following the 40 byte header, or 0 for a Jumbogram.

Page 8: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

Netprog: IPv6 8

IPv6 Header Fields

Next Header is similar to the IPv4 “protocol” field - indicates what type of header follows the IPv6 header.

Hop Limit is similar to the IPv4 TTL.

Page 9: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

9

Extension Headers

Routing Header - source routing Fragmentation Header - supports

fragmentation of IPv6 datagrams. Authentication Header Encapsulating Security Payload

Header

Page 10: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

Netprog: IPv6 10

IPv6 Addresses

128 bits - written as eight 16-bit hex numbers.

5f1b:df00:ce3e:e200:0020:0800:2078:e3e3

High order bits determine the type of address.

Page 11: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

11

IPv6 Addressing

The following address classes are defined Unspecified: :: Loopback: :1 Multicast: FF0x: Link-local: FE80: Site-local: FE40: Rest are Unicast and anycast addresses

Unicast address composed of prefix and MAC address

Page 12: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

12

IPv6 Addressing

Page 13: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

13

IPv6 Aggregate Global Unicast Address

001 TLA ID NLA ID SLA ID Interface ID

3 13 32 16 64

TLA: top-level aggregationNLA: next-levelSLA: site-level

Interface ID is (typically) based on hardware MAC address

Page 14: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

Netprog: IPv6 14

IPv4-Mapped IPv6 Address

IPv4-Mapped addresses allow a host that support both IPv4 and IPv6 to communicate with a host that supports only IPv4.

The IPv6 address is based completely on the IPv4 address.

Page 15: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

Netprog: IPv6 15

IPv4-Mapped IPv6 Address

80 bits of 0s followed by 16 bits of ones, followed by a 32 bit IPv4 Address:

0000 . . . 0000 IPv4 AddressFFFF

80 bits 32 bits16 bits

Page 16: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

Netprog: IPv6 16

Works with DNS

An IPv6 application asks DNS for the address of a host, but the host only has an IPv4 address.

DNS creates the IPv4-Mapped IPv6 address automatically.

Kernel understands this is a special address and really uses IPv4 communication.

Page 17: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

Netprog: IPv6 17

IPv4-Compatible IPv6 Address

An IPv4 compatible address allows a host supporting IPv6 to talk IPv6 even if the local router(s) don’t talk IPv6.

IPv4 compatible addresses tell endpoint software to create a tunnel by encapsulating the IPv6 packet in an IPv4 packet.

No longer in use. Deprecated.

Page 18: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

Netprog: IPv6 18

IPv4-Compatible IPv6 Address

0000 . . . 0000 IPv4 Address0000

80 bits 32 bits16 bits

• 80 bits of 0s followed by 16 bits of 0s, followed by a 32 bit IPv4 Address:

Page 19: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

19

Tunneling(done automatically by kernel when IPv4-Compatible IPv6 addresses used)

IPv6Host

IPv6Host

IPv4 Routers

IPv6 Datagram

IPv4 Datagram

Page 20: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

20

IPv6 Sockets programming

New address family: AF_INET6

New address data type: in6_addr

New address structure: sockaddr_in6

DNS lookup: getaddrinfo()

Page 21: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

Netprog: IPv6 21

in6_addr

struct in6_addr { uint8_t s6_addr[16];};

Page 22: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

Netprog: IPv6 22

sockaddr_in6

struct sockaddr_in6 { uint8_t sin6_len; sa_family_t sin6_family; in_port_t sin6_port; uint32_tsin6_flowinfo;

struct in6_addr sin6_addr;};

Page 23: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

Netprog: IPv6 23

Dual Server

In the future it will be important to create servers that handle both IPv4 and IPv6.

The work is handled by the O.S. (which contains protocol stacks for both v4 and v6): automatic creation of IPv6 address from

an IPv4 client (IPv4-mapped IPv6 address).

Page 24: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

Netprog: IPv6 24

IPv4client

IPv4client

TCPTCP

IPv4IPv4

DatalinkDatalink

IPv6client

IPv6client

TCPTCP

IPv6IPv6

DatalinkDatalink

IPv6server

IPv6server

TCPTCP

DatalinkDatalink

IPv4IPv4 IPv6IPv6

IPv4-mappedIPv6 address

Page 25: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

25

IPv6 Clients

If an IPv6 client specifies an IPv4 address for the server, the kernel detects and talks IPv4 to the server.

DNS support for IPv6 addresses can make everything work. getaddrinfo() returns an IPv4

mapped IPv6 address for hosts that only support IPv4.

Page 26: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

26

IPv6 - IPv4 Programming

The kernel does the work, we can assume we are talking IPv6 to everyone!

In case we really want to know, there are some macros that determine the type of an IPv6 address. We can find out if we are talking to an

IPv4 client or server by checking whether the address is an IPv4 mapped address.

Page 27: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

Ipv4, Ipv6 Compatibility

Introduction IPv4 Client, IPv6 Server IPv6 Client, IPv4 Server

Page 28: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

Introduction

Server and client combination IPv4 <=> IPv4(most server and client) IPv4 <=> IPv6 IPv6 <=> IPv4 IPv6 <=> IPv6

How IPv4 application and IPv6 application can communicate with each other.

Host are running dual stacks, both an IPv4 protocol stack and IPv6 protocol stack

Page 29: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

IPv4 Client , IPv6 Server

IPv6 dual stack server can handle both IPv4 and IPv6 clients.

This is done using IPv4-mapped IPv6 address

server create an IPv6 listening socket that is bound to the IPv6 wildcard address

Page 30: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

IPv6client

IPv6server

TCP

IPv6

Data link

Data link

IPv4

TCP

IPv4client

TCP

IPv4 IPv6

Data link

Enethdr

IPv4hdr

TCPhdr

TCPdata

Enethdr

IPv4hdr

TCPhdr

TCPdata

Type0800

Type0800

Dport 8888

Dport 8888

206.62.226.42

IPv4 mapped IPv6 address

IPv6 listening socket,

bound to 0::0, port 8888

IPv6 address

5flb:df00:ce3e:e200:20:800:2b37:6426

Page 31: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

IPv4 datagram IPv6 datagram

AF_INETSOCK_STREAMsockaddr_in

AF_INETSOCK_DGRAMsockaddr_in

AF_INET6SOCK_DGRAMsockaddr_in6

AF_INET6SOCK_DGRAMsockaddr_in6

TCP

IPv4 IPv6

UDP

IPv4 sockets

IPv6sockets

Addressreturned by accept or recvfrom

IPv6 IPv4 IPv4 mapped

Page 32: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

IPv6 client, IPv4 server

IPv4 server start on an IPv4 only host and create an IPv4 listening socket

IPv6 client start, call gethostbyname. IPv4 mapped IPv6 address is returned.

Using IPv4 datagram

Page 33: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

IPv4 datagram IPv6 datagram

AF_INETSOCK_STREAMsockaddr_in

AF_INETSOCK_DGRAMsockaddr_in

AF_INET6SOCK_DGRAMsockaddr_in6

AF_INET6SOCK_DGRAMsockaddr_in6

TCP

IPv4 IPv6

UDP

IPv4 sockets

IPv6sockets

Addressfor connect or sendto

IPv6 IPv4 IPv4 mapped

IPv6

Page 34: Socket Programming with IPv6. Why IPv6? Addressing and routing scalability Address space exhaustion Host autoconfiguration QoS of flow using flowlabel

Summary of interoperability between IPv4 and IPv6 clients and servers.