2008-10-16 2 views
4

Il y a eu beaucoup de presse sur IPv6 et le passage imminent à IPv6 d'IPv4. J'ai une certaine compréhension de IPv6, mais je me suis souvent demandé combien d'impact IPv6 a sur le développement de l'application & conception (spécifiquement)?Quels avantages/impacts IPv6 aura-t-il sur le développement et la conception d'applications?

Y a-t-il des avantages tangibles/bien connus que IPv6 offre que nous n'avons pas encore aujourd'hui?

Je sais que Windows Vista et Server 2008 prennent en charge l'IPv6 prêt à l'emploi, est-ce que quiconque utilise (ou conçoit IPv6 en tête) aujourd'hui, et si oui, quels sont les avantages? Devrions-nous envisager IPv6 dans les projets actuels et futurs?

Y a-t-il des bons exemples d'applications compatibles IPv6?

Répondre

2

Cela affectera la conception de l'interface utilisateur pour tout logiciel dans lequel vous entrez une adresse IP, car vous devrez les laisser choisir entre l'entrée IPv4 et IPv6. Assez évident cependant. Je crois comprendre que peu d'autres choses vont changer. La plupart des programmes utilisent des fonctions de mise en réseau fournies par le système d'exploitation. Ainsi, au moment où les données sont renvoyées à l'application, toutes les complexités d'adressage et de transmission sont supprimées. Bien sûr, certaines applications seront plus touchées, mais celles-ci seront celles qui fonctionneront directement avec le réseau ... et non votre application type.

Vous devez regarder où se situe votre application dans OSI model. Je pense que les adresses IP font partie de la couche 3, donc si vous êtes au-dessus de cette couche, vous êtes extrait des changements par le système d'exploitation. Une chose qui peut vous tromper, ce sont les vieux jeux où vous mettez l'adresse IP d'un joueur auquel vous voulez vous connecter (Age of Empires, Starcraft, etc.). Il semble que l'interdiction d'une sorte de tunnel IPv4-IPv6 que cette fonctionnalité du jeu sera brisée.

+3

votre compréhension est incorrecte. Les applications doivent toujours être capables de créer des sockets, des structures d'adresses, etc., qui ont toutes des variations spécifiques à IPv6. – Alnitak

+0

Non, je pense que le résumé d'Aaron Axvig est assez juste. La plupart des applications ne doivent jamais manipuler les adresses IP directement. L'interface de socket est de très bas niveau: c'est comme le langage d'assemblage. Puissant mais très peu portable. – bortzmeyer

3

Initialement pas beaucoup. Le passage d'IPv4 à v6 doit être transparent pour la plupart des applications de bureau et Web.

Mais éventuellement, les applications utilisant des modèles de réseau facilités par IPv6 deviendront plus courantes. Par exemple, la plupart des utilisateurs sont derrière un NAT, de sorte que les réseaux maillés ne sont possibles que pour un public technique. Quiconque a dû ouvrir des ports sur son routeur pour un logiciel P2P sait que ce n'est pas quelque chose que sa mère pourrait utiliser.

La diffusion en continu et la diffusion sont également facilitées par IPv6.

+0

Je aime le concept de garder la même adresse IP tout en se déplaçant entre les régions (par exemple à bord d'un avion), mais comme vous le suggérez, il est de faible niveau et ne sera probablement pas très utile/utile pour un développeur d'applications. – RobS

1

Tous les navigateurs Web modernes (Chrome, IE, Safari et Firefox, par exemple) sont tous compatibles IPv6. IPv6 est également sensible à μTorrent.

6

La réponse d'Aaron est, je le crains, à peu près incorrecte. Oui, les modifications de l'interface utilisateur seront nécessaires, mais tout code utilisant les API de socket traditionnelles nécessitera probablement des modifications substantielles pour prendre en charge IPv6.

Le code le plus ancien utilise une constante de "famille d'adresses" spécifique (AF_INET) et une structure de données particulière (struct sockaddr_in). Tout code qui utilise encore cela est effectivement bloqué dans les terres IPv4.

Code récent devrait utiliser les appels API modernes tels que getaddrinfo() qui est capable de retourner les bonnes valeurs pour le protocole, la famille d'adresses (c.-à-AF_INET6), adresse, etc., que l'hôte distant utilise IPv4 ou IPv6 (ou les deux) .

C'est un peu long, mais voici un exemple de code de la page man Linux pour getaddrinfo. Notez comment l'appel reçoit une liste complète des adresses à distance possibles, et essaie chacun à son tour jusqu'à ce qu'il réussisse:

  memset(&hints, 0, sizeof(struct addrinfo)); 
     hints.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ 
     hints.ai_socktype = SOCK_DGRAM; /* Datagram socket */ 
     hints.ai_flags = 0; 
     hints.ai_protocol = 0;   /* Any protocol */ 

     s = getaddrinfo(hostname, service, &hints, &result); 
     if (s != 0) { 
      fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(s)); 
      exit(EXIT_FAILURE); 
     } 

     /* getaddrinfo() returns a list of address structures. 
      Try each address until we successfully connect(2). 
      If socket(2) (or connect(2)) fails, we (close the socket 
      and) try the next address. */ 

     for (rp = result; rp != NULL; rp = rp->ai_next) { 
      sfd = socket(rp->ai_family, rp->ai_socktype, 
          rp->ai_protocol); 
      if (sfd == -1) 
       continue; 

      if (connect(sfd, rp->ai_addr, rp->ai_addrlen) != -1) 
       break;     /* Success */ 

      close(sfd); 
     } 

     if (rp == NULL) {    /* No address succeeded */ 
      fprintf(stderr, "Could not connect\n"); 
      exit(EXIT_FAILURE); 
     } 

     freeaddrinfo(result);   /* No longer needed */ 
+0

Je ne dirais pas qu'il est incorrect mais plutôt qu'il décrit quel devrait être l'état des applications. Malheureusement, la plupart des applications utilisent des fonctionnalités de bas niveau comme l'API Sockets, mais elles ne le devraient pas. Et en utilisant AF_INET est certainement une grosse erreur: tirer le programmeur! – bortzmeyer

Questions connexes