Feb 18 / Supakorn Visutthicho

มาทำความเข้าใจค่า Time To Live (TTL) กัน

Time-To-Live หรือ TTL เป็นค่าที่อยู่ใน IP Header มีค่าสูงสุดเท่ากับ 255 ถูกกำหนดขึ้นเพื่อใช้ป้องกันกรณีที่มี Loop ในระดับ Layer 3 เมื่อถึงค่าที่กำหนด Packet จะถูก drop ทิ้งไป

ในการทำงาน โดยเมื่อ Packet ถูกส่งผ่านไปแต่ละ Hop ค่า TTL จะลดลงไป 1 (TTL-1 เมื่อผ่าน Layer3) และเมื่อ TTL มีค่าเท่ากับศูนย์ Packet นั้นก็จะถูก Drop ไป และอุปกรณ์ตัวที่ Drop Packet ก็จะทำการส่ง ICMP Time Exceeded message กลับไปยังต้นทาง

ค่า TTL ก็จะมีค่าเริ่มต้นแต่ละ Operating System (OS) แตกต่างกันไป ตัวอย่างเช่น
• Linux = 64
• Windows 10/11 = 128
• Cisco Devices = 255

ซึ่งจุดที่น่าสนใจเพิ่มเติม ลองดูรูปตัวอย่างนี้
ถ้าผมเอาเครื่องต้นทางส่ง IP Packet ไปยังปลายทาง จะเห็นว่า ค่า TTL ที่แสดงจากฝั่งต้นทาง ไม่ใช่ค่า TTL ของต้นทางที่ส่งออกไปแล้ววนกลับมา แต่คือค่า TTL ของอุปกรณ์ปลายทางที่ตอบกลับมา ซึ่งจุดนี้หลายคนยังเข้าใจผิด คิดว่านับตั้งแต่ค่า TTL จากเครื่องต้นทาง

ดังนั้นค่า TTL ที่แสดงให้เห็นจากฝั่งต้นทางบนเครื่อง Windows ไม่ว่าค่า TTL ต้นทางจะเป็นเท่าไหร่ หรือ จะมีการปรับค่า TTL ฝั่งเครื่องต้นทางเป็นเท่าไหร่ก็ตาม จะมีผลกับจำนวน Hop ของ IP Packet ที่ส่งออกไปเท่านั้น แต่ขากลับจะขึ้นอยู่กับ TTL ของเครื่องปลายทางนั่นเองครับ

ผมจะลองปรับค่า TTL ต้นทางเป็น 100 โดยการ Ping แล้วใช้ option -i 100
ถ้าดูจาก Wireshark จะเห็นว่าค่า TTL ขาส่งออกไปจะถูกปรับเป็น TTL = 100 แล้วลดลงจนถึง R3 เหลือ TTL = 98 แต่ฝั่งขากลับก็ใช้ค่า TTL = 255 เหมือนเดิม ดังนั้นเห็นไหมครับว่า ค่า TTL ที่แสดงบนฝั่งเครื่อง Windows ต้นทาง ก็ยังแสดงดเป็น 253 เหมือนเดิม

อีกกรณีนึงที่น่าสนใจ ลองดูรูปตัวอย่างนี้
ถ้าผมเอาเครื่องต้นทางส่ง IP Packet ไปที่ Interface Gi1 ของ R3 คำถามก็คือค่า TTL ที่แสดงบนเครื่อง Windows ต้นทางจะเป็นเท่าไหร่ 252 หรือ 253 กันแน่ ถ้าอ่านมาถึงตรงนี้แล้ว ผมเชื่อว่าหลายท่านน่าจะพอตอบได้แล้วครับว่า TTL จะได้เท่ากับ 253 แน่นอน เพราะจากรูปที่ทดสอบให้ดูก็เห็นว่าเครื่อง Windows ต้นทางแสดงค่า TTL เป็น 253 

จากรูปตัวอย่างข้างบน จะเห็นว่า คนที่ตอบ (Response) IP Packet ก็คือ R3 นั่นก็คือ ตอนมันตอบกลับมันก็ใส่ค่า TTL = 255 เข้าไปเป็นค่าเริ่มต้น แล้วส่งกลับโดยลบ TTL ลง 1 ตามจำนวน Hop ที่มันส่งผ่านไป จึงได้เป็นค่า TTL = 253 ครับ

แล้วทำไมถึงเป็น 253 ไม่เป็น 252 ล่ะ ก็มัน Ping ข้ามไปที่ขาอีกฝั่งของ Router นะ ?? แล้วไหนบอกว่าค่า TTL จะลดลง 1 เมื่อมีการ Forward IP Packet ข้าม Router หรือ อุปกรณ์ที่ทำหน้าที่ในระดับ Layer 3 ไง 

มาลองดูรูปนี้กัน
จากรูปจะเห็นว่า ในกรณีนี้ IP Packet ไม่เคย ถูกส่ง (forward) ข้ามออกไปยัง Interface Gi1 บน R3 เลยครับ เพราะมันเป็น Connected Interface ขาตัวเอง ถ้าทุกท่านลองเอาWireshark จับดูจะไม่มี Traffic วิ่งออกจากขานั้นเลย และคนที่ตอบกลับก็คือตัวมันเอง (ในที่นี้ก็คือ R3) ดังนั้นไม่ว่าจะเป็นขาไหนก็ตามที่เป็น Connected Interface ก็ไม่นับว่าเป็นการ Forward IP Packet ข้ามตัวมันออกไป เพราะมันยังไม่ข้ามนั่นเองครับ

ดังนั้น ปกติแล้ว Router หรือ อุปกรณ์ที่ทำหน้าที่ Forward IP Packet ในระดับ Layer 3 ได้ จะมีการลด TLL หรือไม่ลด TTL อย่างไร สรุปได้สั้นๆ ดังนี้
  • จะลด TTL เมื่อ forward packet ออกไปจากตัวมัน
  • จะไม่ลด TTL สำหรับ Connected Route ขาตัวเอง (เพราะไม่ได้ forward ออกไปจากตัวมัน)
  • ค่า TTL ที่แสดงจากฝั่งต้นทาง ไม่ใช่ค่า TTL ของต้นทางที่ส่งออกไปแล้ววนกลับมา แต่คือค่า TTL ของอุปกรณ์ปลายทางที่ตอบกลับมา


หวังว่าบทความนี้จะทำให้ทุกท่านเข้าใจมากขึ้นนะครับ แล้วพบกันในบทความต่อๆไปครับ
Supakorn visutthicho (nut)
3XCCIE #43646 I CCDevP | HCSP IP-Network | VSP/VTSP - SDWAN | CompTIA Sec+/Network | Fortigate NSE 4 | PCNSE
  • Now I’m a Technical Solution Specialist with 15+ years experience in providing professional network consulting, implementation service to many leader companies in Thailand. 
  • 12 Years experience in technical trainer to new employee and clients. Freelance trainer in Cisco technology and certification
Created with