【IP/TCP】127.0.0.1和localhost和本机IP三者的区别

目录

1、简洁说明

localhost (IP都没有,不到网络层IP也不到链路层MAC)

127.0.0.1 (有IP,只到网络层IP走网卡,不到链路层MAC)

总结记忆

2、详细说明



1、简洁说明

localhost (IP都没有,不到网络层IP也不到链路层MAC)

localhost 不会解析成ip,也不会占用网卡、网络资源 (到TCP/UDP,但不经过IP)

127.0.0.1 (有IP,只到网络层IP走网卡,不到链路层MAC)

127.0.0.1 回环地址,不经过[链路层,物理层](网络接口层),在IP层就回去,依赖网卡,并受到网络防火墙和网卡相关的限制

总结记忆

localhost    连IP都没有,所以不会经过IP层(不会加IP头,只加TCP头)

127.0.0.1   有IP,但不是网络IP,所以没法解析成MAC地址,所以不会经过MAC层(不会加MAC头)

2、详细说明

1,什么是环回地址??与127.0.0.1的区别呢??


环回地址是主机用于向自身发送通信的一个特殊地址(也就是一个特殊的目的地址)。

可以这么说:同一台主机上的两项服务若使用环回地址而非分配的主机地址,就可以绕开TCP/IP协议栈的下层(网络接口层ARP)。(也就是说:不用再通过什么链路层,物理层,以太网传出去了,而是可以直接在自己的网络层,传输层进行处理了)


IPv4的环回地址为:127.0.0.0到127.255.255.255都是环回地址(只是有两个特殊的保留),此地址中的任何地址都不会出现在网络中

网络号为127的地址根本就不是一个网络地址(因为产生的IP数据报就不会到达外部网络接口中,是不离开主机的包)


当操作系统初始化本机的TCP/IP协议栈时,设置协议栈本身的IP地址为127.0.0.1(保留地址),并注入路由表。当IP层接收到目的地址为127.0.0.1(准确的说是:网络号为127的IP)的数据包时,不调用网卡驱动进行二次封装,而是立即转发到本机IP层进行处理,由于不涉及底层操作。因此,ping 127.0.0.1一般作为测试本机TCP/IP协议栈正常与否的判断之一。


所以说:127.0.0.1是保留地址之一,只是被经常的使用,来检验本机TCP/IP协议栈而已

如果我们可以ping通的话,就说明:本机的网卡和IP协议安装都没有问题。(跟我们当前主机有没有联网没有一点关系)

2,

localhost首先是一个域名(如同:www.baidu.com),也是本机地址,它可以被配置为任意的IP地址(也就是说,可以通过hosts这个文件进行更改的),不过通常情况下都指向:(如下)
IPv4:表示   127.0.0.1

IPv6:表示   [::1]

整个127.*网段通常被用作loopback网络接口的默认地址,按照惯例通常设置为127.0.0.1。我们当前这个主机上的这个地址,别人不能访问,即使访问,也是访问自己。因为每一台TCP/IP协议栈的设备基本上都有local/127.0.0.1


3,

本机IP,我们可以理解为本机有三块网卡,一块网卡叫做loopback(虚拟网卡),一块叫做ethernet(有线网卡),一块叫做wlan(你的无线网卡),


 

  • 127.0.0.1是一个回送(loopback)地址,指本地机,一般用来测试使用
  • 127.0.0.1是通过网卡传输,依赖网卡,并受到网络防火墙和网卡相关的限制,这也是跟localhost重要区别之一,localhost是不走网卡的,因此防火墙设置对localhost是无效的。
  • 正常的网络包都是从ip层进入链路层,然后发送到网络上,而发向127.0.0.1的包,直接在IP层短路了,也就是发到IP层的包直接被IP层接收了,不再向下发送。这也就决定了web应用绑定在127.0.0.1上是不可能被公网访问到的。

一般设置程序时本地服务用localhost是最好的,localhost不会解析成ip,也不会占用网卡、网络资源

有时候用localhost可以,但用127.0.0.1就不可以(网卡,网络资源问题)的情况就是在于此。猜想localhost访问时,系统带的本机当前用户的权限去访问,而用ip的时候,等于本机是通过网络再去访问本机,可能涉及到网络用户的权限。


原文:https://blog.csdn.net/msdnwolaile/article/details/51278867

原文:https://blog.csdn.net/xifeijian/article/details/12879395

 

不为人知的网络编程(十三):深入操作系统,彻底搞懂127.0.0.1本机网络通信 - SegmentFault 思否 

### 解决本地服务器端口访问被拒的问题 当遇到 `access denied` 错误,表明应用程序试图连接到指定的 IP 地址端口号时遭到拒绝[^1]。对于 Java 应用程序中的 `java.net.SocketPermission 127.0.0.1:8080 connect, resolve` 权限问题,通常是因为安全策略文件未授予必要的权限。 #### 安全策略配置调整 为了允许 Java 程序访问特定端口,在 `$JAVA_HOME/jre/lib/security/java.policy` 文件中添加如下条目: ```plaintext grant { permission java.net.SocketPermission "127.0.0.1:8080", "connect,resolve"; }; ``` 这将赋予所有代码库对 localhost 上 8080 端口的读写权限。如果仅需针对某个 JAR 或目录授予权限,则可以更精确地定义 grant 块内的 codebase 属性。 #### 防火墙设置检查 另一个常见的原因是防火墙阻止了对外部服务的请求。确认操作系统自带防火墙或其他第三方防护软件是否拦截了该连接尝试,并适当开放所需端口。 - 对于 Windows 用户来说,可以通过控制面板 -> 系统与安全 -> Windows Defender 防火墙来管理规则; - Linux 发行版一般采用 iptables 或 ufw 工具来进行网络流量过滤; #### Web容器/应用服务器状态验证 确保所使用的 web 容器(如 Tomcat)或框架(如 Django 的开发服务器)已经启动并监听正确的地址端口。有时默认绑定的是 IPv6 地址而非传统的 IPv4 (`::1`) ,而浏览器可能只支持后者(`127.0.0.1`) 。因此建议显式指明要绑定的具体接口: 对于 Django 开发环境而言,可以在命令行参数里加上 `--bind=0.0.0.0:8000` 参数让其接受来自任何地方的请求(注意生产环境中不推荐这样做)[^2]. 而对于 Apache Tomcat , 则应在 conf/server.xml 中修改 Connector 节点的相关属性 : ```xml <Connector port="8080" protocol="HTTP/1.1" address="127.0.0.1" connectionTimeout="20000" redirectPort="8443" /> ``` 最后重启相应的服务使更改生效。 #### 测试连通性 使用 telnet 或者 netstat 等工具测试本机上相应端口的状态可以帮助进一步诊断问题所在。例如执行 `telnet 127.0.0.1 8080`, 如果能够成功建立 TCP 连接则说明不存在物理层面上的障碍。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值