计算机网络-网络层

时间:2023-04-04 18:54:27

本章主要讨论网络连接问题,其核心就时网络协议IP。

1、网络层提供的两种服务

        我们知道电话网,在提供电话服务时,需要建立通信连接。计算机则另辟蹊径,网络层只提供灵活的、无连接的尽最大努力交付分组(IP层的数据),网络在发送分组时不需要建立连接。每个分组独立发送,因此网络层不提供可靠传输。即传输的数据可能会丢失,重复和失序。

计算机网络-网络层

2、 网络层的协议

        网络层最主要的IP协议,这里的IP协议具体指的是IPv4,并且IP协议的发明者获得了图灵奖。可见其贡献之大。

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

        地址解析协议ARP(Address Resolution Protocol)

        网际控制报文协议ICMP(Internet Control management Protocol)

        网际组管理协议IGMP(Internet Group Management Protocol)

在讨论网络IP协议之前,必须了解什么虚拟互连网络

3、虚拟互连网络

如果要把全世界数以万计的网络连接起来是非常复杂的。需要解决许多问题。

  • 不同的寻址方案;
  • 不同的最大分组长度
  • 不同的网络接入机制;
  • 不同的超时控制;
  • 不同的差错恢复方法;
  • 不同的状态报告方法
  • 不同的路由选择技术;
  • 不同的用户接入控制;
  • 不同的服务(面向连接服务和无连接服务);
  • 不同的管理与控制方式;等等。

一般来说将网络互联起来需要使用一些中间设备

  1. 物理层使用的中间设备叫转发器(repeater)
  2. 数据链路层使用的中间设备网桥(bridge)
  3. 网络层使用的中间设备路由器(route)
  4. 网络层以上使用的中间设备网关(gateway)

那么如何从H1主机连接到H2主机呢?

如下图1所示,H1->R1->R2->R3->R4->R5-H2。这里需要注意的是直接交付间接交付

计算机网络-网络层

 3.1 分类的IP地址

3.1.1IP地址及其表示方法

        整个互联网就是一个单一的抽象的网络。IP地址就是给互联网上的每一台主机或路由器的每一个接口分配一个在全世界范围内都唯一的32位标识符。

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

计算机网络-网络层

  •  A 类、B 类和 C类地址的网络号字段(在图中这个字段是灰色的)分别为1个2个和 3个字节长,而在网络号字段的最前面有 1~3位的别位,其数值分别规定为0,10 和 110。
  • A 类、B类和 C类地址的主机号字段分别为3 个、2个和1个字节长。
  • D类地址(前4位是 1110)用于多播 (一对多通信)。我们将在4.6 节讨论IP 多播
  • E 类地址(前4位是 1111) 保留为以后用。

计算机网络-网络层

 分主机号和网络号的目的可以提高路由器的分发效率

路由器仅仅根据目的主机所连接的网络号来转发分组,不需要考虑主机号,这样就可以使路由表中项目数大幅度减少。

 IP地址与硬件地址

        在学习IP地址时,弄懂主机的IP地址与硬件地址的区别。硬件地址准确的来说是MAC地址,每台主机都由唯一的MAC地址,IP地址则是主机在不同的网络中的地址,可能你的笔记本电脑在家里IP为127.192.3.125;到实验室以后你的IP地址变为127.196.3.3(这里仅仅是举例说明);如下图所示IP地址与硬件地址的区别。

计算机网络-网络层

         那么我们看一下数据流转的流程啦:数据从应用从出发,首先经过传输层,在传输层增加传输层首部,将应用层数据包装成TCP报文(也称为段),然后经过网络层,将目的IP源IP封装到网络层首部(这一阶段数据称为包),继而将IP层数据包传输到数据链路层,增加首部和尾部(这里的首部是封装目的MAC地址源MAC地址,我们思考一下尾部做些什么呢?其实之前在数据链路层已经提到过了用来进行CRC循环校验,确保链路层传输的数据都是正确的。)

        链接在通信链路上的设备(主机或是路由器)在收到MAC帧时,根据MAC帧的首部中的硬件地址决定手下或丢弃。只有在剥去MAC帧的首部和尾部后把MAC层的数据上交给网络层,网络层才能在IP数据报的首部中找到源IP地址和目的IP地址。

        这里就体现了分层次协作的重要性了,每一层都负责自己的能容,既减少了耦合又提高了效率。

