ICMP lý thuyết và ứng dụng - bài 1
.....Có bạn băn khoăn cho rằng bạn học CCNA rồi mà vẫn chưa biết hết các thông số của lệnh ping. emThuy có vài điều muốn chao đổi về ICMP xin được đưa ra đây để mong làm "quý nhân" cho bạn đó và mong được các bạn chỉ giáo thêm. Xin nói trước là bài dài, nếu ai tuổi già sức yếu (những người dùng dialup) xin lỗi hẹn !!!
..... Vào đề:
...……. Đã nói đến ping thì phải nói đến ICMP, vậy ICMP là cái gì?
..... Kể rằng:
.....IP không có cơ chế để biết data mà nó đã gửi có đến được đích chưa, nên mới sinh ra cái gọi là Internet Control Message Protocol (ICMP). ICMP không phải để giải quyết cái thuộc tính unreliability vốn có của IP mà ICMP message có nhiệm vụ đơn giản là báo cho sender biết việc gửi data đi đã có vấn đề.
.....Ví dụ: host A gỏi một datagram tới host Z, nhưng trên đường tới đích, có thể do một trong số các nguyên nhân sau sẽ làm cho gói tin không đến được đúng đích:
..... + Các thiết bị trung gian như routing protocol chưa đú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 dích không hỗ trợ upper-layer protocol. Được gọi là unreachable protocol
..... + Host đich 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 sảy ra vấn đề sẽ gửi lại một gói tin trong đó có ICMP message 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 message trên và hoàn toàn không biết là có vấn đề trên đường truyền.
.....Đã là một message được chuyền đi trong mạng thì nó cũng phải đi qua các lớp phía dưới. Và dữ liệu (nội dung chính của message đó) 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 message lại sảy ra lỗi và lại sinh ra một cái error report nữa (và làm tăng congestion) ICMP sẽ không có error report nữa.
.....Có nhiều loại ICMP message và mỗi loại mang môt thông điệp lỗi cụ thể khác nhau. Kiểu message được nhận ra nhờ format dữ liệu của message đó.
.....Các loại ICMP message được encap với header đều có 3 trường chung:
.....+Type (8bit): Chỉ kiểu của ICMP message - tức là problem cần gửi đến sender (ví dụ: Type = 0 -> Echo request message, Type = 8 -> Echo reply message 2 cái này dùng cho ping đó)
.....+Code (8bit): Bổ sung thông tin thêm cho Type (ví dụ với Type = 0/8 code=0 -> echo message)
.....+Checksum (16bit)
Sau đó là các trường option khác. Và sau header là data.
I. Các loại ICMP message thường thấy: (có thể dùng các trình bắt gói tin để kiểm tra)
.....1. ICMP echo messages
Có hai loại là echo request và echo reply message tương ứng với 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ữ các cặp reply/request.
Chi tiêt về echo message và ping sẽ được bạn ở phần sau.
.....2. ICMP Destination Unreachable message
.....Như đã nói về Destination Unreachable. 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 nghuyê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 Unreachabl
.........
.....3. ICMP Parameter Problem message
.....Vấn đề sả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 message cho sender với các trường như sau.
.....Type = 12
.....Code = 0 - 2 (cái này tui cũng không rõ cụ thể là cho loại nào)
.....Thêm một trường Poiter (8bit) để chỉ vị trí của octet lỗi
Control Messages
Control Messages, không mang các thông báo về lost packet hoặc error conditions. Control Message báo cho host biết các điều kiện như đang có congestion hoặc là có gateway hợp lý hơn cho host.
.....4. ICMP Redirect/Change Request message
.....Là một loại Control Messages, 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 đọ nếu có các điều sau sảy ra (hi vọng phần này có bác nào bày tỏ quan điểm với tui):
.....+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ùnd 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ác loại Redirec Require Message ứng với các type và code sau:
.....Type = 5 code = 0 -> Ridirect datagram for the network
.....Type = 5 code = 1 -> Ridirect datagram for the host
.....Type = 5 code = 2 -> Ridirect datagram for the type of service and the network
.....Type = 5 code = 3 -> Ridirect datagram for the type of service and the host
.....5. ICMP Timestamp Request message
.....Dùng để đồn 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 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 mesage thì nó là Address Mask correct của host)
.....8. ICMP Router Discover message
....
Type = 9 Code =0
.....8. ICMP Router Solicitation message
Được dùng khi sender mất default gateway
Type = 10 Code = 0
.....9. ICMP Source Quench message
.....Được 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. Nó thuộc loại Flow-Control Message
Type = 4 Code = 0
…….
để biết rõ nội tình vụ việc mời theo dõi tiếp hồi sau ….
.....Có bạn băn khoăn cho rằng bạn học CCNA rồi mà vẫn chưa biết hết các thông số của lệnh ping. emThuy có vài điều muốn chao đổi về ICMP xin được đưa ra đây để mong làm "quý nhân" cho bạn đó và mong được các bạn chỉ giáo thêm. Xin nói trước là bài dài, nếu ai tuổi già sức yếu (những người dùng dialup) xin lỗi hẹn !!!
..... Vào đề:
...……. Đã nói đến ping thì phải nói đến ICMP, vậy ICMP là cái gì?
..... Kể rằng:
.....IP không có cơ chế để biết data mà nó đã gửi có đến được đích chưa, nên mới sinh ra cái gọi là Internet Control Message Protocol (ICMP). ICMP không phải để giải quyết cái thuộc tính unreliability vốn có của IP mà ICMP message có nhiệm vụ đơn giản là báo cho sender biết việc gửi data đi đã có vấn đề.
.....Ví dụ: host A gỏi một datagram tới host Z, nhưng trên đường tới đích, có thể do một trong số các nguyên nhân sau sẽ làm cho gói tin không đến được đúng đích:
..... + Các thiết bị trung gian như routing protocol chưa đú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 dích không hỗ trợ upper-layer protocol. Được gọi là unreachable protocol
..... + Host đich 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 sảy ra vấn đề sẽ gửi lại một gói tin trong đó có ICMP message 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 message trên và hoàn toàn không biết là có vấn đề trên đường truyền.
.....Đã là một message được chuyền đi trong mạng thì nó cũng phải đi qua các lớp phía dưới. Và dữ liệu (nội dung chính của message đó) 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 message lại sảy ra lỗi và lại sinh ra một cái error report nữa (và làm tăng congestion) ICMP sẽ không có error report nữa.
.....Có nhiều loại ICMP message và mỗi loại mang môt thông điệp lỗi cụ thể khác nhau. Kiểu message được nhận ra nhờ format dữ liệu của message đó.
.....Các loại ICMP message được encap với header đều có 3 trường chung:
.....+Type (8bit): Chỉ kiểu của ICMP message - tức là problem cần gửi đến sender (ví dụ: Type = 0 -> Echo request message, Type = 8 -> Echo reply message 2 cái này dùng cho ping đó)
.....+Code (8bit): Bổ sung thông tin thêm cho Type (ví dụ với Type = 0/8 code=0 -> echo message)
.....+Checksum (16bit)
Sau đó là các trường option khác. Và sau header là data.
I. Các loại ICMP message thường thấy: (có thể dùng các trình bắt gói tin để kiểm tra)
.....1. ICMP echo messages
Có hai loại là echo request và echo reply message tương ứng với 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ữ các cặp reply/request.
Chi tiêt về echo message và ping sẽ được bạn ở phần sau.
.....2. ICMP Destination Unreachable message
.....Như đã nói về Destination Unreachable. 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 nghuyê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 Unreachabl
.........
.....3. ICMP Parameter Problem message
.....Vấn đề sả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 message cho sender với các trường như sau.
.....Type = 12
.....Code = 0 - 2 (cái này tui cũng không rõ cụ thể là cho loại nào)
.....Thêm một trường Poiter (8bit) để chỉ vị trí của octet lỗi
Control Messages
Control Messages, không mang các thông báo về lost packet hoặc error conditions. Control Message báo cho host biết các điều kiện như đang có congestion hoặc là có gateway hợp lý hơn cho host.
.....4. ICMP Redirect/Change Request message
.....Là một loại Control Messages, 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 đọ nếu có các điều sau sảy ra (hi vọng phần này có bác nào bày tỏ quan điểm với tui):
.....+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ùnd 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ác loại Redirec Require Message ứng với các type và code sau:
.....Type = 5 code = 0 -> Ridirect datagram for the network
.....Type = 5 code = 1 -> Ridirect datagram for the host
.....Type = 5 code = 2 -> Ridirect datagram for the type of service and the network
.....Type = 5 code = 3 -> Ridirect datagram for the type of service and the host
.....5. ICMP Timestamp Request message
.....Dùng để đồn 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 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 mesage thì nó là Address Mask correct của host)
.....8. ICMP Router Discover message
....
Type = 9 Code =0
.....8. ICMP Router Solicitation message
Được dùng khi sender mất default gateway
Type = 10 Code = 0
.....9. ICMP Source Quench message
.....Được 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. Nó thuộc loại Flow-Control Message
Type = 4 Code = 0
…….
để biết rõ nội tình vụ việc mời theo dõi tiếp hồi sau ….
Comment