Samba - origine de ce protocole

Ce texte est traduit d’un article écrit par Andrew Tridgell

Méthode 1
Andrew Tridgell Tout d’abord, il y a une grande quantité de documents accessibles au public traitant du protocole CIFS/SMB. Ces documents sont incomplets et certains sont imprécis. Ils constituent cependant un bon début. Le document intitulé “draft-leach-cifs-v1-spec-02.txt” est peut être le plus utile de tous. Il remonte à 1997. C’est un protocole édité par SNIA et élaboré par Microsoftt (avec des apports de beaucoup d’autres personnes y compris moi-même). Ce document n’est plus d’actualité et Microsoft a renoncé à ses tentatives de faire adopter le protocole CIFS comme norme IETF, mais ce document est toujours disponible si vous cherchez bien avec un moteur de recherche. Il y a de nombreuses autres spécifications de ce protocole, accessibles au public. Je conserve une liste de celles que je connais à : http://samba.org/ftp/samba/specs/

Méthode 2
La technique du “Café français”. Imaginez que vous vouliez apprendre le français et qu’il n’y aurait ni livre, ni cours, ni rien d’autre de disponible pour cet apprentissage. Vous pourriez décider d’apprendre cette langue en vous envolant pour la France. Vous vous asseyez dans un café et vous écoutez les conversations autour de vous. Vous prenez maintes notes sur ce que le client dit au serveur et sur la nourriture qui est alors servie. Vous apprenez ainsi le mot “pain”, “café”, etc. C’est cette même technique qui est utilisée pour s’informer sur les différents protocoles que Microsoft développe. On utilise des “renifleurs de réseaux” pour écouter les conversations entre les clients de Microsoft et les serveurs et avec le temps on apprend le mot pour “taille du fichier”, “séquence de date” lorsqu’on observe ce qui est envoyé après chaque demande. Un des problèmes rencontrés dans la technique du “Café français” c’est qu’on apprend uniquement les mots utilisés par le client. Comment faire si on veut apprendre d’autres mots? Mettons que vous vouliez savoir comment jurer en français. Vous essayez de commander quelque chose et ensuite vous écrasez l’orteil du serveur ou vous lui mettez un coup de poing dans l’oeil au moment où il vient vous apporter votre commande. Vous serez alors jeté à la porte et vous prendrez des notes sur les mots utilisés. L’équivalent des jurons dans un protocole de réseau, ce sont les “erreurs de commutation par paquets“. Quand nous utilisons Samba, nous devons savoir comment réagir aux erreurs. Pour cela nous devons écrire un programme qui chercherait à accéder à un fichier inexistant ou qui utiliserait une mémoire tampon trop petite ou qui voudrait accéder à un fichier qui ne nous appartient pas. Nous examinons ensuite les codes d’erreur générés pour chaque démarche et nous prenons des notes.

Méthode 3
Cette méthode est un développement de la technique des “jurons“, déjà mentionnée plus haut. Cela implique d’écrire un “protocole de balayage”. C’est un programme qui essaye tous les “mots” possibles dans une section particulière d’un protocole et qui utilise les réponses pour déduire automatiquement de nouvelles informations concernant ce protocole. Cela s’apparente à la technique du Café français” mais avec un serveur extrêmement patient. Par exemple, une section du protocole pourrait contenir un “mot-commande” à 16 bit” qui dirait au serveur quelle action entreprendre. Il existe un potentiel de 64.000 “mots-commande”. Nous les essayons donc tous et notons ceux qui déclenchent un code d’erreur autre que “non fonctionnel”. Ensuite nous examinons combien de données supplémentaires chaque “mot-commande” nécessite; le programme essaye alors avec 1 byte de données vides, ensuite 2 puis 3, etc. jusqu’à ce que le serveur change de réponse de quelque manière que ce soit. Lorsque la réponse change, vous savez (au moins avec un bon degré de probabilité) que vous utilisez la juste quantité de données. On essaye alors d’utiliser des données réelles (non-vides), en introduisant un nom de fichier ou un nom de dossier ou un nom d’utilisateur jusqu’à ce que le serveur modifie à nouveau sa réponse. Après un grand nombre d’essai, le programme trouve finalement une combinaison de données qui ne génère aucun message d’erreur. Le serveur a donc accepté notre requête! Nous venons donc de découvrir une nouvelle phrase en “français”. Maintenant que notre serveur a accepté notre requête, nous devons découvrir à quoi elle sert. Nous savons que notre demande est bonne mais quel en est le résultat? Pour le découvrir nous transmettons cette nouvelle commande avec d’autres déjà comprises qui ont pour but de demander au serveur plein d’informations détaillées à propos des fichiers qu’il possède. Est-ce que la taille du fichier a changé? Est-ce que la date a changé? Est-ce que le fichier a changé de nom? C’est ainsi que nous déduisons ce que la commande produit.

Méthode 4
La dernière méthode qui vaut la peine d’être décrite ici, c’est la “technique des approximations” . Elle est utilisée pour découvrir les interactions entre les différents “mots-commande”. Si nous nous rattachons encore une fois à l’analogie (déjà bien utilisée) du “Café français”, c’est comme si vous vous demandiez s’il faut utiliser un autre mot que “café” dans le cas où vous le commandez avec un biscuit ou avec un morceau de gâteau. Voilà comment ça fonctionnerait. Vous utilisez votre connaissance du français pour créer un serveur virtuel. Ce serait un programme qui devrait se comporter comme un véritable serveur français. Vous écrivez ensuite un programme qui transmettrait, de façon aléatoire, une série de phrases en français à la fois à votre serveur réel et au serveur virtuel. Votre programme examine alors les réponses avec soin et note toute différence dans les comportements des serveurs respectifs. Vous conservez ces notes bien précieusement. Quand les serveurs présentent des réponses différentes, vous examinez vos notes et transmettez à nouveau la même séquence de phrases mais en en omettant une. Est-ce que les deux serveurs se comportent maintenant de la même façon? Si c’est le cas vous saurez alors que cette phrase est à l’origine de la différence de comportement des deux serveurs. Sinon il faudra continuer à chercher par cette même méthode. C’est ainsi que vous pourrez déterminer rapidement un groupe minimum de phrases qui amènera une réaction différente de la part des deux serveurs. Une fois que vous disposez de cette information de base, vous y réfléchissez fortement et vous utilisez la méthode décrite plus haut pour voir pourquoi votre serveur virtuel n’a pas la bonne réponse. Lorsque vous avez trouvé la solution, vous essayez encore et encore jusqu’à ce que le serveur réel se comporte comme le serveur virtuel.
Imaginez maintenant que nous ayons utilisé toutes les techniques décrites ci-dessus (plus quelques autres que je n’ai pas abordés ici) sur une période de 12 ans. C’est ainsi que Samba a été écrit.

L’original en anglais de cet article se trouve à l’adresse : http://samba.org/ftp/tridge/misc/french_cafe.txt

La photo de Andrew Tridgell provient du site Flickr et a été prise par Gopal Vijayaraghavan .

Elle peut se voir à http://www.flickr.com/photos/t3rmin4t0r/93565289/

0 Réponses pour “Samba - origine de ce protocole”


  1. Pas de commentaires

Votre réponse




Alertes Email

Envie d'être prévenu(e) des mises à jour du site ?

Votre Nom

Votre Adresse Email


Pas de spam, promis !