為什麼我們家裡的IP都是192.168開頭的?

2023.01.09

為什麼我們家裡的IP都是192.168開頭的?

IP地址就像快遞裡填的送件和收件地址,是一串編號,用於在紛繁複雜的網絡世界中標識你的位置。

是的,還是我小白,什麼技術博主,老情感博主了。來講個故事。資深老舔狗小張今天很興奮,說什麼也要請大家喝奶茶。因為他說他感覺要跟喜歡的女生小呂修成正果了。一問為什麼。他耳朵都紅了,說"我覺得小呂在暗示我了,她說她喜歡看阿凡達,正好我長得就像阿凡達"。

聽了讓人皺眉。他繼續說:"她說她喜歡射手座,正好我就是"我撓撓頭:"行,別說了,懂了。她住上海,你也住上海,你兩算是同居了"他愣了一會,看了看我:"別說這種舔狗話,但你說的其實有點道理,上次她讓我幫她修電腦,我發現她家的ip是192.168.xx.xx,巧了,我家的也是,我懷疑我們住的很近"。

很感動。

我甚至沒敢告訴他,我家裡的IP也是192.168開頭的,我猜你家的也是,就現在正在看這篇文章的你。

但問題就來了,為什麼大家的IP都是192.168.xx.xx?

我們今天來聊下這個話題。

IP地址是什麼

我們知道,網絡通訊的本質就是收發數據包。如果說收發數據包就跟收發快遞一樣。那IP地址就類似於快遞上填的收件地址和發件地址一樣,有了它,路由器就可以開始充當快遞員的角色,在這個紛繁複雜的網絡世界裡找到該由誰來接收這個數據包。

圖片

收發數據就像收發快遞

由於我們現在主流的還是IPV4地址,所以默認以IPV4為例進行講解。

這個IP大概長這樣。

圖片

IPv4地址

在控制台裡執行ifconfig​ 就能看到。inet 邊上的 192.168.31.170 就是IP地址。

$ ifconfig  
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500  
    optinotallow=400<CHANNEL_IO>  
    ether 88:36:3d:33:a0:15  
    inet6 fe70::1009:aabf:ecc6:2d10%en0 prefixlen 64 secured scopeid 0x6  
    inet 192.168.31.170 netmask 0xffffff00 broadcast 192.168.31.255  
    nd6 optinotallow=201<PERFORMNUD,DAD>  
    media: autoselect  
    status: active  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

說白了,它就是個特殊點的編號,用於在互聯網中唯一定位到某台機子。

為了表示這個編號,IP地址一共分為4個字節​,一個字節8位​,共32位​,能用來表示最多 2 ^32​,也就是 42億個地址。

貌似。。。有點少?

2021年全球就有78億,今年更是突破了80億,也就是說人均一個IP都做不到。

圖片

當前全球人口數

為此好多年前,就在說IPV4​地址不夠用,要耗盡了,於是才會有後來的IPV6地址。

IPv6用了更多的字節數,因此能表示更多的地址。大概長這樣。

圖片

IPv6地址

是不是很陌生,感覺沒怎麼見過。

這就對了。

大家有沒有發現,用了這麼多年,大部分人其實還在用IPV4地址,不是說要耗盡了嗎?

為什麼大家還一直在用IPV4?

先別急,我們再聊個前置知識點,IP地址的分類。

IP地址的分類

为了更好的管理这42亿个IP地址的用途。我们应该也在教科书上看过这样一张IP分类的图。

圖片

IP地址的分类

大概的意思是32位地址里,开头为0的,那就是A类地址。开头为10的,就是B类,开头为110的,就是C类。在这之后,把剩下的字节数拆成两段,一段表示网络号,另一短表示主机号。

网络号和主机号的关系,就像是某个停车场编号和停车位号的关系。一个城市里有很多停车场,而停车场里又有很多个停车位。每个停车位可以停一辆车,这里的一辆车,其实就是一台电脑(主机)。

大型停车场少,但是能停的车巨多,对应A类地址的网络号少,但是主机号多。

小型停车场到处都是,但是一般能停的车就少,对应C类地址的网络号多,但主机号少。

大佬们一开始这么划分网络,其实也是为了方便管理,比如A类地址,是给大型组织机构用的,主机地址的位数高达1600w+​,C类地址是给小公司用的,主机号只有200+。

这个差距就有点悬殊了,放在今天就不太合理了,我开个网吧可能都不止200台机子对吧,用C类嫌主机号少,用A类又嫌主机号太多。因此现在这套分类机制其实已经很少用了。

