host 10.1.1.1/8 กับ host 10.2.1.1/16 ใน Broadcast Domain เดียวกัน สามารถติดต่อกันได้หรือไม่?




บทความนี้่เกิดจากผู้อ่านท่านหนึ่งที่ใช้นามปากกว่า "Brandon" ได้มาอ่านบทความ "Default Gateways และความสัมพันธ์ที่มีต่อ Subnet Mask บน Host" ตาม link ข้างล่าง

//www.bloggang.com/viewblog.php?id=likecisco&date=03-11-2014&group=3&gblog=23

และได้เกิดคำถามว่า:

======================================

ถ้า..
host ต้นทางเป็น 10.1.1.1/8
host ปลายทางเป็น 10.2.1.1/16
ล่ะครับ 

นำ subnet ต้นทางมาหา network ID ปลายทาง ก็จะกลายเป็นว่าได้ network ID เดียวกันสิครับ คือ 10.0.0.0

ซึ่งจริงๆแล้ว network ID ปลายทางต้องเป็น 10.2.0.0 รึป่าวครับ

======================================

ก่อนอ่านบทความนี้ ขอแนะนำให้ท่านๆ ทั้งหลายไปอ่านบทความ "Default Gateways และความสัมพันธ์ที่มีต่อ Subnet Mask บน Host" ตาม link ข้างบนก่อนนะครับ จะได้อ่านบทความนี้อย่างสนุกมากขึ้น

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


เอาล่ะ เริ่มกันเลย

ในกรณีที่ host 10.1.1.1/8 และ host 10.2.1.1/16 ถูกติดตั้งอยู่บน broadcast domain เดียวกัน หรืออาจจะต่อบน switch ตัวเดียวกันที่ไม่ได้แบ่งvlan หรืออยู่บน switchคนละตัว แต่อยู่ vlan เดียวกัน นั่น:

ถ้า host A เป็น hostต้นทางที่มี ip address คือ 10.1.1.1 และ subnetmask เป็น /8หรือ 255.0.0.0

host B เป็น hostปลายทางที่มี ip address เป็น 10.2.1.1 และ subnetmask เป็น /16 หรือ 255.255.0.0

หมายเหตุ: ในการอธิบายนี้ Host A และ Host B ไม่มีการset Default Gateway นะครับ

ในตัวอย่างที่ผมจะอธิบายจะกล่าวในลักษณะที่เอาสาย LANต่อกันตรงๆ คือ




เช่น host A (10.1.1.1) ping ไปยัง hostB (10.2.1.1)

กระบวนการการทำงานจะเป็นดังนี้:

Step 1. Host ฝั่งต้นทาง หรือ host A (10.1.1.1/8) จะเอา /8 หรือ 255.0.0.0 ของตัวเองมา AND กับ ip address ของตัวเอง คือ 10.1.1.1 AND 255.0.0.0 = Network 10.0.0.0

Step 2. จากนั้น hostA (10.1.1.1) จะทำการตรวจสอบว่า host ปลายทาง หรือ host B (10.2.1.1) ว่าอยู่ใน subnetเดียวกับมันหรือไม่ โดยการเอา subnet mask ของตัวเองคือ /8 (255.0.0.0) มาทำการ AND กับ ipaddress ปลายทาง 10.2.1.1 ที่ต้องการติดต่อด้วย

- Host A (10.1.1.1) ดำเนินการ เอา ip address ปลายทาง 10.2.1. 1 (ip host B) AND 255.0.0.0 (subnet mask ของhost A เอง) แล้วได้ผลลัพธ์เป็น Network คือ 10.0.0.0

Step 3. Host A นำผลลัพธ์ของการ AND ที่ได้จากข้อ 1 และข้อ 2 มาทำการเปรียบเทียบกัน ได้ผลลัพธ์เหมือนกัน คือ 10.0.0.0 เหมือนกัน ดังนั้น host A (10.1.1.1) จึงตีความว่า host B (10.2.1.1) อยุ่ใน subnet เดียวกับมัน มันจึงทำการส่ง icmp request ออกไปหา host B (10.2.1.1) ตรงๆ โดยไม่ต้องอาศัย หรือไม่่ต้องส่งผ่าน Default Gateway

