计算机网络网络层
Posted zizi7
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机网络网络层相关的知识,希望对你有一定的参考价值。
目录
网络层解决网络间的互连问题,其核心是网际协议IP
网络层只提供简单灵活的、无连接的、尽最大努力交付的数据报服务
也就是说网络层传输的分组(帧)有可能出错、丢失、重复和失序。通信的可靠性由运输层负责
网际协议IP
IPv4
IP地址给互联网上每一台主机的每个接口分配一个在全世界范围内唯一的32位标识符
IP地址可以分为两个字段:网络号、主机号
按网络号和主机号占字节数又分为5类
图1. 五类IP地址
- 把IP地址分为A、B、C类主要是方便管理;近年来广泛使用无分类IP地址,不再区分A、B、C类地址
- IP地址分网络号和主机号除了方便IP管理机构分配,更重要的是可以大幅减少路由表中的项目数,降低查找路由表的时间(路由器仅根据目的主机的网络号来转发分组)
IP类型 | 保留字段 | 说明 |
---|---|---|
A | 0.x.x.x | 网络号全为0表示“本网络” |
127.x.x.x | 网络号为127作为本地软件环回测试用 | |
x.0.0.0 | 全0主机号字段表示本机所在网络地址 | |
x.255.255.255 | 全1主机号字段表示该网络所有主机 | |
B | 128.0.0.0 | 不指派 |
x.x.0.0 | 全0主机号字段表示该网络所有主机 | |
x.x.1.1 | 全1主机号字段表示该网络所有主机 | |
C | 192.0.0.0 | 不指派 |
x.x.x.0 | 全0主机号字段表示该网络所有主机 | |
x.x.x.1 | 全1主机号字段表示该网络所有主机 |
地址解析协议ARP
- ARP协议是通过网络层的IP地址,找到数据链路层对应的MAC地址,其作用域是一个局域网
- ARP通过在主机维护一个动态更新的ARP高速缓存实现,该缓存记录了本网络中主机IP与MAC地址的对应关系
- ARP进程通过发送ARP请求分组获取每个主机的MAC地址
IP数据报的格式
- 一个IP数据报由首部和数据部分组成,其中首部又分为20个字节的固定部分和可变部分(后者逐渐被舍弃)
- 版本:占4位,标识IP协议的版本
- 生存时间:“跳数限制”,该IP包最多可被路由器转发的次数
- 协议:目的主机IP层知道应将数据上交哪个协议处理
协议名 | ICMP | IGMP | IP | TCP | EGP | IGP | UDP | IPv6 | ESP | OSPF |
---|---|---|---|---|---|---|---|---|---|---|
值 | 1 | 2 | 4 | 6 | 8 | 9 | 17 | 41 | 50 | 89 |
IP层转发分组的流程
1)从数据报的首部提取目的主机IP地址D,得出目的网络地址N
2)若N就是与此路由器直接相连的某个网络地址,则直接交付(把数据报交付给目的主机),否则进行间接交付,执行3
3)若路由表中有地址D的特定主机路由,则把数据报传送给指定的下一跳路由器,否则执行4
4)若路由表中有到达网络N的路由,则把数据报传送给路由表中指明的下一跳路由,否则执行5
5)若路由表中有一个默认路由,则吧数据报传送给该默认路由,否则执行6
6)报告转发分组出错
划分子网和构造超网
划分子网
- IP地址是两级结构(网络号+主机号),将主机号再做一次划分:
IP地址 = 网络号,子网号,主机号 - 子网号占用的是主机号的空间,相当于对内又细分了若干子网络,但该属性对外是不可见的,还是一个网络。子网的划分可以增加企业内部IP管理的灵活性
- 子网掩码与IP地址长度一致,将子网掩码与IP地址“取与”,得到的就是网络号。其作用是便于查找路由表
A类地址的默认子网掩码是255.0.0.0
B类地址的默认子网掩码是255.255.0.0
B类地址中如果主机号用2位标志子网号,那么其子网掩码是255.255.192.0
使用子网时的分组转发流程:
1)从数据报的首部提取目的主机IP地址D
2)先判断是否为直接交付:用各网络子网掩码与D做“与”,看结果是否与相应网络地址匹配。若匹配则直接交付,否则执行3
3)若路由表中有地址D的特定主机路由,则把数据报传送给指定的下一跳路由器,否则执行4
4)路由表中每条记录包含(目的网络地址,子网掩码,下一跳地址),用其中的子网掩码与D做“与”得到N,若N与对应的目的网络地址匹配则将数据报传送给对应的下一跳路由器,否则执行5
5)若路由表中有一个默认路由,则吧数据报传送给该默认路由,否则执行6
6)报告转发分组出错
构造超网(无分类编址CIDR)
按照上述分类编址的办法,到1992年B类地址已分配了近一半,而主干网的路由表中的项目数也急剧增长
因此IETF在1994年提出了无分类编址CIDR的方法:
- CIDR消除了传统的A类、B类和C类地址以及划分子网的概念。将IP地址分为前后两个部分:网络前缀和主机号
IP地址 = 网络前缀,主机号 - 其中网络前缀的位数是可以变化的:
128.14.35.7/20 表示网络前缀占20个bit - CIDR把网络前缀相同的连续IP地址组成一个CIDR地址块
- CIDR还是可以继续划分子网:从主机号中占用几位来划分
路由表查找
使用CIDR的路由表中,每个项目包含“网络前缀”和“下一跳地址”,此时根据前缀掩码有可能匹配到不止一个地址
如某大学的地址块为 206.0.68.0/22,将其中的 206.0.71.128/25分给了某个系。
现在假设一个数据报的目的地址为 D=206.0.71.130,将其与上述两个地址块的掩码做“与”操作,均匹配
D & 11111111 11111111 11111100 00000000 = 206.0.68.0/22
D & 11111111 11111111 11111111 10000000 = 206.0.71.128/25
此时需遵循最长前缀匹配准则,选择206.0.71.128/25
为了迅速在路由表中完成查找匹配,路由器首先会将所有项目建立一个二叉树
如图所示,二叉树的最大深度为32层,对每个地址,自顶向下0放左节点,1放右节点
网际控制报文协议ICMP
- ICMP报文在IP数据报中的数据部分,允许主机或路由报告差错和异常情况
- ICMP报文包含两种类型:ICMP差错报告报文、ICMP询问报文
ICMP报文种类 | 类型的值 | ICMP报文的类型 |
差错报告报文 | 3 | 终点不可达 |
11 | 超时 | |
12 | 参数问题 | |
5 | 改变路由 | |
询问报文 | 8或0 | 回送请求或回答 |
13或14 | 时间戳请求或回答 |
ICMP的两个重要应用
- PING
PING使用了ICMP回送请求与回送回答报文
由于往返的ICMP报文都有时间戳,因此很容易得出往返时间 - traceroute
该命令用来跟踪一个分组从源点到终点的路径:
traceroute从源主机向目的主机发送一连串的IP数据报,数据报中封装的是无法交付的UDP用户数据报
第1个数据报 P 1 P_1 P1的生存时间TTL设为1,当第一个路由器 R 1 R_1 R1时, R 1 R_1 R1先收下它,然后TTL减1,发现TTL为0便将 P 1 P_1 P1丢弃,并向源主机发送一个ICMP时间超过差错报告报文
第2个数据报 P 2 P_2 P2的生存时间TTL设为2,同样 R 2 R_2 R2会想源主机发送一个超时报文。。。
通过上述方式,traceroute可以获得整条路径上经过的所有路由信息
以上是关于计算机网络网络层的主要内容,如果未能解决你的问题,请参考以下文章
计算机网络 王道考研2021 第三章:数据链路层 -- 数据链路层功能概述封装成帧和透明传输差错控制(检错编码/纠错编码)