Giao thức ICMP là gì? Từ lý thuyết đến ứng dụng

1942
10-10-2018
Giao thức ICMP là gì? Từ lý thuyết đến ứng dụng

ICMP là một giao thức lớp mạng được sử dụng để truyền các thông điệp điều khiển giữa máy chủ và bộ định tuyến. Để đảm bảo an ninh và an toàn của mạng, việc duy trì giao tiếp thành công giữa các thiết bị là điều cần thiết. Đó là lý do tại sao các giao thức như ICMP rất quan trọng và phổ biến cho đến ngày nay. Trong bài viết này, chúng ta sẽ cùng thảo luận về ICMP là gì cũng như chức năng của nó ra sao. Cùng Bizfly Cloud tìm hiểu nhé!

Giao thức ICMP là gì?

ICMP (Internet Control Message Protocol) là một giao thức báo cáo lỗi, thông báo cho sender biết việc gửi data đi có vấn đề, cũng giống như bộ định tuyến sử dụng để tạo thông báo lỗi đến địa chỉ IP nguồn khi các sự cố mạng ngăn chặn việc phân phối các IP packages. ICMP tạo và gửi thư đến địa chỉ IP nguồn, cho biết rằng một gateway vào Internet mà không thể truy cập được. Mọi thiết bị mạng IP đều có khả năng gửi, nhận hoặc xử lý tin nhắn ICMP.

ICMP không phải là giao thức truyền tải gửi dữ liệu giữa các hệ thống.

ICMP không được sử dụng thường xuyên trong các ứng dụng người dùng cuối, nó được sử dụng bởi các quản trị mạng, nhằm mục đích khắc phục các kết nối Internet trong các tiện ích chẩn đoán (diagnostic utilities) bao gồm ping và traceroute.

Một trong những giao thức chính của Internet Protocol suite là ICMP, ICMP được sử dụng bởi các routes, thiết bị trung gian hoặc máy chủ để truyền thông tin lỗi hoặc cập nhật cho các routes, thiết bị trung gian hoặc máy chủ khác. IPv4 được sử dụng rộng rãi (Giao thức Internet phiên bản 4), còn IPv6 mới hơn sử dụng các phiên bản tương tự của giao thức ICMP (ICMPv4 và ICMPv6 tương ứng).

>> Tham khảo thêm:  Giới thiệu về địa chỉ IP Version 6

Các thông điệp ICMP được truyền dưới dạng các datagrams, bao gồm một IP header đóng gói dữ liệu ICMP. CMP packets là IP packets với ICMP trong phần dữ liệu IP. Các tin nhắn ICMP cũng chứa toàn bộ tiêu đề IP từ tin nhắn gốc, vì vậy end system sẽ biết được packet nào đang có vấn đề.

ICMP header xuất hiện sau IPv4 hoặc IPv6 packet header và được xác định là IP protocol số 1. Thông thường, một giao thức phức tạp chứa ba trường:

- Loại chính (major type) xác định ICMP message.

- Mã phụ (minor code) có chứa nhiều thông tin hơn về type field.

- Việc kiểm tra tổng (checksum) giúp phát hiện các lỗi được phát sinh trong quá trình truyền tải.

- Dựa theo ba trường là dữ liệu ICMP và IP header ban đầu, chúng ta có thể xác định được các gói nào thực sự không thành công.

- ICMP đã được sử dụng để thực hiện các cuộc tấn công từ chối dịch vụ (còn gọi là ping of death) bằng cách gửi một gói IP lớn hơn số byte được cho phép bởi giao thức IP.

Chức năng của ICMP

1. Điều khiển dòng dữ liệu

Khi trạm nguồn gửi dữ liệu tới quá nhanh, trạm đích không kịp xử lý, trạm đích – hay một thiết bị dẫn đường gửi trả trạm nguồn một thông báo để trạm nguồn tạm ngừng việc truyền thông tin.

2. Thông báo lỗi

- Khi không tìm thấy trạm đích, một thông báo lỗi Destination Unreachable được Router gửi trả lại trạm nguồn.

- Nếu số hiệu cổng không phù hợp, trạm đích gửi thông báo lỗi lại cho trạm nguồn.

3. Kiểm tra trạm làm việc