Step 4. IP packet ที่เป็น icmp request ได้วิ่งจาก host A (10.1.1.1) ไปยัง host B (10.2.1.1)

Step 5. Host B ได้รับ icmp request ที่มี source IP = 10.1.1.1 (host A) และ destination IP = 10.2.1.1 (ip ของ host B เอง) มันจึงพยายามที่จะตอบ icmp reply กลับไปยัง host A (10.1.1.1)

Step 6. Host B ในตอนนี้ที่พยายายามจะตอบกลับไปยังhost A (10.1.1.1) ด้วย icmp reply นั้น

host B จะทำการสร้าง icmp reply ขึ้นมาด้วยตัวของมันเองดังนั้นมันจึงหนด source ip address ของ icmp reply เป็นตัวมันเองคือ 10.2.1.1 และ destination ip address เป็น host A (10.1.1.1)

จากนั้น Host B (10.2.1.1) ดำเนินการในลักษณะเดียวกันกับ Host A (10.1.1.1) ตาม step 1 ถึง step 3 แต่เป็นการดำเนินการในลักษณะที่กลับกันดังนี้

Step 7. Host ฝั่งต้นทาง หรือ host B (10.2.1.1/16) จะเอา /16 หรือ 255.255.0.0 ของตัวเองมา AND กับ ip address ของตัวเอง คือ 10.2.1.1 AND 255.255.0.0 = Network 10.2.0.0

Step 8. จากนั้น host B (10.2.1.1) จะทำการตรวจสอบว่า host ปลายทาง หรือ host A (10.1.1.1) ว่าอยู่ใน subnet เดียวกับมันหรือไม่ โดยการเอา subnet mask ของตัวเองคือ /16 (255.255.0.0) มาทำการ AND กับ ip address ปลายทาง 10.1.1.1 ที่ต้องการติดต่อด้วย

- Host B (10.2.1.1) ดำเนินการ เอา ip address ปลายทาง 10.1.1.1 (ip host A) AND 255.255.0.0 (subnet mask ของ host B เอง) แล้วได้ผลลัพธ์เป็น Network คือ 10.1.0.0

Step 9. Host B นำผลลัพธ์ของการ AND ที่ได้จากข้อ 7 และข้อ 8 มาทำการเปรียบเทียบกัน ได้ผลลัพธ์ต่างกันดังนี้

- จาก step 7 แล้ว, host B เห็นว่าตัวเองอยู่ใน subnet 10.2.0.0

- จาก step 8 แล้ว, host B เห็นว่าปลายทาง นั่นก็คือ host A ip address 10.1.1.1 อยู่ใน subnet 10.1.0.0

ดังนั้น host B (10.2.1.1) จึงตีความว่า host A (10.1.1.1) อยุ่คนละ subnet กับมัน มันจึงไปตรวจสอบดูว่า ที่ตัวมันมีการ setup Default Gateway ไว้หรือไม่ แต่จากตัวอย่างนี้ คือ เราไม่ได้ set Default Gateway ไว้ดังนั้น host B จึงจำเป็นต้อง drop icmp reply ที่ตัวเองสร้างขึ้นมา

นั่นก็คือ หาก host A มีการสื่อสารใดๆ กับ host B ไม่ว่าจะเป็น application อะไรก็ตามที่ต้องการสื่อสารแบบ two way communication (มีการเช็คกันแบบมี acknowledge) ก็จะไม่สามารถสื่อสารได้ แม้ว่า host A จะส่ง ip packet มาถึง host B ก็ตาม แต่เพราะ host B ไม่สามารถติดต่อกลับได้ มันจึงเป็นการส่งข้อมูลเพียงด้านเดียว ซึ่งในการใช้งาาน application ทั่วๆ ไปแล้วนั้น application ส่วนใหญ่ โดยเฉพาะ application ที่ใช้งานอยู่บน TCP จะต้องสามารถส่งข้อมูลได้ทั้งไปและกลับ

