图解 TCP/IP(三) 网络层 IP 协议

目录

 

概述

一、IP 地址解析

1. 分类

2. 子网划分

3. 无分类

4.IPv6 地址解析

二、IP 数据报格式

三、路由控制

四、路由选择协议

4.1 内部网关协议 RIP

4.2 内部网关协议 OSPF

4.3 外部网关协议 BGP

五、IP 协议相关技术

5.1 ARP 地址解析协议

5.2 ICMP 网际控制报文协议

5.2.1 Ping

5.2.2 Traceroute

5.3 NAT 网络地址转换

六、IP 多播

七、全局地址与私有地址

 


概述

 

  • 因为网络层是整个互联网的核心,实现终端节点之间的通信,在复杂的网络环境中将数据包发送给最终的目标地址。
  • 数据链路层只能在同一种数据链路的节点之间进行包传递。
  • 应当让网络层尽可能简单。网络层向上只提供简单灵活的、无连接的、尽最大努力交互的数据报服务。
  • 使用 IP 协议,可以把异构的物理网络连接起来,使得在网络层看起来好像是一个统一的网络。

与 IP 协议配套使用的还有三个协议:

  • 地址解析协议 ARP(Address Resolution Protocol)
  • 网际控制报文协议 ICMP(Internet Control Message Protocol)
  • 网际组管理协议 IGMP(Internet Group Management Protocol)

发送数据至最终目标地址:

一跳表示同一个数据链路中的源节点到目的节点的范围。当 IP 包到达路由器时,路由器首先查找其目标地址,从而再决定下一步应该将这个包发往哪个路由器,然后将包发送出去。这个过程会重复多次,直到找到最终的目标地址将数据包发往这个节点。

IP 属于面向无连接型

  • 面向无连接,即在发包之前,不需要建立与对端目标地址之间的连接。即使对端主机关机或者不存在,数据包还是会被发送出去。
  • 原因:简化、提速   需要有连接的特性时,可以委托上一层提供此项服务(TCP)。

 

一、IP 地址解析

IPv4 地址由32位正整数表示,8位一组,分4组,每组以 . 隔开,再将每组数转换为十进制数。 

1. 分类

由两部分组成,网络号主机号,其中不同分类具有不同的网络号长度,并且是固定的。

IP 地址 ::= {< 网络号 >, < 主机号 >}   

主机标识不能设置为全为0和全为1全部为0的只有在标识对应的网络地址或 IP 地址不可获知的情况下才使用,全部为1的为广播地址

广播的 IP 包在数据链路层实现发送时,同理也是将 MAC 地址都变为1,即FF:FF:FF:FF:FF:FF

2. 子网划分

通过在主机号字段中拿一部分作为子网号,把两级 IP 地址划分为三级 IP 地址。

IP 地址 ::= {< 网络号 >, < 子网号 >, < 主机号 >}

要使用子网,必须配置子网掩码。一个 B 类地址的默认子网掩码为 255.255.0.0,如果 B 类地址的子网占两个比特,那么子网掩码为 11111111 11111111 11000000 00000000,也就是 255.255.192.0。

注意,外部网络看不到子网的存在。子网掩码与网络内的任意一个 IP 地址相与后,得到的就是这个 IP 地址所在的网络地址。

3. 无分类

无分类编址 CIDR 消除了传统 A 类、B 类和 C 类地址以及划分子网的概念,使用网络前缀和主机号来对 IP 地址进行编码,网络前缀的长度可以根据需要变化

IP 地址 ::= {< 网络前缀号 >, < 主机号 >}

图解 TCP/IP(三) 网络层 IP 协议_第1张图片

CIDR 的记法上采用在 IP 地址后面加上网络前缀长度的方法,例如 128.14.35.7/20 表示前 20 位为网络前缀。

一个 CIDR 地址块中有很多地址,例如将202.244.160.1到202.144.167.254合并为一个网络,实际是将8个C类地址合并成一个网络。

