J'apprenais les bases du serveur / client, dans le cadre du développement de mes compétences en programmation réseau.
Donc, fondamentalement, j'écris le serveur en écoute sur un port, et le client s'y connectant et le flux de données continue ...
Maintenant je suis fasciné comment ping
est capable de recevoir une réponse de la machine distante,
sans aucun service y répondant? Ou je me trompe ici?
networking
ping
JalilKarimov
la source
la source
Réponses:
Comme le ping (plus précisément, les requêtes d'écho ICMP) fait partie du protocole Internet, votre pile réseau (qui est la mise en œuvre du protocole de votre système d'exploitation) répond à ces requêtes.
Ce n'est ni TCP, ni UDP, ni aucun autre protocole de transport. Dans l'en-tête Internet, un champ de protocole indique le type de charge utile contenu dans le paquet IP. Pour les paquets TCP, ce champ indique TCP. Pour les paquets ping, cela indique ICMP.
Btw. ce n'est pas la seule utilisation d'ICMP. Par exemple. quand le TTL d’un paquet tombe à zéro lorsqu’il voyage sur le réseau, il est rejeté et l’expéditeur est averti par un paquet ICMP.
Si vous vous demandez comment
ping (8)
parvient à afficher les réponses ICMP reçues à partir de l'espace utilisateur, à l'aide de l'API de socket. Voici la section pertinente du code source:la source
Oui, vous vous trompez légèrement.
Lorsqu'un demande de ping est envoyé à un hôte, conformément à la norme (RFC 1122), un hôte doit répondre. Il y a donc un "service" qui y répond. Ce n'est pas un service de niveau application - la pile TCP / IP elle-même est le "service" qui répond.
Ping est sans session - c'est ce qui pourrait vous dérouter. Ping utilise une adresse IP qui ne nécessite pas l'établissement d'une session par négociation (contrairement à TCP). Lorsque vous avez écrit votre programme pour votre classe, je parierais que vous l'avez écrit en utilisant des sockets TCP.
la source
ping
Effectuez en fait une requête ICMP sur la pile IP elle-même, de sorte qu'aucun service de la machine ne l'enregistrera, mais si vous avez quelque chose comme LeadShark en cours d'exécution, vous pouvez détecter les paquets de cette façon.la source
TCP
impliqué (ICMP
prend sa place)