หากท่านใดสนใจจะพิสูจน์บทความนี้ ท่านสามารถต่อ PC และ set IP address กับ Subnet Mask ได้ตามรูป จากนั้นทำการจับ Wireshark บน Host A หรือ B ก็ได้ แล้วทำการ ping จาก Host A ไปยัง Host B ดูนะครับ 

Step การ test กับ Wireshark:

1. เพื่อให้สามารถเห็นการสื่อสารตามปกติ ท่านควรให้ host A กับ host B ใช้ subnet mask ที่เหมือนกันก่อน แล้ว ping หากัน ท่านจะพบว่ามีทั้ง icmp request และ reply กลับไปมา

2. ทำตามบทความ โดย host A ใช้ /8 และ host B ใช้ /16


เนื่องจากมีคำถามที่น่าสนใจหลังจากที่บทความนี้ได้เผยแพร่ออกไป ผมจึงเอามาเขียนเพิ่มเพื่อเป็นความรู้นะครับ

คำถามที่ 1: (ผมขอปรับใส่รายละเอียดเข้าไปในคำถามของต้นฉบับ เพื่อให้อ่านเข้าใจง่ายนะครับ)

"ถ้าเปลี่ยน Subnet Mask ของ host B (10.2.1.1) จาก /16 มาเป็น /9 (255.128.0.0) ไล่มาจนถึง /14 (255.252.0.0) แล้ว จะได้ผลลัพธ์ตอนที่ AND กับ 10.1.1.1 (host A) และ 10.2.1.1 (host B) ทั้งทิศทางขาไปและขากลับ เป็น 10.0.0.0 เหมือนกัน และจะส่ง ICMP กลับมาหาได้ใช่ไหมครับ"

ตอบคำถามที่ 1: (ผมได้ทดสอบแล้ว เพื่อให้แน่ใจก่อนตอบแล้วครับ)
คำตอบคือ ใช่ครับ โดยอธิบายได้ดังนี้ครับ

1. กรณี host A (10.1.1.1/8) เป็นต้นทาง และ host B (10.2.1.1/9 ถึง /14) เป็นปลายทางแล้ว host A จะเห็นตัวมันเอง กับ host B เป็น subnet เดียวกัน คือ 10.0.0.0 ดังนั้น host A จะส่ง IP packet ออกไปหา host B

2. (ทิศทาง traffic ขากลับ หรือ return traffic) กรณี host B (10.2.1.1/9 ถึง /14) เป็นต้นทาง และ host A (10.1.1.1/8) เป็นปลายทางแล้ว host B จะเห็นตัวมันเอง กับ host A เป็น subnet เดียวกัน คือ 10.0.0.0 ดังนั้น host B จะส่ง IP packet ออกไปหา host A

==========================================

คำถามที่ 2: (ผมขอปรับใส่รายละเอียดเข้าไปในคำถามของต้นฉบับ เพื่อให้อ่านเข้าใจง่ายนะครับ)

ถ้า host A เปลี่ยน IP address จาก 10.1.1.1/8 มาเป็น 10.2.2.1/8

และ host B เหมือนเดิมคือ 10.2.1.1/16 จะสามารถส่งข้อมูลไปกลับได้ไหม

นั่นคือ host A = 10.2.2.1/8 และ host B = 10.2.1.1/16

ตอบคำถามที่ 2: (ผมได้ทดสอบ เพื่อให้แน่ใจก่อนตอบแล้วครับ)
คำตอบคือ ได้ครับ โดยอธิบายได้ดังนี้ครับ

