网络层协议【IP协议】

全文目录

基本概念

  1. 主机 (Host)

主机通常指在网络上的任何计算设备,能够发送或接收数据。这包括了各种设备,如个人计算机、服务器、手机和其他连接到网络的智能设备。

特点:

  • 通常有一个或多个网络接口。
  • 有一个或多个IP地址。
  • 可以运行各种应用程序和服务。
  1. 路由器 (Router)

路由器是网络硬件设备,负责在不同网络之间转发数据包。它根据数据包的目的地(即IP地址)来决定如何将数据包转发到其最终目标。

特点:

  • 拥有路由表,该表决定如何将数据包从一个网络转发到另一个网络。
  • 可以连接多个网络,并在它们之间转发数据包。
  • 功能不仅仅是简单地连接网络,还包括其他高级功能,如网络地址转换(NAT)、防火墙和VPN支持。
  1. 节点 (Node)

节点是网络中的一个连接点,可以是任何设备,例如计算机、打印机或路由器,只要它可以发送、接收或转发信息。在许多情境下,术语"节点"是一个更通用的术语,可能指的是主机、交换机、路由器或其他网络设备。

特点:

  • 在物理网络中,每一个连接到网络的设备都可以视为一个节点。
  • 在数据链路层,例如Ethernet,每个节点都有一个唯一的物理地址,称为MAC地址。
  • 在网络层,每个节点(如果参与IP通信)都有一个或多个IP地址。

IP协议

IP协议头是IP包结构中的一个重要部分,用于包含与数据包传输相关的各种信息。以下是IPv4协议头的格式及各字段的详细说明:

IPv4 协议头格式:

  1. 版本 (Version, 4位)

    • 描述IP协议的版本。IPv4的版本字段的值为4。
  2. 头长度 (Header Length/IHL, 4位)

    • 表示头部有多少32位字长。通常的头部长度是5(即20字节),但如果使用了选项字段,这个值可能会增加。
  3. 服务类型 (Type of Service/TOS, 8位)

    • 描述数据包的优先级及请求的服务类型,如吞吐量、可靠性等。
  4. 总长度 (Total Length, 16位)

    • 表示整个数据包(包括头部和数据)的总字节数。
  5. 标识 (Identification, 16位)

    • 用于区分片段的不同数据包。
  6. 标志 (Flags, 3位)

    • 控制和标识片段。其中包括"不分片"和"更多片段"两个标志位。
  7. 片偏移 (Fragment Offset, 13位)

    • 指示当前片段相对于原始数据包开头的偏移。
  8. 生存时间 (Time to Live/TTL, 8位)

    • 设置数据包在网络中的存活时间。每经过一个路由器,该值减1,当值为0时,数据包被丢弃。
  9. 协议 (Protocol, 8位)

    • 定义在数据部分使用的协议,例如TCP、UDP等。
  10. 头检验和 (Header Checksum, 16位)

    • 用于错误检测。如果头部被篡改,数据包会被丢弃。
  11. 源IP地址 (Source IP Address, 32位)

    • 发送数据包的主机或网络的IP地址。
  12. 目的IP地址 (Destination IP Address, 32位)

    • 数据包的目标主机或网络的IP地址。
  13. 选项 (Options, 变长)

    • 这不是一个必须的字段,但在某些情况下,如记录路由、时间戳等,可以使用这个字段。
  14. 填充 (Padding)

    • 确保头部的长度为32位的整数倍。

上述字段为IPv4协议头的基本组成部分,提供了数据包传输所需的各种信息,包括源地址、目标地址、生存时间和其他重要参数。IPv6协议头有所不同,其中包含了一些新的字段和特性,但基本的思想与IPv4相似。

分片

IP分片的过程是一种在不同MTU(最大传输单元)的网络间传输大数据包时必须的机制。下面是发送方进行分片和接收方重新组装分片的详细过程:

发送方进行分片:

  1. 确定分片大小:发送方首先要知道数据链路的MTU。然后,基于这个MTU,它会确定每个片段的大小。每个分片都会有自己的IP头,所以实际的数据部分会比MTU小IP头的大小。

  2. 填写IP头:每个分片都有自己的IP头。大多数字段,如源地址、目标地址、总长度等,都会与原始数据包相同。但某些字段,如标志和片段偏移,会有所不同。

  3. 设置标志和偏移:在IP头中,有一个叫做"标志"的字段,其中一个位被称为"更多片段"(MF)位。除了最后一个片段,所有片段的MF位都被设置为1。每个片段都有一个"片段偏移"字段,该字段表示该片段在原始数据包中的字节偏移。

  4. 发送分片:一旦分片完成,发送方会像发送正常的IP数据包那样发送每个片段。

