Salut,
On m'a demandé d'apporter des précisions sur les points suivant:
A- Le port unique pour TCP et UDP d'eMule
B- La valeur de "Max. nouvelles connexions / 5 secs" dans "Préférences\Propriétés étendues\Connexions TCP/IP" d'eMuleJ'essaierais d'être aussi bref et concis que possible...
A - Le port unique pour TCP et UDP d'eMule
En fonction du système d'exploitation et de son environnement matériel, si la compatibilité le permet, le fait de mettre un port unique en TCP et UDP sous eMule ne cause pas de problème uniquement pour cet ordinateur.
Cependant, ce port unique peut causer des soucis aux systèmes ne pouvant pas le prendre en charge, car leur configuration réseau ne leur permet pas de séparer les flux.
Cette incompatibilité vient soit du système d'exploitation, soit du matériel ou soit du type de réseau en place.
Il y a deux risques majeurs à mettre un port unique pour les protocoles TCP et UDP sous eMule:
- La première est l'augmentation inutile des délais de traitement des paquets TCP/IP en raison de l'alternance utilisé par le système d'exploitation afin de traiter ces deux flux séparément
- La deuxième est l'erreur générée sur les systèmes ne le supportant pas.
La répercution de ces problèmes sur le réseau edonkey est pire encore que celui du low id. Si le système de segmentation entre High ID et Low ID permet lui de minimiser l'impact sur le réseau ED2K en créant des bulles de transfert et des passerelles entre les clients, en revanche le port unique peut purement et simplement casser le processus de passerelle (sources ED2K et sources KAD).
1- Les protocoles TCP et UDP
TCP (Transmission Control Protocol) et UDP (User Datagram Protocol) sont tous deux des protocoles de transfert.
Cependant TCP est orienté connexion, alors que UDP n'est pas orienté connexion. Ils sont tous deux trés différents dans leur manière de gérer un paquet TCP/IP.
a - TCP Le protocole TCP est orienté connexion.
TCP utilise le principe de l'accusé de réception. C'est à dire qu'il y a un contrôle effectué sur la réception et l'émission avec un avis de réception entre les deux clients.
Il est chargé de la remise en ordre des Datagrammes IP. Il assure le contrôle des flux de données afin de ne pas saturer le réseau. Il permet une fragmentation des segments IP avant de les renvoyer à leur destinataire. Il autorise le multiplexage des données de manière à ce que plusieurs programmes puissent se servir en même temps de la même adresse Internet. Mais surtout, TCP initialise et termine une connexion en faisant une confirmation.
Voici de quoi est constitué un segment TCP:
- Port Source (16 bits) est le port local utilisé par le programme accédant à Internet
- Port Destination (16 bits) est le port distant
- Numéro d'accusé de réception (32 bits)
- Décalage des données (4 bits)
- Réservé (6 bits)
- Drapeaux (6x1 bit)
- Fenêtre (16 bits)
- Somme de contrôle (Checksum ou CRC)
- Pointeur d'urgence (16 bits)
- Options (taille variable)
- Remplissage (32 bits)
Deux ordinateur ayant entre eux un échange de données vont se "synchroniser" sur une échelle de temps.
La longueur des données est fixe.
b - UDP Le protocole UDP n'est pas orienté connexion.
Il est beaucoup plus simple dans sa mise en oeuvre car il ne fait pas de confirmation de réception. Il ne fait pas non plus de contrôle d'erreur. Cela explique l'économie de bande passante.
UDP est utilisé dans toute connexion ne nécessitant pas une fiabilité vitale.
Voici un en-tête de segment UDP:
- Port Source
- Port Destination
- Longueur (supérieure ou égale à 8 octets)
- Somme de contrôle.
La longueur des données est variable.
2- Les ports Chaque ressource accédant à Internet est identifiée par une adresse IP, un port et un protocole.
L'adresse IP identifie l'ordinateur dans le réseau.
Le port identifie l'application auquelle les paquets TCP/IP sont destinés.
Le protocole identifie le type de connexion par sa nature sécurisée (TCP) ou non sécurisée (UDP).
Lors d'une connexion, on est soit "Serveur" (émission) soit "Client" (réception).
Plusieurs programmes peuvent utiliser la même adresse IP (multiplexage). Le dé-multiplexage est utilisé afin de redistribuer à chaque application ses propres paquets TCP/IP leur permettant d'envoyer et de recevoir.
a - La connexion le couple adresse IP/Port est unique dans le réseau. On l'appelle communément "Socket" car cette notion à été introduite par les distributions de Berkeley (UNIX). Les experts et autres initiés le nomment sockets BSD (Berkeley Software Distribution).
Le protocole TCP utilise le mode connecté. Ce type de connexion s'établit sur de longues durée. Cela évite d'avoir à renseigner le destinataire dans chaque paquets TCP envoyés. Le mode connecté est assimilé à une conversation de vive voix.
Le protocole UDP utilise le mode non connecté. Ce type de connexion est établit sur de trés courtes durées. Dans chaque paquet UDP est inséré l'adresse du destinataire. il ne nécessite aucune confirmation de réception. On assimile le mode non connecté à un envoi de courrier.
Quand une connexion s'établit, il y a création d'un socket qui va retourner un descripteur identifiant (un entier).
L'ouverture d'un socket se fait en deux phases:
1. la création d'un socket et de son descripteur fait appel à la fonction "socket()"
2. le choix du protocole (TCP ou UDP) est appelé par la fonction "bind()"
L'écoute d'un port se fait différemment selon qu'il soit destiné au protocole TCP ou UDP:
- En mode connecté, le message est reçu en un bloc. Le socket est en mode d'écoute passive par la fonction "listen()". Si un message entrant est détecté, il est accepté par la fonction "accept()". Puis la réception se fait par la fonction "rcv()"
- En mode non connecté, le message est reçu de manière désordonnée (morceau par morceau). la réception se fait par la fonction "recvfrom()".
- Pour les deux modes, la cloture d'une connexion se fait par le biais de la fonction "close()".
On voit ici que les deux modes font appel à des fonctions différentes en ce qui concerne la réception.
Le problème vient de la fin d'une connexion. Il ne peut pas y avoir à un temps donné deux appels à la fonction "close()" sur un port unique pour deux protocoles différents. En l'occurrence ici pour le port unique TCP et UDP d'eMule."Pour résoudre ce problème, la pile TCP/IP du système met en cache les paquets TCP/IP afin de traiter
alternativement les flux de données TCP et UDP.
Etant donné que les deux protocoles sont traités chacun leur tour, les délais de remise sont eux aussi augmentés. Ce qui accroît de même la taille du cache des paquets TCP/IP. Tout en prenant bien en considération que la vitesse de traitement va dépendre de la bande passante ainsi que de sa disponibilité et de la puissance de traitement de l'environnement matériel (processeur, mémoire physique ect).
Cependant, que ce soit en réception ou en émission, tous les systèmes ne sont pas capables de séparer les flux TCP et UDP transitant par un seul port. b - Que se passe-t-il lorsqu'un programme utilise un port unique pour TCP et UDP? Certains systèmes sont capables d'utiliser un port unique de part la grande compatibilité de leur environnement matériel. Mais tous ne le peuvent pas.
Celui qui en est capable, pas de problème. Celui qui n'en est pas capable, gros soucis...
Quand il y a usage d'un port unique pour deux protocoles différents, soit cela ne fonctionne pas, soit cela fonctionne.
Dans le cas ou cela fonctionne, le système d'exploitation traite
alternativement les paquets TCP/IP afin de séparer les flux de données TCP et UDP. Il y a alors une augmentation artificielle du délais de traitement. La taille de la mise en cache des paquets TCP/IP se trouvent elle aussi augmentée car plus longue à vider.
L'impression de simultanéité n'est que fictive. Car chaque paquet TCP/IP se fragmente sur un segment de temps invisible à l'oeil nu.
Quand un client incapable de séparer les flux se trouve confronté à un serveur (autre client) utilisant un port unique pour TCP et UDP, les sources de celui-ci deviennent soit inexploitables soit ils deviennent un problème pouvant causer des plantages.
B - La valeur de "Max. nouvelles connexions / 5 secs" dans "Préférences\Propriétés étendues\Connexions TCP/IP" d'eMule
Sous Windows XP, "Max. nouvelles connexions / 5 secs" peut facilement dépasser la valeur de 20. La capacité de mise en cache des paquets TCP/IP sous Windows est beaucoup plus efficace. Cela fixe la limite de saturation à des niveaux plus élevés.
Cependant, ce n'est pas le cas sous Windows 9x. Sous Windows 9x, la valeur de "Max. nouvelles connexions / 5 secs" devrait être égale ou inférieure à 15. Ainsi, cela lui laisse suffisamment d'espace de travail quand il va rafraîchir le cache. Par la même, on évite d'avoir à frôler à tout va la limite de saturation de celui-ci.
En espérant que cela vous aidera à mieux comprendre les conséquences du port unique. J'espère avoir été suffisamment clair et consis dans mes explications.
Tutoriel réalisé par Chevalier