Khi một máy tính muốn kiểm tra một máy khác có tồn tại và đang hoạt động hay không, nó gửi một thông báo Echo Request. Khi trạm đích nhận được thông báo đó, nó gửi lại một Echo Reply. Lệnh ping sử dụng các thông báo này. Ping là một lệnh phổ biến và thường được sử dụng để kiểm tra kết nối .

Giao thức ICMP là gì? Từ lý thuyết đến ứng dụng

Bạn có thể thực hiện lệnh Ping đến một địa chỉ IP hay tên miền cụ thể nào đó như sau :

Vào Start -> Run -> Gõ lệnh cmd ( với Window xp, 2K ), lệnh command ( với Window 9x ) -> Xuất hiện cửa sổ MS-DOS -> sau đó bạn gõ lệnh C:\>Ping 10.0.0.2.

Nếu màn hình xuất hiện như dưới :

Pinging 10.0.0.2 with 32 bytes of data:

Reply from 10.0.0.2: bytes=32 time<1ms TTL=64

Reply from 10.0.0.2: bytes=32 time<1ms TTL=64

Reply from 10.0.0.2: bytes=32 time<1ms TTL=64

Reply from 10.0.0.2:

Như vậy là lệnh Ping thành công và kết nối từ PC của tôi đến 10.0.0.2 là OK

Khi Ping tên miền bạn làm tương tự, ví dụ :

C:\>ping ciscobachkhoa.com

Pinging ciscobachkhoa.com [67.19.193.26] with 32 bytes of data:

Reply from 67.19.193.26: bytes=32 time=372ms TTL=45

Reply from 67.19.193.26: bytes=32 time=391ms TTL=45

Reply from 67.19.193.26: bytes=32 time=421ms TTL=45

Reply from 67.19.193.26: bytes=32 time=407ms TTL=46

Ping statistics for 67.19.193.26:

Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

Approximate round trip times in mili-seconds:

Minimum = 372ms, Maximum = 421ms, Average = 397 ms

Như vậy là kết nối thành công .

Với một lệnh Ping không thành công :

C:\>Ping 10.0.0.3

Pinging 10.0.0.4 with 32 bytes of data:

Request timed out.

Request timed out.

Request timed out.

Request timed out.

Ping statistics for 10.0.0.4:

Packets: Sent = 4, Received = 0, Lost = 4 (100% loss)

Với kết quả này, tức kết nối không thành công.

Các bạn có thể thử Ping default Gateway, DNS server của các bạn để kiểm tra mỗi khi không kết nối được ra mạng ngoài.

Các loại ICMP message thường thấy

1. ICMP echo messages

Có hai loại là echo request và echo reply message tương ứng với các trường:

Type = 0 -> echo request, code = 0

Type = 8 -> echo reply, code = 0

Ngoài ra còn có 2 trường (size 16 bit/field) là ID và sequence Number dùng để nhận biết giữ các cặp reply/request.

2. ICMP Destination Unreachable message

Nếu bị Destination Unreachable, thiết bị trung gian sẽ gửi một Destination Unreachable message về sender.

Destination Unreachable có nhiều loại ứng với các nguyên nhân khác nhau và chúng sẽ có các cặp giá trị code khác nhau:

Ví dụ:

Type = 3, code = 0 -> Network Unreachable

Type = 3, code = 1 -> Host Unreachable

Type = 3, code = 2 -> Protocol Unreachable

Type = 3, code = 3 -> Port Unreachable

3. ICMP Parameter Problem message

Thông điệp này xuất hiện khi có một vài error trong header của datagram (ở một vài octet) và không thể chuyển nó đi tiếp được. Lúc này thiết bị trung gian gửi một ICMP Parameter Problem message cho sender với các trường sau.

Type = 12

Code = 0 - 2

Thêm một trường Pointer (8 bit) để chỉ vị trí của octet lỗi.

4. ICMP Redirect/Change Request message

Là loại Control Messages, được gửi đi bởi một default gateway, báo cho host nhận biết là có best path:

- Tại Interface mà packet đã đi vào sau đó lại đựơc routed đi ra.

- Tại subnet/network của địa chỉ IP nguồn cùng subnet/network với nexthop.

Khi host được để mặc định là gửi ICMP Redirect message. Có thể bỏ default này bằng command: "no ip redirects".

Các loại Redirect Require Message ứng với các type và code sau:

Type = 5 code = 0 -> Redirect datagram for the network

Type = 5 code = 1 -> Redirect datagram for the host

Type = 5 code = 2 -> Redirect datagram for the type of service and the network