取而代之的是方案是,将所谓的ABC分类直接取消,只保留网络号和主机号,并且网络号的位数也不像以前限制的那么死,用一个斜杠告诉用户多少位是网络号,其余的都是主机号。比如 172.20.61.69/20​,那网络号的位数就是20位​,主机号的位数是32-20=12位,能放4096台机子,很灵活,很够用。

圖片

这就是,所谓的CIDR,(Classless Inter-Domain Routing, 无类别域间路由)。

IP地址不够用了吗?

但不管你怎么去分类,在32位下的限制下,你就算玩得再花,只要将A类+B类+C类+X类加起来,IP的个数也最多还是42亿个。还是不够用。

那既然加法不行,那我们就用乘法。

啥意思?

42亿​这个数字对大家来说太大了,为了方便理解,我们改成6个IP。

假设将6拆成4+2​,再让4乘以2,那结果8肯定大于6。

一开始,我们理解的网络世界只有一层,每人一个IP,那就只有6个人能上网。

圖片

相加只能让6人上网

现在我们将网络分成两层。像下面这样。

圖片

相乘能让8人上网

每2个人构成一个"小网络",对外共用一个IP,而内部每个人的IP都不一样,4个小网络共同构成一个"大网络"。比如小明的电脑是1号网络下的6号机子,小红的电脑是2号网络下的6号机子。这样也能做到唯一标识某台机子的效果。

像上面这样,每个2人构成的小网络,就叫做局域网,也就是所谓的内网,用的IP(上面的5,6)也叫私有IP或内网IP,而上面提到的"大网络",则是广域网,用的IP则被称为公有IP或公网IP。

通过这种方式,原本只能让6人上网,现在却能让8人同时上网。这还是IP只有6个的情况下,如果让数字变回42亿,那就能支持远大于42亿的机子上网了。

圖片

公有和私有IP的概念

按照这样的思路,回到上面的ABC类IP地址,大佬们也将它们分成了私有和公有两部分。

在rfc1918文档中定义了私有地址的范围。它们不会出现在广域网中,只会出现在局域网内。

* A类地址:10.0.0.0--10.255.255.255  
* B类地址:172.16.0.0--172.31.255.255  
* C类地址:192.168.0.0--192.168.255.255  
  • 1.
  • 2.
  • 3.

这时候,你再看看C类里的私有地址范围,眼熟不?

192.168.xx.xx就是这网段内的其中一个IP地址。这个范围里大概有6w+个主机号,什么家庭条件能用得完?

于是,就变成了一条街或者一个小区,又或者小区内的几幢楼共用一个公网IP,而内部就用192.168.xx.xx​这样的内网IP。所以只要你在家,大概率会发现你的IP地址是C类的192.168.xx.xx。

圖片

几幢楼共用一个公网IP

但其实只要你想,A类和B类的私有地址也是可以用在局域网里的。

你到了公司里执行下ifconfig​命令,你很可能会发现你的局域网IP就不是192.168​开头的了, 而是172​或者10开头的。

这是因为在公司内网里,需要的IP数量会更大,172和10开头的IP能表示的主机更多,比如10开头的能表示1600w+个。

就不说别的,光A类地址,只拿了个10开头的网络号出来当内网IP就能表示1600w+个主机号,其余的100+个A类网络号都拿来当公网地址。按上面提到算法去进行个相乘,公网IP数 * 内网IP数 = (100+ * 1600w) * 1600w,你也别管我算的对不对,反正就是能提供给好多设备使用,更别说还有B类和C类的还没算呢。

而且上面只考虑了一层局域网,其实局域网内还能再分成多层,局域网内再嵌套局域网。就像下面这样,这样能用的IP数量就更多了。

圖片

局域网内还有局域网

所以说,IP地址虽然不多,但其实完全够用,这也是我们一直以来迟迟不切换成IPv6的原因。够用,能跑,为什么要换?

聊到这里,其实就回答了文章标题的问题,为什么大家的IP都是192.168开头的,是因为IPv4地址有限,为了有效利用这些有限的地址,我们可以将网络分为局域网和广域网,将IP分为了私有IP和公网IP,一个局域网里的N多台机器都可以共用一个广域网IP,从而达到了"做乘法"的效果,大大增加了"可用IP数量",小区里几幢楼可以共用一个公网IP,且因为设备数量不多,一般选用C类的私有地址,也就是192.168开头的地址。

