打开浏览器,输入网址,按下回车。几秒钟的加载动画之后,网页内容就展现在眼前。这很简单对吧?
但是这些过程之所以能发生,都离不开一个最基础也最关键的东西 —— IP(Internet Protocol)
没错这篇文章是来科普关于IP的知识的
你或许听说过IP地址这个词汇,但你是否好奇过:IP地址究竟是什么?而IP又是什么?
!{tip}
你可能注意到了我将IP地址和IP特意分开了
没错IP和IP地址本质上并不是一个东西
IP的全称是 Internet Protocol,也就是互联网协议。
IP就是网络世界里的信封,上面记录着发件地址、收件地址和一些额外信息。
其中,信封上的地址,就是我们口中的IP地址;而信封里的信,则是我们想要传输的数据
不过,IP 地址可不像现实中的地址。哪怕现实中填错了也可能送到,但在网络中,如果 IP 地址出错,就会导致“投递失败”或“错投”。
IP地址的表达格式
目前IP地址有两种主流格式,分别是ipv4地址和ipv6地址(就是IP协议的不同版本的地址),它们本质上都是一个 二进制数 ,只是 ipv6 能表示的数字范围比 ipv4 大得多
其中ipv4地址这样表达 192.168.1.1
这种表达方式有个专门的名字 —— 点分十进制
ipv4地址长度为4字节,每个字节按照十进制表示为0~255然后用点分割每个字节表示的数字
!{tip}
按照上面的规则一个正确的ipv4地址应该是用点分割的4组0~255的数字
按照这个规则
192.168.100.100
这个地址就是对的
119.59.96.262
这个地址就是有问题的,因为最后一组数字超过了255
ipv6地址长度是ipv4的4倍也就是16字节,这么长的数字使用点分十进制表达就太不方便了。
ipv6的表达方式为 8组16进制数 组成,不过这8组16进制数不再使用点进行分割了而是使用冒号(:
)分割
!{tip 例如:}
07ab:f270:b099:efc7:0ad3:72a6:e54c:4bfc
你可能注意到了这样表达仍然非常的长,好在ipv6地址的表达是能缩写的,有以下这些规则
-
如果地址中某组16进制数开头包含0,可以忽略这组数字开头的0
!{tip 例如:}
07ab:f270:b099:efc7:0ad3:0006:e54c:4bfc
可以缩写成
7ab:f270:b099:efc7:ad3:6:e54c:4bfc
-
可以用
::
表示连续的多组0000
不过只能使用一次!{tip 例如:}
07ab:f270:0:0:0ad3:0:0:0
可以缩写成
07ab:f270::0ad3:0:0:0
地址分类
不管是ipv4地址还是ipv6地址都有对应的地址分类
私有地址(本地唯一地址)
!{warning}
在ipv6中不叫私有地址而是叫 本地唯一地址
这种地址有个特点就是不能在互联网上直接使用,只能在能被自己管理的网络中使用(例如家庭网络)
在ipv4中下面这些是私有地址
10.0.0.0 ~ 10.255.255.255
172.16.0.0 ~ 172.31.255.255
192.168.0.0 ~ 192.168.255.255
在ipv6中则更简单辨识只要是fd
开头的ipv6地址都是本地唯一地址
!{tip 补充}
严格来说,IPv6本地唯一地址前8位固定为
fd
,即fd00::/8
公网地址(全球单播地址)
!{warning}
在ipv6中不叫公网地址而是叫 全球单播地址
和私有地址相反 它能直接在互联网中使用,但是一般只有ISP(就是 电信、移动、联通 之类的运营商)能够分配和管理
ipv4的公有地址不是很好辨认,范围在1.0.0.0
~239.255.255.255
(除去上面介绍的私有地址剩下的都是公网地址)
环回地址
环回地址是一个非常特殊的地址,不管什么数据发往这个地址最终都会发回来 里面的环回就是这个意思
!{tip 拓展}
发往环回地址的数据是不会在物理链路上传输的
其中ipv4的环回地址是127.x.x.x
是的在ipv4中127开头的ip地址都是环回地址
ipv6则不同只有0000:0000:0000:0000:0000:0000:0000:0001
是环回地址,也就是就是::1
(缩写)
特殊地址
不管是ipv6还是ipv4都有特殊的地址
例如在ipv4地址中0.0.0.0就表示未指定的地址(在网络服务中一般意思为任意ip地址),不仅ipv4拥有未指定地址 ipv6也有 也就是::
(和ipv4一样全0的地址就是未指定地址)
分片
和现实生活中一样,如果东西太多了就要分成多份包裹再投递出去,网络世界中的信封(IP)也一样如果数据太多了也要分成很多份走
不管是ipv4数据报还是ipv6数据报最大都只能传输65535个字节的数据
!{warning}
不过在ipv4中最大只能负载65515个字节的数据,因为ipv4的数据包长度字段是包括首部的
不过“信封”最大支持65535字节并不代表一定能传输这么大的数据包,因为IP数据包的长度实际上是受到二层协议的限制的 例如以太网的单个帧最大就只能传输1518字节
!{tip 举个例子}
就例如可以造出比集装箱还大的箱子,但是因为装不进集装箱导致没有交通工具能够将包裹送出去
在网络世界中也是这样,理论上确实可以传输特别大的IP数据包但是送不出去,所以说需要分成很多小的数据包才能正常传输
!{tip 拓展}
IP协议有个特性——它是不可靠的
也就是说一旦丢包如果数据包特别大重新传输的开销是特别大的
路由
就如现实生活中一个一个包裹可能要经过多个物流节点才能送到你手上,IP数据包也是如此需要有多个节点才能跨越千里将数据传输到你的设备中
在现实的物流网络中要决定包裹怎么送经过那些网点,网络世界中也一样每台路由器都要决定数据包要发往何处,这个过程就叫做路由
当然也和现实生活中一样,每个快递网点都要决策如何送才能保证你不会觉得快递太慢了,从而喜提投诉。
对的!网络世界中也是如此,路由器也是要决定如何送才能保证数据包能够及时送达
IP 协议可能看起来很抽象,但它的本质就是把信息可靠地“送达”
分片让大数据可以顺利通过网络,路由让信息可以跨越千里送达终点
不过碍于篇幅和有些内容确实比较复杂不适合以科普的方式讲解,例如 IP首部、路由协议、子网划分等难点在本文中均被忽略
当然,如果你想知道更多,可以自己查查资料,或者直接在评论里问我,我会尽量用“人话”来解释 (作者也还是学生,你的问题我不一定能回答上来的,请各位见谅)
如果你觉得这篇文章写的不错,看到下面的大拇指了吗?你懂的。最后如果本文中出现了什么错误也欢迎各位大佬指正!