一、网络层的服务
网络层应该提供什么服务,一直以来有两种观点:一种是由网络负责可靠通信的面向连接;另一种是由主机负责通信的无连接。
1.面向连接(虚电路服务)
在面向连接的通信服务中,由电信网络负责提供可靠传输的服务。两台主机进行通信分为以下步骤:
- 建立连接:开始通信前,先建立一条虚电路,预留通信资源;
- 数据传输:双方计算机沿着虚电路发送分组,分组不需要携带目的地址等信息;
- 拆除连接:通信结束后,拆除虚电路,释放通信资源。
这种通信方式再使用可靠传输的协议,就可以保证发送分组无差错地按序到达目的主机。
2.无连接(数据报服务)
相比起电话机,主机具有更高的智能和处理能力。因此网络的先驱者设计了一种无连接的通信服务。
在无连接的通信服务中,网络层只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。
在这种服务中,主机发送分组前不需要事先建立连接。每个数据报(分组)独立发送,并与前后分组无关。网络层不提供服务质量的承诺,也即分组可能出错、丢失、重复或失序,也不保证传输的时限。所有通信的可靠服务由运输层提供。
数据报服务的优点是:路由器的结构简单、网络的成本低廉、运行方式灵活、能够适应多种应用。
如今互联网的发展也证明了这种设计的正确性。
3.虚拟互连网络
将网络互相连接起来的中间设备有:物理层的转发器;数据链路层的第二层交换机等。但这两类设备并不能解决网络不兼容的问题,只是将一个网络扩大,而非将网络互连。
如果试图将全世界的计算机都连接到一个网络上,势必会遇到许多问题,其中最突出的问题是:全世界计算机使用的网络不同。
显然,试图使用单一的网络解决以上问题是不可行的,因为不同的用户有不同的需求,而没有一种网络能符合所有人的需求。
为了解决网络互连的问题,我们需要使用工作在网络层的路由器。它其实是一台在互联网中执行路由选择的专用计算机,
使用了路由器后,由于参加互连的计算机网络都使用相同的网际协议IP,这些网络可以忽视各网络的具体异构细节,在网络层上相当于一个统一的网络,称为虚拟互联网络。这些使用IP协议的虚拟互联网络称为IP网。IP网可以由多种异构网络互连而成。
二、IP地址
1.表示方法
IP地址是给所有连接在互联网上的主机或路由器的每一个接口分配的唯一的32位标识符。现在由ICANN进行分配。
IP地址经历了三个阶段:
- 分类IP地址:最基本的编址方式。1981年通过标准协议。
- 划分子网:RFC-950标准于1985年通过。
- 构成超网:1993年提出。
分类IP地址中IP地址划分为若干个固定类,每一类由两个字段组成。第一个字段为网络号net-id,第二个字段为主机号host-id。
主机号在同一个网络号范围内必须是唯一的。
分类IP地址可分为以下5类,其中A、B、C类地址为单播地址,较为常用:
- A类:8位网络号+24位主机号,且网络号开头为0;
- B类:16位网络号+16位主机号,且网络号开头为10;
- C类:24位网络号+8位主机号,且网络号开头为110;
- D类:开头为1110,用作多播地址;
- E类:开头为1111,保留今后使用。
由于IP地址写为二进制码不方便记忆和书写,通常采用点分十进制记法,将IP地址分为8位一组的4组二进制码,分别转换为十进制数后,在各组之间加点,转为点分十进制的形式。
2.常用IP地址类别
ABC类地址的主机号全为0时指代本主机地址;全为255时指代网络内所有主机,不可用于分配。
- A类地址
A类地址的网络号0是保留地址,用于指代本网络;127是本地软件的环回测试。
因此A类地址可分配的网络号为1~126,可分配的主机号有224-2个。
设三位主机号为x,y,z,A类地址在1.x.y.z~126.x.y.z的区间内,其中xyz不能全为0或全为255。 - B类地址
B类地址的网络号128.0不可指派,可指派的最小网络号为128.1。
因此B类地址可分配的网络号为128.1~191.255,可分配的主机号有216-2g个。
设两位主机号为x,y,B类地址在128.1.x.y~191.255.x.y的区间内,其中xy不能全为0或255。 - C类地址
C类地址的网络号192.0.0不可指派,可指派的最小网络号为192.0.1。
因此C类地址可分配的网络号为192.0.1~223.255.255,可分配的主机号有28-2个。
设一位主机号x,C类地址在192.0.1.x~223.255.255.x的区间内,其中x不能为0或255。 - 直接广播地址
主机号为全1(255)的IP地址称为直接广播地址,用于将分组发送给目标网络上的所有主机。 - 受限广播地址
IP地址全为1的IP地址(255.255.255.255)为受限广播地址,用于将分组发送给本网络所有主机。路由器将阻止该分组通过。
3.IP地址的特点
- IP地址是一种分等级的地址结构。
- IP地址实际上是主机和路由器中一条链路的接口。
- 转发器或第二层交换机连接的局域网仍为一个网络,它们有相同的网络号。
- 所有分配到网络号的网络都是平等的。互联网同等对待每一个IP地址。
● 同一局域网的主机和路由器的网络号相同。
● 路由器常有 多个 IP地址,每个接口的IP地址网络号都与连接的局域网网络号相同。
● 路由器之间直接相连的连线两端,接口可以选择是否分配IP地址。现常用不分配的方式,称为无编号网络或无名网络。
4.IP地址与硬件地址
IP地址是网络层使用的地址,而物理地址是数据链路层和物理层使用的地址。
IP地址放在IP数据报的首部,而物理地址放在MAC帧的首部。
下面是一个简单的互联网中IP数据报的转发演示。
- 网络层中,H1将目的主机H2的IP地址写入IP数据报中国,并交给数据链路层
- 数据链路层中,H1确定分组转发的下一站硬件地址,并写入MAC帧中,开始转发
- 路由器R1接到MAC帧后,还原为IP数据报上交给网络层;R1的网络层再将数据报下放给数据链路层,确定新的硬件地址
- 最后,H2的网络层收到数据报与H1发送的数据报是一样的
这个过程可以发现以下几点:
● 在IP层抽象的互联网只能看到IP数据报。
● 路由器只根据目的站的IP地址网络号进行路由选择。
● 局域网的数据链路层只能看到MAC帧。
● IP抽象的局域网屏蔽了下层的复杂细节。只要在网络层上,就能使用统一的IP地址确定主机间与路由器间的通信。
5.地址解析协议ARP
在上面讲述的IP数据报转发过程中,最大的一个问题就是:如何根据IP地址找到下一跳的硬件地址?
地址解析协议ARP就是的作用就是从网络层的IP地址,解析出目的站所在的硬件地址。
每一个主机和路由器都有一个ARP高速缓存,存有本局域网各主机和路由器的IP地址和硬件地址的映射表。该表工作过程如下:
- 主机A试图向B发送IP数据报时,先在ARP高速缓存中查找是否有B的IP地址;
- 如果有,直接查出对应的物理地址;
- 如果没有,ARP进程广播一个ARP请求分组
- B收到并检查ARP请求分组后,发送一个ARP相应分组,同时将A的映射写入高速缓存
- A收到ARP响应分组后,将B的映射写入高速缓存
ARP分组的四种典型情况:
● 发送方是主机,目标是本局域网内另一台主机:用ARP协议找到目的主机的硬件地址;
● 发送方是主机,目标是另一局域网的一台主机:用ARP协议找到一个路由器的硬件地址,剩余工作交给路由器完成;
● 发送方是路由器,目标是本局域网内另一台主机:用ARP协议找到目的主机的硬件地址;
● 发送方是路由器,目标是另一局域网的一台主机:用ARP协议找到另一个路由器的硬件地址,剩余工作交给另一路由器完成;
三、IP数据报与转发流程
1.IP数据报的格式
一个IP数据报由首部和数据两部分组成。首部的前一部分是固定部分,共20字节;后一部分是可变部分。
下面是首部固定部分各字段的意义:
● 版本:占4位,指明IP协议的版本。通信双方使用的IP协议版本必须一致。目前讲到的IP协议内容均为IP v4协议。
● 首部长度:占4位,最大表示数字为15,单位为32位(4字节)。
固定部分的长度为20字节,因此首部长度的最小值为5;可选部分的最长长度为40字节,总长最长为60字节。
另外,在TCP/IP协议体系中,数据格式以32位(4字节)为单位。若可选部分长度不为4字节的整数倍,就需要填充位。
● 区分服务:占8位,用于获取更好的服务。实际上一直没有被使用。只有在使用区分服务时才使用。
● 总长度:占16位。IP数据报的总长度,包括首部和数据部分,单位为字节。数据报最大长度216-1=65535字节。
网络层下面的数据链路层都规定了最大传送单元MTU。数据报封装成MAC帧时不能超过MTU值。有时需要切片。
下面的三个字段就是切片时需要使用的字段。
● 标识:占16位,每一个完整的IP数据报的标识都是唯一的。切片后,标识相同的数据报属于原先的同一数据报。
● 标志:占3位,只有后两位有意义。
最低位MF称为片未完位,为1是最后一片;为0不是最后一片。
中间位DF称为不分片位,为1时不允许该片分片;为0时允许分片。
● 片偏移:占13位,指出该片在分片中的相对位置,以8字节为偏移单位。
● 生存时间:共8位,是数据报在网络中的寿命。每跳转一次自减1,变为0时丢弃,防止无法交付的数据报在网络中无限跳转。
● 协议:占8位,指出携带的数据是何种协议,以便目的主机知道上交给哪个协议处理。
● 首部校验和:占16位,置为首部按16位一组字段之和的反码。若数据报送达时,首部16位字段和不为0,说明出现错误。
● 目的地址:占32位。
● 源地址:占32位。
2.IP分组的转发流程
在不同局域网之间转发IP分组时,路由器需要确定IP分组的下一条地址。路由表就用于确定下一跳地址。
如果路由表记录所有的IP地址,路由表会过于庞大。因此我们让路由表只记录网络号和下一条地址的映射。
如图:
● 与路由器直接相连的目的地址,确定端口后转入直接交付;
● 不与路由器直接相连的目的地址,根据网络号确定下一跳的路由器地址,并转发给该路由器。剩余工作由该路由器完成。
除了常规的路由表方式,还有如下两种路由方式:
- 特定主机路由
特定主机路由对特定的目的主机指明一个特定的路由,该方式便于管理人员控制和测试网络,并适合某些安全问题下使用。 - 默认路由
默认路由方式下,除了路由表中指定了下一跳的网络号分组,其它分组都发送到默认的路由器上。
这种方式在对外连接很少的网络中十分有效。
综合以上方法,归纳出路由分组转发算法:
- 得到目的地址N;
- 判断是否为直接交付。若是,进行直接交付;
- 判断是否为特定主机路由。若是,按特定路由方式进行下一跳;
- 判断是否有网络号与目的地址N相同的路由。若有,按该路由进行下一跳;
- 判断是否有默认路由。若有,按默认路由进行下一跳;
- 没有路由能完成下一跳,报告转发分组出错。