SNAG 0235

คำสั่ง Ping บอกอะไรเราได้บ้าง

สวัสดีครับ… อาจารย์ศุภเดชครับ

คำสั่ง Ping เป็น คำสั่ง Network แบบพื้นฐานที่ Network Engineer ใช้ในการตรวจสอบระบบกันทุกคน วันนี้เรามาดุกันว่า ลึกๆแล้ว Ping บอกอะไร และแปลความหมายว่ายังไง แล้วเราสามารถใช้ Ping แบบท่ายากพลิกแพลงอะไรได้บ้าง

ปล. ในบทความนี้ขอใช้ Ping ของ Windows ซึ่งเป็นระบบปฏิบัติการที่มีคนใช้มากที่สุดละกันนะครับ เพราะ Parameter ใน Ping ของ Windows / Mac / Linux จะมีบางส่วนที่ไม่เหมือนกัน

คำสั่ง Ping เป็นคำสั่งที่ให้คอมพิวเตอร์สร้าง ICMP Packet ที่เป็น Echo Request ขนาด 32 bytes แล้วส่งไปยังปลายทาง หากทุกอย่างทำงานอย่างถูกต้อง เครื่อง Host ปลายทางจะตอบกลับมาด้วย ICMP Echo Reply และ เราจะได้เห็นคำว่า Reply From Host ที่เราสั่ง Ping ไปพร้อมข้อมูลอีกหลายอย่างด้วยกัน

ข้อมูลอย่างแรกที่เราจะได้รับรู้ก็คือ “Host ปลายทางไปถึงได้ใช่ไหม”

หลักๆแล้ว ถ้าหากมี Reply กลับมาจาก Host ปลายทางที่เรา Ping ไป เราสามารถสรุปได้ว่า Host นั้น Online อยู่ใน Network แต่การที่ Ping ไปแล้วไม่มีการตอบกลับมา ก็ไม่ได้แปลว่า Host นั้น Offline นะครับ เพราะอาจจะมี Firewall กั้นเอาไว้ว่าห้ามไป Ping ใส่ Host ที่อยู่หลัง Firewall นี้ก็ได้ เพราะเหตุผลทางด้าน Security ครับ ก็อย่างที่บอกแหละ Ping มันให้ข้อมูลใน Network เยอะระดับนึงเลยนะครับ

ข้อมูลชิ้นถัดมาก็คือ ระยะทางจากเราไปจนถึง Host ปลายทาง ใช้เวลาเท่าไหร่

Ping จะส่งข้อมูลไปหา Host ปลายทาง และเมื่อ Host ปลายทางตอบกลับมาหาเรา จะมีการสรุปเวลาที่เรียกว่าค่า Round Trip Time (RTT) ค่านี้มีหน่วยเป็น Milliseconds (ms) ซึ่งหลายๆคน อาจจะดูแค่ว่า Host ปลายทาง Reply กลับมาหรือเปล่าแค่นั้น แต่จริงๆแล้วค่า RTT บอกอะไรหลายอย่างมากๆนะครับ

  • เวลา Ping ใน LAN เดียวกัน ค่า RTT ไม่ควรเกิน 1ms ถ้าเกินแปลว่า Network Switch หรือ Device นั้นๆ น่าจะมี Delay ในฮาร์ดแวร์ตรงไหนซักจุด
  • Ping ในประเทศไม่ควรเกิน 50ms แต่ก็พูดยากครับ ระบบ Infrastructure ของแต่ละประเทศไม่เท่ากัน ตัวเลขนี้เอาไว้อ้างอิงกลมๆ เฉยๆ
  • Ping ข้ามโลกไปยังสหรัฐอเมริกา ยังไงก็เกิน 200ms เพราะตามกฏของแสง ระยะทางจากประเทศไทยไปอเมริกา ต่อให้เดินทางด้วยแสงก็เกิน 200ms นะครับ

พูดง่ายๆก็คือ ถ้าเรามีประสบการณ์ในการ Ping มากพอ เราจะสังเกตเห็นค่า RTT โดยเฉลี่ยบน Network ที่เรา Ping ไป ทั้งใน LAN และไปยังนอก LAN ของเรา ซึ่งถ้าเลขมันน่าผิดสังเกต ก็ทำให้เราเอะใจแล้วก็ไปไล่ตรวจสอบได้เช่นกันครับ

ข้อมูล Packet Loss บอกได้ถึงคุณภาพของ Network

เวลาเรา Ping ไปบน Windows โดยพื้นฐานจะส่ง Ping ไปยัง Host ปลายทางจำนวน 4 Packet ด้วยกัน ซึ่งเราสามารถใช้ parameter “ping -t ตามด้วย host ปลายทาง” เพื่อสั่งให้ ping ค้างไว้เรื่อยๆจนกว่าจะกดยกเลิกด้วย Ctrl+C (ก็เป็นท่าที่หลายๆคน ใช้กันบ่อยเวลาจะ Ping ทดสอบอะไรนานๆ หรือ Ping ทิ้งเอาไว้)