计算机网络-网络层

        其实在传输的过程中,IP层封装的IP地址信息是不改变的?这是什么意思呢,以上图为例,H1发送信息给H2,那么IP层封装的地址一直是:源地址IP1目的地址为IP2。然而数据链路层则需要改变的,根据每一跳而改变。

计算机网络-网络层

        其实到这来,我们还需要解决一些问题:

  • 那么用户H1在传输数据时,如何知道下一跳的MAC地址呢?
  • 路由器中的路由表又是如何得出的呢?

这两个问题解决了,那么你对计算机网络就会有更深层次的认识。

那么我们先解决第一个问题,如何知道MAC帧首部填充什么样的硬件地址呢?

 地址解析协议ARP

        地址解析协议就是解决找到主机的MAC地址。下图是上文提到的IP协议与ARP、ICMP和IGMP协议一同使用。因为IP协议使用了ARP协议,因此常常把ARP协议划分到网络层。

计算机网络-网络层

        地址解析协议ARP考虑的是在主机ARP高速缓存中存放一个从IP地址到硬件地址的映射表,并且这个映射表还是动态更新的(新增或者超时删除),ARP高速缓存里面有本局域网上各主机和路由器的IP地址到硬件地址的映射表,这些都是该主机目前知道的一些地址,那么它怎么知道的呢?

        当主机A向本局域网上某台主机B发送IP数据包时,就现在ARP缓存中查看有无主机B的IP地址。如有就在ARP高速缓存中查看其对应的硬件地址,如果没有则需要按照以下步骤找到主机的硬件地址。

  • ARP进程在本局域网上广播发送一个ARP请求分组,ARP请求分组的主要内容是我的IP地址是209.0.0.5,硬件地址为xx-xx-xx-xx-xx-xx想知道IP地址为209.0.0.6主机的硬件地址。
  • 在本局域网上所有运行ARP进程的主机都会受到ARP请求分组。
  • 如果主机B的IP地址与请求的IP地址是一致的,那么久接收这个请求。其他人发现不一致则不理睬
  • 然后主机A收到主机B的ARP响应之后,将其写到ARP高速缓存中。

计算机网络-网络层

ARP 对保存在高速缓存中的每一个映射地址项目都设置生存时间(例如,10~ 20分钟)。凡超过生存时间的项目就从高速缓存中删除掉。设置这种地址映射项目的生存时间是 很重要的。

 IP数据报的格式

IP数据报的格式能够说明IP协议都具有什么功能。在TCP/IP的标准中,各种数据格式常常以32位(即4字节)为单位来描述。如下图是IP数据报的完整格式。

计算机网络-网络层

 协议:占8位,协议字段指的是子数据报携带的数据是使用何种协议;常见协议如下:

计算机网络-网络层

 

例4-1】一数据报的总长度为 3820 字节,其数据部分为 3800 字节长(使用固定首部),需要分片为长度不超过 1420 字节的数据报片。因固定首部长度为 20 字节,因此每个数据报片的数据部分长度不能超过 1400 字节。于是分为 3 个数据报片,其数据部分的长度分别为 1400 1400 和 1000 字节。原始数据报首部被复制为各数据报片的首部,但必须修改有关字段的值。图4-14 给出分片后得出的结果(请注意片偏移的数值)。

计算机网络-网络层

 现在我们已经了解了,主机如何获得MAC地址。数据如何封装,每一个层里面放置了什么内容。下一步我们就讲讲IP转发分组的流程。

IP 层转发分组的流程

        下面我们先用一个简单例子来说明路由器是怎样转发分组的?如下图所示 有四个A类网络通过三个罗尤其连接在一起,每个网络上有上万台主机。可以想象若路由表指出到每台主机如何转发,那么每台路由器的路由表就会过于冗杂。其实路由器仅仅需要知道每个网络的网络号即可,并不需要知道所有主机准确的IP地址

计算机网络-网络层

路由器可以采用下一跳的方式和默认路由的方式:

采用默认路由可以极大的减少路由器中路由表中内容

默认:就是只要主机访问的是其他网络(除N1和N2外),一律直接传给路由器R1。

计算机网络-网络层

主机H在网络层中封装源IP和目的IP,在链路层封装的是源MAC和下一跳的MAC地址。然后传输给下一跳,我们假设是R2,R2发现目的IP是自己所在网络,然后采用ARP分组请求。得到目的IP的MAC地址,最后将数据发送给主机H2。