专栏首页高性能服务器开发你真的了解127.0.0.1和0.0.0.0吗~

你真的了解127.0.0.1和0.0.0.0吗~

事出有因,前段时间老大让小姐姐在测试环境搭建一个ELK。我说我搭好了,但Kibana端口不知为啥没暴露出去,其他机子访问不了我的Kibana但确可以ping通这台机子...一个小伙伴马上用netstat命令确定到我把Kibana IP绑到127.0.0.1上了,然后我就收到了组内一堆 “ ..... ” 的回复。。

幸好阿姨带着口罩上班,不然他们可能看到我没洗的小红脸(?。。嗯,做人就是要脸皮厚)。。

在了解127.0.0.1和0.0.0.0是啥之前(因为这个问题实在太常识了),我们先看一下为啥会有IP。

网络传输需要解决的主要问题有两个: 发给谁 和 通过怎么样的路线才能发给他(也就是路由)。

IP的作用

我们先来看一下TCP/IP封装的数据包结构:

当我们发送数据时,按照应用层 —>数据链路层自上而下封装数据包。当我们接收数据时,按照数据链路层 —>应用层 进行拆包。这里我们再来看一下数据链路层以太网帧的结构:

每个网卡在出厂时就会有一个全世界唯一的MAC地址,就相当于是我们每个人在世界上都是唯一的。那MAC地址其实就能解决第一个 发给谁 的问题。那为啥还需要IP层呢?

想象你到世界上找一个叫Monica2333的人,你不可能大街上随便逮到一个人就问你认识Monica2333吗..(当然如果你真这么干了,请关注公众号 码农知识点,小姐姐在这里等你~) 你应该先搞清楚 Monica2333住址是在哪个国家哪个城市哪个区哪个街道,从国家-》城市-》区-》小区一步步定位,这么找人就符合常理了。。IP解决的就是网络上数据包的路由定位困难问题

IP的定义

IP怎么表达出“国家城市区”的概念呢,这就是IP地址定义的事了。

IP 地址用32位来表示,通常被分割为4个“8位”。以“点分十进制”表示成 [a.b.c.d] 的形式。同时这32bit又被划分为网络号主机号组成。比如10.100.122.2/24 这个IP:10.100.122.2是“点分十进制”表示形式,/24 表示的是前24位是网络号,后8位是主机号。这个网络号其实充当的就是“国家城市区”的概念。比如我们只需要记住怎么去往10.100.122.x,就知道怎么去找10.100.122.1/24和10.100.122.2/24了。为了方便获取网络号 ,又出现一个子网掩码的概念。子网掩码就是网络号位上全为1,主机号全为0的IP地址。这样当 IP&子网掩码得到的就是IP的网络号。所以10.100.122.2/24的子网掩码就是255.255.255.0。

好了,我们来看一下IPv4对IP地址的划分:

其中A/B/C类可用于表示公网IP。D类用于多播组号,使用这一类地址,属于某个组(相同网络号的)的机器都能收到,E类还留待使用。但是我们并不用记住公网IP是属于A/B/C类中哪一类,我们只需要用/24或/16这样的CIDR方式去区分IP的网络号和主机号就可以。

实际上,A/B/C类划分的IP显然是不够用每个地球人用的,我们日常在接入公网时,都需要走能有公网IP的网关。在整个公网内部,再分配私有IP地址给每个人上网使用就可以了。比如家庭常用的192.168.0.x/24 私有IP网段。

此外,在这五类IP地址基础上还划分出了特殊的IP网段

我看心情选了一部分。小伙伴也发现了,127.0.0.1和0.0.0.0终于出现了,但我们现在先不讲他们俩。我们再回到开始的第二个问题: 通过怎么样的路线才能发给他

IP路由

上面我们说了IP的目的就是将路由简单化,IP的网络号承担了"一组IP 的路由"出入口的作用。实际上网关就是这个出入口。不同局域网(IP网络号不同)的网络通信必须经过网关,相同局域网的网络通信可以靠广播和MAC地址来送达目标机器(也就是二层协议行的通)。

好了,假使我们从203.16.20.5/24 —> 203.16.24.4/24 发一个包,其中源IP和目标IP都是公网IP。那包的路由过程如下:

源机器网络程序在封装数据包的过程中发现目标机器和自己的IP不在同一局域网内,则需要通过网关将包从网卡发出去。1处的数据包结构为:

到了网关1,拆包发现目标IP地址是 203.16.24.4/24。查了下自己的路由表,发现要想访问 203.16.24.4/24,要从 203.16.22.2/24 这个口出去,下一跳为 203.16.22.4/24。此时2处的数据包结构为:

到了网关2,拆包发现目标IP地址是 203.16.24.4/24。查了下自己的路由表,发现要想访问 203.16.24.4/24,要从 203.16.24.1/24 这个口出去。此时3处的数据包结构为:

到了目标机器,拆包发现目标IP地址就是自己呀,所以进行更上层的拆包,把数据收进来就可以了。

我们可以发现这种方式的路由每经过一次局域网,MAC地址需要改变,但IP地址不需要改变。这种网关称为转发网关。而实际上还存在一种改变 IP 地址的网关,称为NAT 网关。我们就不展开了,小伙伴可以自行搜索。

现在我们知道IP/MAC地址/网关等怎么解决上述两个 发给谁 和 通过怎么样的路线才能发给目标机器 的问题了(当然还有路由策略等内容没有展开,我们这里只讨论如果有路由路线,咋发的问题)。但特么127.0.0.1和0.0.0.0到底有啥特殊的啊。。。

