**笔记 4.2 - 网际协议IP**
1. **定义与重要性**:
- 网际协议IP是TCP/IP体系中的核心协议之一。
- 它是互联网的关键标准协议。
2. **发展背景**:
- 又被称为Kahn-Cerf协议。
- 由Robert Kahn和Vint Cerf研发。
- Kahn和Cerf于2005年因其贡献获得了图灵奖(计算机科学的诺贝尔奖)。
3. **版本细节**:
- 严格说,本章讨论的是IPv4(IP的第四个版本)。
- 通常在讲述IP时,不特指版本。
- IPv6为较新版本,会在4.6节讨论。
- IPv1-3和IPv5版本未被使用。
4. **与IP协议相关的其他协议**:
- 地址解析协议ARP。
- 网际控制报文协议ICMP。
- 网际组管理协议IGMP。
- 逆地址解析协议RARP(已被淘汰)。
5. **协议间关系(图4-2)**:
- **应用层**: 包括(HTTP,FTP,SMTP等)应用协议。
- **运输层**: 包括TCP, UDP。
- **网络层(网际层)**:
- 主要是IP。
- ARP位于最下方,常被IP使用。
- ICMP和IGMP位于上方,使用IP。
- **网络接口层**: 与各种网络接口和物理硬件相连。
6. **关于"网际层"这个术语**:
- 网际协议IP使得多个计算机网络可以互联通信。
- 因此TCP/IP体系的网络层经常被称为网际层或IP层。
- “网际层”强调这是一个由多个网络构成的互联网络。
7. **接下来的讨论**:
- 在深入讨论网际协议IP之前,我们需要了解什么是虚拟互连网络。
**4.2 网际协议IP笔记**
- **定义**:网际协议IP是TCP/IP体系中的核心协议之一,也是最主要的互联网标准协议。
- **别称**:称为Kahn-Cerf协议,得名于创始人Robert Kahn和Vint Cerf。
- **奖项**:Kahn和Cerf于2005年获得图灵奖,相当于计算机科学的诺贝尔奖。
- **版本**:本文讨论的是IP的第四个版本,即IPv4。而IPv6是较新的版本,版本1~3和5都未曾使用。
- **配套协议**:与IP协议配套使用的还有ARP(地址解析协议)、ICMP(网际控制报文协议)、IGMP(网际组管理协议)。曾有RARP(逆地址解析协议),现已被淘汰。
- **协议关系**:图4-2显示了这些协议与网际协议IP之间的关系。其中ARP在最下面,而ICMP和IGMP在上面,因为它们使用IP。
- **网络层名称**:TCP/IP体系中的网络层常被称为网际层或IP层,强调这是多个网络构成的互联网络。
---
**4.2.1 虚拟互连网络**
- **挑战**:互连全球百万计的网络是复杂的。存在许多异构性,如不同的寻址、分组长度、接入机制等。
- **网络统一化**:由于各网络的需求和技术差异,不能仅使用一种网络来简化互连。
- **中间设备**:网络互连需要中间设备,如转发器(物理层)、网桥(数据链路层)、路由器(网络层)和网关(网络层以上)。
- **路由器与网关**:路由器是网络层中用于路由选择的专用计算机。因历史原因,路由器曾被称为网关。
- **虚拟互连网络**:使用相同的网际协议IP,互连后的网络可以视为一个大的虚拟网络。它在网络层看起来像一个统一的网络,遮蔽了物理网络的差异。
- **IP网的优势**:在IP网上的主机通信时,它们只看到统一的网络,而看不到各网络的异构细节。
- **例子**:图4-4显示了如何通过路由器将IP数据报从源主机H₁传输到目的主机H₂。
总结,这一节讲述了网际协议IP的重要性和其与其他协议的关系。虚拟互连网络部分讨论了网络互连的挑战和解决方法,并通过示例进一步说明了这一概念。
在TCP/IP体系中,IP地址是至关重要的。为了深入理解它,我们应该参考互联网的正式标准RFC791。
整个互联网可以被视为一个单一的、抽象的网络。IP地址为互联网上的每台主机(或路由器)的每个接口分配了一个唯一的32位标识符。这样的结构使我们可以在互联网上方便地进行寻址。目前,IP地址的分配由ICANN (Internet Corporation for Assigned Names and Numbers)管理。
IP地址的编址经历了三个阶段:
- 分类的IP地址:最早的编址方法,于1981年被标准化。
- 子网划分:对基本编址方法的改进,于1985年被标准化为RFC950。
- 构成超网:较新的编址方法,于1993年提出并快速得到应用。
本节将重点讨论分类的IP地址,而后两种方法将在4.3节中讨论。
“分类的IP地址”将IP地址划分为几个固定类别。每个类别的地址都由两个固定长度的字段组成:网络号(net-id)和主机号(host-id)。网络号在全球范围内是唯一的,标识连接到的网络。主机号标识在该网络上的特定主机或路由器。
IP地址格式为:
IP地址:={<网络号>,<主机号>}
(4-1)
如图4-5所示,A类、B类和C类地址是最常用的单播地址(一对一通信)。从图中可以看出,这三类地址的网络号字段和主机号字段的长度都不同。A类、B类和C类地址的网络号字段的前几位是类别位,分别为0, 10和110。D类地址用于多播,而E类地址被保留。
需要注意的是,近年来,由于无分类IP地址的广泛使用,传统的A类、B类和C类地址的区分已经成为历史。但为了清晰度和概念的演进,我们还是从分类的IP地址开始讲解。
总的来说,IP地址不仅仅标识一台主机,还指明了主机所连接到的网络。
IP地址的划分旨在满足不同用户的需求。根据需求,一个单位可以获得一块具有同样网络号的地址,而具体的主机号则由该单位自行分配。
通常,IP地址都是32位的二进制代码。为了便于阅读和书写,我们通常使用点分十进制记法(dotted decimal notation)表示IP地址。例如,128.11.3.31比其二进制形式更易读。
---
---
**IP地址分类:**
1. **A类地址:**
- 网络号字段占1个字节,可指派的网络号是126个。
- 主机号占3个字节,最大主机数为16777214。
- 总计占IP地址空间的50%。
2. **B类地址:**
- 网络号字段有2个字节,可指派的网络数为16383。
- 主机号字段有2个字节,每个网络上的最大主机数为65534。
- 总计占IP地址空间的25%。
3. **C类地址:**
- 网络号字段有3个字节,可指派的网络总数为2097151。
- 主机号字段有1个字节,每个网络的最大主机数为254。
- 总计占IP地址空间的12.5%。
---
**IP地址特性:**
1. IP地址由网络号和主机号两部分组成,是分等级的地址结构。
2. IP地址标志主机(或路由器)和链路的接口。
3. 互联网的观点:一个网络是指具有相同网络号的主机的集合。
4. 所有分配到网络号的网络在互联网中都是平等的。
---
**其他要点:**
1. 在同一局域网上的主机或路由器的IP地址的网络号必须一致。
2. 用网桥互连的网段是一个局域网,有一个网络号。
3. 路由器至少有两个不同的IP地址。
4. 直接相连的路由器可以分配也可以不分配IP地址。不分配时称为无编号网络或无名网络。
---
**概述**:在探讨网络通信时,理解IP地址和硬件地址的区别是至关重要的。它们在网络中的功能、位置和用途各不相同。
**1. IP地址与硬件地址的区别**
- 物理地址(硬件地址):在数据链路层和物理层使用的地址。
- IP地址:在网络层及以上使用的逻辑地址。逻辑地址之所以这样称呼,是因为它是通过软件来实现的。
**2. 数据传输与地址**
- 在数据传输中,数据先从高层移至低层,然后再通过通信链路传输。使用IP地址的是IP数据报。
- 注:在局域网中,硬件地址常被称为物理地址或MAC地址。
**3. 不同层次、不同区间的源地址和目的地址**
- 在网络层:写入IP数据报首部的地址。
- 在数据链路层:写入MAC帧首部的地址。
**关键点**:
- 在IP层的互联网上,只能看到IP数据报。数据报通过的路由器的IP地址并不会显示在IP数据报的首部中。
- 虽然IP数据报首部有源地址,但路由器仅根据目标站的IP地址网络号进行路由选择。
- 在局域网的链路层,只能看到MAC帧,且MAC帧首部中的地址在不同的网络传输时会发生变化。
- 虽然每个网络的硬件地址体系都不同,但在IP层上,这些复杂细节被屏蔽。这种“屏蔽”概念在计算机中广泛应用,使得复杂的过程对用户透明。
**核心概念**:理解这些网络通信的基本概念是至关重要的。有两个主要问题需要解决:1) 如何知道在MAC帧首部填入什么硬件地址? 2) 如何得出路由器中的路由表?这两个问题将在后续章节中详细讨论。
- **定义与作用**:
- 地址解析协议 (ARP) 主要用于在已知机器的 IP 地址的情况下,寻找其对应的硬件地址。
- 图4-10 描述了 ARP 协议的功能。
- **协议归类**:
- 虽然 IP 协议使用了 ARP,但 ARP 主要目的是将网络层使用的 IP 地址转化为数据链路层使用的硬件地址。
- 有些教材会将 ARP 划归为数据链路层。
- **与RARP的关系**:
- 早期有一个逆地址解析协议 (RARP) 允许机器仅通过其硬件地址来查询其 IP 地址。
- 现代的 DHCP 协议已经包含了 RARP 的功能,因此很少还会单独提及 RARP。
- **ARP的工作原理**:
- 网络层使用 IP 地址,但在实际网络上传输数据帧时,仍需使用该网络的硬件地址。而 IP 地址与硬件地址间并没有直接映射。
- ARP 解决此问题的方式是通过在主机的 ARP 高速缓存中存储 IP 地址到硬件地址的映射表。
- 当主机 A 需要与主机 B 通信时,首先检查其 ARP 缓存以查找 B 的硬件地址。如果找到,则直接使用。否则,会广播 ARP 请求来查询 B 的硬件地址。
- 其他机器收到此 ARP 请求后,如果 IP 地址匹配,则回复其硬件地址;否则忽略此请求。
- 一旦 A 收到了 B 的响应,它将 B 的 IP 地址与硬件地址的映射存入其 ARP 高速缓存中。
- **ARP高速缓存的重要性**:
- 如果不使用 ARP 缓存,每次通信都需要广播 ARP 请求,导致网络通信量大增。
- 使用 ARP 高速缓存可以减少不必要的网络广播,提高通信效率。
- ARP 缓存中的每个条目都有一定的生命周期,过期的条目会被自动删除。
- 这样的设计可以确保信息的实时性,例如在硬件地址变更的情况下可以快速更新。
- **ARP与网络位置**:
- ARP 主要用于解决同一个局域网内的机器或路由器之间的 IP 地址和硬件地址的映射问题。
此节提供了对地址解析协议 ARP 的详细介绍,包括其定义、工作原理、与其他协议的关系,以及 ARP 高速缓存的重要性。
---
**ARP协议:从IP地址到硬件地址的自动解析**
- ARP允许主机或路由器自动地从已知的IP地址解析出链路层所需的硬件地址。
- 主机用户通常对此解析过程是无感知的。
**ARP使用的四种典型情况:**
1. 主机A向同一网络上的另一台主机B发送IP数据报。A通过ARP请求分组找到B的硬件地址。
2. 主机A想要向另一个网络上的主机C或D发送IP数据报。A首先通过ARP找到其连接的路由器R₁的硬件地址。然后,R₁完成数据报的转发。
3. 路由器R₁向与其连接在同一网络上的主机C转发IP数据报。R₁通过ARP找到C的硬件地址。
4. 路由器R₁向另一网络上的主机D转发IP数据报。因为D不在R₁的网络上,R₁先通过ARP找到另一个路由器R₂的硬件地址,然后由R₂完成数据报的转发。
虽然在多种情境中需要多次使用ARP,但这仅仅是上述几种情况的组合。
**为什么使用IP地址而不是硬件地址?**
- 全球存在许多不同类型的网络,使用不同的硬件地址。要实现这些异构网络之间的互通,直接使用硬件地址会涉及复杂的地址转换。
- 使用IP地址和ARP,使得不同网络间的通信变得简单。用户不需要担心背后的复杂过程,因为计算机软件会自动处理。
---
总之,ARP是互联网通信中的核心协议,它简化了IP和硬件地址之间的转换,使跨网络的通信变得更加简单。
---
**4.2.5 IP数据报的格式**
- **总览:**
- IP数据报的格式揭示了IP协议的功能。
- 格式基于32位(4字节)单位。
- IP数据报包括两部分:首部和数据部分。
- **IP数据报的结构:**
- 固定首部长度为20字节,之后是可变长度的可选字段。
- **首部字段详解:**
1. **版本(4位):** IP协议的版本。例如,IPv4为版本4,IPv6为版本6。
2. **首部长度(4位):** 长度单位是32位。通常首部长度为20字节,最大为60字节。
3. **区分服务(8位):** 早期为服务类型,但未使用。现在为区分服务DS。
4. **总长度(16位):** 首部和数据的总长度。最大为65535字节。但实际使用中,要考虑数据链路层的最大传送单元MTU。
5. **标识(16位):** 计数器,对每个数据报增加。当数据报分片时,该值复制到所有片。
6. **标志(3位):** 包括MF和DF位。MF指示是否还有分片,DF指示是否允许分片。
7. **片偏移(13位):** 显示分片在原数据报中的位置。每个分片的长度必须是8字节的倍数。
**其他点:**
- 数据链路层每种协议都有MTU(最大传送单元)限制,如以太网的MTU为1500字节。如果数据报过长,需要分片处理。
- 分片时,数据报首部中的“总长度”字段表示每个分片的首部和数据长度之和。
---
**IP数据报的结构**
1. **首部与数据报片**:
- 数据报分片举例
- 分片数据报的首部与偏移值
2. **IP数据报首部中与分片有关的字段数值**:
- 总长度、标识、MF(更多片)、DF(不分片)、片偏移
3. **生存时间 (TTL)**:
- TTL的单位从秒更改为跳数
- 用于防止数据报在网络中无限循环
- TTL值为0时,数据报被丢弃
4. **协议字段**:
- 定义数据报携带的数据使用的协议
- 例如:ICMP, IGMP, IP, TCP, UDP, IPv6等
5. **首部检验和**:
- 仅检查数据报的首部
- 通过反码算术运算进行检查
- 如果首部没有变化,结果为0,则保留数据报;否则,丢弃
6. **源地址与目的地址**:
- 占32位
7. **其他注解**:
- IANA和ICANN的介绍及职责
- IP数据报中的特殊数据报封装
- 反码与补码的区别
**2. IP数据报首部的可变部分**
- **选项字段**:IP数据报首部的可变部分主要为选项字段。
- **目的**:支持排错、测量以及安全等功能。
- **长度**:此字段长度不固定,可以是1-40个字节,取决于所选择的选项。
- **结构**:某些选项只需1个字节,有的需要多个。选项可以紧密拼接,不需分隔符。若非4字节的倍数,需使用全0填充。
- **可变首部的影响**:虽然增加了功能,但也增加了处理的开销。
- 路由器往往不处理选项字段。
- IPv6优化,首部长度固定,无选项字段。
- **详细内容**:对于选项的具体内容和使用,可以查看RFC791。
(此笔记为简化和提炼的版本,更加便于快速回顾和学习。)
1. **简化说明**:
- 路由器通过路由表来确定如何转发分组。
- 路由表指出到哪个网络应如何转发,而非指向每台主机,以减少复杂性。
2. **路由器R₂的示例**:
- 路由器R₂的路由表显示了各个网络应如何转发。
- 若目标在网2或网3,则由路由器R₂直接交付。
- 若目标在网1,下一跳为路由器R₁;若在网4,则下一跳为路由器R₃。
- 每个路由器都有两个IP地址。
3. **网络拓扑简化**:
- 网络可以简化为链路,路由器之间的IP地址明确标注。
- 这样的简化强调了分组是如何从一个路由器转发到另一个路由器的。
4. **路由表主要信息**:
- 目标网络地址
- 下一跳地址
- 其他可能的信息:标志、参考计数、使用情况、接口等。
5. **分组转发结论**:
- 根据目标网络地址确定下一跳路由器。
- IP数据报最终会找到目标主机所在网络上的路由器。
- 只有在最后一步,数据报才会直接交付给目标主机。
6. **特定主机路由**:
- 在大多数基于网络的路由中,仍可以指定特定的目的主机。
- 对网络管理员有利,方便控制和测试网络,考虑安全问题。
7. **默认路由**:
- 路由器使用默认路由减少路由表空间和搜索时间。
- 在一个网络只有少数对外连接时特别有用。
- 默认路由对于主机发送IP数据报特别有利,尤其是小网络。
### 默认路由及路由表
1. **图4-17**: 描述了路由器R作为网络N₁的默认路由器。其中,H的路由表指出到达N₁和N₂的路径。
2. **IP数据报的首部**:
- 没有指明“下一跳路由器的IP地址”。
- IP数据报的首部仅包括源IP地址和目的IP地址,不包括中间路由器的IP地址。
3. **数据报转发**:
- 路由器在收到数据报后,先从路由表得出下一跳路由器的IP地址。
- IP地址转换为硬件地址时需要使用ARP。
- 硬件地址被放入链路层的MAC帧首部,用于找到下一跳路由器。
4. **使用IP地址的意义**:
- 抽象的IP地址旨在隐蔽底层网络的复杂性,使得问题更易于分析和研究。
- 直接在路由表中使用硬件地址会导致更多问题。
5. **分组转发算法**:
- 提取数据报的目的IP地址D,并得出其网络地址N。
- 判断是否为直接交付或间接交付。
- 通过路由表逐步决定转发路径,直到数据报到达目的网络。
6. **路由表的查找过程**: 可以比喻为开车到机场的过程。在不知道具体路径的情况下,每到一个交叉口(路由器)都会询问如何到达目的地。
7. **路由表的建立与更新**: 本节内容主要讨论了如何根据路由表内容进行分组转发,但并未涉及路由表如何建立或更新。
### 重点:
1. **定义与功能**:网际协议IP是一个无连接、不可靠的服务,它只提供最基本的数据包传输服务。
2. **IP地址**:由32位组成,分为网络部分和主机部分,用于唯一标识网络上的每个设备。
3. **子网划分**:为了更加灵活地进行IP地址管理,可以对IP地址进行进一步的划分。
4. **路由选择**:决定数据包从源到目标的路径选择。
5. **IP数据报格式**:定义了IP数据报的结构,包括版本、头长度、服务类型、总长度等字段。
### 难点:
1. **子网掩码**:与IP地址结合使用,用于划分网络地址和主机地址。
2. **CIDR (无类别域间路由)**:现代IP地址划分方法,用于解决传统的A、B、C类地址划分的不足。
3. **IP碎片重组**:当IP数据报在网络中传输时,可能会被分成多个碎片,这些碎片在目的地需要被重新组装。
4. **路由选择算法**:如何决定数据包的最佳路径是网络设计中的一个核心问题。
### 易错点:
1. **地址划分误解**:容易混淆传统的A、B、C类地址与CIDR。
2. **私有地址和公有地址**:私有地址只在局域网中有效,不应在互联网中使用。
3. **MTU和碎片化**:不同的网络可能有不同的MTU(最大传输单元),导致IP数据报需要碎片化。
4. **默认网关误配置**:在配置设备IP时,错误的默认网关会导致设备无法访问外部网络。