4 网络层----IP协议

4.1 概述

因为网络层是整个互联网的核心,因此应当让网络层尽可能简单。网络层向上只提供简单灵活的、无连接的、尽最大努力交互的数据报服务。

使用 IP 协议,可以把异构的物理网络连接起来,使得在网络层看起来好像是一个统一的网络。

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

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

IP(IPv4、IPv6)相当于OSI参考模型的第三层----网络层。

网络层的主要作用是“实现终端节点之间的通信”。这种终端结点之间的通信也叫“点对点通信”。

而其下一层数据链路层的作用是在互联网同一种数据链路的结点之间进行包传递。而一旦跨越多种数据链路,就需要借助网络层,网络层可以跨越不同的数据链路,即使在不同的链路上也能实现两端结点之间的数据包传输。

网络层与数据链路层的关系:

数据链路层只负责某一个区间之间的通信传输,而IP负责将数据包发送给最终的目标地址。以火车票和行程表为例,数据链路层相当于车票,你要到达某个区域,可能需要乘坐很多交通工具,也就需要很多车票,到达一地后使用下一张车票进行换乘,也即是说这一张车票只能够在某一限定区域内有效,此处的“区域内”就如同通信网络上的数据链路。而这整个行程表就相当于是网络层,它告诉你该坐什么车,该到哪里换乘。

4.2 IPv4首部格式

  • 版本 : 由4个比特构成,有 4(IPv4)和 6(IPv6)两个值,这里肯定就是4了;

  • 首部长度 : 占 4 位,因此最大值为 15。值为 1 表示的是 1 个 32 位字的长度,也就是 4 字节。因为首部固定长度为 20 字节,因此该值最小为 5。如果可选字段的长度不是 4 字节的整数倍,就用尾部的填充部分来填充。

  • 区分服务 : 用表明服务质量,一般情况下不使用。

  • 总长度 : 包括首部长度和数据部分长度。该字段长16比特。因此IP包的最大长度是65535(=216)字节。

  • 标识 : 由16比特组成,属于分片重组。同一个分片的标识值相同,不同分片的标识值不同。在数据报长度过长从而发生分片的情况下,相同数据报的不同分片具有相同的标识符。
  • 标志:由3比特构成,表示包被分片的相关信息。

  • 片偏移 : 由13比特构成,和标识符一起,用于发生分片的情况,标识被分片的每一个分段相对于原始数据的位置。由于一共有占据13位,因此一共可以表示8192(=213)个相对位置。片偏移的单位为 8 字节。因此最大可表示原始数据8X8192=65536字节的位置。

  • 生存时间 :TTL(Time To Live),由8比特构成,它的存在是为了防止无法交付的数据报在互联网中不断兜圈子。以路由器跳数为单位,每经过一个路由器,TTL就会减少1,直到变成0则丢弃该包当 TTL 为 0 时就丢弃数据报。

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

  • 首部检验和 :由16比特构成,也叫IP首部校验和。该字段只校验数据报的首部,不校验数据部分,因为数据报每经过一个路由器,都要重新计算检验和,因此检验和不包含数据部分可以减少计算的工作量。它主要用来确保IP数据包不被破坏。

  • 源地址:由32比特构成,表示发送端IP地址。
  • 目标地址:由32比特构成,表示接收端IP地址。
  • 可选项:长度可变,通常只在进行实验或诊断时使用。该字段主要包含的信息有:安全级别,源路径,路径记录和时间戳。
  • 填充:也称作填补物。在有可选项的情况下,首部长度可能不是32比特的整数倍。为此,通过向字段填充0,调整为32比特的整数倍。
  • 数据:存入数据。将IP上层的首部也作为数据进行处理。
4.3 IPv6首部格式

IPv6为了减轻路由器的负担,省略了首部校验和字段。因此路由器不再需要计算校验和,从而也提高了包的转发效率。

  • 通信量类:相当于IPv4的TOS(区分服务)字段,也由8比特构成。
  • 流标号:由20比特构成,准备用于服务质量(QoS:Quality Of Service)控制。
  • 有效载荷长度:有效载荷是指包的数据部分,不包括首部。
  • 下一个首部:相当于IPv4中的协议字段。由8比特构成。通常表示IP的上一层协议是TCP或UDP。
  • 跳数限制:由8比特构成。与IPv4的TTL意思相同。数据每经过一次路由就减1,减到0则丢弃数据。