但问题就来了,怎么知道我的公网IP地址是什么?

查询自己的公网IP地址

在家里的电脑上,通过ifconfig​,你能拿到自己的内网IP地址,比如我的就是192.168.31.170。

$ ifconfig  
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500  
    optinotallow=400<CHANNEL_IO>  
    ether 88:36:3d:33:a0:15  
    inet6 fe70::1009:aabf:ecc6:2d10%en0 prefixlen 64 secured scopeid 0x6  
    inet 192.168.31.170 netmask 0xffffff00 broadcast 192.168.31.255  
    nd6 optinotallow=201<PERFORMNUD,DAD>  
    media: autoselect  
    status: active  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

但如果你想知道你的公网IP地址的话,该怎么做呢?

有个简单的方法。你直接在baidu上搜索"我的IP地址",就能看到你的公网IP地址。

圖片

别去ping这个地址,这个图被我p过。

如果你用的是某里云的机子。你也会发现你的机子既有私有IP地址,也有一个公有IP地址。

圖片

某里云可以同时分配公有和私有IP

也是p的图。

当你去ping上面的私有地址172.21.56.59时,你会发现它根本ping不通。

$ ping 172.21.56.59  
PING 172.21.56.59 (172.21.56.59): 56 data bytes  
Request timeout for icmp_seq 0  
Request timeout for icmp_seq 1  
Request timeout for icmp_seq 2  
^C  
--- 172.21.56.59 ping statistics ---  
4 packets transmitted, 0 packets received, 100.0% packet loss  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

而公网地址46.101.121.11却可以ping通。也就是说,在你家的局域网里,你只能通过公网IP地址去访问这台云服务器。

$ ping 46.101.121.11  
PING 46.101.121.11 (46.101.121.11): 56 data bytes  
64 bytes from 46.101.121.11: icmp_seq=0 ttl=48 time=273.481 ms  
64 bytes from 46.101.121.11: icmp_seq=1 ttl=48 time=268.018 ms  
64 bytes from 46.101.121.11: icmp_seq=2 ttl=48 time=266.606 ms  
^C  
--- 46.101.121.11 ping statistics ---  
3 packets transmitted, 3 packets received, 0.0% packet loss  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

这时候,用过他们家服务器的人可能会有个疑问。

只要申请一台云服务,某里云就能给你一个公网IP地址,怎么做到的?

这。。。这么富的吗?

其实,某里云跟管IP的机构,租用了的一批IP地址,在你需要的时候,就能付费租给你,不用了也能回收分配给其他人。

而且公网IP地址下面,其实也可以挂多台云服务器,用上文提到的方式,让多台云服务器共用一个IP。

因此不太需要担心IP耗尽的问题。

总结

• IP地址就像快递里填的送件和收件地址,是一串编号,用于在纷繁复杂的网络世界中标识你的位置。

• IPv4有32位,最多能表示42亿个IP地址。为了更好的管理它们,教科书上出现过ABC这样的分类方式,并且在ABC类里还分为私有地址和公有地址。但目前流行使用CIDR的方式进行分类。

• 为了表示更多主机,我们可以将网络分为广域网和局域网,广域网用公有地址,局域网使用私有地址。将公有地址乘上私有地址,就能表示远大于42亿台的机子。

• 家庭网络较小,往往小区内几幢楼构成一个局域网,这几幢楼共用一个公有IP地址。局域网内选择了C类的私有地址,也就是192.168.xx开头的ip,所以你会发现我们家里的IP基本上都是192.168开头的。

• 在baidu上搜索"我的IP地址",就能看到你的公网IP地址。

差不多了,给大家留个问题吧

上面提到,网络分为广域网和局域网,IP分为公有和私有。一个局域网内所有机子对外使用一个公有IP,对内则使用私有IP。

那么问题来了,公网里不使用私有IP,一个局域网里的私有IP想访问局域网外的公有IP,必然要做个IP转换,这是在哪里做的转换呢?

圖片

私有IP和公有IP在哪进行转换

最后

我在写文章的时候,遇到个小彩蛋。

当我在baidu搜索的网页里,用F12打开浏览器的控制台时。

看到了下面这么一段话。发现是个招聘推广文,想想也是,会开控制台看的基本上都是跟程序员沾边的人,这波是精准引流了。

圖片

招聘宣传语确实写的很好。

看完我emo了,当年我毕业的时候,也想着自己有一天能靠着写代码改变世界。

多年以后,我发现,能改变自己,就已经很了不起了。