专栏名称: 程序猿
本微信公众号:imkuqin,为程序员提供最新最全的编程学习资料的查询。目前已经开通PHP、C/C++函数库、.NET Framework类库、J2SE API查询功能。
目录
相关文章推荐
OSC开源社区  ·  效果媲美Cursor的开源替代:Roo-Cline ·  3 天前  
码农翻身  ·  我用1小时AI神器,骗过了整个技术团队 ·  3 天前  
OSC开源社区  ·  罗永浩AI创业项目J1 ... ·  5 天前  
程序猿  ·  因 Bug 被用户薅走 28 万,这款小程序凉了 ·  5 天前  
程序猿  ·  小米有格局——官方正式开源「Home ... ·  1 周前  
51好读  ›  专栏  ›  程序猿

localhost vs 127.0.0.1

程序猿  · 公众号  · 程序员  · 2017-01-19 22:49

正文

来自:码农翻身(微信号:coderising)

作者:刘欣


前几天有人问我localhost的原理, 我发现自己理解的也不透彻, 今天参考了《TCP/IP详解卷1》 和 wikipedia中的相关条目以及stackoverflow上的问答 , 理出一点眉目, 欢迎大家讨论,欢迎批评指正。


在开始之前,  先来了解下一个叫loopback的概念。

loopback ,  顾名思义, 就是转一圈就回来,把一个东西, 例如电子信号、数据流不加修改和处理的返回到它的来源地。  

具体到现在的计算机软件系统, 我们的网络协议栈软件会实现一个虚拟的网络接口(可以简单的理解为虚拟的网卡),专门用于loopback 。  
IPv4 的网络标准把 从127.0.0.1 到 127.255.255.254 IP地址块都用作loopback 。 

所有的发到这些地址的数据包都会被毫发无损的返回去(looped back ) , 这一千六百多万个个地址中,最知名的、最常用的就是127.0.0.1 。

(码农翻身注: 你可以试着ping 一下 127.255.255.254, 看看有什么效果)

对于IPv6来说, 它只把一个地址用作loopback , 就是::1(0000:0000:0000:0000:0000:0000:0000:0001) 。


有了loopback 地址, 同一个计算机上的进程通信都很方便了, 根本不用走实际的物理网卡。


比如说你在本机建立了一个Web服务器,然后通过浏览器用http://127.0.0.1:8080 去访问, 操作系统内的网络协议栈会把这个HTTP GET请求封装到一个TCP包中,写上目的端口号8080,  然后再封装到一个IP包中, 写上目的地址127.0.0.1 。

但是这个IP数据包并不会发送到物理的网卡那里去,更不会通过数据链路层发送到局域网乃至互联网中, 实际上它发给了虚拟的网络接口, 然后立刻被looped back到IP层的输入队列中。

IP层收到数据包,交付给TCP层, TCP层发现目的端口是8080, 就会把GET请求取出来,交付给绑定8080端口的Web服务器。

在Unix 和 Linux系统中, 通过把loopback 接口命名为 lo 或者 lo0  (注意第一个字母是L的小写字母,不是数字一)

至于localhost , 这就是个本机的主机名, 在大多数机器上, 这个主机名都会被计算机操作系统映射到127.0.0.1 (ipv4)或者::1 (ipv6) ,    那使用localhost 和ip 实际上一样了。

127.0.0.1 localhost 
::1 localhost    
当然你可以手工的修改hosts 文件来改变这种默认映射 (实际上很少人这么干)。

Windows的hosts 文件位置:   
%SystemRoot%\System32\drivers\etc\hosts 
Unix , Liunx的hosts 文件位置:
/etc/hosts    

但是有个有意思的例外就是mysql ,  在Linux 上, 当你使用localhost来连接数据库的时候, Mysql 会使用Unix domain socket来传输数据, 这种方式会快一些, 因为这是一种进程内通信(IPC)机制, 不走网络协议栈, 不需要打包拆包, 计算校验和,维护序号等操作。

当你使用127.0.0.1的时候, mysql 还是会使用TCP/IP协议栈来进行数据传输。


(完)


来自:码农翻身(微信号:coderising)



●本文编号2192,以后想阅读这篇文章直接输入2192即可。

●本文分类“Web开发,搜索分类名可以获得相关文章。

●输入m可以获取到文章目录

本文内容的相关公众号推荐

Web开发

前端开发


更多推荐15个技术类公众微信

涵盖:程序人生、算法与数据结构、黑客技术与网络安全、大数据技术、前端开发、Java、Python、Web开发、安卓开发、iOS开发、C/C++、.NET、Linux、数据库、运维等。