• 详解 IP 协议


    引言

    博客到这里,写到了网络层,本篇博客主要对 IP协议进行介绍。

    一、IP 协议段格式

    1

    1. IP 数据报的拆包组包

    在上图中,我们可以看到:一个 IP 的数据报总长度为 16位,这看上去和 一个UDP 数据报的长度相同,最大都为 64KB.

    而虽然 IP协议 看起来也是有个最大 64KB 的限制,但实际上,IP协议 内置了拆包组包的功能。如果一个数据太长了,IP协议 就会先将数据自动拆成多个数据报,再进行传输,最后接收方收到数据时,又会重新进行组包。这样一来,就没有单单的 64KB 的限制了。此外,IP协议 的拆包组包功能是内置在协议中的,不需要程序员实现这一功能,比较方便。

    2. 8 位生存时间

    8 位生存时间这个字段表示 一个 IP数据报 最多在网络上存活多久,而 TTL 并不是一个时间单位,它其实是一个以 " 次数 " 为单位的概念。

    比方说,主机A 给距离较远的 主机B 发送数据,数据每次经过一个路由器转发,TTL 就减 1,而 TTL 一直减到 0 还未到达 主机B 目的 IP,那么就被自动丢弃。而一般情况下 TTL 的次数都较为充裕。

    那么,8 位生存时间这个字段,主要是用来防止出现路由器之间的循环。( A -> B -> C -> A )

    3. 源 IP 与目的 IP

    这是整个 IP 协议中最核心的部分。
    我们将 IP地址 比作成快递单号上的地址,源IP 就表示 " 发件人地址 ",目的IP 就表示 " 收件人地址 "。

    4. IP协议 的两个核心功能

    ① 地址管理

    地址管理:能够通过一系列的规则,将网络上设备的地址给描述出来。
    地址管理中的一些重点部分在下面的 IPv4 协议中会详细介绍到,现在请继续往下看。

    ② 路由选择

    路由选择:根据当下的源地址和目的地址,规划出一条合适的路径。

    此处的 " 路由 " 指的是 IP协议 中的 " 路径规划功能 ",为什么要进行规划?
    因为通过网络从某一端传输到另一端,在这个过程中,并不是 " 一站到达 ",它更多的情况下是错综复杂的路线,下图为我们展现出来了这样的情况。

    主机A 与 主机B 之间进行通信,方框代表网络关口,即路由器。下图中只画出了三条路线,实际上不止三条路线,可以看到,每个路由器代表一个 " 关卡 ",在传输数据的过程中,下一步究竟走哪条路线,这是未知的。

    1

    举第一个例子:小明准备从家里出发去市中心购物,那么他就得先明确起始地和目的地,起始地是家,目的地是商场。可想而知,小明在去之前,就必须得规划好路线。坐公交车、坐地铁、或坐出租车…假设他坐地铁,而坐地铁又分为很多种路线,可能先是 1号线 > 6号线 > 5号线,也有可能是 1号线 > 10号线 > 3号线 > 16 号线…他在去之前就能够规划好路线,以此来提高效率。

    但是在 IP 协议中的路由选择与我们上面说的坐地铁选择路线之间有本质区别,更多的是一种 " 探索式 " 的过程。因为当数据到达某个路由器之后,路由器并不能立马为数据规划好一个整套的路线,路由器只能知晓它附近的情况,即它只知道相邻设备的情况。这很好理解,毕竟路由器是一个物理层面的实体,它并不能掌控全局,它的存储空间有限,不可能通过一个路由器的路由表就保存整个互联网环境的所有情况。

    举第二个例子:杰克第一次来到一个陌生的城市,他也准备去市中心购物。但这时候,他就只能向路人问路,但是路人每次只能列出一个大致的方向。

    当杰克遇到第一个路人A,
    路人A 说:我不知道商场在哪,但我知道你从这里坐 3号线坐到 xxx路,那里一定有购物的地方,即使没有,你也可以再问问别人…

    之后杰克应了路人A 的话,坐了 3号线,当他从 3号线下来的时候,找了半天没找到商场,于是又问了路人B,
    路人B 说:你从这里直走,走到头,再往左转,就能看到购物的地方。

    于是杰克又应了路人B 的话,到了他说的地方,只是发现了服装专卖店,并不是商场,于是他又问了路人C


    在刚刚的例子中,每一个路人,就相当于一个路由器。每个路人都有一个自己熟悉的范围,但一个路人并不知道一套完整的路线,只知道一个大致的方向。而这个例子,就类似于路由器中的一种核心数据结构:" 路由表 "。

    二、IPv4 协议

    在 IPv4 中,计算机主要是通过一个 32位 的二进制数来进行表示一个 IP 地址。

    而为了给人们直观地观察 IP 地址,把这个 32位 整数表示成 " 点分十进制 " 的形式,使用三个点,把整数分成 4份,每一份最大 8位。

    例如:下面的就为人们日常使用的 IP 地址格式
    192.168.1.102
    
    • 1
    • 2

    关于 IP 地址,涉及一个较为重要的问题:IPv4 协议对应的 IP地址 够用吗?

    IPv4 协议对应的 IP地址 实际上使用 32位 整数来表示的,而 32 位的二进制数最多也就只能表示 42亿9千万之多,这是因为当初设计者就是这么设计的,他们也没有想到今天这个时代,互联网发展的如此迅速。

    所以说,针对一个城市、一个人口不那么多的国家,IP 地址或许已经够用了。
    但如果要做到全球通信,就很困难了,因为可能我们每个人不止一个网络设备,公司也不可能按数量为员工分配刚刚好的设备。

    1

    三、如何解决 IP地址的不够用问题

    1. 动态分配 IP

    本质上说,动态分配 IP 的思想就是:一个设备接入网络了,就为其分配一个 IP,另一个设备没接入网络,就不为其分配 IP. 但是这种办法,终归治标不治本。
    因为在当下社会,很多人手机可能就已经全天 24小时 开着网络了。

    2. NAT 机制

    NAT:Network Address Translation ( 网络地址转换 )

    NAT 机制的思想实际上就是使用一个 全局的 IP 地址,来代表一批私有 IP 的主机。

    (1) 根据例子理解 NAT 机制

    在下图中,在局域网1 中,全局 IP 123.456.12.7 这个地址用来表示整个局域网内的主机地址。在局域网2 中,也是同样的操作。而由于不同的局域网可以使用重复的主机 IP,这样一来,就可以 " 重复使用相同的 IP地址了 ",以此间接达到地址复用的目的。

    1

    在上图中,类似于 192.168.xxx.xxx 这样的 IP 是一个局域网内部的 IP,局域网内部的 IP 在同一个局域网内部不能重复,但两个不同的局域网可以使用重复的局域网 IP.

    当使用局域网1 中的主机1 尝试发送请求,想与使用广域网范围的设备进行通信的时候,主机1 就要先将 IP 地址转换为路由器对应的 全局IP,通过这个 全局IP 再来和广域网范围的设备进行通信;而当广域网范围的设备返回响应的时候,也先是返回到路由器上,路由器再将 全局IP 转换为 主机1 的 私有IP,这样一来,主机1 最终才能获取响应。

    简单说明通过 IP,发送与接收数据的过程:

    主机1 发送数据,源 IP -> 目的 IP 的过程:
    
    私有IP 192.168.0.10 -> 全局IP 123.456.12.7 -> 广域网的目的 IP
    
    主机1 接收广域网返回响应的过程:
    
    广域网的目的 IP -> 全局IP 123.456.12.7 -> 私有IP 192.168.0.10
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    举个例子:大学生在学校拿快递的时候,学校附近可能不止一家菜鸟驿站,而不同的菜鸟驿站中取件码可以相同,但这些菜鸟驿站基本上是围绕着大学的学生服务的。那么某某大学就相当于是一个广域网,某个菜鸟驿站就相当于某个局域网对应的 全局IP,菜鸟驿站中的取件码就相当于各个主机,因为各个取件码依赖着所属的菜鸟驿站,而快递员送快递的时候,根据快递类型又来放入不同的菜鸟驿站中。

    (2) NAT 机制对应的模型

    NAT 机制是当下互联网中解决 IP 地址不够分配的典型情况,也比较的适合当下的网络。
    1

    对上图的发送数据与返回数据进行说明:

    • NAT 路由器发送数据时,将 源IP 从 10.0.0.10 替换成全局的IP 202.244.174.37;
    • NAT 路由器返回数据时,将 目标IP 从 202.244.174.37 替换回 10.0.0.10;
    • 在 NAT 路由器内部,有一张自动生成的,用于地址转换的表,当 10.0.0.10 第一次向 163.221.120.9 发送数据时就会生成表中的映射关系。

    3. IPv6 协议

    IPv4 是长度为 32位的数据,而 IPv6 是长度为 128位 的数据,读者可以使用计算器计算一下,IPv6 是一个巨大的数字。

    IPv6 相当于釜底抽薪,它从根本上解决了 IPv4 协议的地址不够用问题。虽然 IPv6 已经提出了很多年了,但在当下的网络时代, IPv6 的普及程度,仍然相对较低,使用 IPv6 的 IP 远远少于使用 IPv4 的 IP.

    原因就是 IPv6 和 IPv4 互不兼容,所以如果你要想升级成 IPv6,得把相关的网络设备,例如交换机、路由器、服务器…都得升级成 IPv6. 而这需要很大的一笔费用才能支持更换这些设备。此外,原先使用 IPv4 的网络设备使用寿命一般较长,也无需更换。

    四、拓展

    1. 关于局域网的一些特点

    以下三类 IP 都表示局域网IP:
    
    ① 10.*172.16.* - 172.31 .*
    ③ 192.168.*
    
    • 1
    • 2
    • 3
    • 4
    • 5

    ① 每一个局域网内的主机,网络号需相同,主机号不能相同。

    ② 两个相邻的局域网,网络号必须不同。( 同一个路由器所构成的相邻局域网 )

    ③ 网络号需要根据子网掩码得出,子网掩码非常有特点,左半部分全是1,右半部分全是0. 然后把子网掩码和 IP地址 进行按位与运算,得到的结果就是网络号。因此,一般情况前半部分就是网络号,后半部分就是主机号。

    2. 特殊的 IP地址

    ① 如果主机号全为0,这个 IP 就表示网络号,表示当前这个网段。

    ② 如果主机号为 1,这个 IP 通常表示当前网段的 " 网关 ",即路由器,就表示这个网络的出入口。

    大家都知道,从一个房间走到另一个房间,必然要经过一扇门。同样,从一个网络向另一个网络发送信息,也必须经过一道 " 关口 ",这道关口就是网关。顾名思义,网关,就是一个网络连接到另一个网络的 " 关口 "。也就是网络关卡。(来自百度)

    ③ 如果主机号为 255,这个IP表示 " 广播IP ",如果你搞一个 UDP 数据报,然后把目的 IP写成主机号为 255 的 IP,此时这个数据报就能在当前局域网中广播,它的作用体现在:能够发给每个局域网中的设备。

    ④ 127.*
    127.0.0.1 环回 IP 表示自己当前的主机。

  • 相关阅读:
    Symbol
    .NET Emit 入门教程:第六部分:IL 指令:2:详解 ILGenerator 辅助方法
    linux:文件操作(open、write/read、lseek、close)
    【SpringBoot】SpringBoot 读取配置文件中的自定义属性的 5 种方法
    南大通用GBase8s 常用SQL语句(261)
    QT下,如何获取控制台输入
    AOP 编程
    deepin操作系统下载
    2023 龙蜥操作系统大会演讲实录:《兼容龙蜥的云原生大模型数据计算系统——πDataCS》
    扬帆牧哲:商标转让和商标变更的概念
  • 原文地址:https://blog.csdn.net/lfm1010123/article/details/126008363