你真的了解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。。

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

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


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

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

想象你到世界上找一个叫Monica2333的人,你不可能大街上随便逮到一个人就问你认识Monica2333吗..(当然如果你真这么干了,请关注公众号 码农知识点,小姐姐在这里等你~)
你应该先搞清楚 Monica2333住址是在哪个国家哪个城市哪个区哪个街道,从国家-》城市-》区-》小区一步步定位,这么找人就符合常理了。。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呀~

欢迎关注我的公众号:「码农知识点」,和我交流讨论~

参考资料:
https://www.zhihu.com/question/20717354
https://time.geekbang.org/column/article/8590
https://www.tech-faq.com/127-0-0-1.html
https://www.howtogeek.com/225487/what-is-the-difference-between-127.0.0.1-and-0.0.0.0/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容

  • 网络层提供的两种服务 在计算机网络领域,网络层应该向运输层提供怎样的服务(面向连接还是无连接)曾引起了长期的争论,...
    srtianxia阅读 3,919评论 0 12
  • # 图解TCP/IP 标签(空格分隔): 2018招聘 --- ##第1章 网络基础知识 ### ### 1.1 ...
    Kai_a3da阅读 1,432评论 0 2
  • 这里主要介绍在网络上传输数据时候所需要的IP地址的相关信息。相关内容主要包括:IP地址分类、子网划分、子网掩码、无...
    QuietHeart阅读 1,857评论 0 2
  • 第二章 物理层 频分复用:频分复用的用户在同样的时间占用不同的带宽资源(频率带宽) 时分复用:时分复用的用户在不同...
    PramaWells阅读 3,543评论 1 3
  • 1、切换分支 ··· * master remotes/origin/HEAD -> origin/master...
    大飞_2048阅读 414评论 0 0