原创

TCP_IP分层模型之网络层IP协议

网络层位于 osi 七层参考模型的第三层,它属于操作系统层面的协议,他为数据在主机节点之间数据传输建立逻辑链路,并分组转发数据。

OSI参考模型网络模型图
OSI参考模型网络模型图

1.IP 协议基本知识

1.1 概念

IP(IPv4、IPv6)相当于 OSI 参考模型中的第 3 层——网络层。网络层的主要作用是“实现终端节点之间的通信”。这种终端节点之间的通信也叫“点对点通信”。 网络的下一层——数据链路层的主要作用是在互连同一种数据链路的节点之间进行包传递。而一旦跨越多种数据链路,就需要借助网络层。网络层可以跨越不同的数据链路,即使是在不同的数据链路上也能实现两端节点之间的数据包传输。 IP 大致分为三大作用模块,它们是 IP 寻址、路由(最终节点为止的转发)以及 IP 分包与组包。

1.2.IPv4 首部

IPv4首部
IPv4首部
  • 版本:表示 IP 协议的版本。
  • 首部长度:首部的长度,单位是 4 字节。
  • 区分服务:暂时无意义。
  • 总长度:首部和数据之和的长度,单位为字节,当数据报的总长度超过数据链路层的最大传送单元时就必须进行分片处理。将一个 IP 数据报分成多个分片,每个分片都具有 IP 首部。另外,还需要注意,这里只有 16 位,意味着 ip 包能携带的最大数据量为 65536 即 64kb。
  • 标识:对分片进行标识,同一个数据报的分片具有同样的标识。
  • 标志:占 3 位。最低位记为 MF(More Fragment),MF = 1 表示后面“还有分片”,MF = 0 表示这是多个数据报片中的最后一个;中间一位记为 DF(Don't Fragment),只有当 DF = 0 时才允许分片。
  • 片偏移:表示该分片在原分组中的相对位置,片偏移以 8 个字节为偏移单位。
  • 生存时间:TTL,表示该数据报在网络中可以被转发的次数,每经过一次转发,这个值减 1。
  • 首部校验和:这个字段只检验数据报的首部,不检验数据部分。
  • 源地址
  • 目的地址
  • 可变部分:可变部分中包括用于增加 IP 数据报功能的选项,这些选项一个一个拼起来,中间不需要分隔符,最后用 0 填充为 4 字节的整数倍。

1.3.IPv6 首部

IPv6首部
IPv6首部
  • 版本:协议的版本,对于 IPv6 是 6.
  • 流标号:“流”指互联网络上从特定源点到特定终点的一系列数据报,所有属于同一个流的数据报都具有同样的流标号。
  • 有效载荷长度:表示 IPv6 数据报除基本首部以外的字节数。
  • 下一个首部:当没有扩展首部时,下一个首部字段指出基本首部后面的数据应该移交给哪个高层协议。当出现扩展首部时,下一个首部字段的值表示后面第一个扩展首部的类型。
  • 数据报图中经过的路由器不处理扩展首部。
  • IPv6 采用冒号十六进制记法,如 68E6:8C64:FFFF:FFFF:0:1180:960A:FFFF,冒号十六进制记法允许零压缩,即一连串连续的零可以为一对冒号所取代,任一地址中只能够使用一次零压缩。

1.4.IP 地址

IP 地址结构 在最初定义 Internet 地址结构时,每个单播 IP 地址都有一个网络部分,用于识别接口使用的 IP 地址在哪个网络中可被发现;以及一个主机地址,用于识别由网络部分给出的网络中的特定主机。因此,地址中的一些连续位称为网络号,其余连续位称为主机号。举个例子,192.168.1.1 这是一个 IP 地址。分为四段用.隔开,前面 3 段用来表示网络位置,后面 1 段表示主机位置。这里的网络位置是 192.168.1,最后的 1 则表示 192.168.1 范围下的具体的主机位为 1 的主机。

IP 地址分类

IP地址分类
IP地址分类

IP 地址分为四个级别,分别为 A 类、B 类、C 类、D 类。它根据 IP 地址中从第 1 位到第 4 位的比特列对其网络标识和主机标识进行区分。

  • A 类 IP 地址是首位以 “0” 开头的地址。从第 1 位到第 8 位是它的网络标识。用十进制表示的话,0.0.0.0~127.0.0.0 是 A 类的网络地址。A 类地址的后 24 位相当于主机标识。因此,一个网段内可容纳的主机地址上限为 16,777,214 个。
  • B 类 IP 地址是前两位 “10” 的地址。从第 1 位到第 16 位是它的网络标识。用十进制表示的话,128.0.0.0~191.255.0.0 是 B 类的网络地址。B 类地址的后 16 位相当于主机标识。因此,一个网段内可容纳的主机地址上限为 65,534 个。
  • C 类 IP 地址是前三位为 “110” 的地址。从第 1 位到第 24 位是它的网络标识。用十进制表示的话,192.0.0.0~223.255.255.0 是 C 类的网络地址。C 类地址的后 8 位相当于主机标识。因此,一个网段内可容纳的主机地址上限为 254 个。
  • D 类 IP 地址是前四位为 “1110” 的地址。从第 1 位到第 32 位是它的网络标识。用十进制表示的话,224.0.0.0~239.255.255.255 是 D 类的网络地址。D 类地址没有主机标识,常用于多播。 在分配 IP 地址时关于主机标识有一点需要注意。即要用比特位表示主机地址时,不可以全部为 0 或全部为 1。因为全部为 0 只有在表示对应的网络地址或 IP 地址不可以获知的情况下才使用。而全部为 1 的主机通常作为广播地址。因此,在分配过程中,应该去掉这两种情况。这也是为什么 C 类地址每个网段最多只能有 254(256 - 2 = 254)个主机地址的原因。

2.路由

路由,简单来说,就是在复杂的网络结构中, 一跳一跳找出一条通往终点的路线。 所谓 “一跳” 就是数据链路层中的一个区间. 具体在以太网中指从源 MAC 地址到目的 MAC 地址之间的帧传输区间。

发送数据包时所使用的地址是网络层的地址,即 IP 地址。然而仅仅有 IP 地址还不足以实现将数据包发送到对端目标地址,在数据发送过程中还需要类似于“指明路由器或主机”的信息,以便真正发往目标地址。保存这种信息的就是路由控制表。

该路由控制表的形成方式有两种:一种是管理员手动设置,另一种是路由器与其他路由器相互交换信息时自动刷新。前者也叫做静态路由控制,而后者叫做动态路由控制。

IP 协议始终认为路由表是正确的。然后,IP 本身并没有定义制作路由控制表的协议。即 IP 没有制作路由控制表的机制。该表示由一个叫做“路由协议”的协议制作而成。

Windows 上面可以通过命令查看本机的路由表 route print

2.1 路由控制

IP 地址的网络地址部分用于进行路由控制。 路由控制表中记录着网络地址与下一步应该发送至路由器的地址。 在发送 IP 包时,首先要确定 IP 包首部中的目标地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将 IP 包转发给相应的下一个路由器。如果路由控制表中存在多条相同网络地址的记录,就选择一个最为吻合的网络地址。

路由控制表与 IP 包发送 路由控制表与IP包发送

3.IP 报文的分片与重组

每种数据链路的传输单元(MTU)都不尽相同,因为每个不同类型的数据链路的使用目的不同。使用目的不同,可承载的 MTU 也就不同。 任何一台主机都有必要对 IP 分片进行相应的处理。分片往往在网络上遇到比较大的报文无法一下子发送出去时才会进行处理。 经过分片之后的 IP 数据报在被重组的时候,只能由目标主机进行。路由器虽然做分片但不会进行重组。 Linux 系统可以通过命令查看 MTU netstat -in

3.1 路径 MTU 发现

分片机制也有它的不足。如路由器的处理负荷加重之类。因此,只要允许,是不希望由路由器进行 IP 数据包的分片处理的。 为了应对分片机制的不足,“路径 MTU 发现” 技术应运而生。路径 MTU 指的是,从发送端主机到接收端主机之间不需要分片是 MTU 的大小。即路径中存在的所有数据链路中最小的 MTU 。 进行路径 MTU 发现,就可以避免在中途的路由器上进行分片处理,也可以在 TCP 中发送更大的包。

4.IP 协议相关技术

DNS

我们平常在访问某个网站时不适用 IP 地址,而是用一串由罗马字和点号组成的字符串。而一般用户在使用 TCP/IP 进行通信时也不使用 IP 地址。能够这样做是因为有了 DNS (Domain Name System)功能的支持。DNS 可以将那串字符串自动转换为具体的 IP 地址。 这种 DNS 不仅适用于 IPv4,还适用于 IPv6。

ARP

只要确定了 IP 地址,就可以向这个目标地址发送 IP 数据报。然而,在底层数据链路层,进行实际通信时却有必要了解每个 IP 地址所对应的 MAC 地址。 ARP 是一种解决地址问题的协议。以目标 IP 地址为线索,用来定位下一个应该接收数据分包的网络设备对应的 MAC 地址。不过 ARP 只适用于 IPv4,不能用于 IPv6。IPv6 中可以用 ICMPv6 替代 ARP 发送邻居探索消息。 RARP 是将 ARP 反过来,从 MAC 地址定位 IP 地址的一种协议。

ICMP

ICMP 的主要功能包括,确认 IP 包是否成功送达目标地址,通知在发送过程当中 IP 包被废弃的具体原因,改善网络设置等。 IPv4 中 ICMP 仅作为一个辅助作用支持 IPv4。也就是说,在 IPv4 时期,即使没有 ICMP,仍然可以实现 IP 通信。然而,在 IPv6 中,ICMP 的作用被扩大,如果没有 ICMPv6,IPv6 就无法进行正常通信。

DHCP

如果逐一为每一台主机设置 IP 地址会是非常繁琐的事情。特别是在移动使用笔记本电脑、只能终端以及平板电脑等设备时,每移动到一个新的地方,都要重新设置 IP 地址。 于是,为了实现自动设置 IP 地址、统一管理 IP 地址分配,就产生了 DHCP(Dynamic Host Configuration Protocol)协议。有了 DHCP,计算机只要连接到网络,就可以进行 TCP/IP 通信。也就是说,DHCP 让即插即用变得可能。 DHCP 不仅在 IPv4 中,在 IPv6 中也可以使用。

5.总结

  • 网络层最重要的就是 IP 协议,他有三大模块,分别为 IP 寻址、路由以及 IP 分包与组包
  • IP 地址由网络地址+主机地址构成,目前分为 4 类
  • IP 报文能在网络层流动,得益于路由协议的支持,路由控制类似于我们坐火车的火车站的功效。
  • 由于链路层有最大传输单元 MTU 的限制,所以超过 MTU 的报文会被分片和重组。一般链路层 MTU 大小为 1500
  • DNS、ARP、ICMP、DHCP 等都是网络层的相关协议,都是为 IP 报文能安全到达指定的 ip 地址服务。
  • 网络层我们 ip 报文的识别码是源 IP 和目的 IP,上一章链路层的识别码为 Mac 地址。下一章讲解 4 层 TCP 传输层,报文关心的是端口号。

转载

正文到此结束