เนื่องจากอีเธอร์เน็ตใช้ที่อยู่ MAC เพื่อการสื่อสารฉันสามารถสร้างเครือข่ายอีเทอร์เน็ตที่อุปกรณ์จะไม่มีที่อยู่ IP หรือเพียงแค่เป็นที่อยู่ MAC หรือไม่
หากคุณกำลังเขียนซอฟต์แวร์ทั้งหมดตั้งแต่เริ่มต้นคุณสามารถทำสิ่งนี้ได้อย่างแน่นอน เพียงแค่ให้ซอฟต์แวร์ยอมรับที่อยู่ MAC ทุกที่ที่คู่ปกติของโปรแกรมนั้นจะยอมรับที่อยู่ IP ใช้การเรียกของระบบทั้งหมดเพื่อส่งแพ็กเก็ตอีเทอร์เน็ตแบบ raw แทนที่จะใช้ที่อยู่ IP และมันจะใช้งานได้ - แต่มันจะยุ่งยากมาก
โดยทั่วไปที่อยู่ MAC ในเครือข่ายของคุณจะไม่เป็นไปตามรูปแบบใด ๆ พวกเขาถูกเผาในฮาร์ดแวร์โดยผู้ผลิต พวกมันยาวและใหญ่ ของฉันตอนนี้คือ C8-60-00-CA-4B-9A คอมพิวเตอร์ถัดจากฉันคือ 00-40-F4-48-1B-88
หากต้องการให้เครื่องสามารถพูดคุยกับคุณได้คุณสามารถให้รายชื่อที่อยู่ MAC ทั้งหมดของเครื่องอื่น ๆ ทั้งหมดในเครือข่ายเพื่อให้เครื่องทราบว่าจะส่งแพ็กเก็ตได้ที่ไหน นี่เป็นข้อผิดพลาดในการพิมพ์บ่อยครั้งและเมื่อใดก็ตามที่คุณเปลี่ยนฮาร์ดแวร์เครือข่ายใด ๆ คุณจะต้องไปไหนมาไหนและเปลี่ยนรายการทั้งหมดเพื่อสะท้อนถึงที่อยู่ MAC ใหม่
นี่เป็นเรื่องที่ยุ่งยากมากดังนั้นคุณอาจจะต้องหาวิธีที่เครื่องในเครือข่ายค้นพบที่อยู่ MAC ของผู้อื่นโดยอัตโนมัติโดยใช้แพ็กเก็ตออกอากาศ จากนั้นคุณจะให้วิธีการระบุตัวตนของพวกเขาด้วยที่อยู่ที่มีความหมายบางส่วนดังนั้นคุณจะต้องพิมพ์คำสั่งเช่น "telnet C8-60-00-CA-4B-9A"
ปรากฎว่านี่เป็นสิ่งที่ IP ทำ - เป็นวิธีการใช้ตัวเลขที่มีความหมายในการระบุที่อยู่โฮสต์บนเครือข่ายแทนที่จะใช้ MAC ที่เข้ารหัสอย่างหนัก เพิ่มใน DNS ที่อยู่ด้านบนของ IP และคุณสามารถพิมพ์คำสั่งเช่น "telnet webserver"
อีเทอร์เน็ตไม่สามารถใช้ที่อยู่ IP เพื่อส่งข้อความได้ใช่หรือไม่ ฉันไม่ได้บอกว่าควรทำฉันแค่ถามว่าจะเลือกทำเช่นนั้นได้หรือไม่
ที่อยู่ MAC คือข้อมูลขนาด 6 ไบต์และที่อยู่ IP มีขนาดเพียง 4 ไบต์ดังนั้นคุณจึงไม่สามารถทำการแมปแบบ 1 ต่อ 1 ได้ คุณต้องหาวิธีหาที่อยู่ MAC (เพื่อใส่ในแพ็คเก็ต) จากที่อยู่ IP (จัดทำโดยซอฟต์แวร์ที่ต้องการสื่อสารกับโฮสต์อื่นบนเครือข่าย)
วิธีหนึ่ง (ฮาร์ดคอร์) ในการทำเช่นนี้คือเข้าไปในทุก ๆ เครื่องในเครือข่ายและเปลี่ยนที่อยู่ MAC ของฮาร์ดแวร์ให้ดูเหมือน IP แอดเดรสโดยการทำให้สองไบต์บนสุดเป็นศูนย์ (หรือหมายเลขคงที่อื่น ๆ ที่เหมือนกัน สำหรับทุกเครื่องในเครือข่าย) และตั้งค่าสี่ไบต์ด้านล่างเป็น "ที่อยู่ IP" ที่คุณต้องการให้มีในเครือข่าย (การ์ดเครือข่ายส่วนใหญ่จะให้คุณเข้าไปและแก้ไขที่อยู่ MAC ที่ได้รับมอบหมายจากผู้ขาย)
เพื่อให้ใช้งานได้จริงต่อไปคุณจะต้องแฮ็คโค้ดในสแต็กเครือข่ายของคุณเพื่อใช้ระบบนี้ โดยทั่วไปคุณจะทำทุกสิ่งที่เกี่ยวข้องกับ ARP (วิธีที่ IP ใช้ในการแปลที่อยู่ IP เป็นที่อยู่ MAC) คุณจะฉีกส่วนที่สร้าง / อ่านส่วนหัว IP แต่คุณจะแทนที่มันด้วยโค้ดง่าย ๆ ที่กำหนดให้แพ็กเก็ต IP ถูกส่งไปยังโฮสต์ที่ที่อยู่ wxyz ให้สร้างเฟรมอีเธอร์เน็ตด้วยที่อยู่ DEST ที่ตั้งค่าเป็น 00-00-wxyz
คุณจะต้องมีวิธีในการบ่งบอกถึงตัวรับของแพ็กเก็ตซึ่งโปรโตคอล (UDP, TCP) นั้นมีไว้สำหรับ คุณอาจจะติดที่นี่ที่ใดก็ได้ในส่วนหัวของอีเธอร์เน็ตโดยการแทนที่ฟิลด์ที่มีอยู่ อาจใช้หนึ่งในสองไบต์บนสุดของแหล่งที่อยู่? นี่จะไม่ส่งผลกระทบต่อความสามารถของเครื่องปลายทางที่จะรับ แต่อาจทำให้สวิตช์บางอย่างยุ่งเหยิง คุณสามารถเพิ่มโพรโทคอลไปยังจุดเริ่มต้นหรือจุดสิ้นสุดของเฟรมอีเธอร์เน็ตและเพิ่มขนาดของข้อมูลโดยหนึ่ง - แต่นั่นเริ่มมีกลิ่นเหมือนส่วนหัวของ IP
แล้วงานนี้จะซื้ออะไรให้คุณ
ก่อนอื่นมันจะช่วยคุณประหยัดค่าใช้จ่ายในการค้นหาในตาราง ARP ในทุก ๆ แพ็กเก็ตที่ส่งออก นี่อาจเป็นไปตามคำสั่งของไมโครวินาทีเท่านั้น
คุณบันทึกงานการคำนวณการตรวจสอบส่วนหัวของ IP และหน่วยความจำที่จำเป็นในการเก็บไว้ นี่อาจไม่สำคัญกับฮาร์ดแวร์ที่ทันสมัย
คุณบันทึก 16 ไบต์ในทุก ๆ แพ็กเก็ตบนเครือข่ายเนื่องจากไม่มีส่วนหัว IP สิ่งนี้สามารถเพิ่มได้ขึ้นอยู่กับแอปพลิเคชัน
กำไรที่ยิ่งใหญ่ที่สุดคือคุณไม่ต้องทำตามคำขอ ARP การส่งแพ็คเก็ต IP มาตรฐานไปยังโฮสต์ใหม่จะก่อให้เกิดการแลกเปลี่ยน ARP ซึ่งอาจใช้เวลามิลลิวินาทีและคาดเดาไม่ได้ นี่อาจเป็นประโยชน์อย่างมากสำหรับบางแอปพลิเคชันที่มีความอ่อนไหวต่อความล่าช้าและความกระวนกระวายใจ
สำหรับแอพพลิเคชั่นที่มีความพิเศษมาก ๆ ฉันเคยทำงานในระบบเรียลไทม์ที่ใช้เฉพาะการออกอากาศแพ็คเก็ต UDP สำหรับการสื่อสารระหว่างโฮสต์ทั้งหมดด้วยเหตุผลเดียวที่หลีกเลี่ยงการมีลำดับ ARP เหล่านั้นที่เตะเข้ามาและเพิ่มความล่าช้าและกระวนกระวายใจโดยไม่คาดคิด ฉันยังเคยทำงานกับระบบฝังตัวที่ จำกัด ทรัพยากรที่ทำงานโดยการส่ง UDP payloads ในแพ็กเก็ต IP โดยตรง (ไม่มีส่วนหัวของ IP) เพราะมันบันทึกความซับซ้อนและหน่วยความจำทั้งหมดที่จำเป็นในการใช้ ARP และ netmask และการตรวจสอบพิเศษทั้งหมด