127.0.0.1 และ localhost แตกต่างกันอย่างไร


157

สมมติว่าต่อไปนี้ถูกกำหนดใน.../hosts:

127.0.0.1 localhost

อะไรคือความแตกต่างที่แท้จริงระหว่างการใช้127.0.0.1และlocalhostชื่อเซิร์ฟเวอร์โดยเฉพาะอย่างยิ่งเมื่อการกดปุ่มกระบวนการทำงานในเครื่องที่กำลังฟังการเชื่อมต่ออยู่?


15
คุณสามารถพูดได้ว่าlocalhostเป็นอิสระจากโปรโตคอลทั้ง IPv4 และ IPv6 จะทำงานได้
Steve-o

คำตอบ:


122

ความแตกต่างที่เป็นไปได้มากที่สุดก็คือคุณยังต้องค้นหาข้อมูลจริงจากที่localhostอื่น

หากคุณใช้127.0.0.1ซอฟต์แวร์ (อัจฉริยะ) จะเปลี่ยนเป็นที่อยู่ IP โดยตรงและใช้งาน การใช้งานบางอย่างของgethostbynameจะตรวจจับรูปแบบประ (และสันนิษฐานว่าเป็นรูปแบบ IPv6 ที่เทียบเท่า) และไม่ทำการค้นหาเลย

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

โดยที่ฉันหมายความว่าในบางระบบhostsไฟล์ท้องถิ่นสามารถข้าม host.confควบคุมแฟ้มนี้บนลินุกซ์ (และ Unices อื่น ๆ อีกมากมาย)


6
ข้อแตกต่างที่สำคัญคือการเชื่อมต่อสามารถทำได้ผ่าน Unix Domain Socket ดังที่ระบุไว้ที่นี่: stackoverflow.com/questions/3715925/localhost-vs-127-0-0-1
Don Viegues

/etc/nsswitch.confเลือกว่าhostsจะใช้หรือ DNS ใช้เป็นอันดับแรกสำหรับการค้นหาโฮสต์หรือไม่หาก nss ​​กำลังทำงาน
Mark Lakata

@ DonViegues นั่นคือ MySQL ที่เฉพาะเจาะจงและการออกแบบที่ไม่ดี IMO มันจะเห็น localhost และพยายามใช้ unix-socket แทนการเชื่อมต่อโดยใช้ IP แต่สำหรับ 127.0.0.1 มันแค่ใช้ IP
Arman Ordookhani

@ArmanOrdookhani AFAIK หากคุณกำลังเชื่อมต่อกับโฮสต์ระยะไกลผ่าน SSH และจากนั้นไปยัง MySQL (เช่นอุโมงค์ SSH เพื่อไปยังเซิร์ฟเวอร์ MySQL) คุณต้องใช้ 127.0.0.1 เพราะทุกอย่างผ่าน TC / IP แต่ถ้า 2 กระบวนการที่ทำงานบนเครื่องเดียวกันต้องการเชื่อมต่อ localhost (ซ็อกเก็ตยูนิกซ์) จะเร็วกว่า / มีค่าโสหุ้ย ขอบคุณ!
Don Viegues

1
@ DonViegues ใช่แล้วซ็อกเก็ตยูนิกซ์ที่ถูกต้องมีค่าใช้จ่ายน้อยกว่า TCP / IP ฉันแค่อยากจะพูดถึงพฤติกรรมนี้เฉพาะกับ MySQL และไม่ใช่สิ่งที่อยู่ในระบบปฏิบัติการหรือระดับเครือข่าย
Arman Ordookhani

36

Wikipedia สรุปสิ่งนี้ได้ดี:

บนระบบคอมพิวเตอร์ที่ทันสมัย ​​localhost ในฐานะชื่อโฮสต์แปลเป็นที่อยู่ IPv4 ในบล็อกสุทธิ 127.0.0.0/8 (ลูปแบ็ค) ปกติ 127.0.0.1 หรือ :: 1 ใน IPv6

