ที่อยู่ IPv4กว้าง 32 บิตและขนาดของพื้นที่ที่อยู่คือ 2 32หรือ 4,294,967,296 อย่างไรก็ตามนี่เป็นเพียงขอบเขตทฤษฎีเท่านั้น มันไม่ได้เป็นตัวแทนที่ถูกต้องของที่อยู่ทั้งหมดที่จริงอาจใช้บนอินเทอร์เน็ตสาธารณะ
สำหรับจุดประสงค์ของการท้าทายนี้จะถือว่าการกล่าวอ้างทั้งหมดนั้นมีระดับ ในความเป็นจริงการแบ่งพื้นที่ที่อยู่ในระดับคลาสได้ถูกแทนที่โดยCIDR (การกำหนดเส้นทาง Inter-Domain Classless และ VLSM (Masking Subnet Length Variable Length Variable)แต่สิ่งนี้ไม่สนใจความท้าทายนี้
ตามรูปแบบที่อยู่ที่คลาสมี 3 คลาส:
- Class A -
0.0.0.0
ถึง127.255.255.255
ด้วย/8
ความยาว netmask - Class B -
128.0.0.0
ถึง191.255.255.255
ด้วย/16
ความยาว netmask - Class C -
192.0.0.0
ถึง223.255.255.255
ด้วย/24
ความยาว netmask
คลาส D (multicast) และ E (สงวนไว้) ถูกกำหนดด้วยเช่นกัน แต่ไม่ได้ใช้สำหรับที่อยู่ unicast สาธารณะ
แต่ละคลาสจะถูกแบ่งย่อยออกเป็นเครือข่ายตาม netmask สำหรับคลาสนั้น
ดังนั้น3.0.0.0
เป็นตัวอย่างของเครือข่าย Class A ความยาว netmask สำหรับ Class A คือ 8 ดังนั้นพื้นที่ที่อยู่เต็มสำหรับเครือข่ายนี้เป็นไป3.0.0.0
3.255.255.255
อย่างไรก็ตามที่อยู่แรก ( 3.0.0.0
) ถูกสงวนไว้เป็นที่อยู่เครือข่ายและที่อยู่สุดท้าย ( 3.255.255.255
) จะถูกสงวนไว้เป็นที่อยู่การออกอากาศสำหรับเครือข่ายนั้น ดังนั้นในช่วงที่เกิดขึ้นจริงของที่อยู่ที่ใช้งานได้เป็น3.0.0.1
ไป3.255.255.254
ซึ่งเป็น 2 ตลอด 24 - 2 (= 16777214) ที่อยู่ทั้งหมด
ในทำนองเดียวกัน200.20.30.0
เป็นตัวอย่างของเครือข่าย Class C ความยาว netmask สำหรับ Class C เป็น 24 ดังนั้นพื้นที่ที่อยู่เต็มสำหรับเครือข่ายนี้เป็นไป200.20.30.0
200.20.30.255
การถอดใบเครือข่ายและการออกอากาศอยู่ในช่วงที่เกิดขึ้นจริงของที่อยู่ที่ใช้งานได้เป็น200.20.30.1
ไป200.20.30.254
ซึ่งเป็น 2 8 - 2 (= 254) ที่อยู่ทั้งหมด
มีข้อ จำกัด เพิ่มเติมเกี่ยวกับช่วงที่อยู่ที่อาจใช้สำหรับ unicast สาธารณะ ตามRFC 6890ช่วงที่ไม่อนุญาตคือ:
0.0.0.0/8
- เครือข่ายท้องถิ่น10.0.0.0/8
- ใช้งานส่วนตัว100.64.0.0/10
- พื้นที่ที่อยู่ที่ใช้ร่วมกัน127.0.0.0/8
- ลูปแบ็ค169.254.0.0/16
- เชื่อมโยงท้องถิ่น172.16.0.0/12
- ใช้งานส่วนตัว192.0.0.0/24
- การมอบหมายโปรโตคอล IETF192.0.2.0/24
- สงวนไว้สำหรับใช้ในเอกสารประกอบ192.88.99.0/24
- 6to4 Relay Anycast192.168.0.0/16
- ใช้งานส่วนตัว198.18.0.0/15
- การเปรียบเทียบ198.51.100.0/24
- สงวนไว้สำหรับใช้ในเอกสารประกอบ203.0.113.0/24
- สงวนไว้สำหรับใช้ในเอกสารประกอบ
โปรดทราบว่ารายการด้านบนใช้ VLSR netmasks เพื่อระบุช่วงได้อย่างมีประสิทธิภาพ ในทุกกรณียกเว้นหนึ่งความยาวหน้ากากที่กำหนดมีความเฉพาะเจาะจงน้อยกว่าหรือเท่ากับความยาวหน้ากากที่มีระดับปกติสำหรับการเริ่มต้นของช่วง ดังนั้นแต่ละช่วง VLSR เหล่านี้จะเทียบเท่ากับเครือข่ายที่ดีงามอย่างน้อยหนึ่งเครือข่าย เช่น172.16.0.0/12
เทียบเท่ากับเครือข่าย Class B 172.16.0.0
ไป172.31.0.0
หรือช่วงที่อยู่ที่จะ172.16.0.0
172.31.255.255
ข้อยกเว้นสำหรับกฎนี้คือ100.64.0.0/10
ช่วง VLSR ซึ่งเฉพาะเจาะจงมากขึ้นกว่าช่วง100.0.0.0
Class A ที่มีอยู่ ดังนั้น100.0.0.0
จะได้รับการจัดการเหมือนกับช่วง Class A อื่น ๆ ยกเว้นว่าจะมีช่องที่อยู่ 4,194,304 ที่อยู่ตรงกลาง ที่อยู่ที่ถูกต้องในช่วง Class A นี้จะเป็น 100.0.0.0
ไป100.63.255.255
และ 100.128.0.0
จะ100.255.255.254
มีทั้งหมด 2 ตลอด 24 - 2 22 - 2 (= 12582910) ที่อยู่ทั้งหมด
เป้าหมายของความท้าทายนี้คือการส่งออกที่อยู่ IPv4 ใน Class A, B และ C ทั้งหมดที่อาจได้รับมอบหมายอย่างถูกต้องให้กับโฮสต์อินเทอร์เน็ตสาธารณะ (เช่นไม่รวมที่อยู่ด้านบน)
จะไม่มีการป้อนข้อมูลใด ๆ และไม่ควรคาดหวัง
ผลลัพธ์อาจอยู่ในรูปแบบใดก็ได้ที่สะดวกสำหรับภาษาของคุณเช่นอาร์เรย์รายการสตริงที่คั่นด้วย ที่อยู่จะต้องถูกส่งออกในรูปแบบเลขฐานสิบแบบจุดประ
คำสั่งส่งออกไม่สำคัญ
Builtins ที่ให้ช่วงของที่อยู่ที่ต้องการโดยเฉพาะจะไม่ได้รับอนุญาต ในทำนองเดียวกันวิธีการใด ๆ ในการตรวจสอบตารางเส้นทางBGP (หรือโปรโตคอลอื่น) แบบไดนามิกสำหรับอินเทอร์เน็ตสาธารณะจะไม่ได้รับอนุญาต
ตัวเลขที่อยู่ต่ำสุดจะเป็นและตัวเลขที่สูงที่สุดจะเป็น1.0.0.1
223.255.255.254
ความท้าทายนี้คล้ายกับการพิมพ์ที่อยู่ IPv6 ทั้งหมดแต่เนื่องจากข้อ จำกัด ควรมีการใช้งานที่แตกต่างกันเล็กน้อย
@echo off
เช่นกัน