Phần này, mình chỉ trình bày cách hiểu đơn giản về ICMP, Ping và 1 chút chuyên sâu nhằm phục vụ cho nhu cầu test hệ thống mặt network, chuẩn đoán lỗi trong các bài Lab mà các bạn gặp phải. Bài viết chủ đề số 7 trong Series “Tự học CCNA” của “Cuongquach.com”. Để hiểu chuyên sâu thì các bạn nên đọc trong cuốn TCP/IP Vol 1. Vậy đã nói đến ping thì phải nói đến ICMP, vậy ICMP là cái gì? Ping là gì?
Contents
- 1. ICMP là gì ?
- 2. Định dạng của gói tin ICMP
- 3. Các loại ICMP messenger thường thấy
- 3.1. ICMP echo messenger
- 3.2. ICMP Destination Unreachable messenger
- 3.3. ICMP Parameter Problem messenger
- 3.4. ICMP Redirect/ Change Request messenger
- 3.5. ICMP Timestamp request messenger
- 3.6. ICMP Information Request and Reply Messenger
- 3.7. ICMP Address Mask Request messenger
- 3.8. ICMP Router Discovery messenger
- 3.9. ICMP Source Quench messenger
- 4. Ứng dụng Ping trong kiểm tra network
1. ICMP là 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 đó.
2. Định dạng của gói tin ICMP
Gói tin ICMP được mang trong phần dữ liệu của gói tin IP. Mặc dù mỗi gói 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 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
3. Các loại ICMP messenger thường thấy
Bạn hoàn toàn có thể sử dụng các chương trình bắt gói tin để kiểm tra và nắm bắt được cơ chế mô hình hoạt động của gói tin ICMP.
3.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.
3.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 |
1 | Network unreachable error. |
2 | Host unreachable error. |
3 | Protocol unreachable error. Sent when the designated transport protocol is not supported. |
4 | Port unreachable error. Sent when the designated transport protocol is unable to demultiplex the datagram but has no protocol mechanism to inform the sender. |
5 | The datagram is too big. Packet fragmentation is required but the DF bit in the IP header is set. |
6 | Source route failed error. |
7 | Destination network unknown error. |
8 | Destination host unknown error. |
9 | Source host isolated error. Obsolete. |
10 | The destination network is administratively prohibited. |
11 | The destination host is administratively prohibited. |
12 | The network is unreachable for Type Of Service. |
13 | The host is unreachable for Type Of Service. |
14 | Communication Administratively Prohibited. This is generated if a router cannot forward a packet due to administrative filtering. |
15 | Host 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. |
16 | Precedence 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.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.
3.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 Redirect 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.
3.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.
3.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.
3.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).
3.8. ICMP Router Discovery messenger
Type=9, code=0
ICMP Router Solicitation messenger Được dùng khi sender mất default gateway
Type=10, code=0
3.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
4. Ứng dụng Ping trong kiểm tra network
ICMP có rất nhiều ứng dụng, trong đó ứng dụng Ping được sử dụng nhiều nhất.
Để kiểm tra Host A với địa chỉ “IP A” có đi đến được Host B với “IP B” hay không thì trên Host A thực hiện Ping đến địa chỉ IP B. Ping sử dụng 2 thông diệp “ICMP echo request” và “ICMP echo reply” để thực hiện quy trình ping.
Khi Host A ping B thì lập tức A gửi một loạt các gói tin (thông thường PC Windows gửi 4 gói) ICMP echo request. Host B nhận đươc bao nhiêu ICMP echo request thì sẽ trả về bấy nhiêu gói ICMP echo reply.
Các thông số:
- bytes: kích thước của gói tin.
- time: thời gian hồi đáp.
- TTL (time -to-live) là một trường dài 8 bit. Giá trị tối đa là 255, cứ mỗi khi đi qua con Router thì giá trị TTL giảm đi 1 đơn vị, khi Router nhận gói tin có TTL = 0 thì nó sẽ tự “drop” gói tin đó. Ý nghĩa của TTL dùng để chống lại sự lặp vòng (routing loop)
Các kết quả có thể trả về sau khi Ping:
4.1 Ping thành công
4.2 Ping không thành công :
- Request time out: PC gửi gói tin ICMP request đi, sau khoảng thời gian “time out” mà không thấy gói tin trở về.
- Nguyên nhân:
– Do đường truyền vật lý (kiểm tra lại kết nối, cáp).
– IP không tồn tại, máy PC đích bị tắt
– Máy đích bị chặn bởi Firewall, firewall cấm ping (tắt firewall, hoặc cấu hình lại).
– Gửi thành công nhưng firewall bên máy đích chặn ping => không reply được.
- Destination host unreachable:
TH 1: 2 host khác lớp mạng
Gói tin đi đến default gateway nhưng default gateway lại không biết đường đi tới đích (không có trong bảng định tuyến). Nó gửi lai gói “reply from < IP default gateway > destination host unreachable” với ý nghĩa: gói tin đến Router là “cụt đường”.
TH2: 2 host cùng lớp mạng
Đương nhiên khi 2 host cùng lớp mạng thì không có sự góp mặt của Router, Host A gửi nếu không thể đến được thì trả về gói “reply from < IP source> destination host unreachable“.
Nguyên nhân:
– Router không biết đường đi.
– IP không tồn tại, máy PC đích bị tắt.
– Do đường truyền vật lý.
Lệnh Ping giúp cho chúng ta chuẩn đoán nhanh chóng và hiệu quả các sự cố mạng, ping là ứng dụng luôn được sử dụng đầu tiên khi có lỗi xảy ra. Như vậy mình xin kết thúc bài viết ở đây và bạn đã biết được Ping là gì ? ICMP là cái gì, trông như thế nào? rồi nhé.