4.4 IP地址

IP 地址的编址方式经历了三个历史阶段:

  • 分类
  • 子网划分
  • 无分类

4.4.1 分类地址

由两部分组成,网络号和主机号,其中不同分类具有不同的网络号长度,并且是固定的。网络号在数据链路的每个段配置不同的值。必须保证相互连接的每一段的地址不相重复,而相同段内相连的主机必须有相同的网络地址。

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

IP包转发到途中某个路由器时,只要一见网络号就能判断出是否为该网段内的主机。

 

  • A类地址:A类IP地址是首位以“0”开头的地址。从第1位到底7位是它的网络标识,用十进制标识,即0.0.0.0~127.0.0.0 是A类的网络地址。A类地址的后24位相当于主机标识。因此一个网段内可容纳的主机地址上限是16777214(224 - 2)个。
  • B类地址:B类IP地址的前两位为“10”的地址。从第1位到第15位是它的网络标识。即128.0.0.0~191.255.0.0 是B类的网络地址。B类地址的后16位相当于主机标识。因此一个网段内可容纳的的主机地址上限为65534(216 - 2)个。
  • C类地址:B类IP地址的前两位为“110”的地址。从第1位到第23位是它的网络标识。即192.0.0.0~223.255.255.0 是C类的网络地址。C类地址的后8位相当于主机标识。因此一个网段内可容纳的的主机地址上限为254(28 - 2)个。
  • D类地址:D类IP地址的前两位为“1110”的地址。从第1位到第31位是它的网络标识。即224.0.0.0~139.255.255.255 是D类的网络地址。D类地址没有主机标识。常被用于多播。

广播地址:

广播地址用于在同一个链路中相互连接的主机之间发送数据包。将IP地址中的主机地址部分全部设成1,就成为了广播地址。

广播分为本地广播和直接广播两种:

在本网络内的广播叫做本地广播。例如网络地址为192.168.0.0/24 的情况下,广播地址是192.168.0.255 。因为这个广播地址的IP包会被路由器屏蔽,所以不会到达192.168.0.0/24 以外的其他链路上。

在不同网络之间的广播叫做直接广播。例如网络地址是192.168.0.0/24的主机箱192.168.1.255/24 的目标地址发送IP包。收到再这个包的路由器,将数据转发给192.168.1.0/24 ,从而使得所有192.168.1.1~192.168.1.254 的主机都能收到这个包。

IP多播:

多播用于将包发送给特定组内的所有主机。由于其直接使用IP协议,因此不存在可靠传输。

多播使用D类地址。因此如果前四位是“1110”,就可以认为是多播地址。而剩下的28位可以成为多播的组编号。即从224.0.0.0 到 239.255.255.255都是多播地址的可用范围。

4.4.2 子网划分

子网掩码:一个IP地址的网络标识不再受限于该地址的类别,而是由子网掩码细分出比类别地址更小粒度的网络。它对应IP地址网络标识部分的位全部为“1”,对应IP地址主机标识的部分则全部为“0”。

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

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

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

注意,外部网络看不到子网的存在。

4.4.3 无分类

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

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

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

CIDR 的地址掩码可以继续称为子网掩码,子网掩码首 1 长度为网络前缀的长度。

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

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

4.5 路由控制

4.5.1 路由器的结构

路由器从功能上可以划分为:路由选择和分组转发。

分组转发结构由三个部分组成:交换结构、一组输入端口和一组输出端口。

4.5.2 IP地址与路由控制

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

默认路由:

如果一张路由表包含所有的网络及其子网信息,将会造成无端的浪费。可以考虑使用默认路由,指路由表中的任何一个地址都能与之匹配的记录。默认路由一般标记为0.0.0.0/0或default。

主机路由:

“IP地址/32”也被称为主机路由。例如,192.168.153.15/32 就是一种主机路由。是指将整个IP地址的所有位都参与路由,而不是该地址的网络地址部分。

 环回地址:

环回地址是在同一台计算机上的程序之间进行网络通信时使用的一个默认地址。计算机使用一个特殊的IP地址127.0.0.1 作为回环地址,与该地址具有相同意义的是一个叫做localhost的主机名。使用这个IP或者主机名时,数据包不会流向网络。

原文地址:https://www.cnblogs.com/xlzfdddd/p/10205972.html