ฉันสงสัยว่าที่มาของการตัดสินใจทำlocalhost
ที่อยู่ IP ของ127.0.0.1
อะไร "ความหมาย" ของ127
คืออะไร? "ความหมาย" ของ0.0.1
อะไร
ฉันสงสัยว่าที่มาของการตัดสินใจทำlocalhost
ที่อยู่ IP ของ127.0.0.1
อะไร "ความหมาย" ของ127
คืออะไร? "ความหมาย" ของ0.0.1
อะไร
คำตอบ:
127 255.0.0.0
เป็นจำนวนเครือข่ายที่ผ่านมาในเครือข่ายชั้นด้วยซับเน็ตของ 127.0.0.1
เป็นที่อยู่แรกที่สามารถกำหนดได้ในซับเน็ต 127.0.0.0
ไม่สามารถใช้เพราะจะเป็นหมายเลขสาย แต่การใช้ตัวเลขอื่น ๆ 127.0.0.1
ส่วนเจ้าภาพควรปรับการทำงานและเปลี่ยนกลับไปใช้ คุณสามารถลองด้วยตัวคุณเองโดยส่งเสียงดัง127.1.1.1
หากคุณต้องการ เหตุใดพวกเขาจึงรอจนกระทั่งหมายเลขเครือข่ายล่าสุดเพื่อใช้งานนี้ ฉันไม่คิดว่ามันเป็นเอกสาร
พูดถึงเร็วที่สุดที่ฉันสามารถหาเกี่ยวกับการมอบหมายของ 127 เป็น loopback คือพฤศจิกายน 1986 RFC 990ประพันธ์โดย Reynolds และ Postel:
ศูนย์ที่อยู่จะถูกตีความว่าเป็นความหมาย "นี้" เช่นเดียวกับใน "เครือข่ายนี้"
ตัวอย่างเช่นที่อยู่ 0.0.0.37 สามารถตีความได้ว่าหมายถึงโฮสต์ 37 บนเครือข่ายนี้
...
คลาสเครือข่ายหมายเลข 127 ได้รับการกำหนดฟังก์ชั่น "วนกลับ" นั่นคือดาตาแกรมที่ส่งโดยโพรโทคอลระดับสูงกว่าไปยังที่อยู่เครือข่าย 127 ที่อยู่ควรวนกลับภายในโฮสต์ ไม่มีดาตาแกรม "ส่ง" ไปยังที่อยู่เครือข่าย 127 ไม่ควรปรากฏบนเครือข่ายใด ๆ
แม้จะเป็นช่วงต้นเดือนกันยายน 1981 RFC 790 , 0 และ 127 ได้ถูกจองไว้แล้ว:
000.rrr.rrr.rrr สงวน [JBP] ... 127.rrr.rrr.rrr สงวน [JBP]
0 และ 127 เป็นเครือข่าย Class A ที่สงวนไว้เท่านั้นในปี 1981 มีการใช้ 0 เพื่อชี้ไปยังโฮสต์ที่เฉพาะเจาะจงดังนั้นจึงเหลือ 127 สำหรับลูปแบ็ค
ฉันรู้ว่านี่ไม่ได้ตอบคำถาม แต่มันกลับไปไกลเท่าที่ฉันจะขุดได้ อาจเหมาะสมกว่าที่จะเลือก 1.0.0.0 สำหรับลูปแบ็ค แต่ได้มอบให้กับเครือข่ายวิทยุ BBN Packet แล้ว
นักออกแบบอินเทอร์เน็ตรู้ดีว่าฮาร์ดแวร์ทำงานอย่างไรและพวกเขาออกแบบโดยคำนึงถึงการใช้งานในระดับต่ำ
ค่า 0, 127 และ 255 มีความพิเศษในการประกอบ 8 บิตและการเขียนโปรแกรมภาษาเครื่องเนื่องจากมี "เทคนิค" ที่คุณสามารถใช้เพื่อทดสอบค่าและสาขาเหล่านี้ไปยังรหัสที่แตกต่างกันโดยใช้คำสั่งขนาดเล็กที่ทำงานเร็วกว่าสำหรับจำนวนเต็มอื่น ๆ 127 เป็นจำนวนเต็ม 8 บิตที่ได้รับการรับรองสูงสุดดังนั้นการเพิ่มโดย 1 จะทำให้เกิดการโอเวอร์โฟลว์ที่ลงนามแล้ว การเพิ่ม 255 จะทำให้เกิดโอเวอร์โฟลว์ที่ไม่ได้ลงชื่อ การโหลดค่า 0 ลงในการลงทะเบียนมักจะตั้งค่าสถานะเป็นศูนย์บนชิป ลองนึกภาพโปรแกรมเครือข่ายมีลักษณะเช่นนี้ในรหัสเทียม:
if (value == 0) doLocal();
if (value == 127) doLoopback();
if (value == 255) doNetwork();
แม้ว่ามันจะขึ้นอยู่กับชิปในสมัยนั้นชิปส่วนใหญ่สามารถเข้ารหัสการทดสอบเหล่านี้ด้วย 2 คำ, 3 คำและ 3 คำตามลำดับ (รวม 8 คำ) และการทดสอบเหล่านั้นเพิ่มเติมมีแนวโน้มที่จะดำเนินการใน 1 รอบนาฬิกาแต่ละ การใช้ค่าอื่น ๆ อาจต้องการ 4 คำต่อคำ (ทั้งหมด 12 คำ) เพิ่มขึ้น 50% ในขนาดรหัสและมีแนวโน้มเพิ่มขึ้น 50% ในเวลาดำเนินการเช่นกัน
หากคุณคิดว่า localhost หรือที่อยู่ IP ย้อนกลับหมายถึงคุณรู้ว่าคุณไม่ต้องการที่จะเห็นที่อยู่นั้นหรือเครือข่ายที่ที่อยู่นั้นเป็นของนอกโฮสต์ (ด้านในของโฮสต์มันมืดเกินกว่าจะดูได้ขอโทษที่มาร์กทเวน)
ดังนั้นใครบางคนต้องเลือกเครือข่าย IP เพื่อแสดงที่อยู่ localhost นี้ ฉันจำไม่ได้ว่าใครเป็นคนเลือกครั้งแรก แต่มันถูกระบุในคำขอ IETF สำหรับความคิดเห็นที่มีการออกเป็นระยะ ๆ ว่า "ข้อกำหนดของโฮสต์"
เมื่อนานมาแล้วความคิดในการ "ทำลาย" ที่อยู่ในคลาส A ทั้งหมดไม่ได้เข้ามาในใจใครเลย
ประโยชน์ของ localhost คือคุณสามารถพูดคุยกับตัวเองโดยใช้ที่อยู่ IP แบบตายตัว มันถูกใช้มานานก่อนที่จะมีระบบชื่อโดเมน คุณสามารถใช้ที่อยู่ใดก็ได้ที่ถูกต้อง 127.xxx แต่ไม่มีใครทำ คุณไม่สามารถแอบดูและใช้ 127 เป็นเครือข่ายจริงได้เนื่องจาก RFC "ข้อกำหนดของเราเตอร์" ไม่อนุญาตให้กำหนดเส้นทางเครือข่ายนั้นบนอินเทอร์เน็ตใด ๆ
ก่อนอื่นช่วง 127.xxx ทั้งหมดชี้ไปที่โลคัลโฮสต์ของคุณ
127 ในไบนารีคือ "01111111" "11111111" = 255 และ 0 ถูกสงวนไว้ดังนั้นตัวเลือกจึงเด่นชัด :)
เพราะเมื่อมาตรฐานเหล่านั้นถูกสร้างขึ้นคอมพิวเตอร์จึงช้าและมักจะ จำกัด การลงทะเบียน 8 บิต การเปรียบเทียบตัวเลขกับตัวเลขนั้นช้ามากโดยเฉพาะถ้าตัวเลขเหล่านั้นต้องถูกดึงจากด้านหลังหน่วยความจำช้าจริงๆ การลงทะเบียนนั่นคือที่เก็บข้อมูล "CPU on board" เร็วกว่ามาก
ยิ่งไปกว่านั้นคอมพิวเตอร์เก่าเหล่านั้นมีคำสั่งพิเศษที่เร็วกว่าในการตรวจสอบ "เท่ากับศูนย์", "แตกต่างจากศูนย์", "จำนวนเต็มลบ / บวก" (ที่ซึ่งสัญญาณคือ ... เดาว่าอะไร, บิตซ้ายสุดตอนนี้เห็นการเชื่อมต่อกับ 127 นั่นคือตัวเลขที่มีไบนารีทั้งหมด "1" ยกเว้นเครื่องหมาย left ซ้าย =?)
ดังนั้นตัวเลขเหล่านี้จึงเป็นตัวเลขพิเศษเพราะอนุญาตให้โปรแกรมเล่ห์เหลี่ยมในการบันทึกรอบ CPU จำนวนมากในการดำเนินการที่ทำบ่อยครั้ง
คุณไม่เคยเห็นคำสั่ง "IF CallerIP =" 0 "แต่เป็นคำสั่ง" IF NotZero (CallerIP) "
คุณสามารถไปดูคำแนะนำการประกอบโบราณเช่น "BEQ, BNE" (6502 CPUs) เพื่ออธิบายเพิ่มเติม นอกจากนี้ยังตรวจสอบหน้านี้ออก
ในที่สุด:
0, 255 และ 127 สามารถตรวจสอบได้ด้วยคำสั่งที่เร็วที่สุดและเร็วที่สุด ภาษาระดับสูงเช่น C มีฟังก์ชั่นการเปรียบเทียบ "shortuct" ที่คอมไพเลอร์อาจปรับให้เหมาะสมภายในคำสั่งเดียว
โปรแกรมเมอร์ 70 ปีและ 80 ปีผลิตสถาปัตยกรรมที่ยอดเยี่ยมด้วยทรัพยากรที่หายากมากภายใต้มาตรฐานเช่นการกำหนดเลข IP มีความคิดและอัจฉริยะมากมาย