ข้อแตกต่างเพียงอย่างเดียวก็คือจะต้องค้นหาใน DNS เพื่อหาระบบที่localhostแก้ไขได้ การค้นหานี้รวดเร็วจริงๆ ตัวอย่างเช่นเพื่อให้stackoverflow.comคุณพิมพ์ลงในแถบที่อยู่ (หรือใช้ bookmarklet ที่ชี้ไปที่นี่) ไม่ว่าจะด้วยวิธีใดคุณจะได้รับชื่อโฮสต์ที่นี่ localhostให้ฟังก์ชั่นที่คล้ายกัน


11
นี่เป็นสิ่งสำคัญจริง ๆ localhost สามารถแก้ไขเป็นที่อยู่ IPv6 ได้ในขณะที่ 127.0.0.1 ไม่สามารถทำได้ การใช้ localhost บนระบบ IPv6 เท่านั้นที่สามารถทำงานได้ในขณะที่ 127.0.0.1 จะไม่สามารถใช้งานได้เนื่องจาก IPv4 ไม่สามารถใช้งานได้
เออร์วินแจนเซน

32

แอปพลิเคชั่นบางตัวจะจัดการกับ "localhost" เป็นพิเศษ ไคลเอนต์ mysql จะปฏิบัติต่อ localhost เป็นคำขอเชื่อมต่อกับซ็อกเก็ตโดเมน unix ในพื้นที่แทนการใช้ tcp เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ใน 127.0.0.1 นี่อาจเร็วกว่าและอาจอยู่ในโซนการตรวจสอบสิทธิ์อื่น

ฉันไม่รู้จักแอปอื่น ๆ ที่ดูแล localhost แตกต่างจาก 127.0.0.1 แต่อาจมีบางอย่าง


8

โดย IP เร็วกว่า

โดยทั่วไปเมื่อคุณโทรตามชื่อเซิร์ฟเวอร์มันจะถูกแปลงเป็น IP ดั้งเดิม

แต่มันจะเป็นการยากที่จะจดจำ IP ด้วยเหตุนี้ชื่อโดเมนจึงถูกสร้างขึ้น

ส่วนตัวผมใช้http://localhostแทนหรือhttp://127.0.0.1http://username


localhost เร็วกว่าไม่ใช้ TCP / IP
Don Viegues

@ Don Viegues - สิ่งที่คุณพูดนั้นขัดแย้งกับคำตอบอื่น ๆ ในกระทู้นี้ คุณสามารถทำอย่างละเอียด?
Dikla

ใช่ฉันจะคัดลอกและวางความคิดเห็นอื่น ๆ ของฉัน: ความแตกต่างที่สำคัญคือการเชื่อมต่อสามารถทำได้ผ่าน Unix Domain Socket ดังที่ระบุไว้ที่นี่: stackoverflow.com/questions/3715925/localhost-vs-127-0-0-1
Don Viegues

5
@DonViegues ที่เป็นเฉพาะกับ MySQL ซึ่งมีการจัดการlocalhostในวิธีพิเศษ แอปพลิเคชันอื่น ๆ จะยังคงค้นหาlocalhostอยู่
William Denniss

0

ไม่มีอะไรแตกต่าง หนึ่งง่ายต่อการจดจำกว่าอีก โดยทั่วไปแล้วคุณจะกำหนดชื่อเพื่อเชื่อมโยงกับที่อยู่ IP คุณไม่จำเป็นต้องระบุ localhost สำหรับ 127.0.0.1 คุณสามารถระบุชื่อที่คุณต้องการ


-3

ความแตกต่างที่สำคัญคือการเชื่อมต่อสามารถทำได้ผ่าน Unix Domain Socket ดังที่ระบุไว้ที่นี่: localhost vs. 127.0.0.1


6
คำตอบที่คุณเชื่อมโยงนั้นเป็นกรณีพิเศษที่ใช้กับ MySQL โดยเฉพาะ en.wikipedia.org/wiki/Localhost#Special_cases
William Denniss
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.