Tìm hiểu về ICMP lý thuyết và ứng dụng

Đã nói đến ping thì phải nói đến ICMP, vậy ICMP là cái gì?

- IP không có cơ chế để biết được data nó gửi đã đến được đích chưa, nên mới sinh ra cái gọi là Internet Control Messenger Protocol(ICMP). ICMP sinh ra không phải để giải quyết cái thuộc tính không đáng tin cậy(unreliability) vốn có của IP mà ICMP messenger có nhiệm vụ đơn giản là thông báo cho sender biết việc gửi data đi có vấn đề.

- VD: host A gửi 1 datagram tới host Z, nhưng do một số nguyên nhân mà gói thông tin gửi tới không đúng đích.

  • Các thiết bị trung gian như routing protocol không đúng, chúng được gọi là unreachable network.

  • Cấu hình TCP/IP chưa đúng về địa chỉ, subnetmask hay default gateway, chúng được gọi làunreachable host.

  • Host đích không hỗ trợ upper-layer protocol, được gọi là unreachable protocol.

  • Host đích không hỗ trợ loại dịch vụ cần truy cập, gọi là unreachable port/socket.

- Khi đó thiết bị trung gian(router) nơi xảy ra vấn đề sẽ gửi lại một gói tin trong đó có ICMP messenger chỉ dành cho sender để thông báo về nguyên nhân. Các thiết bị trung gian khác không nhận được messenger trên và hoàn toàn không biết là có vấn đề trên đường truyền.

- Đã là một messenger được truyền đi trong mạng thì nó cũng phải đi qua những lớp dưới. Và dữ liệu (nội dung chính của messenger đó) sẽ được encap cũng như các loại data khác( nghĩa là cũng phải có Frame header, IP datagram header..) sau đó nó sẽ được chuyền đi.

- Để tránh trường hợp khi truyền ICMP messenger lại xảy ra lỗi và lại sinh ra một cái error report nữa ( và làm tăng congestion( tắc nghẽn)) ICMP sẽ không có error report nữa.

- Có nhiều loại ICMP messenger khác nhau và mỗi loại mang 1 thông điệp lỗi cụ thể khác nhau. Kiểu messenger được nhận ra nhờ format dữ liệu của messenger đó.


Định dạng của bản tin ICMP như sau : 
Bản tin ICMP được mang trong phần dữ liệu của gói tin IP. Mặcdù mỗi bản tin ICMP có dạng riêng của nó, nhưng chúng đều bắt đầu với ba trường sau:

TYPE (8bit): là một số nguyên 8bit để xác định thông điệp. 
CODE (8bit):cung cấp thêm thông tin về kiểu thông điệp. 
CHECKSUM(16bit) : ICMP sử dụng thuật gii checksum như IP, nhưng ICMP checksum chỉ tính đến thông điệp ICMP.

Hơn nữa, các thông điệp ICMP thông báo lỗi luôn luôn bao gồm phần đầu và 64bit đầu tiên của packet gây nên lỗi. Lý do có thêm phần đầu này cùng với phần đầu packet là để cho phép nơi nhận xác định chính xác hơn những giao thức nào và chương trình ứng dụng có trách nhiệm đối với packet.

Trường TYPE của ICMP xác định ý nghĩa của thông điệp cũng như định dạng của nó.Các kiểu bao gồm: 
- 0: Echo reply 
- 3: Destination unreachable 
- 4: Source quench 
- 5: Redirect 
- 8: Echo 
- 9: Router advertisement 
- 10: Router solicitation 
- 11: Time exceeded 
- 12: Parameter problem 
- 13: Timestamp request 
- 14: Timestamp reply 
- 15: Information request (obsolete) 
- 16: Information reply (obsolete) 
- 17: Address mask request 
- 18: Address mask reply 
- 30: Traceroute 
- 31: Datagram conversion error 
- 32: Mobile host redirect 
- 33: Ipv6 Where-Are-You 
- 34: Ipv6 I-Am-Here 
- 35: Mobile registration request 
- 36: Mobile registration reply 
- 37: Domain name request 
- 38: Domain name reply 
- 39: SKIP 
- 40: Photuris