127.0.0.1 & 0.0.0.0

终于要切入正题了。。

127.0.0.1

从上面 特殊的IP网段中我们可以知道127.0.0.1表示的是回环IP地址(loopback address)。啥意思呢?所有发往目标IP为127.0.0.1的数据包都不会通过网卡发送到网络上,而是在数据离开网络层时将其回送给本机的有关进程。

形象些说就是因为发送数据包是从应用层 —>数据链路层自上而下一层层按照程序封装的,当到了网络层时,发现目标IP是127.0.0.1,就不会再往下封装数据链路层了,而是把包又丢给需要往上层解析的队列中了。

实际上localhost通常也代表127.0.0.1。这是因为通常在本机Hosts文件会把localhost映射为127.0.0.1 。此外以127开头的IP地址都是回环地址,只是我们通常使用127.0.0.1。所以这只能在本机来回收发包的地址有啥用呢?本机测试用!!

0.0.0.0

0.0.0.0这个IP地址指的是没有路由的元地址,通常被用来表示无效的,未知的 或是 没有指定目标IP的地址。看不懂没关系,它其实相当于Java中的this,真表示啥要放到实际所处环境中去考虑。用处主要有:

  • 本机所有IP 当考虑它在一台服务器中的作用时,它指代的就是这台机器上所有的IP。假如一台机器上有两个IP:203.16.20.5/24 和 203.16.24.4/24。如果我们把一个Java应用的IP绑定到了0.0.0.0:8080,那访问203.16.20.5:8080 和 203.16.24.4:8080都可以与这个Java应用建立连接。
  • 默认路由

上面讲IP路由的时候我们提到了路由表。路由表就是一个记录数据包下一跳应该去哪的路由规则。每一条规则至少包含三项信息:

网络ID:就是目标地址的网络ID。

子网掩码:用来判断IP所属网络。

下一跳地址/接口:就是数据在发送到目标地址的旅途中下一站的地址。

假设一个IP匹配了多条路由规则,则子网越小的越优先,也就是/n这样的CIDR越大的越优先。而假如配置了0.0.0.0/0 -> via 111.222.1.254这样的路由策略,表示的是当解析不到任何精确的路由规则时,下一跳就统统跳往111.222.1.254。0.0.0.0在这里就是默认路由的意思。

  • DHCP 当一个网络设备初次启动时,假如没有配置IP。它需要通过DHCP协议向所处局域网要一个IP。但DHCP是建立在UDP 上的协议,没IP咋发包要IP啊。这里0.0.0.0/0的作用就是在没要到IP时所使用的源IP。放张协议图,感兴趣的小伙伴可进一步了解:

为了首尾呼应,小姐姐再讲一个网上看到的一个不那么冷的笑话吧。。

bitchcheker是一个扬言要攻击Elch的黑客:

至此你有没有更了解127.0.0.1呀~

本文分享自微信公众号 - 高性能服务器开发(easyserverdev)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 为什么 IPv6 难以取代 IPv4

    网络层协议承担了分组(Packet)转发和路由选择两大功能,它能够为上层提供在不同主机之间运输分组的职责,IP 协议作为网络层协议,它虽然只能提供无连接的、不可...

    范蠡
  • 年薪五十万的程序员在北京过着怎样的生活

    “收入只是别人看到的表面,体面和光鲜下掩盖的真相只有自己知道。如鱼饮水,冷暖自知。”

    范蠡
  • 2020 年好好读一读开源代码吧

    2019 年就这么结束了,2020 年也来临了,虽然我曾对过去 2019 年做了一份总结,但是认真的来说,其实我对自己的 2019 年的收获并不太满意,一个主要...

    范蠡
  • 很多人不知道什么是大数据,分享2019年我用Python爬虫技术做企业大数据的那些事儿

    什么是大数据和人工智能,分享2019年我用Python爬虫技术做企业大数据的那些事儿

    孔雀
  • 美图GeoIP服务实践(文末赠书券)

    3.用户画像及其他在线业务类:如美拍账号经济体系需要检测校验用户的常用登陆地信息。

    美图数据技术团队
  • 用LUA字典进行IP数据去重操作

    因为业务需要,监控手机客户端对服务器在一分钟内请求的总数和IP访问量(求PV、IP数),要对IP数据进行去重操作,单位时间1分钟的HTTP请求,IP相同的只保留...

    糖果
  • 分享-python爬虫遇到封IP+验证码+登陆限制,如何解决?

    现在国家在鼓励做大数据、全面进行数字化中国建设,很多企业包括很多有前瞻性的创业人都开始进军大数据,各种根据自己的擅长领域开始储备数据源,我们需要做大数据第一步就...

    孔雀
  • 【普】静态IP和动态IP有什么区别?

        动态IP和静态IP的区别在于:动态IP需要在连接网络时自动获取IP地址以供用户正常上网,而静态IP是ISP在装机时分配给用户的IP地址,可以直接连接上...

    青果云小潘
  • 二百元成本单网站每天爬取百万量级数据的方法

    在网络爬虫抓取信息的过程中,如果抓取频率高过了网站设置的阀值,会被禁止访问。通常,网站的反爬虫机制依据IP来标识爬虫。

    普通程序员
  • 更换IP地址操作

    有时候我们因为网络问题、或其他原因需要更换服务器上绑定的IP地址,在更换IP之前需要明确下腾讯云IP的分类;

    夏日萤火

扫码关注云+社区

领取腾讯云代金券