图解 TCP/IP(三) 网络层 IP 协议_第2张图片

一个 CIDR 表示的网络就可以表示原来的很多个网络,并且在路由表中只需要一个路由就可以代替原来的多个路由,减少了路由表项的数量。把这种通过使用网络前缀来减少路由表项的方式称为路由聚合,也称为 构成超网 。

在路由表中的项目由“网络前缀”和“下一跳地址”组成,在查找时可能会得到不止一个匹配结果,应当采用最长前缀匹配来确定应该匹配哪一个。

4.IPv6 地址解析

IPv6 地址长度为128位,以每16比特为一组,分为8组,每组用 : 隔开进行标记。如果出现连续的0时还可以将这些0省略,并用两个冒号 :: 隔开。但是,一个 IP 地址中只允许出现一次两个连续的冒号。

 

二、IP 数据报格式

  • 版本 : 有 4(IPv4)和 6(IPv6)两个值;
  • 首部长度 : 占 4 位,因此最大值为 15。值为 1 表示的是 1 个 4 字节的长度 。因为首部固定长度为 20 字节,因此该值最小为 5。如果可选字段的长度不是 4 字节的整数倍,就用尾部的填充部分来填充。

  • 区分服务 : 用来获得更好的服务,一般情况下不使用。

  • 总长度 : 包括首部长度和数据部分长度。

  • 生存时间 :TTL,它的存在是为了防止无法交付的数据报在互联网中不断兜圈子。以路由器跳数为单位,当 TTL 为 0 时就丢弃数据报。

  • 协议 :指出携带的数据应该上交给哪个协议进行处理,例如 ICMP、TCP、UDP 等。

  • 首部检验和 :因为数据报每经过一个路由器,都要重新计算检验和,因此检验和不包含数据部分可以减少计算的工作量。

  • 标识 : 在数据报长度过长从而发生分片的情况下,相同数据报的不同分片具有相同的标识符。

  • 片偏移 : 和标识符一起,用于发生分片的情况。片偏移的单位为 8 字节。

 

三、路由控制

路由控制表的形成方式有两种:

  1. 静态路由控制:由管理员手动设置
  2. 动态路由控制:路由器与其他路由器相互交换信息时自动刷新

路由控制表中记录着网络地址与下一步应该发送至的路由器的地址。当存在多条匹配记录时,选择位数最长匹配的一条。

默认路由:一般标记为 0.0.0.0 或者 default,任何一个地址都能与之匹配,当找不到匹配记录时,就按照默认路由的下一跳指示发送。

环回地址:在同一台计算机上的程序之间进行网络通信时使用的一个默认地址 127.0.0.1,等同于使用主机名 localhost。使用这个 IP 或者主机名时数据包不会流向网络。

路由分组转发流程:

  • 从数据报的首部提取目的主机的 IP 地址 D,得到目的网络地址 N。
  • 若 N 就是与此路由器直接相连的某个网络地址,则进行直接交付;
  • 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给表中所指明的下一跳路由器;
  • 若路由表中有到达网络 N 的路由,则把数据报传送给路由表中所指明的下一跳路由器;
  • 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;
  • 报告转发分组出错。

图解 TCP/IP(三) 网络层 IP 协议_第3张图片

 

四、路由选择协议

路由选择协议都是自适应的,能随着网络通信量和拓扑结构的变化而自适应地进行调整。

互联网可以划分为许多较小的自治系统 记为AS,一个 AS 可以使用一种和别的 AS 不同的路由选择协议。

可以把路由选择协议划分为两大类:

  • 自治系统内部的路由选择:RIP 和 OSPF
  • 自治系统间的路由选择:BGP

4.1 内部网关协议 RIP

RIP 是一种基于距离向量的路由选择协议。距离是指跳数,直接相连的路由器跳数为 1。跳数最多为 15,超过 15 表示不可达。

