--- title: 计算机网络-网络层复习 mathjax: true date: 2019-06-28 21:34:01 tags: [计算机网络] --- # 主要解决的问题 网络层讨论的问题是多个网络互连的问题,即分组如何从一个网络传送到另一个网络。 # 协议数据单元 网络层协议数据单元就是IP数据报,又称为**数据报**、**分组**或**包**。 # 网络层的两种服务 网络层的两种服务指的是向运输层提供**无连接**或**面向连接**的服务。 选用哪一种服务的实质是:在计算机通信中,可靠交付应当由谁来负责。是网络(网络层)还是端系统(网络层的上几层)? **可靠**:**分组无差错按序到达终点,不丢失,不重复** 互联网的设计思路:**网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务**。**分组不进行编号**。 # 虚电路和数据报网络对比 7个方面 | 对比的方面 | 虚电路服务 | 数据报服务 | | :------------------------: | :--------------------------------------------: | :----------------------------------------------: | | 可靠性由谁保证 | 可靠由网络来保证 | 可靠由用户主机来保证 | | 是否面向连接 | 面向连接 | 无连接 | | 是否有终点地址 | 仅在连接建立阶段使用,每个分组使用短的虚电路号 | 每个分组都有终点的完整地址 | | 分组转发方式 | 属于同一虚电路的分组按同一路由转发 | 每个分组独立选择路由进行转发 | | 结点故障对网络的影响 | 所有通过故障结点的虚电路均不能工作 | 出故障的结点可能会丢失分组,一些路由可能发生变化 | | 分组到达终点顺序 | 按发送顺序到达 | 不一定按发送顺序到达 | | 端到端的差错处理和流量控制 | 可以由网络负责,也可以由用户主机负责 | 用户主机负责 | **互联网的IP协议提供不可靠的无连接的服务**。 # 中间设备 | 工作层次 | 中间设备 | | :--------: | :---------: | | 物理层 | 转发器 | | 数据链路层 | 网桥/桥接器 | | 网络层 | 路由器 | | 网络层以上 | 网关 | # IP地址 以32位IP地址为例,A、B、C类地址都是单播地址,都由两个固定长度的字段组成,第一个字段是**网络号**,第二个字段是**主机号**。一个网络号在整个互联网范围内是唯一的,一个主机号在其网络内必须是唯一的。 一个IP只能对应一个主机;一个主机可以有多个IP,比如路由器。 ## IP地址分类 A、B、C类地址的网络号字段分别是1个、2个和3个字节长,其网络号字段前几位是**类别号**。 | IP地址类型 | 类别号 | 可指派网络号 | | :--------: | :----: | :-----------------: | | A类 | 0 | 1-126 | | B类 | 10 | 128.1-191.255 | | C类 | 110 | 192.0.1-233.255.255 | 网络号127被保留作为**本地环回测试**,全0被保留表示**本网络**。 ## 既然有了MAC地址,为什么要用IP地址? 全世界存在**各式各样的网络**,它们使用**不同的硬件地址**。要使这些**异构网络**能够互相通信就必须进行**非常复杂的硬件地址转换工作**,因此由用户主机来完成这项工作几乎是不可能的事。但IP编址把这个复杂问题解决了。 # 分组转发 路由表指出**到某个网络应该如何转发**,每行对应于一个网络。 在互联网上转发分组时,是**从一个路由器转发到下一个路由器**。 每条路由主要信息:**(目的网络地址,下一跳地址)**。下一跳地址是路由器端口的IP地址。 - 使用子网时分组的转发 使用子网划分后,每条路由主要信息:**(目的网络地址,子网掩码,下一跳地址)**。 **主机** 要发数据包时先**判断是直接交付还是间接交付**:即发送的这个分组是在本子网上进行直接交付还是要通过本子网的路由器进行间接交付:将与本子网的子网掩码和目的IP地址相与求得目的网络地址与该子网地址比较,得出是否直接交付。 **路由器** 1. 拿到目的IP地址后**对路由器直接相连的网络逐个进行检查**(直接相连的网络可以直接写在路由表的最前边),将各网络的子网掩码和目的IP地址**相与求得目的网络地址**,判断该网络地址是否和对应的目的网络地址匹配。若匹配则直接交付,转发任务结束;否则就是间接交付,进行下一步。 2. 若有**特定主机路由**,则把数据传送给路由表中指明的下一跳,否则执行下一步。 3. 用**路由表每一行**中的子网掩码和目的IP地址相与,若结果与该行目的网络地址匹配,则把数据传送给该行指明的下一跳路由器;否则执行下一步 4. 若路由表中有一个**默认路由**,则把数据报传送给路由表指定的默认路由器;否则,执行下一步 5. **报告转发分组出错**。 # ARP 功能:从网络层使用的IP地址,解析出在数据链路层使用的硬件地址。 操作:去ARP高速缓存里找,找不到就广播ARP请求分组获得目的硬件地址(可以是路由器或主机的)并记录在ARP高速缓存中。 ## ARP消息类型 - ARP request - ARP请求分组(1),用于请求某IP主机的硬件地址。 - **广播**。 - 主要内容:我的IP是xxx,我的硬件地址是xxx,我想知道IP地址是xxx的地址。 - ARP response - ARP响应分组(2),用于指出某IP主机的硬件地址。 - **单播**。 - 主要内容:我的IP是xxx,我的硬件地址是xxx 假设主机A发送ARP请求分组请求主机B的物理地址,不久之后很有可能B也要向A发送数据报。所以ARP请求分组包含了源IP,B收到ARP请求分组时会把A的IP地址和物理地址记录在其ARP高速缓存中。 ## ARP高速缓存 如果没有ARP高速缓存,任何一台主机每次进行通信时都必须在网络上广播ARP请求分组,使网络上的通信量大大增加。 ## 生存时间 - ARP对保存在ARP高速缓存中的每一个映射地址项目都设置生存时间,凡超过生存时间的项目就从高速缓存中删除掉。这样可以及时更新各主机与其物理地址的映射关系,处理主机网络适配器故障或更新等情况。 - 生存时间设置得太长会使映射关系发生变化的主机迟迟无法通信,设置得太短会使ARP请求和响应分组的通信太频繁。 ## ARP属于网络层 不能说“ARP向网络层提供了服务”,因为ARP本身是网络层的一部分。数据链路层使用硬件地址而不使用IP地址,因此ARP不在数据链路层。 ## 不需要发送ARP请求分组的情况 - 源主机的ARP高速缓存中已有目的IP地址的项目 - 源主机发送广播分组 - 源主机和目的主机使用点对点链路 # IP子网 IP地址与子网掩码相与 同样的IP地址和不同的子网掩码可以得出相同的网络地址。但是不同的掩码效果是不同的:可划分的子网数和每一个子网中的最大主机数都是不一样的。 知道A和B的IP,想让他们在一个子网内,应如何给它们分配子网掩码? 计算子网号个数时要去除全0和全1的情况,即减2。 --- 作者:[@臭咸鱼](https://github.com/chouxianyu) 转载请注明出处: 欢迎讨论和交流! ---