以下是如何识别和组装IP分片的详细步骤:

识别IP分片:

  1. 查看标识字段:在IP协议头中,有一个叫"标识"(Identification)的字段。此字段的值在同一个原始数据包的所有分片中都是相同的。当接收端收到分片时,它首先会查看该字段以确定哪些分片属于同一个原始数据包。

  2. 标志字段:IP协议头中的"标志"字段有一个特定的位叫做"更多片段"(MF, More Fragments)。如果MF位设置为1,这意味着还有更多的片段在途中。如果MF位是0,那么它是最后一个或唯一的片段。

  3. 片段偏移:每个IP分片都有一个"片段偏移"字段,表示该片段在原始数据包中的字节偏移。这允许接收端按正确的顺序组装片段。

总结:

当一个IP数据包经过分片时,它会被拆分为多个片段。每个片段都有自己的IP头,而IP头中的特定字段(如标志和片段偏移)将用于标识该片段的特性和位置。以下是根据不同情况列举的例子:

  1. 不是分片(未分片的完整数据包):

    • 标识字段(Identification Field): 唯一值。
    • 标志字段(Flags Field) :
      • DF (Don't Fragment): 可以是0或1,取决于是否希望该数据包被分片。
      • MF (More Fragments): 0,因为这是一个完整的数据包,没有其他片段。
    • 片段偏移字段(Fragment Offset Field): 0,因为这是一个完整的数据包。
  2. 分片开头(第一个片段):

    • 标识字段: 与原始数据包相同的唯一值。
    • 标志字段 :
      • DF: 0,因为数据包已经被分片了。
      • MF: 1,表示后面还有其他片段。
    • 片段偏移字段: 0,因为这是第一个片段,它开始于原始数据包的起始位置。
  3. 分片中间部分:

    • 标识字段: 与原始数据包相同的唯一值。
    • 标志字段 :
      • DF: 0。
      • MF: 1,表示后面还有其他片段。
    • 片段偏移字段: 不为0,表示这个片段在原始数据包中的起始位置。例如,如果这是第二个片段,并且每个片段包含100字节的数据,则片段偏移可能为12(因为每个片段的数据量为8字节块,所以100/8=12.5,取整数部分)。
  4. 分片结尾(最后一个片段):

    • 标识字段: 与原始数据包相同的唯一值。
    • 标志字段 :
      • DF: 0。
      • MF: 0,表示这是最后一个片段。
    • 片段偏移字段: 表示这个片段在原始数据包中的起始位置,值大于之前的片段。

通过检查这些字段,接收端可以确定一个IP数据包的片段位置及其在原始数据包中的相对位置,从而正确地组装完整的数据包。

组装IP分片:

组装IP分片是一个重要的过程,以确保原始数据包在传输结束后可以完整无误地重建。以下是组装IP分片的详细步骤:

  1. 分片接收:

    • 当一个分片到达目的地时,接收端首先会检查其IP头部,特别是标识字段。这个字段对于同一个原始数据包的所有片段都是相同的。
    • 接收端使用这个标识字段来查找是否已经收到了来自同一个原始数据包的其他片段。如果是第一个到达的片段,接收端会为该原始数据包创建一个新的缓冲区或结构。
  2. 缓冲区和定时器:

    • 当新的缓冲区被创建时,接收端通常还会启动一个定时器。这个定时器用于等待所有的片段到达。如果在指定的时间内所有片段都没有到达,那么接收端可能会放弃组装,并删除已经接收的片段。
  3. 片段排序:

    • 当一个新的片段到达时,接收端会查看其片段偏移字段,这个字段表示片段在原始数据包中的位置。接收端使用这个字段来确定片段在缓冲区中的正确位置。
    • 例如,如果片段偏移为0,则这是第一个片段;如果片段偏移为10,则该片段应放在缓冲区的第10个块位置,以此类推。
  4. 检查是否所有片段都已接收:

    • 每当新的片段被加入缓冲区时,接收端都会检查是否所有的片段都已经到达。这通常通过检查缓冲区中的空白或缺失块来实现。
    • 如果标志字段MF(更多片段)标志为0,表示这是最后一个片段,那么接收端可以确定原始数据包的总长度。
  5. 数据包重组:

    • 一旦所有片段都已到达,接收端开始组装完整的数据包。这涉及到将缓冲区中的所有片段按照它们的片段偏移值的顺序拼接在一起。
    • 通常,只有一个IP头会被保留(通常是第一个片段的头),而其他片段的头会被丢弃。
  6. 完成组装和传递:

    • 一旦数据包被完全组装,它就会被传递给上层的协议,例如TCP或UDP,进行进一步处理。

总之,IP分片的组装是一个详细和精确的过程,确保数据的完整性和准确性在网络传输中得到保证。

网段划分

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

  • 网络号: 保证相互连接的两个网段具有不同的标识;
  • 主机号: 同一网段内, 主机之间具有相同的网络号, 但是必须有不同的主机号;

对于相同子网中的设备,网络号可以相同,但是主机号不能相同,DHCP技术就是实现这一问题的关键:

DHCP技术

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一种动态分配IP地址的技术。DHCP允许计算机在加入新网络时自动获取IP地址和其他网络配置,无需管理员手动配置。以下是DHCP的主要功能:

  1. 动态IP分配:当客户端加入网络时,DHCP服务器可以动态分配IP地址,这意味着客户端可以"租用"IP地址一段时间,租期结束后IP地址可能会被回收或重新分配。

  2. 静态IP分配:虽然DHCP的主要优势是动态分配地址,但它也支持基于客户端的MAC地址来静态分配特定的IP地址。

  3. IP地址重用:当DHCP客户端离开网络或IP地址的租期到期时,该地址可以被DHCP服务器回收并分配给其他客户端。

  4. 租期管理:每个DHCP分配的IP地址都有一个租期,客户端必须在租期到期之前与DHCP服务器续约,以继续使用当前的IP地址。

  5. 网络配置:除了IP地址外,DHCP还可以为客户端提供其他网络配置,如子网掩码、默认网关、DNS服务器地址、域名和其他许多选项。

  6. 集中管理:通过使用DHCP,网络管理员可以集中管理和分配IP地址和网络配置,从而减少了配置错误和地址冲突的可能性。

  7. 支持多个子网:一个DHCP服务器可以为多个子网或VLAN提供服务,这通过使用DHCP中继代理来实现。

  8. 自动配置:新的设备或客户端可以简单地连接到网络,而无需手动配置,因为DHCP服务器将自动提供所需的所有配置。

简而言之,DHCP提供了一种自动和集中的方式来管理和分配网络中的IP地址和其他相关的配置。

IP分类

IP地址基于其二进制表示和预定用途被分为五类:A、B、C、D和E。以下是这五类IP地址的概述:

  • A类:0.0.0.0 到 127.255.255.255,用于支持非常大的网络,只有一个字节用于网络地址,其余三个字节用于主机地址。特别注意的是,127.0.0.1 到 127.255.255.255 是为loopback地址预留的,主要用于本地测试。

  • B类:128.0.0.0 到 191.255.255.255,用于中等大小的网络。前两个字节用于网络地址,后两个字节用于主机地址。

  • C类:192.0.0.0 到 223.255.255.255,用于小型网络。前三个字节用于网络地址,最后一个字节用于主机地址。

  • D类:224.0.0.0 到 239.255.255.255,这不是用于常规的主机IP地址,而是用于多播地址。

  • E类:240.0.0.0 到 255.255.255.255,这是为将来使用或实验性目的而保留的。

但是随着Internet的飞速发展,这种划分方案的局限性很快显现出来,大多数组织都申请B类网络地址, 导致B类地址很快就分配完了, 而A类却浪费了大量地址,针对这种情况提出了新的划分方案, 称为CIDR(Classless Interdomain Routing):

  • 引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;
  • 子网掩码也是一个32位的正整数. 通常用一串 "0" 来结尾;
  • 将IP地址和子网掩码进行 "按位与" 操作, 得到的结果就是网络号;
  • 网络号和主机号的划分与这个IP地址是A类、B类还是C类无关;

私有IP和共有IP

私有IP地址和公网IP地址是互联网上常用的两种IP地址分类。它们的定义和用途如下:

1. 私有IP地址(Private IP Address):

私有IP地址是专为组织内部的网络设计的,不应该在公共互联网上路由。它们允许组织内的设备与内部网络中的其他设备通信,但这些地址不是全球唯一的。为了与互联网上的其他设备通信,使用私有IP地址的设备需要通过某种形式的地址转换(如NAT - 网络地址转换)。

私有IP地址范围是:

  • 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

2. 公网IP地址(Public IP Address):

公网IP地址是在整个互联网上是唯一的,可以被路由。这意味着每个公网IP地址都可以从互联网上的任何位置直接访问。通常,互联网服务提供商(ISP)会为客户分配这些地址。如果一个设备(例如,服务器)需要直接从互联网上的其他地方可访问,它通常会有一个公网IP地址。

公网IP地址的范围除了上述的私有IP地址范围外,还包括整个IPv4地址空间。

应用场景:

在许多家庭和企业网络中,内部设备(如电脑、手机和其他智能设备)通常被分配私有IP地址。这些设备通过路由器与互联网通信,路由器具有公网IP地址。路由器使用NAT来将内部设备的私有IP地址转换为它自己的公网IP地址,以便这些设备可以访问互联网。

这种设置不仅允许多个设备共享单个公网IP地址,还提供了一定程度的安全性,因为私有IP地址的设备不能直接从互联网上访问(除非设置了特定的端口转发规则)。

路由

路由是计算机网络中的一个核心概念,涉及决定数据包如何从源地址传输到目标地址。这里是关于路由的一些基本概念和细节:

1. 路由的定义:

路由是决定如何将数据包从源主机传输到目标主机的过程。这个决策基于路由表,这是一个数据库,指示如何到达特定的网络和主机。

2. 路由器(Router):

路由器是一个硬件设备,负责转发数据包。它检查数据包的目标IP地址,然后使用其路由表决定最佳路径以及下一个要发送到的设备或接口。

3. 路由表:

路由表是存储在路由器或某些主机中的信息集合,用于决定如何转发数据包。它包含IP地址、子网、下一个跳转点等信息。

  • 路由表可以使用route命令查看

  • 如果目的IP命中了路由表, 就直接转发即可;

  • 路由表中的最后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配时,就按缺省路由条目规定的接口发送到下一跳地址。

路由表条目的含义:

  • 目的网络(Destination):要访问的远程网络的IP地址。
  • 网络掩码(Netmask):用于区分IP地址的网络部分和主机部分。
  • 网关(Gateway):路由器的IP地址,数据包会通过此地址路由到目的网络。
  • 接口(Interface):本地网络接口的IP地址,数据包会从此地址发送。
  • 度量值(Metric):度量值越小,路由的优先级越高。系统将选择度量值最小的路由。

4. 静态路由 vs 动态路由:

  • 静态路由: 这些路由是手动配置的,并不会根据网络更改而自动更新。
  • 动态路由: 动态路由使用路由协议(如RIP、OSPF、EIGRP、BGP等)自动学习和调整路由。它们可以根据网络拓扑的变化自动更新。

5. 路由协议:

路由协议定义了路由器如何与其他路由器通信,以及如何共享路由信息。常见的路由协议包括RIP(路由信息协议)、OSPF(开放最短路径优先)、EIGRP(增强内部网关路由协议)和BGP(边界网关协议)。

6. 默认路由:

默认路由是路由表中的一个特殊条目,当路由表中没有特定的路由匹配数据包的目标地址时,该条目会被使用。它通常指向一个"最后的机会"网关,这通常是一个连接到互联网的设备。

7. 分组转发:

当路由器接收到一个数据包时,它会查看目标IP地址,然后在路由表中查找最佳路径。一旦决定了正确的出口接口和下一个跳转点,数据包就会被转发。

路由确保了互联网的可靠和高效运作,允许数据从一个地方传输到另一个地方,即使这两个地方之间有数千公里的距离。

相关推荐
BingoGo19 小时前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack19 小时前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack4 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理4 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
DianSan_ERP4 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
呉師傅4 天前
火狐浏览器报错配置文件缺失如何解决#操作技巧#
运维·网络·windows·电脑