Cổng vào tri thức => Tin học => Topic started by: saos@ngmo on 04/09/06, 23:48 Return to Full Version

Title: Tìm hiểu về "Ping"
Post by: saos@ngmo on 04/09/06, 23:48
Tìm hiểu về "Ping"
Ping là gì?
Ping là một chương trình cho phép bạn xác định một host còn hoạt động(alive) hay không?
Một ví dụ về Ping!
C:\> ping www.aqnet.com

Pinging www.aqnet.com [209.54.218.119] with 32 bytes of data:

Reply from 209.54.218.119: bytes=32 time<10ms TTL=128
Reply from 209.54.218.119: bytes=32 time<10ms TTL=128
Reply from 209.54.218.119: bytes=32 time<10ms TTL=128
Reply from 209.54.218.119: bytes=32 time<10ms TTL=128

Ping statistics for 209.54.218.119:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms

C:\>
www.aqnet.com(209.54.218.119) -> alive!
Nếu bạn nhận được thông báo "Host Alive", điều này có nghĩa là host không còn hoạt động!
Ping hoạt động ra sao?
Ping gởi một ICMP message "echo request" đến host. Nếu nhận được một ICMP message "echo reply" của host, ping sẽ thông báo host còn hoạt động. Nếu không nhận được ICMP message "echo reply" của host, ping sẽ thông báo host này đã ngừng hoạt động!
Format của ICMP "echo request" và "echo reply" có dạng như sau:
0 7 8 15 16 31
+-----------------+-----------------+-----------------+
| Type (0 or 8) | Code (0) | 16-bit Checksum |
+-----------------+-----------------+-----------------+
| Indentifier | sequence number |
+-----------------+-----------------+-----------------+
| |
| (Optional Data) |
| |
+-----------------------------------------------------+
Bất cứ lúc nào host nhận được một ICMP request message, nó sẽ phản hồi trở lại với một identifier và số sequence number. Trong hầu hết các hệ thống Unix, trường indentifier được đặt số Process ID của tiến trình gởi gói packet đi. Vì vậy, nếu bạn ping cùng một lúc nhiều lần đến một hệ thống Unix, giá trị indentifier mà bạn nhận được trong mỗi lần ping sẽ khác nhau!
Trường sequence number có giá trị mặc định là 0. Giá trị này sẽ được tăng một sau mỗi lần hệ thống phản hồi ICMP request message của chương trình ping. Ping sẽ in ra giá trị sequence number của mỗi lần nhận packet, điều này cho chúng ta biết được các gói packet có gặp lỗi hay không?!
(Để biết chi tiết về các trường khác, bạn hãy tham khảo các bài viết về giao thức TCP-IP!)
Bây giờ chúng ta hãy xem qua ví dụ cuối cùng:
# ping hackingtruths.box.sk

Pinging hackingtruths.box.sk [194.x.yyy.227] with 32 bytes of data:
32 bytes from 194.x.yyy.227: icmp_seq=0 ttl=225 time=0 ms
32 bytes from 194.x.yyy.227: icmp_seq=1 ttl=225 time=0 ms
32 bytes from 194.x.yyy.227: icmp_seq=2 ttl=225 time=0 ms
32 bytes from 194.x.yyy.227: icmp_seq=3 ttl=225 time=0 ms
32 bytes from 194.x.yyy.227: icmp_seq=4 ttl=225 time=0 ms
32 bytes from 194.x.yyy.227: icmp_seq=5 ttl=225 time=0 ms
32 bytes from 194.x.yyy.227: icmp_seq=6 ttl=225 time=0 ms
...
Ở dòng đầu tiên, ping phân tích hostname ra địa chỉ ip. Bạn có nhận thấy giá trị icmp_seq tăng dần từ 0 sau mỗi lần ping nhận được ICMP message "echo reply" từ host không? Như vậy là các gói packet mà chúng ta nhận điều không gặp lỗi gì hết! Ping còn cho chúng ta biết thời gian TTL(Time To Live) nữa! Ping lưu thời gian mỗi lần gởi ICMP message "echo request". Khi nhận được ICMP message "echo reply" từ host, Ping sẽ lấy thời gian hiện tại trừ đi giá trị này sẽ ra TTL!
Okay, bây giờ thì bạn biết Ping làm việc như thế nào rồi đó! Hẹn gặp lại bạn trong các bài viết sau! Bye, bye...!