I. Các loại ICMP messenger thường thấy: ( có thể dùng các trình bắt gói tin để kiểm tra)

1. ICMP echo messenger

Có 2 loại là echo request và echo reply messenger 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 là 16bit/field) là ID và sequence Number dùng để nhận biết giữa các cặp reply/ request.

2. ICMP Destination Unreachable messenger

Như đã nói về Destination Unreachable. Nếu bị Destination Unreachable, thiết bị trung gian sẽ gửi về một Destination Unreachable messenger 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

Bảng code nhận dạng lỗi khác


Code



Mô tả lỗi


1Network unreachable error.
2Host unreachable error.
3Protocol unreachable error. 
Sent when the designated transport protocol is not supported.
4Port unreachable error. 
Sent when the designated transport protocol is unable to demultiplex the datagram but has no protocol mechanism to inform the sender.
5The datagram is too big. 
Packet fragmentation is required but the DF bit in the IP header is set.
6Source route failed error.
7Destination network unknown error.
8Destination host unknown error.
9Source host isolated error. 
Obsolete.
10The destination network is administratively prohibited.
11The destination host is administratively prohibited.
12The network is unreachable for Type Of Service.
13The host is unreachable for Type Of Service.
14Communication Administratively Prohibited. 
This is generated if a router cannot forward a packet due to administrative filtering.
15Host precedence violation. 
Sent by the first hop router to a host to indicate that a requested precedence is not permitted for the particular combination of source/destination host or network, upper layer protocol, and source/destination port.
16Precedence cutoff in effect. 
The network operators have imposed a minimum level of precedence required for operation, the datagram was sent with a precedence below this level.

3. ICMP Parameter Problem messenger

Vấn đề xảy ra 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. Khi đó thiết bị trung gian gửi một ICMP Parameter Problem messenger cho sender với các trường như sau:

Type=12 
Code=0-2 
Thêm một trường poiter(8 bit) để chỉ vị trí của octet lỗi.

Control messenger

không mang các lost packet hoặc error conditions. Control messenger báo cho host biết các điều kiện như đang có congestion hoặc có gateway phù hợp hơn cho host.

4. ICMP Redirect/ Change Request messenger

Là một loại control messenger, nó chỉ được gửi đi bởi một default gateway và nó báo cho host nhận biết là có best path cho mi đọc nếu có các điều kiện sau xảy ra: 
+ Tại Interface mà packet đã đi vào sau đó routed lại đi ra. 
+ Tại subnet/network của địa chỉ IP nguồn cùng subnet/network của nexthop.

+ Khi host được để mặc định là gửi ICMP Redirect messenger.

Có thể bỏ default này bằng command:” no ip redirect

Có các loại Redirec Require messenger ứng với các type và code như 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 service and the network.

+ Type=5, code=3 => Redirect datagram for the type service and the host.

5. ICMP Timestamp request messenger

Dùng để đồ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 messenger 
Type=14, code=0 =>ICMP Timestamp reply messenger

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ữa các cặp reply/request.

6. ICMP Information Request and Reply Messenger

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

Type=15, code=0 =>ICMP Information Request messenger 
Type=16, code=0 =>ICMP Information Reply messenger

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ữa các cặp reply/request.

7. ICMP Address Mask Request messenger

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

Type=17, code=0 =>ICMP Address Mask Request Messenger. 
Type=18, code=0 =>ICMP Address Mask Reply Messenger.

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ữa các cặp reply/request. Và thêm 1 trường 32 bit dành cho Address Mask( với request messenger thì nó được cho về not use còn với reply messenger thì nó là Address mask correct của host).

8. ICMP Router Discover messenger

Type=9, code=0 
ICMP Router Solicitation messenger Được dùng khi sender mất default gateway 
Type=10, code=0

9. ICMP Source Quench messenger

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

Type=4, code=0

Post a Comment

أحدث أقدم