ทำไม localhost IP 127.0.0.1


85

ฉันสงสัยว่าที่มาของการตัดสินใจทำlocalhostที่อยู่ IP ของ127.0.0.1อะไร "ความหมาย" ของ127คืออะไร? "ความหมาย" ของ0.0.1อะไร


2
ฉันอยากรู้เกี่ยวกับเรื่องนี้เช่นกัน IPv6 ลูปแบ็คคือ 0: 0: 0: 0: 0: 0: 0: 1, ซึ่งสมเหตุสมผลสำหรับฉัน
hyperslug

1
ใช่ localhost IPv6 ไม่ได้เพิ่มคำถามมากเกินไป :)
roee Adler

21
ฉันยังไม่เห็น "ไม่มีที่ไหนเหมือน 0: 0: 0: 0: 0: 0: 0: 1" เสื่อประตูยัง!
William Hilsum

9
@ จะบีบอัดให้เป็น "ไม่มีที่ไหนเหมือน :: 1" และคุณจะได้รับธุรกิจเพิ่มขึ้นอีกเล็กน้อย
new123456

6
@ WilliamHilsum ขยายให้เป็น "ไม่มีที่ไหนเหมือน 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0001" และชาร์จเพิ่มเติม
Nick T

คำตอบ:


87

127 255.0.0.0เป็นจำนวนเครือข่ายที่ผ่านมาในเครือข่ายชั้นด้วยซับเน็ตของ 127.0.0.1เป็นที่อยู่แรกที่สามารถกำหนดได้ในซับเน็ต 127.0.0.0ไม่สามารถใช้เพราะจะเป็นหมายเลขสาย แต่การใช้ตัวเลขอื่น ๆ 127.0.0.1ส่วนเจ้าภาพควรปรับการทำงานและเปลี่ยนกลับไปใช้ คุณสามารถลองด้วยตัวคุณเองโดยส่งเสียงดัง127.1.1.1หากคุณต้องการ เหตุใดพวกเขาจึงรอจนกระทั่งหมายเลขเครือข่ายล่าสุดเพื่อใช้งานนี้ ฉันไม่คิดว่ามันเป็นเอกสาร


14
เหตุผลเดียวที่ฉันเห็นพวกเขาโดยพลการเลือก 127 คือมันเป็นตัวเลขที่ง่ายต่อการจดจำ (01111111) และบางทีพวกเขาอนุญาตให้โฮสต์ 16 ล้านที่อยู่สำหรับการสื่อสารกับตัวเองและของตัวเองเท่านั้น (เช่นโปรแกรมและส่วนประกอบ Windows ใช้อย่างไร พอร์ตในปัจจุบัน) RFCs กล่าวถึงจริงๆเท่านั้นว่ามันเป็นวิธีปฏิบัติมาตรฐานสำหรับ 127.0.0.1/32 ที่จะใช้สำหรับลูปแบ็ค มันค่อนข้างคลุมเครือเหมือนสิ่งที่พวกเขาตั้งใจไว้สำหรับส่วนที่เหลือของบล็อกนอกเหนือจากมันวนกลับไปที่โฮสต์และไม่เคยชนเครือข่ายดังนั้นการเก็งกำไรข้างต้นของฉัน
RoyalKnight

2
การมีที่อยู่บล็อกทั้งหมดที่ย้อนกลับไปเป็น 127.0.0.1 นั้นขึ้นอยู่กับการใช้งานและอาจเป็นลักษณะเฉพาะของกอง Linux Solaris อย่างน้อยต้องมีการเชื่อมต่อกับที่อยู่ปลายทางเพื่อให้การทดสอบ ping ของคุณสำเร็จ
jlliagre

56

พูดถึงเร็วที่สุดที่ฉันสามารถหาเกี่ยวกับการมอบหมายของ 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 แล้ว


23

นักออกแบบอินเทอร์เน็ตรู้ดีว่าฮาร์ดแวร์ทำงานอย่างไรและพวกเขาออกแบบโดยคำนึงถึงการใช้งานในระดับต่ำ

ค่า 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% ในเวลาดำเนินการเช่นกัน


1
โปรดทราบว่าฉันใช้ "คำ" เพราะเครื่องเก่ากลับมีขนาดคำที่ผิดปกติ แต่พวกเขามักจะใช้เลขคณิต 8 บิต สำหรับ 8088 ฉันจะได้กล่าวว่า "ไบต์"
Joseph Bui

