前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >你真的了解127.0.0.1和0.0.0.0吗~

你真的了解127.0.0.1和0.0.0.0吗~

作者头像
范蠡
发布2020-05-06 11:51:52
1.3K0
发布2020-05-06 11:51:52
举报
文章被收录于专栏:高性能服务器开发

事出有因,前段时间老大让小姐姐在测试环境搭建一个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呀~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 高性能服务器开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • IP的作用
  • IP的定义
  • IP路由
  • 127.0.0.1 & 0.0.0.0
相关产品与服务
弹性公网 IP
弹性公网 IP(Elastic IP,EIP)是可以独立购买和持有,且在某个地域下固定不变的公网 IP 地址,可以与 CVM、NAT 网关、弹性网卡和高可用虚拟 IP 等云资源绑定,提供访问公网和被公网访问能力;还可与云资源的生命周期解耦合,单独进行操作;同时提供多种计费模式,您可以根据业务特点灵活选择,以降低公网成本。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档