windows socket programming & ipv6 translation middlewareacpang/course/voip_2003/slides/03... ·...

93
Windows Socket Programming & Windows Socket Programming & IPv6 Translation Middleware IPv6 Translation Middleware Dr. Dr. Whai Whai - - En Chen En Chen VoIP and IPv6 Laboratory Research Assistant Professor Dept. of Computer Science and Information Engineering National Chiao Tung University Email: [email protected] TEL: +886-3-5731924

Upload: phambao

Post on 12-Mar-2018

221 views

Category:

Documents


4 download

TRANSCRIPT

  • Windows Socket Programming & Windows Socket Programming & IPv6 Translation MiddlewareIPv6 Translation Middleware

    Dr. Dr. WhaiWhai--En ChenEn Chen

    VoIP and IPv6 LaboratoryResearch Assistant Professor

    Dept. of Computer Science and Information EngineeringNational Chiao Tung University

    Email: [email protected]: +886-3-5731924

  • 2004/12/24 Speaker: Whai-En Chen 2

    LAB 117&

    VoIP LAB

    OutlineOutline

    Introduction to Socket/WinSock ProgrammingIPv4 WinSock ProgrammingIPv6 WinSock ProgrammingIPv6 Translation Middleware- Socket-layer TranslatorConclusions

  • 2004/12/24 Speaker: Whai-En Chen 3

    LAB 117&

    VoIP LAB

    IntroductionIntroduction

    What is Windows Sockets?- An Open Interface for Network Programming under Microsoft Windows

    What are its Benefits?- an open standard- source code portability- support dynamic linking

    What is its Future?- WinSock 2

  • 2004/12/24 Speaker: Whai-En Chen 4

    LAB 117&

    VoIP LAB

    Windows SocketsWindows Sockets

  • 2004/12/24 Speaker: Whai-En Chen 5

    LAB 117&

    VoIP LAB

    BSD Socket APIsBSD Socket APIs

    accept() bind() closesocket() connect()getpeername() getsockname() getsockopt() htonl()htons() inet_addr() inet_ntoa() ioctlsocket()listen() ntohl() ntohs() recv()recvfrom() select() send() sendto()setsockopt() shutdown() socket()gethostname()gethostbyaddr() gethostbyname()getprotobyname() getprotobynumber()getservbyname() getservbyport()

  • 2004/12/24 Speaker: Whai-En Chen 6

    LAB 117&

    VoIP LAB

    Winsock APIsWinsock APIs

    WSAAsyncGetHostByAddr() WSAAsyncGetHostByName()WSAAsyncGetProtoByName() WSAAsyncGetProtoByNumber()WSAAsyncGetServByName() WSAAsyncGetServByPort()WSAAsyncSelect() WSACancelAsyncRequest()WSACancelBlockingCall() WSACleanup()WSAGetLastError() WSAIsBlocking()WSASetBlockingHook() WSASetLastError()WSAStartup() WSAUnhookBlockingHook()

  • 2004/12/24 Speaker: Whai-En Chen 7

    LAB 117&

    VoIP LAB

    Windows Sockets 2.0 ArchitectureWindows Sockets 2.0 ArchitectureWinSock 2Application

    WinSock 2Application

    TransportServiceProvider

    Name SpaceServiceProvider

    TransportServiceProvider

    WinSock 2 API

    WinSock 2Transport SPI

    Name SpaceServiceProvider

    Transport Functions Name Space Functions

    The WinSock 2 DLL

    WS2_32.DLL (32 bit)

    WinSock 2Name Space SPI

  • 2004/12/24 Speaker: Whai-En Chen 8

    LAB 117&

    VoIP LAB

    Compatibility of WinsockCompatibility of WinsockWinSock 2Application

    WinSock 1.1Application

    WS2_32.DLL (32 bit)

    TCP/IPTransport

    Service Provider

    WinSock 2 SPI

    WinSock 2 API

    WINSOCK.DLL (16 bit)WSOCK32.DLL (32 bit)

    WinSock 1.1 API

    TCP/IP-basedNamespace

    Service Providere.g. DNS

  • 2004/12/24 Speaker: Whai-En Chen 9

    LAB 117&

    VoIP LAB

    Winsock and OSI ModelWinsock and OSI Model

  • 2004/12/24 Speaker: Whai-En Chen 10

    LAB 117&

    VoIP LAB

    Client/Server ModelClient/Server Model

    Client-Server ModelClient and Server Association- protocol ( same for both Clint and server sockets )- client IP address- client port number- server IP address- server port number

  • 2004/12/24 Speaker: Whai-En Chen 11

    LAB 117&

    VoIP LAB

    Client/Server Programming(1)Client/Server Programming(1)

    send

    recv

    socket

    connect

    close/closesocket

    bindsocket

    listenaccept

    recv

    send

    close/closesocket

    data

    data

    TCP Client TCP Server

  • 2004/12/24 Speaker: Whai-En Chen 12

    LAB 117&

    VoIP LAB

    Client/Server Programming(2)Client/Server Programming(2)

    sendto

    recvfrom

    close/closesocket

    recvfrom

    sendto

    close/closesocket

    data

    data

    UDP Client UDP Server

    socket

    bind

    socket

  • IPv4 Socket ProgrammingIPv4 Socket Programming

  • 2004/12/24 Speaker: Whai-En Chen 14

    LAB 117&

    VoIP LAB

    Network Program SketchNetwork Program Sketch

    Open a socketName the socketAssociate with another socketSend and receive between socketsClose the socket

  • 2004/12/24 Speaker: Whai-En Chen 15

    LAB 117&

    VoIP LAB

    Open a SocketOpen a Socket

  • 2004/12/24 Speaker: Whai-En Chen 16

    LAB 117&

    VoIP LAB

    Name the SocketName the SocketWhats in a Socket Name?

    - protocol, port number and IP address

    bind( )int PASCAL FAR bind ( SOCKET s, /*an unbound socket */struct sockaddr FAR *addr, /*local port and IP addr */int namelen); /*addr structure length*/S : socket handleaddr : pointer to a socket address structure

    (always a sockaddr_insockaddr_in data structure for TCP/IP)

    namelen: length of socket structure pointed to by addraddr(always 4 for TCP/IP)

  • 2004/12/24 Speaker: Whai-En Chen 17

    LAB 117&

    VoIP LAB

    Name the SocketName the Socket

    sockaddr Structurestruct stockaddr {

    u_short sa_family; /*address family*/char sa_data[14]; /*undefined*/};

    sa_family : address familysa_data: address structure data area defined

    according to address family value

  • 2004/12/24 Speaker: Whai-En Chen 18

    LAB 117&

    VoIP LAB

    Name the SocketName the Socket

    sockaddr_in Structurestructure sockaddr_in {

    short sin_family; /* address family (PF_INET) */u_short sin_port; /* port (service) number */struct in_addr sin_addr; /* IP address (32-bit) */char sin_zero[8]; /**/

    };sin_family : address familysin_port : 16-bit port number in network ordersine_addr : 32-bit Internet address in network

    order

  • 2004/12/24 Speaker: Whai-En Chen 19

    LAB 117&

    VoIP LAB

    Associate with Another SocketAssociate with Another Socket

    Protocol ( same for both client and server sockets)client IP addressclient port numberserver IP addressserver port number

  • 2004/12/24 Speaker: Whai-En Chen 20

    LAB 117&

    VoIP LAB

    Associate with Another SocketAssociate with Another Socket

  • 2004/12/24 Speaker: Whai-En Chen 21

    LAB 117&

    VoIP LAB

    Associate with Another SocketAssociate with Another Socket

    How a Server Prepares for an Associationlisten()

    int PASCAL FAR listen ( SOCKET s, /* a named, unconnectedsocket */

    int backlog) ; /* pending connect queuelength */

    s: socket handle to a named socket ( bind() called), but not yet connected

    backlog: length of the pending connection queue ( not thesame as the number of accepted connections)

  • 2004/12/24 Speaker: Whai-En Chen 22

    LAB 117&

    VoIP LAB

    Associate with Another SocketAssociate with Another Socket

    How a Client Initiate an Associationconnect()

    int PASCAL FAR connect (SOCKET s, /*an unconnected socket */struct sockaddr FAR *addr, /*remote port and IP addr */int namelen ); /* addr structure length */

    s: socket handleaddr: pointer to socket address structure (always a

    sockaddr_in structure for TCP/IP)namelen: length of structure pointed to by addr (always 4

    for TCP/IP)

  • 2004/12/24 Speaker: Whai-En Chen 23

    LAB 117&

    VoIP LAB

    Associate with Another SocketAssociate with Another Socket

    How a Server Completes an Associationaccept()SOCKET PASCAL FAR accept (SOCKET s, /*a listening socket*/

    struct sockaddr FAR *addr, /*name of incomingsocket*/

    int FAR *addrlen);

    s: socket handleaddr: pointer to socket address structure ( always a

    sockaddr_in structure for TCP/IP)addrlen: length of socket structure that addr points to

    ( always 4 for TCP/IP)

  • 2004/12/24 Speaker: Whai-En Chen 24

    LAB 117&

    VoIP LAB

    Send and Receiver between SocketsSend and Receiver between Sockets

    Sending Data on a Connected Socketsend()int PASCAL FAR send (SOCKET s, /*associated socket*/

    const char FAR *buf, /*buffer with outgoing data*/int len, /*bytes to send*/int flags ); /*option flags*/

    s: socket handlebuf: pointer to a buffer that contains application data to

    sendlen: length of data (in bytes) to sendflags: flags to affect the send ( MSG_OOB, MSG_DONTROUTE)

  • 2004/12/24 Speaker: Whai-En Chen 25

    LAB 117&

    VoIP LAB

    Send and Receiver between SocketsSend and Receiver between Sockets

    Sending Data on an Unconnected Socketsendto()int PASCAL FAR sendto (SOCKET s, /*a valid socket */

    const char FAR *buf, /*buffer with outgoing data */int len, /*bytes to send */int flags, /*option flags */struct sockaddr FAR *to, /*remote socket name */int tolen ); /*length of sockaddr */

    to: pointer to socket structure (always a sockaddr_in for TCP/IP) that contains destination address and port number ( socket name)

    tolen: length of socket structure pointed to by to ( always 4for TCP/IP)

  • 2004/12/24 Speaker: Whai-En Chen 26

    LAB 117&

    VoIP LAB

    Send and Receiver between SocketsSend and Receiver between Sockets

    Receiving Datarecv()int PASCAL FAR recv (SOCKET s, /*associated socket*/

    char FAR *buf, /*buffer with outgoing data*/int len, /*bytes to send */int flags ); /*option flags */

    recvform()int PASCAL FAR recvform (SOCKET s, /*a valid socket*/

    char FAR *buf, /*buffer with outgoing data*/int len, /*bytes to send */int flags ); /*option flags */struct sockaddr FAR *from, /*remote socket name */int fromlen ); /*length of sockaddr */

  • 2004/12/24 Speaker: Whai-En Chen 27

    LAB 117&

    VoIP LAB

    Send and Receiver between SocketsSend and Receiver between Socketss: socket handlebuf: pointer to a buffer that contains application data to

    sendlen: length of data (in bytes) to sendflags: flags to affect the send ( MSG_OOB,

    MSG_DONTROUTE)from: pointer to socket structure ( always a sockaddr_in for

    TCP/IP) that contains source address and port number ( socket name)

    fromlen: length of socket structure pointed to by from ( always 4 for TCP/IP)

  • 2004/12/24 Speaker: Whai-En Chen 28

    LAB 117&

    VoIP LAB

    Other Useful Socket FunctionsOther Useful Socket FunctionsByte Ordering Functions

    ntohs(), ntohl()htons(), htonl()

    Address Translation Functionsinet_addr()-32IPinet_nota()-32IP

    Name Resolutiongethostbyaddr()- host host gethostbyname()- host host hostent

    WSAStartup() and WSACleanup()

  • 2004/12/24 Speaker: Whai-En Chen 29

    LAB 117&

    VoIP LAB

    hostenthostentstruct hostent {

    char FAR * h_name;char FAR * FAR * h_aliases;short h_addrtype;short h_length;char FAR * FAR * h_addr_list;

    }linked-list

  • 2004/12/24 Speaker: Whai-En Chen 30

    LAB 117&

    VoIP LAB

    Byte Ordering FunctionByte Ordering Function

    High-order byte low-order byte

    MSB 16bit value LSB

    High-order byte low-order byte

    Increasing memory address

    Address A+1 Address ALittle-endian byte order:

    Big-endian byte order:

    Address A+1Address A

    Increasing memory address

  • 2004/12/24 Speaker: Whai-En Chen 31

    LAB 117&

    VoIP LAB

    IPv4 Example for IPv4 Example for Daytime Server (ConnectionDaytime Server (Connection--oriented)oriented)

    int main(int argc, char **argv){

    int listenfd, connfd;struct sockaddr_in servaddr;char buff[MAXLINE];time_t ticks;listenfd = socket(AF_INET, SOCK_STREAM, 0);bzero(&servaddr, sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr = htonl(INADDR_ANY);servaddr.sin_port = htons(13);/* daytime server */

    bind(listenfd, (SA *) &servaddr, sizeof(servaddr));

  • 2004/12/24 Speaker: Whai-En Chen 32

    LAB 117&

    VoIP LAB

    IPv4 Example for IPv4 Example for Daytime Server (ConnectionDaytime Server (Connection--oriented)oriented)

    listen(listenfd, LISTENQ);

    for ( ; ; ) {connfd = accept(listenfd, (SA *) NULL, NULL);

    ticks = time(NULL);snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks));write(connfd, buff, strlen(buff));

    Close(connfd);}

    }

  • 2004/12/24 Speaker: Whai-En Chen 33

    LAB 117&

    VoIP LAB

    IPv4 Example for IPv4 Example for Daytime Client (ConnectionDaytime Client (Connection--oriented)oriented)

    int main(int argc, char **argv){

    int sockfd, n;char recvline[MAXLINE + 1];struct sockaddr_in servaddr;if (argc != 2)

    err_quit("usage: a.out ");if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)

    err_sys("socket error");bzero(&servaddr, sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_port = htons(13);/* daytime server */if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr)

  • 2004/12/24 Speaker: Whai-En Chen 34

    LAB 117&

    VoIP LAB

    IPv4 Example for IPv4 Example for Daytime Client (ConnectionDaytime Client (Connection--oriented)oriented)

    if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) < 0)err_sys("connect error");

    while ( (n = read(sockfd, recvline, MAXLINE)) > 0) {recvline[n] = 0;

    /* null terminate */if (fputs(recvline, stdout) == EOF)

    err_sys("fputs error");}if (n < 0)

    err_sys("read error");exit(0);

    }

  • IPv6 Socket ProgrammingIPv6 Socket Programming

  • 2004/12/24 Speaker: Whai-En Chen 36

    LAB 117&

    VoIP LAB

    IPv4IPv4IPv6IPv6

    IPv4IPv6

    Socket APISocket API

  • 2004/12/24 Speaker: Whai-En Chen 37

    LAB 117&

    VoIP LAB

    IPv4/IPv6IPv4/IPv6

    IPv4, 32IPv6, 128

    32 bits

    IPv4

    IPv6128 bits

  • 2004/12/24 Speaker: Whai-En Chen 38

    LAB 117&

    VoIP LAB

    IPv4 AP IPv6 AP

    Layer 1 and 2

    IPv4 IPv6

    TCP/UDP TCP/UDPv6

    V4/v6 Protocol-independent Application

    Layer 1 and 2

    IPv4 IPv6

    TCP/UDP TCP/UDPv6

    New Solutions for Applications

  • 2004/12/24 Speaker: Whai-En Chen 39

    LAB 117&

    VoIP LAB

    Socket API Socket API (())Server

    socket open a socketbind bind local address to the socketlisten listen on a portaccept wait for the connectionread/write if TCPrecvfrom/sendto if UDP

    Clientsocket open a socketconnect connect to a serverread/write if TCPrecvfrom/sendto if UDP

  • 2004/12/24 Speaker: Whai-En Chen 40

    LAB 117&

    VoIP LAB

    IPSocket APIIP

    IPv4

  • 2004/12/24 Speaker: Whai-En Chen 41

    LAB 117&

    VoIP LAB

    APIAPI

    Socket

    IPv4 IPv6

    AF_INET AF_INET6

    PF_INET PF_INET6

    IN_ADDR_ANY inaddr6_any

  • 2004/12/24 Speaker: Whai-En Chen 42

    LAB 117&

    VoIP LAB

    APIAPI

    IPv4 IPv6

    in_addr in6_addr

    sockaddrsockaddr_in6

    sockaddr_in sockaddr_in6

  • 2004/12/24 Speaker: Whai-En Chen 43

    LAB 117&

    VoIP LAB

    IPv4 IPv4 Socket Address StructureSocket Address StructureStruct in_addr{

    in_addr_t s_addr; /*32bit IPv4 address*/}; /*network byte ordered*/

    struct sockaddr_in {uint8_t sin_len; /* length of structure(16) */sa_family_t sin_family; /* AF_INET */in_port_t sin_port; /* 16bit TCP or UDP port number */

    /*network byte ordered*/struct in_addr sin_addr; /* 32bit IPv4 address */

    /*network byte ordered*/char sin_zero[8]; /* unused */

    }; /* included in */

  • 2004/12/24 Speaker: Whai-En Chen 44

    LAB 117&

    VoIP LAB

    IPv6 IPv6 Socket Address StructureSocket Address StructureStruct in6_addr{

    uint8_t s6_addr[16]; /*128bit IPv6 address*/}; /*network byte ordered*/

    #define SIN6_LEN /* required for compile-time tests */struct sockaddr_in6 {

    uint8_t sin6_len; /* length of structure(24) */sa_family_t sin6_family; /* AF_INET6*/in_port_t sin6_port; /* Transport layer port# */

    /*network byte ordered*/uint32_t sin6_flowinfo; /* priority & flow label */

    /*network byte ordered*/struct in6_addr sin6_addr; /* IPv6 address */

    /*network byte ordered*/}; /* included in */

  • 2004/12/24 Speaker: Whai-En Chen 45

    LAB 117&

    VoIP LAB

    APIAPI

    IPv4 IPv6

    sin_len sin6_len

    sin_family sin6_family

    sin_port sin6_port

    sin_addr sin6_addr

    s_addr s6_addr

  • 2004/12/24 Speaker: Whai-En Chen 46

    LAB 117&

    VoIP LAB

    APIAPI

    IPv4 IPv6

    Name-to_addressFunctions

    Address conversionFunctions

    inet_aton()inet_addr() inet_pton()

    inet_ntoa() inet_ntop()

    gethostbyname()gethostbyaddr()

    getipnodebyname()getipnodebyaddr()getnameinfo()getaddrinfo()

  • 2004/12/24 Speaker: Whai-En Chen 47

    LAB 117&

    VoIP LAB

    Data Structure ComparisonData Structure Comparison

    AF independentstruct sockaddr

    IPv4 dependentstruct in_addrstruct sockaddr_in

    Name resolvingstruct hostent

    AF independentstruct sockaddr_storage

    IPv6 dependentstruct in6_addrstruct sockaddr_in6

    Name resolvingstruct addrinfo

    IPv4 IPv6

  • 2004/12/24 Speaker: Whai-En Chen 48

    LAB 117&

    VoIP LAB

    Definitions and Function CallsDefinitions and Function CallsAddress Family&Protocol Family

    AF_INET6 & PF_INET6 for IPv6No changes to transport socket APIs

    socket(), connect(), bind()Name resolving

    AF dependent functions are obsoleteNew AF independent functionsgethostbyname() and gethostbyaddr()- IPv4-onlygetaddrinfo() and getnameinfo()- IPv4 & IPv6

  • 2004/12/24 Speaker: Whai-En Chen 49

    LAB 117&

    VoIP LAB

    getaddrinfogetaddrinfo() & () & getnameinfogetnameinfo()()Convert strings storing address and service into sockaddrstructure

    getaddrinfo(www.kame.net,www,&hint,&res);

    Options are specified in hinthint is an addrinfo structure

    Results are returned as a linked-list, each list node contains a sockaddr structurefreeaddrinfo() to free returned linked-list

    freeaddrinfo(res);getnameinfo() converts from sockaddr into strings storing address and service

    getnameinfo(sa,name,sizeof(name),srv,sizeof(srv),0);

  • 2004/12/24 Speaker: Whai-En Chen 50

    LAB 117&

    VoIP LAB

    Introduction to Checkv4.exeIntroduction to Checkv4.exeProvided by MicrosoftIdentifies potential problems in codes and makes recommendationsIdentifies most trivial problems

    Successfully checks presence of IPv4 specified code. e.g. gethostbyname(), struct sockaddr_in, and so on.

    Gives some false alertIdentifies parameters in comment

    Results from Checkv4.exeAbout 200 lines for CCL/ITRI SkinUA

  • 2004/12/24 Speaker: Whai-En Chen 51

    LAB 117&

    VoIP LAB

    Checkv4.exe (Partial Results)Checkv4.exe (Partial Results)

  • LAB 117&

    VoIP LAB

    Comparison of socket address structureComparison of socket address structure

  • 2004/12/24 Speaker: Whai-En Chen 53

    LAB 117&

    VoIP LAB

    Socket address structure pass.Socket address structure pass.

    bind, connect, sendto accept, recvfrom, getsockname,getpeername

  • 2004/12/24 Speaker: Whai-En Chen 54

    LAB 117&

    VoIP LAB

  • 2004/12/24 Speaker: Whai-En Chen 55

    LAB 117&

    VoIP LAB

    NTPO&CCL SIP User Agent (UA)NTPO&CCL SIP User Agent (UA)SIP-based VoIP phone running on WindowsSupport H.263 Video codecSupport G.711u/G.711a/G.723/G.729 Audio codecSupport registrationSupport authentication

  • 2004/12/24 Speaker: Whai-En Chen 56

    LAB 117&

    VoIP LAB

    Structure of SIP UAStructure of SIP UA

    CallManager MediaManagerUAProfile

    UI

    UACore cclRTP Codec

    WaveIOsipTx

    RTPSIP

    SDP

    Transport

  • 2004/12/24 Speaker: Whai-En Chen 57

    LAB 117&

    VoIP LABComponent Relationship of Component Relationship of CallManagerCallManager

    CallManager MediaManager

    UI

    UACore

    Function Call

    Function Call

    Windows Event

    Callback Function

    Function Call

  • 2004/12/24 Speaker: Whai-En Chen 58

    LAB 117&

    VoIP LAB

    GUI ProblemGUI ProblemIP Address control

    Is IPv4 specifiedDo not accept domain name

    Use Edit control instead

  • 2004/12/24 Speaker: Whai-En Chen 59

    LAB 117&

    VoIP LAB

    Get Local Address (1/2)Get Local Address (1/2)

    Old method: gethostbyname()Gethostbyname() on local hostname

    Does getaddrinfo() on local hostname works?Not works on Windows XPWorks on Windows 2003

  • 2004/12/24 Speaker: Whai-En Chen 60

    LAB 117&

    VoIP LAB

    Get Local Address (2 of 2)Get Local Address (2 of 2)Make use of IPHelper functions

    Presented in Windows from Windows 98A Windows-only solutionWorks on both windows XP and 2003

    Function name: GetAdaptersAddresses()

  • 2004/12/24 Speaker: Whai-En Chen 61

    LAB 117&

    VoIP LAB

    Parsing URI with IPv6Parsing URI with IPv6IPv6 address in URI

    sip:wechen@[3ffe:1345:5643::3]:5060

    Some parser assume semicolon will be used only to separate IP and PortModify parsing algorithm to deal with IPv6 address. URI in SIP header may contains IPv6 address

    INVITE sip:wechen@[2001:238:f82:66::33]:5060

    IP6 addrtype & IPv6 address in SDPc=IN IP6 FE80:60::2

  • 2004/12/24 Speaker: Whai-En Chen 62

    LAB 117&

    VoIP LAB

    Goal of Porting SIP UA to IPv6Goal of Porting SIP UA to IPv6Provide IPv6 communication to Users (a long-term solution)SIP UA should accept SIP URI that contains IPv6 literal address (specified in RFC 3261)SIP UA should correctly handle IPv6 addresses in SIP/SDP header fieldsSIP UA should operate with other IPv6 SIP UAs (KPhone and LinPhone) and SIP servers (IPtel and Partysip).

  • 2004/12/24 Speaker: Whai-En Chen 63

    LAB 117&

    VoIP LAB

    Modifications for SIP User AgentModifications for SIP User Agent

    Auto IPv4/IPv6 negotiation requires modification in listening thread part and rewrite working flow of calling

    The IP version is the same as the IP address that user choose SIP UA will use either IPv4 or IPv6 at the same time.Lower part in protocol stack should check an extra parameter that specifies address family

  • 2004/12/24 Speaker: Whai-En Chen 64

    LAB 117&

    VoIP LABModifications for SIP User Agent Modifications for SIP User Agent (cont.)(cont.)

    IPv6 address Literal format has scope-id E.g. fe80::201:2ff:fe85:37ed%3Used by linked-local addressIdentify the same address on different interface

    Scope-id must be specified when connecting to sites using link-local address

    An extra parameter in data structure to keep this

  • 2004/12/24 Speaker: Whai-En Chen 65

    LAB 117&

    VoIP LABModifications for SIP User Agent Modifications for SIP User Agent (cont.)(cont.)

    SIP URI may contain IPv6 addressE.g. sip:wechen@[2001:238:f82:6::2]:5060Rewrite parser to ensure correctly dealing with colon

    Since IPv6 address are longer than IPv4 address, GUI components related to address should be modifiedAvoid using IPAddressControl that supports IPv4 address only

  • 2004/12/24 Speaker: Whai-En Chen 66

    LAB 117&

    VoIP LAB

    ResultsResultsChanges 500+ out of 100,000+ lines in 150 filesAbout 300 lines are not identified by checkv4.exeSIP UA supports

    IPv4 or IPv6 communicationIPv6 address in SIP URI IPv6 address in GUI and form

    Modifications in SIP UATransport handle different IP versionsGUI handle IPv6 addressCallManager URI parsing/generating

  • 2004/12/24 Speaker: Whai-En Chen 67

    LAB 117&

    VoIP LAB

    Modification SummaryModification Summary

    4UI

    4MediaManager

    2cclRTP

    2UAProfile

    6transport

    6rtp

    1sdp

    5sip

    4sipTX

    5 UACore

    Modified filesModule name

    Total: 39 files

  • 2004/12/24 Speaker: Whai-En Chen 68

    LAB 117&

    VoIP LAB

    SIPv6 User AgentSIPv6 User Agent

    Double-click

    Click right botton

    3Next Page

    1

    2

    4

  • 2004/12/24 Speaker: Whai-En Chen 69

    LAB 117&

    VoIP LAB

    SIPv6 User AgentSIPv6 User AgentIPv6IPv6

    1

    2

    1. User Settings2. User IP AddressGlobal Unicast IPv6 Address2001:238:f88:131:2e0:18ff:feea:f7823. IPv46to4Prefix2002::/16

    Next Page3

  • 2004/12/24 Speaker: Whai-En Chen 70

    LAB 117&

    VoIP LAB

    SIPv6 User AgentSIPv6 User Agent

    12

    3

    Next Page

    1. Server Settings2. Use Proxy3. RegistrationIPv6 SIPIPv6

    4

  • 2004/12/24 Speaker: Whai-En Chen 71

    LAB 117&

    VoIP LABSIPv6 User AgentSIPv6 User AgentCodecCodec

    1

    2

    3

    1. Codec Settings2. CodecActive Codecs3. Use Video4.

    Next Page4

  • 2004/12/24 Speaker: Whai-En Chen 72

    LAB 117&

    VoIP LAB

    ((SIP URI)SIP URI)

    1

    2 3

    1. 2. SIP URI (SIP:7221@3ffe:3600:1::1)3. List4-6. LoadSIP URIOK

    Next Page

    45

    6

    7

  • 2004/12/24 Speaker: Whai-En Chen 73

    LAB 117&

    VoIP LAB

    1. Dial2.

    1

    2

  • 2004/12/24 Speaker: Whai-En Chen 74

    LAB 117&

    VoIP LAB-- SIPv6 User Agent (UA) SIPv6 User Agent (UA)

    Internet Internet (IPv4)IPv6 NetworkIPv6 Network

    (NCTU VoIP Lab)

    2.

    4.

    IPv6 NetworkIPv6 Network(Showroom)

    3.1 INVITE

    3.2 INVITE

    3.3 INVITE

    3.4 200 OK3.6 200 OK

    3.7 ACK 3.5 200 OK3.8 ACK

    3.9 ACK4. RTP

    4. RTP

    4. RTP

    1.SIP Signaling (IPv6)SIP Signaling (Tunnel)

    Dual-stackRouter

    SIPv6 UASIPv6 UA

    Dual-stackRouter

    Tunneling

    4.

    Using IPv6 AddressesUsing IPv6 Addresses

  • 2004/12/24 Speaker: Whai-En Chen 75

    LAB 117&

    VoIP LAB

    ppSIP Messages over SIP Messages over

    IPv6IPv6

    IPv6 address

  • 2004/12/24 Speaker: Whai-En Chen 76

    LAB 117&

    VoIP LAB

    ppRTP Stream over RTP Stream over

    IPv6IPv6

    IPv6 address

  • 2004/12/24 Speaker: Whai-En Chen 77

    LAB 117&

    VoIP LAB

    Interoperability TestingInteroperability Testing

    Testing with 2 Linux SIP-based phoneKphone 3.2 with IPv6 (patched by iptel)Linphone 0.11.3 (claimed as IPv6 enabled)

    EnvironmentWindows XP SP1Redhat linux 9.0 Partysip IPv6 SIP proxyIptel IPv6-enabled SIP server

  • 2004/12/24 Speaker: Whai-En Chen 78

    LAB 117&

    VoIP LAB

    Interoperability Testing ResultsInteroperability Testing Results

    SucceedRegister on iptelSucceedRegister on partysip

    SucceedCall UA through partysipproxy server

    ResultItem

    To IPv6 SIP proxy

  • 2004/12/24 Speaker: Whai-En Chen 79

    LAB 117&

    VoIP LAB

    Interoperability Testing ResultsInteroperability Testing Results

    OKSIP okOK

    SkinUA

    SIP okOKSIP okLinphone

    SIP okSIP okOKKPhone

    SkinUALinphoneKphoneTo

    From

    Linphone & KPhone can not accept URI containing IPv6 Literal address in URI.

    To IPv6 SIP UA

  • IPv6 Translation MechanismIPv6 Translation Mechanism--BumpBump--InIn--thethe--APIAPI

  • 2004/12/24 Speaker: Whai-En Chen 81

    LAB 117&

    VoIP LAB

    IPv6 API Data structure

    SIP-based VoIP User Agent200Socket API600

    IPv6

    v4/v6 BIA

  • 2004/12/24 Speaker: Whai-En Chen 82

    LAB 117&

    VoIP LAB

    BIAFunction MapperName ResolverAddress MapperALG ManagerFTP-ALG

    BIA: Windows XP SP1: Intel Celeron 2GHz: 128 MB: 20GB: Microsoft Visual C++ 6.0: Microsoft Platform SDK February 2003

    BIAWindows XP/2003Windows XP/2003

  • 2004/12/24 Speaker: Whai-En Chen 83

    LAB 117&

    VoIP LAB

    Name Resolving:Name Resolving:Translate IPv6 address to IPv4 addressTranslate IPv6 address to IPv4 address

  • 2004/12/24 Speaker: Whai-En Chen 84

    LAB 117&

    VoIP LAB

    SocketSocket--layerlayer Translator ResultTranslator Result

  • 2004/12/24 Speaker: Whai-En Chen 85

    LAB 117&

    VoIP LAB

    Using IPv4 to BrowseUsing IPv4 to BrowseWithout SocketWithout Socket--layer Translatorlayer Translator

  • 2004/12/24 Speaker: Whai-En Chen 86

    LAB 117&

    VoIP LAB

    ConclusionsConclusions

    In this course, you can learn the following techniquesIPv4 Windows Socket ProgrammingIPv6 Windows Socket ProgrammingIPv4/IPv6 Domain Name Resolution

    You can try to do following advanced topics.Writing IPv4/IPv6 compatible programsPorting IPv4 applications to IPv6 versionWriting ALG on Socket-layer TranslatorWriting IPv6 Test tools on SIPv6 Analyzer

  • 2004/12/24 Speaker: Whai-En Chen 87

    LAB 117&

    VoIP LAB

    ReferencesReferences

    Microsoft Platform SDKMSDN LibraryVC++ 6.0

  • 2004/12/24 Speaker: Whai-En Chen 88

    LAB 117&

    VoIP LAB

    ReferencesReferences[1] RFC- 2766 Network Address Translation - Protocol TranslationG.

    TsirtsisP. Srisuresh2000/2[2] RFC-2765 Stateless IP/ICMP Translator (SIIT)Nordmark, E.2000/2[3] RFC-2767 Bump-In-the-StackK. TsuchiyaH. HiguchiY.

    Atarashi2000/2 [4] RFC-3338 Bump-In-the-APIS. LeeM-K. ShinY-J. KimE. NordmarkA. Durand2002/10

    [5] IPv6 Guide for Windows Sockets ApplicationsMSDN Library2003/2 http://msdn.microsoft.com/library/en-us/winsock/winsock/ipv6_guide_for_windows_sockets_applications_2.asp?frame=true

    [6] How to upgrade WinSock application to support IPv6Makoto Ookawa2003/7http://www.ipv6style.jp/en/apps/20030711/20030711_p.shtml

    [7] RFC-2893 Transition Mechanisms for IPv6 Hosts and RoutersR. Gilligan E. Nordmark2000/8

    [8] Hitachi Toolnet6, http://www.hitachi.co.jp/Prod/comp/network/pexv6-e.htm

    [9] IPv6ISBN986-7794-11-7

  • AppendixAppendix

  • 2004/12/24 Speaker: Whai-En Chen 90

    LAB 117&

    VoIP LAB

    IPv4 HeaderIPv4 Header

  • 2004/12/24 Speaker: Whai-En Chen 91

    LAB 117&

    VoIP LABIPv6 HeaderIPv6 Header

  • 2004/12/24 Speaker: Whai-En Chen 92

    LAB 117&

    VoIP LAB

    IPv4IPv4AddressAddress

  • 2004/12/24 Speaker: Whai-En Chen 93

    LAB 117&

    VoIP LAB

    IPv6IPv6AddressAddress