ซึ่งเวลาที่เรา Ping Host ใดนานๆ เนี่ย ส่วนใหญ่เราทำเพื่อทดสอบคุณภาพของ Network ด้วย ถ้าเรา Ping ไปซัก 100 ครั้ง แล้ว มี Packet Loss มากๆ ก็แปลว่า คุณภาพ Network ซักจุดนึงระหว่างเรา ไปจนถึง Host ปลายทาง มีคุณภาพไม่ดี เช่น Bandwidth เต็ม , มีคลื่นรบกวนเยอะ โดยส่วนใหญ่ ถ้า Ping ผ่าน WIFI ที่คุณภาพไม่ดี ก็จะเจออาการนี้บ่อยเหมือนกัน ซึ่งการตรวจสอบว่า ตรงไหนใน Network กันแน่ที่คุณภาพไม่ดีต้องไปใช้คำสั่ง Traceroute ตรวจสอบอีกทีครับ เดี๋ยวว่ากันทีหลัง

และเราสามารถ ปรับแต่ง Parameter ของ Ping เพื่อให้ได้ข้อมูลต่างๆ เพิ่มมาอีกด้วย

Parameter Ping ที่ผมใช้บ่อยๆ เพื่อตรวจสอบ Network ก็มีดังต่อไปนี้ครับ

ping -a ตามด้วย IP เช่น

SNAG 0234

คำสั่งนี้จะช่วยเอา IP ไป resolve เป็น DNS Name กลับมาได้ ถ้ามีการทำ reverse dns เอาไว้สำหรับ IP นี้ครับ สมัยก่อนเวลาได้ IP มา อยากรู้ว่าเป็นเว็บไหน ก็ใช้คำสั่งนี้ไปหา แต่เดี๋ยวนี้ใช้ไม่ค่อยได้แล้ว เพราะ 1 IP แทนกลายเว็บมาก แถม เดี๋ยวนี้ไม่ค่อยทำ reverse dns กันด้วย

ping -n ตามด้วยจำนวน packet แล้วก็ Host  

SNAG 0238

ถ้าอยากจะทดสอบคุณภาพของ Network แต่ไม่มีเครื่องมือ ใช้ Ping ง่ายๆนี่แหละครับ ช่วยได้ เช่น Ping ไปซัก 100 Packet .. ถ้า Network คุณภาพดี ควรตอบกลับครบทั้ง 100 Packet และ ค่า RTT ไม่ควรเหวี่ยงขึ้นลง ควรจะเฉลี่ยๆ เท่ากันทั้งค่า Mix / Max นะครับ

ping -l ตามด้วย ขนาด

SNAG 0240

โดยพื้นฐานแล้ว ping จะส่งข้อมูลไปหา Host ปลายทางด้วยขนาด 32 bytes เป็นค่า Default นะครับ ค่านี้เล็กมาก ส่งง่าย เร็ว แต่ถ้าคุณต้องการทดสอบประสิทธิภาพของ Network คุณอาจจะใช้ parameter -l แล้วตามด้วยขนาด เช่น 65500 เพื่อส่ง Ping ที่ใหญ่ระดับ 60k  ไปยัง Network ปลายทาง

ส่วนใหญ่แล้ว Network จะมีการ Block ไม่ให้ Ping ขนาดใหญ่ๆ เพื่อป้องกันการ Flood Network ด้วย Packet Size ที่ใหญ่กว่าปกติ แต่ถ้าเป็น Network ที่เราดูแลเองแล้วอยากทดสอบ การใช้ Ping ด้วย Packet ขนาดใหญ่ก็เอามาทดสอบ Performance ได้ครับ

ขนาดสูงสุดที่เราจะส่งไปได้คือ 65500 bytes ครับ ก็อาจจะผสม -n กับ -l เข้าด้วยกันเป็น

ping -n 100 -l 65500 ไปยัง Host ปลายทาง เพื่อทดสอบให้นานขึ้น และ เถื่อนขึ้นก็เป็นได้ 

ปล. ใครเป็น Network Engineer อย่าลืม Block Firewall ICMP ที่ Size เกิน Limit ปกติด้วยนะครับ

และปิดท้ายด้วย Error Message ของ Ping บอกอะไรบ้าง

Request Timed Out : ค่า Echo Reply ไม่ตอบกลับมาในระยะเวลาที่กำหนด อันนี้จะเป็น Error Message ที่เจอกันบ่อยสุด ซึ่งส่วนใหญ่ก็จะแปลว่า Host ปลายทางไม่ได้ Online อยู่ในระบบ หรือไม่ก็คือโดน Firewall Block ไว้ก็เป็นได้

TTL Expired in Transit : เวลาที่ Packet วิ่งออกไปใน Network จะมีการกำหนดค่า TTL เพื่อระบุอายุของ Packet นั้นๆว่าให้มันวิ่งไปได้กี่ Hop แล้วให้ Router ทำลายข้อมูลนั้นทิ้ง เพื่อป้องกัน Network Loop  แต่ถ้ามี Error นี้ตอบกลับมา ก็แปลว่า Host ที่คุณจะ Ping ไป มันวิ่งไปไกลเกินค่า TTL พื้นฐานจะไปถึงได้นั่นเอง

Destination Host Unreachable : ระหว่างที่ Packet วิ่งไปยัง Host ปลายทาง อาจจะมีเส้นทางนึงที่ Route พัง ไปต่อไม่ได้ อาจจะเพราะ Config ผิดพลาด ก็เลยไปต่อไม่ได้แล้วนั่นแหละครับ

Ping เป็นคำสั่งพื้นฐาน ยิ่งพลิกแพลงใช้บ่อยๆ ก็จะยิ่งประเมินสถานการณ์ใน Network ได้นะครับ