• ip地址0.0.0.0与127.0.0.1的区别(转载)


    原文链接:http://blog.csdn.net/ttx_laughing/article/details/58586907

    最近在项目开发中发现一个奇怪的问题,当服务器与客户端在同一台机器上时,用服务器ip(本地主机ip)192.168.1.xxx、127.0.0.1以及0.0.0.0都能登陆服务器,于是找点资料研究一下。 
    其实,最开始是发现服务器ip填0能登陆成功,后来知道了系统自动补全ip地址,什么意思呢,就是如果你填0或0.0或0.0.0,系统都会自动补全ip为0.0.0.0。下面就简要介绍一下这三种ip的区别。 
    相信读者都知道,ipv4是点分十进制模式,每个ip地址都有特殊的含义。首先说一下ip地址:127.0.0.1,这是大家最熟悉不过的本地loopback(回环)地址,代表本地主机,在windows和Linux上等价于localhost,可在C:WindowsSystem32driversetchosts文件中修改主机名或定义ipv6地址(# ::1 localhost)。 
    正常的网络包从ip层进入链路层,然后发送到网络上, 
    而发向loopback地址的包,直接在IP层短路了,也就是发到IP层的包直接被IP层接收了,不再向下发送。 
    192.168.1.x,是公网ip地址,这些是在网络中代表本机的ip地址,可通过此ip地址远程访问或控制主机。 
    0.0.0.0,最特殊的一个ip地址,代表的是本机所有ip地址,不管你有多少个网口,多少个ip,如果监听本机的0.0.0.0上的端口,就等于监听机器上的所有ip端口。换句话说,就是只要数据报目的地址是你机器上的一个ip地址,那么就能被接受。这个ip相当于Java中的this,代表当前设备的IP。 
    下面再来说说这三种地址的区别。在Java开发中,服务器端如果没有显示绑定ip地址,如:

    ServerSocket serverSock = new ServerSocket(8888);
    serverSock.accept();

    系统默认的ip地址是0.0.0.0,此时用以上3种ip都能连接成功。 
    如果显示绑定ip,如:

    ServerSocket serverSocket = new ServerSocket();
    serverSocket.bind(new InetSocketAddress("127.0.0.1",8888));
    serverSock.accept();

    此时ip192.168.1.x将连接不上,而ip127.0.0.1和0.0.0.0仍然可以连接。同理,也可以显示指定ip192.168.1.x
    在java服务器开发中,一般不需指定ip,因为这种情况只会出现在服务器和客户端在一台主机上。当然,如果想屏蔽某个ip,可在服务器中显示指定,也可在客户端登录时直接屏蔽。

    您的资助是我最大的动力!
    金额随意,欢迎来赏!

  • 相关阅读:
    windows下安装mysql-5.7.11-winx64
    memset库函数
    [转]全面解析《嵌入式程序员应该知道的16个问题》
    Cent OS 7 下 Redis 5.0.5 安装与配置
    SVN+TortoiseSVN的Windows版安装和配置
    工具和环境--目录(随时更新)
    Linux安装和配置Nodejs和NPM
    Windows10命令提示符窗口大小导致执行效率不同问题
    Windows安装Nodejs和npm以及创建项目
    WebStorm 2019.3.2安装与配置
  • 原文地址:https://www.cnblogs.com/Corphish/p/7026078.html
Copyright © 2020-2023  润新知