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.