RIP 按固定的时间间隔仅和相邻路由器交换自己的路由表,经过若干次交换之后,所有路由器最终会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器地址。

距离向量算法:

  • 对地址为 X 的相邻路由器发来的 RIP 报文,先修改报文中的所有项目,把下一跳字段中的地址改为 X,并把所有的距离字段加 1;(RIP 报文项目的三个关键数据:到目的网络N,距离是d,下一跳路由器是X)
  • 对修改后的 RIP 报文中的每一个项目,进行以下步骤:
  • 若原来的路由表中没有目的网络 N,则把该项目添加到路由表中;
  • 否则:若下一跳路由器地址是 X,则把收到的项目替换原来路由表中的项目(为保持路由表中的信息时最新的);否则:若收到的项目中的距离 d 小于路由表中的距离,则进行更新(例如原始路由表项为 Net2, 5, P,新表项为 Net2, 4, X,则更新);否则什么也不做。
  • 若 3 分钟还没有收到相邻路由器的更新路由表,则把该相邻路由器标为不可达,即把距离置为 16。

RIP 协议实现简单,开销小。但是 RIP 能使用的最大距离为 15,限制了网络的规模。并且当网络出现故障时,要经过比较长的时间才能将此消息传送到所有路由器

4.2 内部网关协议 OSPF

开放最短路径优先 OSPF,是为了克服 RIP 的缺点而开发出来的,最短路径优先表示使用了 Dijkstra 提出的最短路径算法 SPF。

OSPF 具有以下特点:

  • 向本自治系统中的所有路由器发送信息,这种方法是洪泛法。
  • 发送的信息就是与相邻路由器的链路状态,链路状态包括与哪些路由器相连以及链路的度量,度量用费用、距离、时延、带宽等来表示。
  • 只有当链路状态发生变化时,路由器才会发送信息。

所有路由器都具有全网的拓扑结构图,并且是一致的。相比于 RIP,OSPF 的更新过程收敛的很快。

4.3 外部网关协议 BGP

BGP(Border Gateway Protocol,边界网关协议)

AS 之间的路由选择很困难,主要是由于:

  • 互联网规模很大;
  • 各个 AS 内部使用不同的路由选择协议,无法准确定义路径的度量;
  • AS 之间的路由选择必须考虑有关的策略,比如有些 AS 不愿意让其它 AS 经过。

BGP 只能寻找一条比较好的路由,而不是最佳路由。

每个 AS 都必须配置 BGP 发言人,通过在两个相邻 BGP 发言人之间建立 TCP 连接来交换路由信息。

 

五、IP 协议相关技术

  • IP 旨在让最终目标主机收到数据包,但是在这一过程中仅仅有 IP 是无法实现通信的。必须还要有能够解析主机名称和 MAC 地址的功能,以及数据包在发送过程中异常情况处理的功能。

5.1 ARP 地址解析协议

网络层实现主机之间的通信,而链路层实现具体每段链路之间的通信。因此在通信过程中,IP 数据报的源地址和目的地址始终不变,而 MAC 地址随着链路的改变而改变。

ARP 实现由 IP 地址得到 MAC 地址

每个主机都有一个 ARP 高速缓存,里面有本局域网上的各主机和路由器的 IP 地址到 MAC 地址的映射表。

如果主机 A 知道主机 B 的 IP 地址,但是 ARP 高速缓存中没有该 IP 地址到 MAC 地址的映射,此时主机 A 通过广播的方式发送 ARP 请求分组,主机 B 收到该请求后会发送 ARP 响应分组给主机 A 告知其 MAC 地址,随后主机 A 向其高速缓存中写入主机 B 的 IP 地址到 MAC 地址的映射。

5.2 ICMP 网际控制报文协议

产生的原因(IP 协议的不足):

  1. 无差错报告和查错纠正机制
  2. 缺少为主机管理和查询的机制

ICMP封装在 IP 数据报中,更有效地转发 IP 数据报和提高交付成功的机会,但是不属于高层协议。