5

หากคุณคิดว่า localhost หรือที่อยู่ IP ย้อนกลับหมายถึงคุณรู้ว่าคุณไม่ต้องการที่จะเห็นที่อยู่นั้นหรือเครือข่ายที่ที่อยู่นั้นเป็นของนอกโฮสต์ (ด้านในของโฮสต์มันมืดเกินกว่าจะดูได้ขอโทษที่มาร์กทเวน)

ดังนั้นใครบางคนต้องเลือกเครือข่าย IP เพื่อแสดงที่อยู่ localhost นี้ ฉันจำไม่ได้ว่าใครเป็นคนเลือกครั้งแรก แต่มันถูกระบุในคำขอ IETF สำหรับความคิดเห็นที่มีการออกเป็นระยะ ๆ ว่า "ข้อกำหนดของโฮสต์"

เมื่อนานมาแล้วความคิดในการ "ทำลาย" ที่อยู่ในคลาส A ทั้งหมดไม่ได้เข้ามาในใจใครเลย

ประโยชน์ของ localhost คือคุณสามารถพูดคุยกับตัวเองโดยใช้ที่อยู่ IP แบบตายตัว มันถูกใช้มานานก่อนที่จะมีระบบชื่อโดเมน คุณสามารถใช้ที่อยู่ใดก็ได้ที่ถูกต้อง 127.xxx แต่ไม่มีใครทำ คุณไม่สามารถแอบดูและใช้ 127 เป็นเครือข่ายจริงได้เนื่องจาก RFC "ข้อกำหนดของเราเตอร์" ไม่อนุญาตให้กำหนดเส้นทางเครือข่ายนั้นบนอินเทอร์เน็ตใด ๆ


4

ก่อนอื่นช่วง 127.xxx ทั้งหมดชี้ไปที่โลคัลโฮสต์ของคุณ
127 ในไบนารีคือ "01111111" "11111111" = 255 และ 0 ถูกสงวนไว้ดังนั้นตัวเลือกจึงเด่นชัด :)


25
ทำไมมันชัดเจนอีกครั้ง
Roee Adler

ฉันเชื่อว่าพวกเขาเลือกสิ่งที่ง่าย อีกครั้ง "1" s สงวนไว้ดังนั้นหนึ่งศูนย์ถูกเพิ่มเข้ามา :)
kolypto

เหตุใดจึงไม่ 10111111 :) หรือ 11011111 หรือ 11101111 หรือ 11110111 หรือ 11111011 หรือ 11111101 หรืออะไรทำนองนี้?
Mushex Antaranian

1
Nope ลองอีกครั้ง.
Ardee Aram

3

เพราะเมื่อมาตรฐานเหล่านั้นถูกสร้างขึ้นคอมพิวเตอร์จึงช้าและมักจะ จำกัด การลงทะเบียน 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 มีความคิดและอัจฉริยะมากมาย


คำตอบที่ดี นี่เป็นคำอธิบายที่ชัดเจนและสมเหตุสมผลที่สุดจริงๆ
not2qubit

จริงๆแล้วย้อนกลับไปเมื่อ IP ถูกออกแบบมาและบางส่วนของการวางรากฐานแรก ๆ สำหรับการทำงานกับข้อมูลในจำนวนเต็มทวีคูณของ 8 บิตไม่ได้รับ สถาปัตยกรรมจำนวนมากในเวลานั้นมีการลงทะเบียนและขนาดคำในทวีคูณของ 12 หรือ 18 บิตตัวอย่างเช่น นี่เป็นเหตุผลหนึ่งว่าทำไม octal จึงเป็นที่นิยมในเวลานั้น 18 บิตสามารถแสดงเป็นตัวเลขฐานแปด 6 หลักโดยไม่มีการสูญเสียและไม่มีของเสีย 12 บิตคือ 4 ฐานแปด โดยทั่วไปแล้วไมโครคอมพิวเตอร์จะทำงานในปริมาณ 8 บิต แต่ในเวลาต่อมาไมโครคอมพิวเตอร์เริ่มเชื่อมต่อกับอินเทอร์เน็ตเป็นประจำ (โดยเฉพาะโดยตรง)
CVN
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.