Internet control message protocol (ICMP) là một trong những Protocol được thuộc tầng Internet và được định nghĩa tại RFC 792. ICMP dùng để kiểm tra lỗi kết nối logic hay dùng để phân tích quá trình Routing trên hệ thống mạng.
Phiên bản của ICMP cho IPv4 là ICMP v4, tương tự như vậy ICMPv6 cho là một phần của IPv6.
Ví dụ, tất cả máy tính kể cả các router khi chuyển một gói tin IP đều có Time To Live IP Header; nếu TTL còn là 0, một ICMP có TTL quá lớn khi gói tin được gửi đi từ một nguồn nào đó. Mỗi gói tin ICMP được đóng gói trực tiếp với một gói IP và tương tự như protocol UDP, gói ICMP là gói không có độ tin cậy cao, nếu hỏng sẽ không được truyền lại.
Cấu tạo của gói ICMP

Các bit cho mỗi thành phần của gói tin ICMP – đây là ví dụ gói ICMP type 0 code 1 có ý nghĩa là Destination Unreachable.

Type - Sẽ cho chúng ta biết dạng của gói tin, có 8 bít dành cho TYPE ICMP vậy nếu tính tổng có khoảng 255 dạng ICMP nhưng chỉ có 8 dạng hay dùng và cần quan tâm nhất
Code - Sẽ cho chúng ta nhiều thông tin chi tiết về dạng gói tin đó. Một gói tin ICMP được hiểu là "Destination Unreachable" sẽ được thiết lập có code từ 1 tới 15
Checksum – ý nghĩa sử dụng để tính toán tổng cộng gói Header+data của gói ICMP
ID - Thiết lập này có ý nghĩa cho dạng Echo Reply
Sequence – ý nghĩa bao gồm các thông số cho quá trình trả lời Echo Reply.
Một trong những protocols tại tầng Internet trong mô hình TCP/IP là ICMP. Nó có tác dụng cung cấp khả năng phân tích và đưa ra các lỗi logic. Gói tin ICMP có một dạng cơ bản. Byte đầu tiên trong gói ICMP Header sẽ cho chúng ta biết dạng của gói ICMP (ICMP Type). Các byte sau của một dạng ICMP sẽ là mã của gói ICMP (ICMP Code). Các dạng gói tin ICMP cho cúng ta biết các vấn đề khi phân tích kết nối, còn mã của gói tin cho chúng ta biết chính sác lỗi đó thuộc về vấn đề gì.
Ví dụ: một gói ICMP Type 3 và Code 3 điều này có nghĩa nó sẽ cho chúng ta biết đường tới đích đã bị lỗi, và lỗi đó chính xác do port ở máy đích chưa được mở. Có 8 dạng ICMP cơ bản
|
TYPE |
Code |
Ý nghĩa |
|
0/8 |
0 |
Echo Response/Request (Ping) |
|
3 |
015 |
Destination Unreachable |
|
4 |
0 |
Source Quench |
|
5 |
03 |
Redirect |
|
11 |
01 |
Time Exceeded |
|
12 |
0 |
Parameter Fault |
|
13/14 |
0 |
Time Stamp Request/Response |
|
17/18 |
0 |
Subnet Mask Request/Response |
Trong bảng trên dạng ICMP type 0 và 8 là thường thấy nhất, đây là gói ICMP dùng để yêu cầu "Ping" và trả lời gói. Ping là lệnh dùng để test xem Source và Destination đã thông nhau về tầng logic chưa, đây cũng là cách để kẻ tấn công phát hiện ra một máy tính có đang được bật hay không. Khi thiết kế gói ICMP có rất nhiều lựa chọn và đây cũng là cách để kẻ tấn công thực hiện các phương thức tấn công như Ping of Death (gói tin lớn hơn 65535bits), hay sử dụng để Smurt DoS Attack, hay các thiết lập về thời gian và subnet mask, hay trong trường hợp gói ICMP ở dạng 5 sẽ chuyển hướng giao tiếp. Một danh sách các Code trong ICMP type 3 thể hiện dưới đây.
Dưới đây là bảng khá đầy đủ các ICMP Type và các Code của chúng cũng như ý nghĩa của từng code một
|
Type |
Code |
Ý nghĩa |
|
0 – Echo Reply |
0 |
Echo reply (used to Ping) |
|
1 and 2 |
|
Reserved |
|
3 – Destination Unreachable |
0 |
Destination network unreachable |
|
1 |
Destination host unreachable |
|
2 |
Destination protocol unreachable |
|
3 |
Destination port unreachable |
|
4 |
Fragmentation required, and DF set |
|
5 |
Source route failed |
|
6 |
Destination network unknown |
|
7 |
Destination host unknown |
|
8 |
Source host isolated |
|
9 |
Network administratively prohibited |
|
10 |
Host administratively prohibited |
|
11 |
Network unreachable for TOS |
|
12 |
Host unreachable for TOS |
|
13 |
Communication administratively prohibited |
|
4 - Source quench |
0 |
Source quench (congestion control) |
|
5 – Redirect Message |
0 |
Redirect Datagram for the Network |
|
1 |
Redirect Datagram for the Host |
|
2 |
Redirect Datagram for the TOS & network |
|
3 |
Redirect Datagram for the TOS & host |
|
6 |
|
Alternate Host Address |
|
7 |
|
Reserved |
|
8 – Echo Request |
0 |
Echo request |
|
9 - Router Advertisement |
0 |
Router Advertisement |
|
10 - Router Solicitation |
0 |
Router discovery/selection/solicitation |
|
11 – Time Exceeded |
0 |
TTL expired in transit |
|
1 |
Fragment reassembly time exceeded |
|
12 - Parameter Problem: Bad IP header |
0 |
Pointer indicates the error |
|
1 |
Missing a required option |
|
2 |
Bad length |
|
13 – Timestamp |
0 |
Timestamp |
|
14 – Timestamp reply |
0 |
Timestamp reply |
|
15 - Information Request |
0 |
Information Request |
|
16 - Information Reply |
0 |
Information Reply |
|
17 – Address Mask Request |
0 |
Address Mask Request |
|
18 - Address Mask Reply |
0 |
Address Mask Reply |
|
19 |
|
Reserved for security |
|
20 through 29 |
|
Reserved for robustness experiment |
|
30 - Traceroute |
0 |
Information Request |
|
31 |
|
Datagram Conversion Error |
|
32 |
|
Mobile Host Redirect |
|
33 |
|
Where Are you (originally meant for IPv6) |
|
34 |
|
Here am I (originally meant for IPv6) |
|
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 through 255 |
|
Reserved |
Theo Tocbatdat của Vnexperts Research Department