ICMP

Το πρωτόκολλο Internet Control Message Protocol (ICMP) είναι ένα από τα βασικά πρωτόκολλα του διαδικτύου. Χρησιμοποιείται κυρίως από τα λειτουργικά συστήματα των ηλεκτρονικών υπολογιστών ενός δικτύου για την ανταλλαγή μηνυμάτων λάθους, όπως για παράδειγμα την έλλειψη κάποιας υπηρεσίας από έναν server ή την απουσία ενός υπολογιστή από το δίκτυo.

Το πρωτόκολλο ICMP διαφέρει από τα πρωτόκολλα TCP και UDP διότι συνήθως δεν χρησιμοποιείται από τις εφαρμογές που εκτελούνται σε κάποιον υπολογιστή, αλλά από το λειτουργικό του σύστημα. Εξαίρεση σε αυτό τον κανόνα αποτελεί το εργαλείο ping, το οποίο στέλνει μηνύματα ICMP Echo Request σε κάποιον υπολογιστή του δικτύου για να διαπιστώσει εάν ο υπολογιστής αυτός υπάρχει ή όχι και επίσης πόσο χρόνο χρειάζεται το μήνυμα να φτάσει σε αυτόν. Εάν ο υπολογιστής αυτός υπάρχει, θα απαντήσει με μηνύματα Echo Response.

Τεχνικές Λεπτομέρειες 
Το πρωτόκολλο ICMP έχει τυποποιηθεί στα έγγραφα RFC 792 και RFC 1122. Η έκδοση του πρωτοκόλλου που χρησιμοποιείται πιο συχνά είναι η έκδοση 4, η οποία ονομάζεται και ICMPv4 και αποτελεί μέρος του IPv4. Το IPv6 διαθέτει ένα αντίστοιχο πρωτόκολλο το οποίο ονομάζεται ICMPv6.

Τα μηνύματα ICMP κατασκευάζονται στο επίπεδο δικτύου και αποτελούν κανονικά πακέτα IP. Όπως και το πρωτόκολλο UDP, το ICMP δεν εγγυάται ότι το πακέτο θα φτάσει αξιόπιστα στον προορισμό του. Μερικές από τις πιο συνηθισμένες δικτυακές εφαρμογές χρησιμοποιούν πακέτα ICMP, όπως για παράδειγμα η εντολή traceroute. Η εντολή αυτή χρησιμοποιείται για την εύρεση όλων των κόμβων ενός δικτύου από τους οποίους πρέπει να περάσει ένα πακέτο για να φτάσει στον τελικό προορισμό του. Αυτό που κάνει ουσιαστικά είναι να στέλνει πακέτα UDP με συγκεκριμένο χρόνο ζωής (TTL - Time To Live) και να περιμένει πακέτα ICMP που να περιέχουν μήνυμα σφάλματος "ο χρόνος ζωής τελείωσε" (Time To Live exceeded in transit) ή "ο προορισμός δεν βρέθηκε" (Destination unreachable). Στο σημείο αυτό αξίζει να αναφερθεί ότι ο χρόνος ζωής (TTL - Time To Live) ενός πακέτου είναι ο μέγιστος αριθμός των κόμβων του δικτύου από τους οποίους θα πρέπει να περάσει έως ότου φτάσει στον προορισμό του. Εάν ένα πακέτο κατά την πορεία του στο δίκτυο περάσει από περισσότερους κόμβους απ' ό,τι αναγράφεται στο πεδίο TTL, τότε το πακέτο αυτομάτως απορρίπτεται και ο υπολογιστής ο οποίος διαπίστωσε το σφάλμα στέλνει ένα ICMP μήνυμα σφάλματος στον υπολογιστή που δημιούργησε το πακέτο. Τέλος, η εντολή ping χρησιμοποιεί επίσης το πρωτόκολλο ICMP για την λειτουργία της και συγκεκριμένα τα ICMP μηνύματα "Echo request" και "Echo reply".

Λίστα μηνυμάτων ελέγχου ICMP
0 - Echo Reply
1 - Reserved
2 - Reserved
3 - Destination Unreachable
4 - Source Quench
5 - Redirect Message
6 - Alternate Host Address
7 - Reserved
8 - Echo Request
9 - Router Advertisement
10 - Router Solicitation
11 - Time Exceeded
12 - Parameter Problem
13 - Timestamp
14 - Timestamp Reply
15 - Information Request
16 - Information Reply
17 - Address Mask Request
18 - Address Mask Reply
19 - Reserved for security
20-29 - Reserved for robustness experiment
30 - Traceroute
31 - Datagram Conversion Error
32 - Mobile Host Redirect
33 - IPv6 Where-Are-You
34 - IPv6 Here-I-Am
35 - Mobile Registration Request
36 - Mobile Registration Reply
37 - Domain Name Request
38 - Domain Name Reply
39 - SKIP Algorithm Discovery Protocol, Simple Key-Management for Internet Protocol
40 - Photuris, Security failures
41 - ICMP for experimental mobility protocols such as Seamoby [RFC4065]
42-255 - Reserved
(Πηγή: IANA ICMP Parameters)

Δομή πακέτου ICMP
Στο σχήμα που ακολουθεί φαίνεται η κεφαλίδα (header) ενός πακέτου ICMP. Με γκρι χρώμα απεικονίζεται η κεφαλίδα που προκύπτει από το πρωτόκολλο IP και με πράσινο χρώμα η κεφαλίδα που προκύπτει από το πρωτόκολλο ICMP. Ακολουθεί επεξήγηση των πεδίων της ICMP κεφαλίδας. Τα πεδία της IP κεφαλίδας εξηγούνται στο άρθρο για το IP - Internet Protocol.

 Type  Ο κωδικός του τύπου μηνύματος ICMP, όπως αναφέρθηκε παραπάνω. 
 Code  Το πεδίο αυτό χρησιμοποιείται ως επέκταση του προηγούμενου. Για παράδειγμα εάν το πεδίο Type περιέχει την τιμή 3 (Destination Unreachable), τότε το πεδίο αυτό μπορεί να περιέχει έναν κωδικό από το 1 έως το 15 που να δίνει τον λόγο για τον οποίο ο υπολογιστής που ψάχνουμε είναι εκτός δικτύου. 
 Checksum  Το πεδίο αυτό χρησιμοποιείται για τον έλεγχο σφαλμάτων κατά την μετάδοση του πακέτου.  
 ID Η τιμή ID του πακέτου, η οποία επιστρέφεται στον υπολογιστή που δημιούργησε το πακέτο στην περίπτωση που έχουμε απάντηση ECHO REPLY.
 Sequence Αυτό το πεδίο περιέχει την τιμή σειράς του πακέτου και επιστρέφεται στον υπολογιστή που δημιούργησε το πακέτο στην περίπτωση που έχουμε απάντηση ECHO REPLY.

Δείτε επίσης
ping 
traceroute 
UDP 
TCP

Εξωτερικοί σύνδεσμοι 
 RFC 792, Internet Control Message Protocol
 RFC 1122, Requirements for Internet Hosts -- Communication Layers
 Πως μπορούμε να αποφύγουμε πακέτα ICMP χρησιμοποιώντας ένα firewall.
 IANA

Πρότυπα διαδικτύου
Πρωτόκολλα του ίντερνετ