【计算机网络】4.1 网络层
1.概述
网络层向上只提供简单灵活的、无连接的、尽最大努力交互的数据报服务。网络层的作用:将分组(数据分割成小块)从一台主机移动到另一台主机,从而提供了主机到主机的通信服务、各种形式的进程到进程之间的通信。通过IP 协议,可以把异构的物理网络连接起来,使得在网络层看起来好像是一个统一的网络。
网络层的作用IP 协议配套使用的有三个协议:
(1)地址解析协议 ARP(Address Resolution Protocol)
(2)网际控制报文协议 ICMP(Internet Control Message Protocol)
(3)网际组管理协议 IGMP(Internet Group Management Protocol)
2. IP 数据报格式
IP数据报的格式(1)版本
有 4(IPv4)和 6(IPv6)两个值。
(2)首部长度
占 4 位,因此最大值为 15,最小值为5(固定部分长度为 20 字节)。值为 1 表示的是 1 个 32 位字即 4 字节,所以首部长度的取值是5*4个字节~15*4个字节。如果可选字段的长度不是 4 字节的整数倍,就用尾部的填充部分来填充。
(3)区分服务
用来获得更好的服务,一般情况下不使用。
(4)总长度
包括首部长度和数据部分长度。
(5)标识
在数据报长度过长从而发生分片的情况下,相同数据报的不同分片具有相同的标识符。
(6)片偏移
和标识符一起,用于发生分片的情况。片偏移的单位为 8 字节
数据报分片(7)生存时间
TTL,它的存在是为了防止无法交付的数据报在互联网中不断兜圈子。以路由器跳数为单位,当 TTL 为 0 时就丢弃数据报。
(8)协议
指出携带的数据应该上交给哪个协议进行处理,例如 ICMP、TCP、UDP 等。
(9)首部检验和
因为数据报每经过一个路由器,都要重新计算检验和,因此检验和不包含数据部分可以减少计算的工作量。
3. IP 地址编址方式
3.1 分类
IP地址是有两部分组成:网络号和主机号,其中不同分类具有不同的网络号长度,并且是固定的。
IP 地址 ::= {< 网络号 >, < 主机号 >}
IP地址分类下面以IPv4为例:
3.1.1 IP地址的格式
常见的类似192.168.1.2这种格式的就是IPv4。IPv4的IP地址由4段组成,段之间用点隔开,每段由8位二进制数组成,所以其范围用二进制表示就是00000000-11111111,用十进制表示就是0-255之间。所以IP地址由4段共32位组成,其二进制范围是00000000.00000000.00000000.00000000—11111111.11111111.11111111.11111111,十进制表示就是0.0.0.0–255.255.255.255,一共是(4294967296,近43亿)个IP地址。
3.1.2 IP地址分类
(1)A类IP地址
A类IP地址(2)B类IP地址
B类IP地址的前16位是网络地址,网络地址的前两位必须是10,所以B类网络地址共有2^14=16384个。后16位是主机地址,但全0和全1的主机地址被保留,所以每个B类网络可以容纳2^16-2=65534台主机。B类IP地址的范围是128.0.0.1-191.255.255.254(二进制为10000000.00000000.00000000.00000001 - 10111111.11111111.11111111.11111110)。B类IP地址一般用于中型网络。
B类IP地址(3)C类IP地址
C类IP地址的前24位是网络地址,网络地址的前两位必须是110,所以C类网络地址共有2^21=2097152个。后8位是主机地址,但全0和全1的主机地址被保留,所以每个C类网络可以容纳2^8-2= 254台主机。C类IP地址的范围是192.0.0.1-233.255.255.254(二进制为11000000.00000000.00000000.00000001 - 11011111.11111111.11111111.11111110)。C类IP地址一般用于小型网络。
C类IP地址3.2 子网划分
通过在主机号中拿一部分作为子网号,把两级 IP 地址划分为三级 IP 地址。
IP 地址 ::= {< 网络号 >, < 子网号 >, < 主机号 >}
要使用子网,必须配置子网掩码。一个 B 类地址的默认子网掩码为 255.255.0.0,如果 B 类地址的子网占两个比特,那么子网掩码为 11111111 11111111 11000000 00000000,也就是 255.255.192.0。
注意:外部网络看不到子网的存在。
3.2.1 子网掩码的组成
子网掩码和IP地址相同点:分成4段,每段用点隔开,用二进制表示每段都是8位。不同点:子网掩码的前面部分全部是1,后面部分全部是0。如下例子:
A类IP地址的默认子网掩码是255.0.0.0,即11111111 00000000 00000000 00000000
B类IP地址的默认子网掩码是255.255.0.0,即11111111 11111111 00000000 00000000
C类IP地址的默认子网掩码是255.255.255.0,即11111111 11111111 11111111 00000000
3.2.2 子网掩码的含义
子网掩码是用于将一个IP地址划分成网络地址和主机地址2个部分,必须和IP地址一起使用。子网掩码中1的个数表示IP地址的前面多少位表示网络地址,0的格式表示IP地址后面多少位表示主机地址。
例子:一个规模100人的公司申请了一个C类IP地址网段218.17.21.0,可以容纳254台主机。公司分行政、财务、市场、销售、售后、研发六个部门,每个部门有十几台主机,现在需要按照部门来划分子网,使用子网掩码怎么划分呢?说明:C类IP地址网段218.17.21.0默认前面3段(24位)表示网络地址,最后面1段(8位)表示主机地址,即默认子网掩码是255.255.255.0。
步骤1:将IP地址的最后8位(00000001~11111110)再分成2部分,前面一部分表示子网地址,后面一部分表示主机地址。
步骤2:由于公司有6个部门,使用前面3位表示子网地址,后面5位表示主机地址,这样可以划分成2^3=8个子网,每个子网有2^5-2=30台主机。因此,前面27位表示网络地址,后面5位表示主机地址。
步骤3:行政部的子网地址是11111111 11111111 11111111 00100000,主机地址是11111111 11111111 11111111 00100001~11111111 11111111 11111111 00111110(实际IP地址范围是218.17.21.1–218.17.21.30)。说明:主机地址全0和全1是保留的。
步骤4:同理,市场部的子网地址是11111111 11111111 11111111 01000000,主机地址是11111111 11111111 11111111 01000001~11111111 11111111 11111111 01011110(实际IP地址范围是218.17.21.33–218.17.21.62)。
3.3 无分类
无分类编址 CIDR 消除了传统 A 类、B 类和 C 类地址以及划分子网的概念,使用网络前缀和主机号来对 IP 地址进行编码,网络前缀的长度可以根据需要变化。
IP 地址 ::= {< 网络前缀号 >, < 主机号 >}
CIDR 的记法上采用在 IP 地址后面加上网络前缀长度的方法,例如 128.14.35.7/20 表示前 20 位为网络前缀。
CIDR 的地址掩码可以继续称为子网掩码,子网掩码首 1 长度为网络前缀的长度。
一个 CIDR 地址块中有很多地址,一个 CIDR 表示的网络就可以表示原来的很多个网络,并且在路由表中只需要一个路由就可以代替原来的多个路由,减少了路由表项的数量。把这种通过使用网络前缀来减少路由表项的方式称为路由聚合,也称为 构成超网 。
在路由表中的项目由“网络前缀”和“下一跳地址”组成,在查找时可能会得到不止一个匹配结果,应当采用最长前缀匹配来确定应该匹配哪一个。
4. 地址解析协议 ARP
网络层实现主机之间的通信,而链路层实现具体每段链路之间的通信。因此在通信过程中,IP 数据报的源地址和目的地址始终不变,而 MAC 地址随着链路的改变而改变。
网络配置ARP 协议实现由 IP 地址得到 MAC 地址:
ARP协议的作用每个主机都有一个 ARP 高速缓存,里面有本局域网上的各主机和路由器的 IP 地址到 MAC 地址的映射表。
如果主机 A 知道主机 B 的 IP 地址,但是 ARP 高速缓存中没有该 IP 地址到 MAC 地址的映射,此时主机 A 通过广播的方式发送 ARP 请求分组,主机 B 收到该请求后会发送 ARP 响应分组给主机 A 告知其 MAC 地址,随后主机 A 向其高速缓存中写入主机 B 的 IP 地址到 MAC 地址的映射。
ARP协议的工作原理5. 网际控制报文协议 ICMP
ICMP 是为了更有效地转发 IP 数据报和提高交付成功的机会,封装在 IP 数据报中,不属于高层协议。
ICMP 报文分为差错报告报文和询问报文,常见 ICMP 报文类型,如下所示:
常见ICMP报文类型(1)Ping
Ping 是 ICMP 的一个重要应用,主要用来测试两台主机之间的连通性。
Ping 的原理是通过向目的主机发送 ICMP Echo 请求报文,目的主机收到之后会发送 Echo 回答报文。Ping 会根据时间和成功响应的次数估算出数据包往返时间以及丢包率。
(2)Traceroute
Traceroute 是 ICMP 的另一个应用,用来跟踪一个分组从源点到终点的路径。
Traceroute 发送的 IP 数据报封装的是无法交付的 UDP 用户数据报,并由目的主机发送终点不可达差错报告报文,步骤如下。
①源主机向目的主机发送一连串的 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 地址以及到达每个路由器的往返时间。