ICMP 报文分为 差错报告报文(通知出错的原因) 询问报文 (用于诊断的查询报文)。

  1. 不可达:IP 路由器 无法将 IP 数据包发送给目的地址时,会给发送端主机返回一个目标不可达的 ICMP 消息,并在这个消息中显示不可达的具体原因。
  2. 重定向:如果路由器发现发送端主机使用了次优的路径发送数据,那么它会返回一个 ICMP 重定向消息给发送主机,这个消息中包含了最合适的路由信息和源数据。
  3. 超时消息:IP 包中有一个字段是 TTL,它的值随着每经过一次路由器就会减 1 ,减到 0 时数据包会被丢弃。此时,IP 路由器将会发送一个超时消息,通知已经被丢弃。
  4. 回送请求或回答:ping 命令基于此实现。

5.2.1 Ping

Ping 是 ICMP 的一个重要应用,主要用来测试两台主机之间的连通性。

Ping 的原理是通过向目的主机发送 ICMP Echo 请求报文,目的主机收到之后会发送 Echo 回答报文。Ping 会根据时间和成功响应的次数估算出数据包往返时间以及丢包率。

5.2.2 Traceroute

Traceroute 是 ICMP 的另一个应用,用来跟踪一个分组从源点到终点的路径

  • 源主机向目的主机发送一连串的 IP 数据报。第一个数据报 P1 的生存时间 TTL 设置为 1,当 P1 到达路径上的第一个路由器 R1 时,R1 收下它并把 TTL 减 1,此时 TTL 等于 0,R1 就把 P1 丢弃,并向源主机发送一个 ICMP 时间超过差错报告报文;
  • 源主机接着发送第二个数据报 P2,并把 TTL 设置为 2。P2 先到达 R1,R1 收下后把 TTL 减 1 再转发给 R2,R2 收下后也把 TTL 减 1,由于此时 TTL 等于 0,R2 就丢弃 P2,并向源主机发送一个 ICMP 时间超过差错报文。
  • 不断执行这样的步骤,直到最后一个数据报刚刚到达目的主机,主机不转发数据报,也不把 TTL 值减 1。但是因为数据报封装的是无法交付的 UDP,因此目的主机要向源主机发送 ICMP 终点不可达差错报告报文。
  • 之后源主机知道了到达目的主机所经过的路由器 IP 地址以及到达每个路由器的往返时间。

5.3 NAT 网络地址转换

  • 专用网内部的主机使用本地 IP 地址又想和互联网上的主机通信时,可以使用 NAT 来将本地 IP 转换为全球 IP

在以前,NAT 将本地 IP 和全球 IP 一一对应,为了更有效地利用全球 IP 地址,现在常用的 NAT 转换表把传输层的端口号也用上了,使得多个专用网内部的主机共用一个全球 IP 地址。使用端口号的 NAT 也叫做网络地址与端口转换 NAPT。

NAT 转换表会在 NAT 路由器上自动生成。在 TCP 的情况下,建立 TCP 连接首次握手时的 SYN 包一经发出就会生成这个表。

 

六、IP 多播

由于广播会将数据发给所有终端主机,由主机 IP 之上的一层判断是否有必要接受数据,会给那些毫无关系的网络或者主机带来影响,造成网络上很多不必要的流量,而且广播无法穿透路由到达不同网段。

多播可以穿透路由器,实现只给必要的组发送数据包。

图解 TCP/IP(三) 网络层 IP 协议_第4张图片

七、全局地址与私有地址

随着互联网的普及,IP 地址不足的问题日趋显著。将私有 IP 地址与 NAT 技术结合的方法,实现了 全局 IP 地址要在整个互联网范围内保持唯一,但私有地址只要在同一个域里保证唯一即可,在通信时,NAT 可将私有 IP 转换为全局 IP 以实现和外部互联网进行通信。 

 

你可能感兴趣的:(网络)