Type = 5 code = 3 -> Redirect datagram for the type of service and the host

5. ICMP Timestamp Request message

Đồng bộ thời gian cho các ứng dụng giữa nơi chuyền và nơi nhận:

Type = 13, code = 0 -> ICMP Timestamp Request message

Type = 14, code = 0 -> ICMP Timestamp reply message

Ngoài ra còn có 2 trường có size là 16 bit là ID và sequence Number dùng để nhận biết giữ các cặp reply/request.

6. ICMP Information Request and Reply message

Để xác định số network được sử dụng.

Type = 15, code = 0 -> ICMP Information Request message

Type = 16, code = 0 -> ICMP Information reply message

Ngoài ra còn có 2 trường có size là 16 bit là ID và sequence Number dùng để nhận biết giữ các cặp reply/request.

7. ICMP Address Mask Request message

Host tìm được subnetmask của mình khi không được cấu hình bằng tay.

Type = 17, code = 0 -> ICMP Address Mask Request message

Type = 118, code = 0 -> ICMP Address Mask reply message

Ngoài ra còn có 2 trường có size là 16 bit là ID và sequence Number dùng để nhận biết giữ các cặp reply/request. Và thêm 1 trường 32 bit dành cho Address Mask (với request message thì nó được cho về not use với reply message thì nó là Address Mask correct của host).

8. ICMP Router Discover message

Type = 9 Code =0

9. ICMP Router Solicitation message

Được áp dụng khi sender mất default gateway.

Type = 10 Code = 0

10. ICMP Source Quench message

Được sử dụng để báo cho sender biết là có congestion và hỏi sender xem có giảm tốc độ gửi packet đi không, thuộc loại Flow-Control Message.

Type = 4 Code = 0

Các thông số cần phải có trong ICMP

Các thông số ICMP tồn tại trong packet header và chúng giúp xác định các lỗi trong IP packet mà chúng mắc phải. Các thông số giống như một nhãn vận chuyển dán trên một gói hàng. Chúng cung cấp thông tin nhận dạng về gói tin và dữ liệu mà nó chứa. Bằng cách đó, các giao thức và công cụ mạng nhận thông điệp ICMP biết cách xử lý gói tin.

32 bit đầu tiên của mỗi ICMP packet header chứa 3 trường thông tin hoặc các tham số. Ba tham số đó là:

1. Type. 8 bit đầu tiên là các loại message. Một số loại message phổ biến bao gồm:

  • Loại 0 - Echo reply
  • Loại 3 - Destination unreachable (Không thể truy cập đích đến)
  • Loại 8 - Echo
  • Loại 5 - Redirect (Chuyển hướng)

Type cung cấp giải thích ngắn gọn về mục đích của message để thiết bị mạng nhận biết tại sao nó nhận được message và cách xử lý. Ví dụ: Type 8 Echo là một truy vấn mà máy chủ gửi để xem liệu hệ thống đích tiềm năng có khả dụng hay không. Khi nhận được một message Echo, thiết bị nhận có thể gửi lại một Echo Reply (Loại 0), cho biết nó khả dụng.

2. Code. 8 bit tiếp theo đại diện cho message type code, cung cấp thêm thông tin về loại lỗi.

3. Checksum. 16 bit cuối cùng cung cấp một kiểm tra tính toàn vẹn của message. Checksum hiển thị số lượng bit trong toàn bộ message và cho phép công cụ ICMP kiểm tra tính nhất quán với ICMP message header để đảm bảo toàn bộ phạm vi dữ liệu đã được phân phối.

Phần tiếp theo của ICMP header là con trỏ (pointer). Nó bao gồm 32 bit dữ liệu chỉ ra vấn đề trong IP message ban đầu. Cụ thể, con trỏ xác định vị trí byte trong IP message ban đầu gây ra việc tạo ra problem message. Thiết bị nhận sẽ xem xét phần này của header để xác định vấn đề.

Phần cuối cùng của gói ICMP là gói dữ liệu gốc. Nó bao gồm tối đa 576 byte trong IPv4 và 1.280 byte trong IPv6 và bao gồm một bản sao của IP message gốc chứa lỗi.

Nguồn: Bizfly Cloud chia sẻ

>>> Có thể bạn quan tâm: Giao thức ICMP, các loại ICMP messenger thường thấy, các lệnh cơ bản

SHARE