1. กรณี host A (10.2.2.1/8) เป็นต้นทาง และ host B (10.2.1.1/16) เป็นปลายทางแล้ว host A จะเห็นตัวมันเอง กับ host B เป็น subnet เดียวกัน คือ 10.0.0.0 ดังนั้น host A จะส่ง IP packet ออกไปหา host B

2. (ทิศทาง traffic ขากลับ หรือ return traffic) กรณี host B (10.2.1.1/16) เป็นต้นทาง และ host A (10.2.2.1/8) เป็นปลายทางแล้ว host B จะเห็นตัวมันเอง กับ host A เป็น subnet เดียวกัน คือ 10.2.0.0 ดังนั้น host B จะส่ง IP packet ออกไปหา host A

==============================

หวังว่าบทความนี้จะมีประโยชน์นะครับ

โก้-ชัยวัฒน์




Create Date : 13 กันยายน 2559
Last Update : 8 มกราคม 2560 0:17:55 น.
Counter : 8186 Pageviews.

6 comments
  
ขอบพระคุณครับอาจารย์
โดย: IRONMINI IP: 61.19.235.66 วันที่: 14 กันยายน 2559 เวลา:9:37:35 น.
  
ผมสงสัยตรงคำถามที่ 2 ครับ ที่ว่า 2. (ทิศทาง traffic ขากลับ หรือ return traffic) กรณี host B (10.2.1.1/16) เป็นต้นทาง และ host A (10.2.2.1/8) เป็นปลายทางแล้ว host B จะเห็นตัวมันเอง กับ host B เป็น subnet เดียวกัน คือ 10.2.0.0 ดังนั้น host B จะส่ง IP packet ออกไปหา host A (มันจะส่งข้อมูลไปกลับได้ไหมครับ เพราะ Subnet มันเปน 10.2.0.0 แต่ของ A มันเป็น 10.0.0.0)
โดย: Surasak IP: 27.130.167.69 วันที่: 10 ตุลาคม 2559 เวลา:18:27:20 น.
  
@K. Surasak,
จากคำถามที่ 2 ที่คุณ Surasak ถามมา:
คำตอบคือ ได้ครับ

A --> B: A จะมองว่าตัวมันเอง และ B อยู่ใน subnet 10.0.0.0/8 จึงส่งไปหา B

B-->A: B จะมองว่า A อยู่ใน subnet 10.2.0.0/16 เดียวกับมัน จึงส่งข้อมุลกลับไปหา A ได้

ทำให้การสื่อสารระหว่าง A และ B สามารถสื่อสารกันได้ โดยที่ A อยู่ใน subnet 10.0.0.0/8 และ B อยู่ใน subnet 10.2.0.0/16

ขอบคุณครับ
โก้-ชัยวัฒน์
โดย: kochaiwat วันที่: 13 ตุลาคม 2559 เวลา:9:31:20 น.
  
@K. kochaiwat
เข้าใจขึ้นเลยครับ ขอบคุณครับ
โดย: Surasak IP: 171.6.18.33 วันที่: 13 ตุลาคม 2559 เวลา:21:33:04 น.
  
ขอบคุณบทความดีๆของอาจารย์โก้ครับ ผมสงสัยมานานแล้วครับ ว่าทำไม subnet mask ต่างกัน ทำไม ping เจอกันได้ วันนี้กระจ่างเลยครับ
โดย: Apiwat IP: 171.97.97.109 วันที่: 25 มีนาคม 2561 เวลา:1:22:53 น.
  
ขอบคุณครับ
โดย: TUM IP: 14.207.168.69 วันที่: 10 ธันวาคม 2561 เวลา:14:25:52 น.
ชื่อ :
Comment :
 *ใช้ code html ตกแต่งข้อความได้เฉพาะสมาชิก
 

Likecisco.BlogGang.com

kochaiwat
Location :
กรุงเทพฯ  Thailand

[ดู Profile ทั้งหมด]
 ผู้ติดตามบล็อก : 693 คน [?]

บทความทั้งหมด