【计算机网络】IP协议详解

文章目录

一、引入

二、简单认识IP协议

[2、1 IP协议基本概念](#2、1 IP协议基本概念)

[2、2 IP协议报文格式](#2、2 IP协议报文格式)

[2、3 分片与组装](#2、3 分片与组装)

[2、3、1 MTU 与 MSS](#2、3、1 MTU 与 MSS)

[2、4 网段划分](#2、4 网段划分)

[2、4、1 简单理解路由](#2、4、1 简单理解路由)

[2、4、2 IP地址](#2、4、2 IP地址)

[2、4、3 IP地址的划分](#2、4、3 IP地址的划分)

[2、4、4 CIDR(无类别域间路由)](#2、4、4 CIDR(无类别域间路由))

[2、4、5 特殊的IP地址](#2、4、5 特殊的IP地址)

[2、5 IP地址的数量不足](#2、5 IP地址的数量不足)

[2、6 私有IP与公网IP](#2、6 私有IP与公网IP)

[2、6、1 运营商](#2、6、1 运营商)

[2、6、2 路由器](#2、6、2 路由器)

[2、7 路由](#2、7 路由)

三、总结


🙋‍♂️ 作者:@Ggggggtm 🙋‍♂️

👀 专栏:计算机网络 👀

💥 标题:IP协议💥

❣️ 寄语:与其忙着诉苦,不如低头赶路,奋路前行,终将遇到一番好风景 ❣️

一、引入

前面我们学习了应用层的HTTP/HTTPS协议传输层的TCP/UDP协议

HTTP/HTTPS协议主要是对数据请求的一个 传输超文本应用层协议 。HTTP/HTTPS协议的主要目的是确保客户端和服务器之间的数据传输安全、可靠、高效。通过HTTP/HTTPS协议,用户可以使用浏览器访问互联网上的各种网站,并且在网站之间浏览、跳转、获取信息等操作。

TCP协议是对传输的数据进行控制,保证数据传输的可靠性的传输层协议UDP协议是对传输的数据可以 容忍一定数据丢失的传输层协议TCP协议确保数据的可靠性和完整性,通过数据确认和超时重传等机制,以确保数据按正确的顺序到达目标。UDP协议它不提供数据确认、重传或连接状态维护,因此在传输速度上通常较快。

但这里我们已经了解到了安全、可靠、高效的传输,但是到底怎么传输呢?数据是怎么通过网络找到目标主机的呢?接下我们来看网络层的IP协议。

二、简单认识IP协议

2、1 IP协议基本概念

IP(Internet Protocol)是一种网络通信协议,它是互联网的核心协议之一,负责在计算机网络中路由数据包,使数据能够在不同设备之间进行有效的传输。IP协议的主要作用包括寻址、分组、路由和转发数据包。
注意,IP协议负责的是数据包的路由。其作用类似于邮政系统中的邮政地址。它为数据包提供了唯一的地址,并规定了如何将数据包从发送方路由到接收方

举个例子理解一下:想象一封电子邮件从您的计算机发送到朋友的计算机。在这个过程中,IP协议充当了邮递员的角色。它确保邮件(数据包)具有正确的发送地址和接收地址,并且知道如何跨越网络中的路由点(类似邮局)以最终到达目的地。无论您的朋友身在世界的哪个地方,IP协议都能确保邮件准确地送达。

下面我们再来深入了解一下IP协议,会使你对IP协议有一个新的认知。

2、2 IP协议报文格式

IP协议报文由两个主要部分组成:IP首部和数据部分。具体如下图:

详细解释如下:

  1. IP首部:

    • 4位版本(Version):指示IP协议的版本号,通常为4(IPv4)或6(IPv6)。
    • 4位首部长度(Header Length):指示IP首部的长度,以32位字长为单位,即4字节。实际长度为该字段值乘4。包含 选项 字段的大小。
    • 8位服务类型(Differentiated Services):3位优先权字段(已经弃用),4位TOS字段,,和1位保留字段(必须置为0)。4位TOS分别表示:最小延时、最大吞吐量、最高可靠性、最小成本。这四者相互冲突,只能选择一个。对于ssh/telnet这样的应用程序,最小延时比较重要;对于ftp这样的程序,最大吞吐量比较重要。
    • 16位总长度(Total Length):指示整个IP报文的长度,包括首部和数据部分。
    • 16位标识(Identification):用于唯一地标识一个IP数据报,常用于分片和重组。
    • 3位标志(Flags):用于指示数据报的处理状态,包括是否可以分片和是否是最后一片。第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到)。 第二位置为1表示禁止分片,这时候如果报文长度超过MTU,IP模块就会丢弃报文。第三位表示"更多分片",如果分片了的话,最后一个分片置为1,其他是0。类似于一个结束标记。
    • 13位片偏移(Fragment Offset):用于指示该分片相对于原始数据报起始位置的偏移量。
    • 8位生存时间(Time to Live,TTL):防止数据报在网络中无限循环,每经过一个路由器,该值减1,直到为0,数据报将被丢弃。
    • 8位协议(Protocol):指示封装在IP数据报中的上层协议,如TCP、UDP等。
    • 16位首部校验和(Header Checksum):用于检验IP首部中是否发生错误。
    • 源IP地址(Source IP Address):指明发送方主机的IP地址。
    • 目标IP地址(Destination IP Address):指明接收方主机的IP地址。
    • 可选项(Options):可选字段,包括记录路由路径、时间戳、安全和加密等信息。最多40字节。
  2. 数据部分:

    • 数据部分是IP协议传输的实际数据,可以是TCP、UDP等上层协议封装的数据。
      上述即为IP报文格式的详解,关键在于16位标识、3位标志、13位片偏移。这就涉及到数据的分片与组装了。下文会对此进行详细解释。

2、3 分片与组装

在这里强调一下:网络层的IP协议是为数据的路由提供决策,而真正的对数据进行转发路由的是数据链路层。如下图:

由于链路层物理特征的原因,一般无法转发太大的数据。链路层转发数据报文到网络是有大小限制的,一般是1500字节这也就是我们所说的MTU。

**最大传输单元(Maximum Transmission Unit,简称MTU)**是指通信网络中可以一次性传输的最大数据包大小。它通常以字节数为单位表示。MTU对网络通信非常重要,因为它影响到数据传输的效率和网络的性能。

在网络通信中,数据传输的基本单位是数据包。每个数据包包含数据以及相关的控制信息。MTU定义了一个数据包的最大大小,超过这个大小的数据包需要分片成更小的数据包进行传输,然后在目的地重新组装。我们也可在Linux下查看自己主机的MTU大小,具体如下图:

那么这里就涉及到一个问题:我们知道分片和组装都是有消耗的,分片行为是网络层做的,那么组装是由谁来做呢 ?也是网络层!因为我发送方发送的是一个TCP完整的报文,报文大小大于1500字节后,网络层就需要对其进行分片再交给链路层。接收方在网络层向上交付时,也得需要一个完整的报文。至于你是怎么做的,传输层一点也不关心。具体如下图:


接下来我们看一下网络层分片与组装的过程。举例详解网络层的分片与组装过程:

  1. 数据分片

    假设我们有一个较大的数据包,它需要通过网络传输。首先,网络层会将这个数据包分成多个较小的分片。每个分片包含数据的一部分,以及一些关键的信息,如分片的偏移量和标识号。这些信息在后续的组装过程中用于正确还原数据。

  2. 分片的传输

    这些数据分片被分别发送到网络中。它们可以采用不同的路径,经过不同的路由器和链路,因为网络通常是不稳定的,分片的到达顺序可能会发生变化。

  3. 目的地的分片接收

    在目的地,网络层接收到这些分片。每个分片都包含了偏移量和标识号,这些信息用于确定分片的正确顺序。

  4. 分片的组装

    目的地的网络层将这些分片按照它们的偏移量和标识号重新组装成原始数据包。这个过程确保数据包的正确性和完整性。

  5. 上交给上层协议

    一旦数据包被成功组装,它会被传递给更高层的协议,比如传输层的TCP或UDP协议,以便最终交付给应用程序。

下面我们再看标识位,标志位和偏移量的实际用途,他们到底起到了什么作用,怎么用他们进行的分片与组装注意:分片后,每个数据段都是一个独立完成的报文

首先如果报文进行了分片,那么分片后形成的新的报文都是具有相同的标识位的。这也就能够在组装时很好的与其他报文分割开来了。

但是我们怎么知道这个报文是否进行了分片呢如果该报文后有更多的分片了,标志位的最后一位会被设置为1

这时还有一个问题:怎么组装起来呢,其实也就是怎么可以很好的将所有的分片进行按顺序组装呢 ?这个就用到 片偏移量 字段了。报文的第一个分片:标志位为1,片偏移量为0报文的中间的分片:标志位为1,片偏移不是0报文的最后一个分片:标志位为0,片偏移不是0

怎么来确定是否有分片丢失呢 ?**根据偏移量,来进行升序排序,结合偏移量+自身大小(16位总长度)看是否等于一个报文的偏移量。**扫描整个报文如果不匹配,中间一定会有丢失的,如果成功计算到结尾,就一定收取完整了!

这个分片与组装的过程允许数据在不稳定的网络环境中可靠传输,因为即使某些分片丢失或到达顺序混乱,目的地仍然可以正确地重建原始数据包。这是网络通信中重要的一部分,特别是在广域网或互联网上,数据包可能需要经过多个路由器和链路才能到达目的地。

但是我们需要注意的是:主流情况下,都是不会进行分片的。TCP在发送数据时,就会决定发送数据的大小 。一般情况下,结合MTU都是不会进行分片的。因为分片相对来说增加了丢包的概率,同时分片和组装也是有所消耗的

怎么理解分片增加了丢包的概率:当我们发送方进行了分片发送后,只有当接收方收到了全部的分片报文并将其成功组装起来,这时我们才认为该数据被对方可靠的收到了 。但如果众多的分片报文当中有一个报文出现了丢包,就会导致接收方就无法将报文成功组装起来,这时接收方会将收到的分片报文全部丢弃,此时传输层TCP会因为收不到对方应答而进行超时重传。简单理解:本来是一个报文就能解决的事,现在需要多个报文了

2、3、1 MTU 与 MSS

**MTU(最大传输单元)和MSS(最大分段大小)**是网络通信中的两个重要参数,它们决定了在网络上可以传输的数据包的大小。MTU指的是在网络通信中,数据链路层(通常是以太网)能够传输的最大数据包大小。而MSS则是TCP协议中用来确定在一个TCP数据包中TCP头部和数据部分的最大大小。

TCP(传输控制协议)建立连接时,MSS(最大段大小)协商过程是为了确定双方在通信中能够发送的最大数据段的大小MSS是TCP头部中的一个字段该字段包含在了 选项 字段当中它定义了一个TCP段中的数据部分的最大长度,不包括TCP头部 。MSS的协商是为了确保通信的各个端点之间可以有效地传输数据,同时避免因数据段过大而导致的分段和数据包重传。MSS协商过程通常如下

  1. 客户端发送一个TCP连接请求报文(SYN),其中包含自己支持的MSS大小。

  2. 服务器收到连接请求后,会检查客户端发送的MSS大小,并确定自己支持的MSS大小。

  3. 服务器在TCP连接响应报文(SYN-ACK)中回复客户端,其中包含服务器支持的MSS大小。

  4. 客户端收到服务器的响应后,会根据服务器支持的MSS大小来确定最终的MSS大小。

  5. 一旦MSS大小确定,双方就可以开始在这个MSS大小下进行数据传输。

MSS的协商过程的作用主要有以下几个方面

  1. 避免分片:TCP协议要求数据在传输过程中不被分片,即一个TCP数据段的大小不能超过MSS。通过MSS协商,可以确保数据在传输过程中不会被分片,从而避免了额外的数据重组工作。

  2. 最大利用带宽:MSS的大小会影响每个TCP段的有效载荷大小,从而影响了数据传输的效率。通过协商一个合适的MSS大小,可以更好地利用网络带宽,提高传输效率。

  3. 减少拥塞:MSS协商也有助于减少网络拥塞的可能性。如果MSS大小合理,可以减少过大数据包引起的拥塞问题,提高网络性能。

在网络通信中,当一台计算机想要向另一台计算机发送数据时,它会将数据分割成多个数据包进行传输。这些数据包的大小受到MTU和MSS的限制。如果一个数据包的大小超过了网络的MTU,那么它就会被分割成更小的片段,以适应网络的传输能力。而MSS则确定了在TCP协议中,一个TCP数据包的最大大小,以确保在传输过程中不会出现数据包太大而被分割成过小片段导致网络效率降低的问题

举例来说,假设某个网络的MTU为1500字节,而MSS为1460字节。如果一台计算机想要向另一台计算机发送2000字节的数据,根据MTU的限制,这个数据在传输层会被分割成两个数据包,每个数据包的大小不能超过 1460 字节。在TCP协议中,每个数据包的大小将根据MSS的限制进行调整,确保TCP头部和数据部分的大小不超过1460字节。

2、4 网段划分

2、4、1 简单理解路由

我们都知道,通过IP地址就能够找到你这个主机。那到底是怎么找到的呢?这么多主机,且有这么多的IP地址,怎么就通过网络找到了呢?如下图:

我们现在假设有一个 2.2.2.2 的IP地址,这个IP地址正是美国某个地区主机的IP。我们首先怎么找到美国呢?其实每个地区都会有特定划分的IP地址 。例如,(假设说明)中国地区所有的IP地址第一位都是1,格式就是:1.x.x.x. 。美国地区所有的IP地址第一位都是2,格式是:2.x.x.x 。当然,这些地址都存储在国际路由器当中。当我们(中国)发现IP地址的第一位是2,并不是自己国家的。那么就会去国际路由器中找,看是那个国家的。当然,每个国家的每个地区都有自己的路由器,且都有自己的划分好的 IP 地址。

2、4、2 IP地址

IP地址分为两个部分:网络号主机号

  • 网络号 :就是用来划分不同的网段(划分不同的地区),且保证相互连接的两个网段具有不同的标识;
  • 主机号表示同一网段内的不同主机。同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号。

举例 IPv4示例: IPv4地址由32位二进制数构成,通常以点分十进制表示。例如,考虑IP地址:192.168.128.1/24。 这个IP地址(192.168.128.1/24)是在网络192.168.128中的主机1的地址。

  • "/24"表示子网掩码的前24位是网络标识,剩下的8位是主机标识。
  • 网络号部分是前三个部分,即:192.168.1。
  • 主机号部分是最后一部分,即:1。

具体也可看下图理解:

通过上图我们也能发现:

  • 不同的子网其实就是把网络号相同的主机放到一起。
  • 如果在子网中新增一台主机,则这台主机的网络号和这个子网的网络号一致,但是主机号必须不能和子网中的其他主机重复。

通过合理设置主机号和网络号, 就可以保证在相互连接的网络中, 每台主机的 IP 地址都不相同。 那么问题来了, 手动管理子网内的IP, 是一个相当麻烦的事情

  • 有一种技术叫做DHCP,能够自动的给子网内新增主机节点分配IP地址,避免了手动管理IP的不便。
  • 一般的路由器都带有DHCP功能。因此路由器也可以看做一个DHCP服务器

2、4、3 IP地址的划分

过去人们提出一种IP地址划分的方案:IP 地址通常分为五个主要类别,即 A、B、C、D 和 E 类。具体如下图:

这些类别是根据IP地址的第一个字节(8位)来划分的,其中不同类别具有不同的网络号和主机号分配方式。下面详细解释每个类别:

  1. A 类地址:

    • 范围:1.0.0.0 到 126.0.0.0
    • 网络号:第一个字节(8位)用于网络标识,剩下的 24 位用于主机。
    • 最大主机数:约 16,777,214(2^24 - 2,减去两个保留地址:全0和全1)。
    • 适用场景:A 类地址通常分配给大型组织或互联网服务提供商,因为它们允许大量主机。
  2. B 类地址:

    • 范围:128.0.0.0 到 191.255.0.0
    • 网络号:前两个字节(16位)用于网络标识,剩下的 16 位用于主机。
    • 最大主机数:约 65,534(2^16 - 2)。
    • 适用场景:B 类地址通常分配给中等规模的组织或网络。
  3. C 类地址:

    • 范围:192.0.0.0 到 223.255.255.0
    • 网络号:前三个字节(24位)用于网络标识,剩下的 8 位用于主机。
    • 最大主机数:约 254(2^8 - 2)。
    • 适用场景:C 类地址通常分配给小型组织或私人网络。
  4. D 类地址:

    • 范围:224.0.0.0 到 239.255.255.255
    • 特点:D 类地址用于多播(Multicast),不分配给单独的主机或网络。
    • 适用场景:用于一次向多个目标发送数据包,例如视频流或音频流。
  5. E 类地址:

    • 范围:240.0.0.0 到 255.255.255.255
    • 特点:E 类地址是实验性地址,不常用,保留用于特定用途。
    • 适用场景:用于实验、研究或未来网络发展。

但是上述的划分情况存在了很多的弊端,这些弊端包括:

  1. IP 地址浪费:A、B 和 C 类地址的划分方式导致了地址的浪费。特别是在 A 类地址中,每个网络都具有大约 16,777,214 个主机地址,而大多数网络远远不需要这么多地址。这导致了 IPv4 地址枯竭的问题。

  2. 不灵活:由于固定的地址类别,一些网络可能会浪费了大量的 IP 地址,而其他网络可能不够用。这种不灵活性使得地址资源分配不均匀。

  3. 无法满足中小型网络需求:B 类地址通常太大,而 C 类地址又太小,这使得中小型网络在选择合适的地址类别时很难找到平衡点。

  4. 不适合特定应用:D 类地址是多播地址,而 E 类地址是实验性地址,它们在常规网络中的使用非常有限。这也导致了资源浪费。

随着互联网的快速发展,IPv4 地址越来越不够用了 。这并不是直接与地址类别划分相关的弊端。但是IPv4 地址空间有限,而且已经耗尽了大部分可用地址 。这迫使网络行业采用了更高效的地址分配策略,如网络地址转换(NAT)IPv6 的广泛采用

为了解决这些问题,现代网络更多地依赖于地址分配策略,例如 **CIDR(无类别域间路由)**和采用 IPv6 地址空间,以更好地满足不同规模和类型的网络需求,减少资源浪费,提供更多的灵活性,并支持现代网络功能。

2、4、4 CIDR(无类别域间路由)

CIDR(无类别域间路由)是一种用于将IP地址分配和路由更加有效和灵活的方法。在传统的IP地址分配中,IP地址被分为不同的类别(Class A、Class B、Class C等),每个类别有固定的网络和主机部分。这种分配方法导致了IP地址的浪费,特别是在大型网络中。

CIDR 引入了一个灵活的方法,它允许将IP地址按需分配给网络,而不受固定类别的限制CIDR 地址由两部分组成网络前缀子网掩码

  • 网络前缀标识了网络的唯一标识符。
  • 子网掩码指示了网络地址中哪部分是网络前缀,哪部分是主机地址。

CIDR中的关键概念包括

  1. 前缀表示法:CIDR使用前缀表示法来表示IP地址范围。这个前缀表示法包括IP地址,后面跟着一个斜线和一个数字,表示子网掩码的长度。例如,192.168.1.0/24表示一个具有24位子网掩码的子网,它包括192.168.1.0到192.168.1.255的所有IP地址。

  2. 聚合:CIDR允许多个连续的IP地址范围被聚合成一个更大的范围。这有助于减小路由表的大小,提高路由效率。

  3. 无类别路由:CIDR不再依赖于A、B、C类地址的划分,而是根据需要分配地址范围,这样可以更好地满足不同组织的需求。

  4. 节省地址空间:CIDR允许更灵活地分配IP地址,减少了地址空间的浪费,因为每个组织只分配所需的地址范围。

引入一个额外的子网掩码(subnet mask)来区分网络号和主机号,子网掩码也是一个32位的正整数。通常用一串 "0" 来结尾。 将IP地址和子网掩码进行 "按位与" 操作,得到的结果就是网络号。

下面我们看两个例子:

实际上在不同的路由器上都是配有不同的子网掩码的。这里的不同是指的子网掩码的个数 。通过目的IP地址,与子网掩码按位与( & ),就能够得到想要去的目的网络

2、4、5 特殊的IP地址

特殊的IP地址通常指的是那些在Internet Protocol(IP)地址范围内具有特殊用途或功能的地址。这些IP地址通常不用于一般的主机通信,而是用于特定的网络任务和服务。以下是一些常见的特殊IP地址类型及其详细解释:

  1. 私有IP地址(下文会讲解):私有IP地址是在内部网络中使用的IP地址,不可从公共Internet访问。它们用于在局域网(LAN)内部进行通信。私有IP地址范围通常包括以下三个区段:

    • 10.0.0.0 到 10.255.255.255
    • 172.16.0.0 到 172.31.255.255
    • 192.168.0.0 到 192.168.255.255
  2. 回环IP地址回环IP地址是127.0.0.1,通常表示本地主机或设备上的回环测试。当一个计算机发送数据到回环地址,数据会被发送到自己,用于测试和诊断网络连接和服务。

  3. 广播地址 :**将IP地址中的主机地址全部设为1,就成为了广播地址。**广播地址用于向同一网络中的所有设备发送数据包。在IPv4中,广播地址通常是特定网络的最大地址,例如,在192.168.1.0/24网络中,广播地址是192.168.1.255。

  4. 将IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网。

特殊的IP地址有各种不同的用途,包括确保网络的安全性和正常运行,允许特定类型的通信,以及用于网络管理和诊断。它们在不同的网络环境和应用中发挥着重要作用。

2、5 IP地址的数量不足

我们知道,IP地址(IPv4)是一个4字节32位的正整。那么一共只有 2的32次方 个IP地址,大概是43亿左右。而TCP/IP协议规定,每个主机都需要有一个IP地址。现这意味着,一共只有43亿台主机能接入网络么?

实际上,由于一些特殊的IP地址的存在,数量远不足43亿;另外IP地址并非是按照主机台数来配置的,而是每一个网卡都需要配置一个或多个IP****地址 。那么一个家庭就会用掉很多IP地址。CIDR在一定程度上缓解了****IP地址不够用的问题(提高了利用率,减少了浪费,但是IP地址的绝对上限并没有增加), 仍然不是很够用。这时候有三种方式来解决:

  • 动态分配IP地址:只给接入网络的设备分配IP地址。因此同一个MAC地址的设备,每次接入互联网中,得到的IP地址不一定是相同的。
  • NAT技术:通常用于将私有网络内部的多个设备共享单个公共IP地址的情况(下篇文章会讲解)。
  • IPv6: IPv6并不是IPv4的简单升级版。这是互不相干的两个协议,彼此并不兼容。IPv6用16字节128位来表 示一个IP地址,但是目前IPv6还没有普及。

2、6 私有IP与公网IP

私有IP与公网IP是计算机网络中的两种不同类型的IP地址。它们在网络通信中扮演不同的角色,以下是它们的详细解释和举例:

私有IP(Private IP)私有IP地址是在本地网络内部使用的IP地址,通常是局域网中的设备所使用的地址 。这些地址不可在全球互联网上直接访问 ,因此它们通常被用于内部通信和局域网中的设备标识 。 私有IP地址通常属于IP地址保留范围,其中最常用的是IPv4的私有IP地址段,如:

  • 192.168.0.0 到 192.168.255.255;
  • 172.16.0.0 到 172.31.255.255;
  • 10.0.0.0 到 10.255.255.255。

这些私有IP地址是用于在家庭网络或企业内部构建子网,以便内部设备可以相互通信,但它们无法直接用于全球互联网上(公网)的通信
公网IP(Public IP):公网IP地址是可以在全球互联网上访问的IP地址,它们是唯一的,用于标识设备或服务器在互联网上的位置 。当您通过互联网与外部资源通信时,通常使用公网IP地址。 公网IP地址通常由互联网服务提供商(ISP)分配给您的路由器或服务器。每个互联网连接都需要至少一个公网IP地址,以便在全球互联网上进行通信。 举例:

  • 公共IP:203.0.113.1(示例) 这是一个可以通过互联网访问的IP地址,用于标识特定设备或服务器。

  • 私有IP:192.168.1.10(示例) 这是一个在局域网中使用的IP地址,不可从互联网访问,仅用于内部通信。

举个例子来理解一下私有IP与公网IP。我们经常使用使用客户端连接云服务器,与下图:

我们首先会连接到远程服务器的IP,这个IP就是公网IP,这个IP标示了全网的、具有唯一性质的一台服务器。具体如下图:

当我们再次登录该服务器下的某个用户时,该用户也会有一个IP地址,用户的IP地址就是一个私有IP。具体如下图:

当有多个用户时,就会多个不同的私有IP。该私有IP地址只在该局域网内部有效,不能在互联网上直接访问 。那私有IP怎么访问公网呢?通常在局域网中使用网络地址转换(NAT)技术,将多个内部设备共享一个公网IP地址,以便它们可以访问互联网

2、6、1 运营商

运营商通常是指提供移动通信、互联网、有线电视等通信服务的公司或组织 。这些公司负责搭建和维护通信基础设施,例如移动电话网络、互联网网络和有线电视网络,使人们能够进行语音通话、数据传输和观看电视节目。举个例子来理解一下。

一个家庭想要能够上网,都需要做哪些准备工作呢?

  1. 首先肯定是有运营商,在你家附近有网络覆盖。
  2. 你这个家庭联系运营商进行光纤入户。
  3. 工作人员上门安装调制解调器(就是我们平常所说的 "猫儿")和 无线路由器。
  4. 工作人员给你开户,配置路由器账号、密码(这套账号密码是运营商认证你们的账号密码)。
  5. 配置你自己的账号、密码(这套账号密码是你登录路由器连接网络所需要使用的,账号通常可直接设置为你的手机号)。这套账号密码是用来认证连接的成员的。
  6. 正常上网,正常按月按年交费。

提问:这里的交费(可以理解为买流量),是交给谁了呢 ?答案是交给运营商 了!这里就有一个疑问:我们自己平常上网,我们玩抖音、微信、头条、搜索、点外卖等等,可是到了月底或者年底交费却给了运营商,这是为什么呢?原因很简单,是运营商给我们搭建通信的基础设施,所有设备上网都是要通过运营商所搭建的基础设施

无论是你的手机卡,还是家里的路由器都是有账号认证的。当你的电话卡欠费时,为什么就不能拨打电话了呢?原因就是运营商会对你的手机号进行认证,再检测你所剩的余额。但是欠费了依然可以拨打10086,这个就是运营商设置的一个提供服务的操作。
我们这里再简单的思考一下:我们经常听到,我们是访问不了goole的,是需要fb(自行理解ovo~)去访问外面的网站,这又是为什么呢 ?这里我们只需要思考清楚是谁拦截了你 。答案就是运营商。我们这要上网就需要先经过运营商,运营商拿到你的数据,看你的目的IP是到哪里的,检测到是外面的就直接拦截了你。简单理解,就是运营商给你设置了一道墙

2、6、2 路由器

路由器是一种网络设备,用于将数据包从一个网络传输到另一个网络路由器主要工作是根据目标地址将数据包从源网络路由到目标网络 。这是通过查找路由表 来实现的,路由表中包含了不同网络之间的关系,以确定最佳路径。而且路由器本身天然的就会构建局域网(子网)。我们所使用的家用路由器

  • 对内:面对自己构建的子网;
  • 对外:自己本身是被人构建的子网的一个主机。

具体如下图:

路由器在其物理结构上通常具有两主要类型的网络接口,分别是LAN口(局域网口)WAN口(广域网口),它们在网络连接和数据传输中扮演着不同的角色:

  1. LAN口(局域网口)

    • 局域网接口:LAN口通常用于连接本地网络内的设备,如计算机、手机、智能家居设备等。这些设备通常位于同一个物理位置,例如您的家庭或办公室内。
    • 本地数据交换:LAN口用于在局域网内传输数据包,使本地设备能够相互通信,共享文件、打印机、互联网连接等。
  2. WAN口(广域网口)

    • 广域网接口:WAN口通常用于连接到广域网,如互联网服务提供商(ISP)的网络。这是您的局域网与外部互联网之间的关键接口。
    • 外部数据传输:WAN口负责将数据包从局域网传输到外部网络(互联网),并将来自外部网络的数据包传送回局域网。这是实现互联网连接的关键。

WAN口,也可理解为自己所在的上级子网所分配的IP。说是广域网口也不是很准确。通过上图我们也能发现:

  • 不同的路由器,子网IP其实都是一样的(通常都是192.168.1.1)。子网内的主机IP(私有IP)地址不能重复,但是子网之间的IP地址就可以重复了。
  • 每一个家用路由器,其实又作为运营商路由器的子网中的一个节点。这样的运营商路由器可能会有很多级,最外层的运营商路由器,WAN口IP就是一个公网IP了。
  • 子网内的主机需要和外网进行通信时,路由器将IP首部中的IP地址进行替换(替换成WAN口IP),这样逐级替换,最终数据包中的IP地址成为一个公网IP。这种技术称为NAT(Network Address Translation,网络地址转换)。
  • 如果希望我们自己实现的服务器程序,能够在公网上被访问到,就需要把程序部署在一台具有外网IP的服务器上。这样的服务器可以在阿里云/腾讯云上进行购买。

因为有了私有IP,每个局域网内的私有IP是可以重复的,这样就大大缓解了IP地址不足窘迫 。通常在局域网中使用网络地址转换(NAT)技术(本质上就是不断的将私有IP向上替换成公网IP进行通信),将多个内部设备共享一个公网IP地址,以便它们可以访问互联网。

2、7 路由

数据有一台主机发送到另一台主机,本质上就是数据在网络中路由(找路) 。数据路由是指将数据从源地址传输到目标地址的过程。在路由的过程成,我们最主要的就是解决下一跳(从这个路由器跳到下一个路由器)问题。在计算机网络中,数据通常以数据包的形式进行传输。下面我将举例详细解释数据的路由过程。

假设我们有一个简单的局域网(LAN)网络,其中包含3台计算机A、B和C,它们分别连接到一个路由器R。现在,计算机A想要向计算机C发送一些数据。

  1. 数据封装:发送端的计算机A首先将要发送的数据封装成一个数据包。数据包通常包含源IP地址(计算机A的IP地址)、目标IP地址(计算机C的IP地址)以及实际的数据内容。

  2. 路由表查找:计算机A将数据包发送到路由器R。在路由器R上有一个路由表,它包含了关于如何将数据包从一个网络发送到另一个网络的信息。路由器R使用目标IP地址来查找路由表,确定下一跳的地址。

  3. 下一跳选择:路由器R根据路由表查找结果选择下一跳的地址。如果目标IP地址与路由表中的某个目标网络匹配,路由器R将选择将数据包发送到该目标网络所连接的下一个路由器或目标主机。

  4. 数据转发:路由器R将数据包转发到下一个目标。这个过程涉及到查找最佳路径,根据网络拓扑、链路状态和其他因素来选择下一跳。

  5. 路由器之间的传递:数据包通过一系列的路由器从源地址传输到目标地址。每个路由器都会重复执行上述步骤,查找最佳路径并将数据包转发到下一个目标。

  6. 数据到达:最终,数据包到达目标计算机C。目标计算机C接收数据包,并解析其中的数据内容。

上述的例子只是一个简单的路由过程,我们也可以简单理解为数据包的路由过程其实就是在问路的过程。具体也可结合下图理解:


上述的路由过程重点是路由表的查询 。 每个路由器都有维护的自己一张路由表。在Linux下使用 route 命令可以查询系统的路由表信息。路由表中的字段属性如下所示:

  1. 目标地址(Destination):表示目标网络/主机的IP地址。
  2. 网络掩码(Netmask):表示与目标地址相对应的网络掩码,用于确定网络范围。
  3. 网关(Gateway):表示下一跳的网关地址,即将数据包发送到目标网络的下一跳路由器的IP地址。
  4. 接口(Iface):表示将数据包发送到目标网络所使用的网络接口,如eth0、wlan0等。
  5. 标志(Flags):表示该路由的状态和特殊标志。
    • U(Up):表示路由处于活动状态。
    • H(Host):表示目标为主机而非网络。
    • G(Gateway):表示路由指向的是一个网关。
    • D(Dynamic):表示路由是由动态路由协议学习得到的。
    • M(Modified):表示路由已被手动修改。
  6. 优先级(Metric):表示路由的优先级,用于确定数据包选择哪条路由发送。
  7. 参考数(RefCnt):表示对该路由的引用计数,记录有多少个路由条目引用该项。
  8. 使用数(Use):表示该路由的使用计数,记录自系统启动以来有多少数据包通过该路由发送。

具体如下图:

我们知道要达到目的IP,中间可能会经过很多跳。但是如果路由表中没有我们又要查找的目的IP呢?我们通过上图也能看到,Destination 中还有一个 default,标示默认的下一跳。如果找不到,就会进行默认的吓一跳,我们也称之为默认路由

三、总结

网络层的IP协议主要负责从一台主机到另一台主机的数据传输提供决策 。网络层并不会真正的传输数据。真正负责数据或者对数据进行传输的是数据链路层。在传输的过程中会有很多的细节问题,在下篇文章我们会对数据链路层能进行详细解释!

相关推荐
sakoba2 小时前
Docker学习其二(容器卷,Docker网络,Compose)
运维·网络·学习·docker·容器·基础
惜.己3 小时前
appium中urllib3.exceptions.LocationValueError: No host specified. 的错误解决办法
网络·appium
吉凶以情迁3 小时前
window服务相关问题探索 go语言服务开发探索调试
linux·服务器·开发语言·网络·golang
专注VB编程开发20年4 小时前
UDP受限广播地址255.255.255.255的通信机制详解
网络·udp·智能路由器
189228048615 小时前
NX947NX955美光固态闪存NX962NX966
大数据·服务器·网络·人工智能·科技
Sadsvit6 小时前
Linux 进程管理与计划任务
linux·服务器·网络
一碗白开水一6 小时前
【模型细节】FPN经典网络模型 (Feature Pyramid Networks)详解及其变形优化
网络·人工智能·pytorch·深度学习·计算机视觉
什么都想学的阿超6 小时前
【网络与爬虫 38】Apify全栈指南:从0到1构建企业级自动化爬虫平台
网络·爬虫·自动化
D-海漠8 小时前
安全光幕Muting功能程序逻辑设计
服务器·网络·人工智能
都给我8 小时前
可计算存储(Computational Storage)与DPU(Data Processing Unit)的技术特点对比及实际应用场景分析
运维·服务器·网络·云计算