全文目录
- 基本概念
- IP协议
- IPv4 协议头格式:
- 分片
- 发送方进行分片:
- 识别IP分片:
- 组装IP分片:
- 网段划分
- DHCP技术
- IP分类
- 私有IP和共有IP
- 1. 私有IP地址(Private IP Address):
- 2. 公网IP地址(Public IP Address):
- 应用场景:
- 路由
- 1. **路由的定义**:
- 2. **路由器(Router)**:
- 3. **路由表**:
- 4. **静态路由 vs 动态路由**:
- 5. **路由协议**:
- 6. **默认路由**:
- 7. **分组转发**:
基本概念
- 主机 (Host)
主机通常指在网络上的任何计算设备,能够发送或接收数据。这包括了各种设备,如个人计算机、服务器、手机和其他连接到网络的智能设备。
特点:
- 通常有一个或多个网络接口。
- 有一个或多个IP地址。
- 可以运行各种应用程序和服务。
- 路由器 (Router)
路由器是网络硬件设备,负责在不同网络之间转发数据包。它根据数据包的目的地(即IP地址)来决定如何将数据包转发到其最终目标。
特点:
- 拥有路由表,该表决定如何将数据包从一个网络转发到另一个网络。
- 可以连接多个网络,并在它们之间转发数据包。
- 功能不仅仅是简单地连接网络,还包括其他高级功能,如网络地址转换(NAT)、防火墙和VPN支持。
- 节点 (Node)
节点是网络中的一个连接点,可以是任何设备,例如计算机、打印机或路由器,只要它可以发送、接收或转发信息。在许多情境下,术语"节点"是一个更通用的术语,可能指的是主机、交换机、路由器或其他网络设备。
特点:
- 在物理网络中,每一个连接到网络的设备都可以视为一个节点。
- 在数据链路层,例如Ethernet,每个节点都有一个唯一的物理地址,称为MAC地址。
- 在网络层,每个节点(如果参与IP通信)都有一个或多个IP地址。
IP协议
IP协议头是IP包结构中的一个重要部分,用于包含与数据包传输相关的各种信息。以下是IPv4协议头的格式及各字段的详细说明:
IPv4 协议头格式:
-
版本 (Version, 4位)
- 描述IP协议的版本。IPv4的版本字段的值为4。
-
头长度 (Header Length/IHL, 4位)
- 表示头部有多少32位字长。通常的头部长度是5(即20字节),但如果使用了选项字段,这个值可能会增加。
-
服务类型 (Type of Service/TOS, 8位)
- 描述数据包的优先级及请求的服务类型,如吞吐量、可靠性等。
-
总长度 (Total Length, 16位)
- 表示整个数据包(包括头部和数据)的总字节数。
-
标识 (Identification, 16位)
- 用于区分片段的不同数据包。
-
标志 (Flags, 3位)
- 控制和标识片段。其中包括"不分片"和"更多片段"两个标志位。
-
片偏移 (Fragment Offset, 13位)
- 指示当前片段相对于原始数据包开头的偏移。
-
生存时间 (Time to Live/TTL, 8位)
- 设置数据包在网络中的存活时间。每经过一个路由器,该值减1,当值为0时,数据包被丢弃。
-
协议 (Protocol, 8位)
- 定义在数据部分使用的协议,例如TCP、UDP等。
-
头检验和 (Header Checksum, 16位)
- 用于错误检测。如果头部被篡改,数据包会被丢弃。
-
源IP地址 (Source IP Address, 32位)
- 发送数据包的主机或网络的IP地址。
-
目的IP地址 (Destination IP Address, 32位)
- 数据包的目标主机或网络的IP地址。
-
选项 (Options, 变长)
- 这不是一个必须的字段,但在某些情况下,如记录路由、时间戳等,可以使用这个字段。
-
填充 (Padding)
- 确保头部的长度为32位的整数倍。
上述字段为IPv4协议头的基本组成部分,提供了数据包传输所需的各种信息,包括源地址、目标地址、生存时间和其他重要参数。IPv6协议头有所不同,其中包含了一些新的字段和特性,但基本的思想与IPv4相似。
分片
IP分片的过程是一种在不同MTU(最大传输单元)的网络间传输大数据包时必须的机制。下面是发送方进行分片和接收方重新组装分片的详细过程:
发送方进行分片:
-
确定分片大小:发送方首先要知道数据链路的MTU。然后,基于这个MTU,它会确定每个片段的大小。每个分片都会有自己的IP头,所以实际的数据部分会比MTU小IP头的大小。
-
填写IP头:每个分片都有自己的IP头。大多数字段,如源地址、目标地址、总长度等,都会与原始数据包相同。但某些字段,如标志和片段偏移,会有所不同。
-
设置标志和偏移:在IP头中,有一个叫做“标志”的字段,其中一个位被称为“更多片段”(MF)位。除了最后一个片段,所有片段的MF位都被设置为1。每个片段都有一个“片段偏移”字段,该字段表示该片段在原始数据包中的字节偏移。
-
发送分片:一旦分片完成,发送方会像发送正常的IP数据包那样发送每个片段。
以下是如何识别和组装IP分片的详细步骤:
识别IP分片:
-
查看标识字段:在IP协议头中,有一个叫“标识”(Identification)的字段。此字段的值在同一个原始数据包的所有分片中都是相同的。当接收端收到分片时,它首先会查看该字段以确定哪些分片属于同一个原始数据包。
-
标志字段:IP协议头中的“标志”字段有一个特定的位叫做“更多片段”(MF, More Fragments)。如果MF位设置为1,这意味着还有更多的片段在途中。如果MF位是0,那么它是最后一个或唯一的片段。
-
片段偏移:每个IP分片都有一个“片段偏移”字段,表示该片段在原始数据包中的字节偏移。这允许接收端按正确的顺序组装片段。
总结:
当一个IP数据包经过分片时,它会被拆分为多个片段。每个片段都有自己的IP头,而IP头中的特定字段(如标志和片段偏移)将用于标识该片段的特性和位置。以下是根据不同情况列举的例子:
-
不是分片(未分片的完整数据包):
- 标识字段(Identification Field): 唯一值。
- 标志字段(Flags Field):
- DF (Don’t Fragment): 可以是0或1,取决于是否希望该数据包被分片。
- MF (More Fragments): 0,因为这是一个完整的数据包,没有其他片段。
- 片段偏移字段(Fragment Offset Field): 0,因为这是一个完整的数据包。
-
分片开头(第一个片段):
- 标识字段: 与原始数据包相同的唯一值。
- 标志字段:
- DF: 0,因为数据包已经被分片了。
- MF: 1,表示后面还有其他片段。
- 片段偏移字段: 0,因为这是第一个片段,它开始于原始数据包的起始位置。
-
分片中间部分:
- 标识字段: 与原始数据包相同的唯一值。
- 标志字段:
- DF: 0。
- MF: 1,表示后面还有其他片段。
- 片段偏移字段: 不为0,表示这个片段在原始数据包中的起始位置。例如,如果这是第二个片段,并且每个片段包含100字节的数据,则片段偏移可能为12(因为每个片段的数据量为8字节块,所以100/8=12.5,取整数部分)。
-
分片结尾(最后一个片段):
- 标识字段: 与原始数据包相同的唯一值。
- 标志字段:
- DF: 0。
- MF: 0,表示这是最后一个片段。
- 片段偏移字段: 表示这个片段在原始数据包中的起始位置,值大于之前的片段。
通过检查这些字段,接收端可以确定一个IP数据包的片段位置及其在原始数据包中的相对位置,从而正确地组装完整的数据包。
组装IP分片:
组装IP分片是一个重要的过程,以确保原始数据包在传输结束后可以完整无误地重建。以下是组装IP分片的详细步骤:
-
分片接收:
- 当一个分片到达目的地时,接收端首先会检查其IP头部,特别是
标识字段
。这个字段对于同一个原始数据包的所有片段都是相同的。 - 接收端使用这个
标识字段
来查找是否已经收到了来自同一个原始数据包的其他片段。如果是第一个到达的片段,接收端会为该原始数据包创建一个新的缓冲区或结构。
- 当一个分片到达目的地时,接收端首先会检查其IP头部,特别是
-
缓冲区和定时器:
- 当新的缓冲区被创建时,接收端通常还会启动一个定时器。这个定时器用于等待所有的片段到达。如果在指定的时间内所有片段都没有到达,那么接收端可能会放弃组装,并删除已经接收的片段。
-
片段排序:
- 当一个新的片段到达时,接收端会查看其
片段偏移字段
,这个字段表示片段在原始数据包中的位置。接收端使用这个字段来确定片段在缓冲区中的正确位置。 - 例如,如果
片段偏移
为0,则这是第一个片段;如果片段偏移
为10,则该片段应放在缓冲区的第10个块位置,以此类推。
- 当一个新的片段到达时,接收端会查看其
-
检查是否所有片段都已接收:
- 每当新的片段被加入缓冲区时,接收端都会检查是否所有的片段都已经到达。这通常通过检查缓冲区中的空白或缺失块来实现。
- 如果
标志字段
的MF
(更多片段)标志为0,表示这是最后一个片段,那么接收端可以确定原始数据包的总长度。
-
数据包重组:
- 一旦所有片段都已到达,接收端开始组装完整的数据包。这涉及到将缓冲区中的所有片段按照它们的
片段偏移
值的顺序拼接在一起。 - 通常,只有一个IP头会被保留(通常是第一个片段的头),而其他片段的头会被丢弃。
- 一旦所有片段都已到达,接收端开始组装完整的数据包。这涉及到将缓冲区中的所有片段按照它们的
-
完成组装和传递:
- 一旦数据包被完全组装,它就会被传递给上层的协议,例如TCP或UDP,进行进一步处理。
总之,IP分片的组装是一个详细和精确的过程,确保数据的完整性和准确性在网络传输中得到保证。
网段划分
IP地址分为两个部分, 网络号和主机号
- 网络号: 保证相互连接的两个网段具有不同的标识;
- 主机号: 同一网段内, 主机之间具有相同的网络号, 但是必须有不同的主机号;
对于相同子网中的设备,网络号可以相同,但是主机号不能相同,DHCP技术就是实现这一问题的关键:
DHCP技术
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一种动态分配IP地址的技术。DHCP允许计算机在加入新网络时自动获取IP地址和其他网络配置,无需管理员手动配置。以下是DHCP的主要功能:
-
动态IP分配:当客户端加入网络时,DHCP服务器可以动态分配IP地址,这意味着客户端可以“租用”IP地址一段时间,租期结束后IP地址可能会被回收或重新分配。
-
静态IP分配:虽然DHCP的主要优势是动态分配地址,但它也支持基于客户端的MAC地址来静态分配特定的IP地址。
-
IP地址重用:当DHCP客户端离开网络或IP地址的租期到期时,该地址可以被DHCP服务器回收并分配给其他客户端。
-
租期管理:每个DHCP分配的IP地址都有一个租期,客户端必须在租期到期之前与DHCP服务器续约,以继续使用当前的IP地址。
-
网络配置:除了IP地址外,DHCP还可以为客户端提供其他网络配置,如子网掩码、默认网关、DNS服务器地址、域名和其他许多选项。
-
集中管理:通过使用DHCP,网络管理员可以集中管理和分配IP地址和网络配置,从而减少了配置错误和地址冲突的可能性。
-
支持多个子网:一个DHCP服务器可以为多个子网或VLAN提供服务,这通过使用DHCP中继代理来实现。
-
自动配置:新的设备或客户端可以简单地连接到网络,而无需手动配置,因为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地址,然后在路由表中查找最佳路径。一旦决定了正确的出口接口和下一个跳转点,数据包就会被转发。
路由确保了互联网的可靠和高效运作,允许数据从一个地方传输到另一个地方,即使这两个地方之间有数千公里的距离。