Bonjour.
Je cherche des informations techniques (matérielles et logicielles) sur le fonctionnement du réseau sur un PC moderne et j'ai plusieurs questions sur le sujet. A priori, c'est assez difficile à trouver, sauf tenter de lire le code de toute la couche réseau d'un Linux de base... ou encore je cherche n'importe comment, ce qui n'est pas à exclure ! Alors je me lance.
- la carte réseau (ou la partie de la carte mère qui fait fonction de carte réseau), je veux dire par là la partie matérielle, dispose-t-elle d'une "intelligence" minimale, comme par exemple pour décoder l'en-tête ethernet, l'en-tête IP ou plus encore, ou se contente-t-elle de recevoir des données du cable réseau ou du wifi ou de la fibre, etc. et de les balancer au driver réseau qui devra se taper tout seul le décodage des différentes couches ?
- A quel niveau se fait l'aiguillage qui envoie vers mon browser les résultats de mes requêtes Web, vers mon jeu les envois du serveur, vers mon OS les mises à jour windows, etc. ? Bref, qui répartit le trafic entrant en fonction du port de destination ?
- Le transfert des données depuis l'arrivée (cable, fibre, etc.) jusqu'au buffer mémoire que j'ai désigné dans Receive ou ReceiveFrom par exemple, se fait-il directement, ou via une suite de buffers "driver" puis "OS" puis... où les données sont recopiées plusieurs fois ?
- En parlant de recopies plusieurs fois, le décodage des différentes couches successives provoque-t-il une recopie à chaque fois du contenu des "données" de la couche vers un nouveau buffer passé à la couche suivante ?
- Si j'ai un seul Thread qui fait un Select, je suppose que tout ce qui est à destination de mon programme passe par lui et que je "dépile" au fur et à mesure et séquentiellement dans l'ordre d'arrivée tout ce qui arrive. Mais si j'ai 2 ou N Threads qui font tous les 2 ou tous les N un Select, lequel prend quoi ? Et ce n'est peut-être pas une bonne organisation logicielle...
- Même question, inversement en émission : si j'ai plusieurs Threads qui font des Send en même temps, où se passe la synchronisation, la remise à la queue-le-leu consistante de tout ce trafic pour aboutir sur une seule sortie physique ?
- Lorsque le Thread qui envoie des données par Send, par exemple, s'arrête juste après l'envoi, travail fini, quel Thread exécute le callback lorsque l'opération est terminée ?
Voilà, c'est un peu fouilli et pas mal dispersé, mais merci à ceux qui pourront y voir clair !
Partager