二.计算机网络-网络层详解
1.网络层概述
网络层关注的是如何将IP数据报从源主机沿着网络发送到目标主机。其具体步骤为将上一层传输层的报文段或者用户数据报添加必要的控制信息封装成IP数据报,并使用下一层数据链路层的服务将IP数据报发送给指定的主机。
2.网络层功能
-
分组转发
当一个分组到达路由器的一条输出线路时,该路由器必须将该分组转发到适当的输出链路。所以,在路由器内部,需要有一个转发表。 在转发分组时,读取从IP数据报中首部的转发标识并在转发表中查询,其查询结果指出了该分组将被转发的路由器的链路接口。
-
路由选择
当分组从发送方转发到接收方时,网络层必须决定这些分组采用的路由或者路径,这就是路由选择。路由选择的结果就是生成了供分组转发需要的转发表
其具体步骤为: 路由选择(人工/自动) ➡ 路由表 ➡ 转发表
-
路由选择和分组转发的关系
3.网络层提供的两种服务
-
虚电路服务(Virtual-Circuit Network)
面向连接的服务
在发送数据时,先建立连接,即建立一条虚电路,保证双方通信所需要的网络资源。这样分组首部不需要填写完整的目标主机,只需要填写一条虚电路的编号,因此减少了分组的开销。
-
数据报服务(Datagram Network)
面向无连接的服务
网络在发送数据时不需要提前建立连接,每个分组都独立发送,都携带完整的目标主机地址。
因为计算机网络的端系统是智能的,并且有相当强的计算能力和差错检测能力。所以在网络层向上只提供简单灵活,无连接,尽最大努力交付的数据报服务。也就是说,网络层不提供服务质量,是由运输层提供的。因特网的这种设计思想被称为“端到端原则”,将复杂的网络处理纠错置于网络边缘,将简单的尽最大努力的交付置于因特网核心。这样网络的造价降低,方式灵活。
-
虚电路和数据报对比
4. IP协议(网际协议)
IP协议是TCP/IP体系中最主要的协议之一,与之配套的共有四个协议
-
ARP: 地址解析协议 : 提供从IP地址到物理地址的映射服务,网络层使用下层链路层服务时使用
-
RARP: 逆地址解析协议 : 提供从物理地址到IP地址的服务
-
ICMP: 网际控制报文协议
-
IGMP: 网际组管理协议
ARP和RARP在IP协议的下方,因为IP协议要使用这两个协议,ICMP和IGMP在IP协议上方,因为这两个要使用IP协议。
5. IP地址
### IP地址概念
在网络上的每一台主机都会被分配一个32位的唯一标识符
点分十进制记法
将32位的IP地址按8位一组分为四组,并转化为十进制,数字之间加.
IP地址阶段
-
分类编码
IP地址::={<网络号>,<主机号>} (定长网络号)
好处:
- IP地址管理机构只需要分配网路号,主机号由单位自行分配。便于管理
- 路由器根据IP地址所在网络号进行转发,减小了路由器的转发表所占的空间以及查找路由表的时间
-
划分子网
从主机号中借用不定长的若干位作为子网号
IP地址::={<网络号>,<子网号>,<主机号>}
好处:
减少了分类编址中AB类地址的浪费,可以将其划分给多个组织使用
-
无分类编址(CIDR) (正在使用)
IP地址::={<网络前缀>,<主机号>}
将32位IP地址划分为前边不定长的网络前缀,并且引入的32位的地址掩码,地址掩码中1 的个数表示表示IP地址中前
多少位为网络号。
对应分类编址中的默认地址掩码
分类编址 | 默认地址掩码 |
---|---|
A类 | 255.0.0.0 |
B类 | 255.255.0.0 |
C类 | 255.255.255.0 |
斜线记法: 在IP地址后加入/数字 表示网络地址的个数 比如 192.168.1.1/20 表示前20位为网络前缀。
### 特殊的IP地址
5.物理地址
物理地址是数据链路层和物理层使用的地址,IP地址是网络层以及上层使用的地址
IP地址放到IP数据报的首部,物理地址放到数据链路层中MAC帧的首部。
6.ARP地址解析协议
目的:解决从IP地址到物理地址的动态映射问题
方法:每一个主机都动态维护一个ARP高速缓存(ARP Cache),这个缓存中存放本局域网上各个主机的IP地址和物理地址的映射关系。
主机名称 | IP地址 | MAC地址 |
---|---|---|
A | 192.168.38.10 | 00-AA-00-62-D2-02 |
B | 192.168.38.11 | 00-BB-00-62-C2-02 |
C | 192.168.38.12 | 00-CC-00-62-C2-02 |
D | 192.168.38.13 | 00-DD-00-62-C2-02 |
E | 192.168.38.14 | 00-EE-00-62-C2-02 |
以主机A(192.168.38.10)向主机B(192.168.38.11)发送数据为例。
-
当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到就知道目标MAC地址为(00-BB-00-62-C2-02),直接把目标MAC地址写入[帧]里面发送就可。
-
如果在ARP缓存表中没有找到相对应的IP地址,主机A就会在网络上发送一个广播(ARP request),广播中携带自己的主机名称,IP地址,物理地址 ,以及需要查询的IP地址”
-
网络上其他主机接受到广播后,将广播中A主机的信息更新到自己的ARP缓存中。主机B接收到这个帧时,也将A的数据存入自己缓存中,并向主机A做出这样的回应(ARP response):“192.168.38.11的MAC地址是00-BB-00-62-C2-02”,此回应以单播方式。这样,主机A就知道主机B的MAC地址,它就可以向主机B发送信息。
-
下次再向主机B发送信息时,直接从ARP缓存表里查找就可。
生存时间
ARP高速缓存中的每一个映射地址都有一个生存时间,当时间结束之后,就重新发送该广播更新地址。保证数据的正确性。
7. IP数据报格式
注 :图中括号内为该部分的长度 单位: 位(bit)
版本 4bit
表示IP协议的版本,通信双方必须使用相同的IP协议版本。目前最广泛的是IPv4版本
首部长度 4bit
最大表示的十进制是2^4-1 即15 此字段的单位是4字节,也就是当此字段的值位1时,表示首部长度为1个4字节。当1111时,表示首部长度(15*4)= 60个字节
最常用的首部长度为20个字节,也就是此字段为0101
区分服务 8bit
服务类型,一般不使用
总长度 16bit
首部和数据部分之和,单位是字节。因此IP数据报的最大长度为2^16=65535字节
标识 16bit
每产生一个IP数据报,此字段+1,当IP数据报分片时,同一个IP数据报的分片此字段相同。
标志 3bit
- 最低位: MF: 有没有更多分片 =1表示还有分片 =0表示无分片
- 中间位: DF: 是不是不能分片 =1表示不能分片 =0表示能分片
片偏移 13bit
经过分片之后,此分片在原分组中的相对位置。
生存时间 8bit
TTL(Time To Live) 之前表示数据报在网络中的寿命 后来改为跳数限制,但名字没变。
路由器在转发之前,将该值-1,当为0时,丢弃此分组。
若该值为1,则表示该IP数据报只在本局域网传播。
协议 8bit
协议名 | 字段 |
---|---|
ICMP | 1 |
IGMP | 2 |
TCP | 6 |
EGP | 8 |
IGP | 9 |
UDP | 17 |
IPv6 | 41 |
OSPF | 89 |
首部检验和 16bit
检验数据报的首部,通过将首部划分为许多16位的序列,将该字段置0,反码运算把所有16位字相加,结果写入此字段。
接受方接受之后,将首部的16位反码运算相加,结果与此字段取反码,若数据无错,则结果为0;
可变部分
支持排错,测量及其安全措施。
填充字段
首部长度必须时4的整数倍,当不够时,用填充字段填充。
因此,数据部分总是在4字节的整数倍开始
8.IP数据报的转发
1. 路由表
按照主机所在网络地址制作路由表
目的网络地址 | 子网掩码 | 下一跳 | 接口 |
---|---|---|---|
XXX | XXX | XXX/—— | xx |
实际路由表
2.IP数据报的转发流程
路由器R1的转发表
目标网络IP | 子网掩码 | 下一跳 | 接口 |
---|---|---|---|
128.30.33.0(网络1) | 255.255.255.128 | —– | 0 |
128.30.33.128(网络2) | 255.255.255.128 | —– | 1 |
128.30.36.0(网络3) | 255.255.255.0 | 128.30.33.129 | 1 |
例子
主机1向主机2发送数据报过程
-
H1主机将要发送的数据封装成IP数据报,其中包括目标IP(主机2的IP地址)自己的IP(主机1的IP地址)
-
H1先将目标IP地址(128.30.33.128)和本网络的子网掩码进行按位与(AND)运算,得到目标IP地址的网络地址128.30.33.128,与H1的网络地址不匹配,说明目标主机和源主机不在同一个局域网
-
此时,将数据报发送给H1局域网上的默认路由器R1,由R1来转发。注:在H1的网络配置中有IP地址,子网掩码,默认路由等信息。
-
路由器R1收到此数据报的时候,将该数据报中的目标IP地址读出,然后与自己转发表中的第一行的子网掩码进行按位与运算,得到目标的网络地址与第一行的目的网络地址对比,发现不匹配。
-
用同样的方法逐行对比,直到第二行,对比成功,说明网络2就是目标网络,将分组从接口1直接交付给H2 (他们在同一个网络上)
基本过程
-
从收到的数据报中提取目标IP地址D
-
先判断是否是直接交付,用路由器直接相连的网络的子网掩码和D进行按位与,看结果是否和对应的网络地址匹配,如果匹配,则通过接口信息直接交付,将目标的IP地址D用ARP转化为物理地址,封装成MAC帧,发送给H2主机。任务结束。如果不是直接交付,转到3
-
如果执行到这里,说明不是直接交付,而是间接交付,依然执行2,得到对应匹配的网络地址,将数据报发送给对应的下一跳的路由器。如果没有找到对应的网络地址,则转到4
-
发送给路由表中的默认路由,任务结束。如果没有默认路由,则报告转发数据报出错。
注意
-
步骤3中,当路由器收到一个待准发的数据包,并获取到了下一跳的路由器地址之后,将该数据报体哦国内给下层的接口软件,接口软件将下一跳的IP地址转化为物理地址,并放入链路层的MAC帧的首部,然后发送。
-
在发送一连串的数据报时,上述的步骤是不断重复的运行的。有一定的开销,那么为什么不直接使用物理地址呢? 因为使用逻辑的IP地址,本来是为了屏蔽各种底层网络的复杂性,便于研究问题。这样不避免的要付出代价。反过来,在网络层用物理地址,会带来更多的麻烦。
9.ICMP 网际控制报文协议详解(Internet Control Message Protocol)
功能
提供报告差错情况和提供有关的异常情况的报告。
几种常见的ICMP报文类型
ICMP报文种类 | 类型字段 | ICMP报文类型 |
---|---|---|
差错报告报文 | 3 | 终点不可达 |
差错报告报文 | 4 | 源点抑制 |
差错报告报文 | 11 | 超时 |
差错报告报文 | 12 | 参数问题 |
差错报告报文 | 5 | 改变路由(重定向) |
询问报文 | 8/0 | 回送请求/回答 |
询问报文 | 13/14 | 时间戳请求/回答 |
ICMP的差错报告报文
-
终点不可达:
当路由器找不到路由或者主机不能交付IP数据报时,就丢弃IP数据报,路由器或者主机向IP数据报的源站发送“目的不可达”报文。
-
源点抑制
IP没有流量控制机制。路由器和主机的缓冲区有限,如果发送方发送数据的速率过快。将会导致缓冲区产生溢出。这时路由器或主机只能把某些IP数据报丢弃。
-
超时
- 可分为两种情况,第一种是TTL=0:当IP数据报通过路由器时,IP首部的TTL字段减一,当路由器发现收到IP数据报的TTL=0时,就丢弃该报文,同时该路由器向源站点发送ICMP超时报文。第二种是分片不能重组:如果组成IP数据报的所有分片未能在规定的时限内达到目的主机,就不能进行分片的重组,则目的主机会丢弃已经收到的分片,并向源站点发送ICMP超时报文。
- 超时报文的应用:Windows下的Tracert命令行工具是一个探测路由的程序,可以探测IP数据报达到目的时所经过的路由,它利用时间超过ICMP报文和IP数据报首部中的TTL值来实现其功能。
-
参数问题
-
如果路由器或目的主机发现IP数据报首部的某个字段不正确时,就丢弃该数据报并向源站发送ICMP参数问题报文。
-
改变路由(重定向)
在特定情况下,当路由器检测到一台机器使用非优化路由的时候,它会向该主机发送一个ICMP重定向报文,请求主机改变路由,路由器也会把初始数据报向它的目的转发。
ICMP的询问报文
-
回送请求和回答
通常用来测试主机和服务器的连通,类型为8时是请求,类型是0时响应
-
时间戳请求和回答
请求主机或者服务器回答当前的日期和时间,类型13为请求,14为响应
用来进行时钟同步或者测量时间。
ICMP应用举例
ping
作用:用来测试两台主机是否可以连通。
原理:向目标主机发送类型为8的ICMP询问报文 如果目标主机正常工作且返回类型为0的ICMP询问报文。
往返的ICMP中有时间戳,可以计算出往返时间。
通过抓包工具,可以看到,本主机向目标主机发送了type为8的ICMP询问报文
目标主机返回了type为0的ICMP询问报文
UNIX系统:traceroute (发送UDP用户数据报)/ Windows系统:tracert(发送ICMP回送请求报文)
作用:用来列出从主机到目标主机连接路径
原理:首先向目标主机发送一个TTL为1R的数据报,当到达第一个路由器R1时,将其值-1,此时,值为0,数据报被抛弃,并向源主机发送一个ICMP超时差错报告报文。接着发送第二个数据报,此时,TTL为2,到达第二个路由器R2后,执行以上同样操作。直到最后一个数据报到达目的主机,此时,数据报中封装的是无法交付的运输层UDP用户数据报(当系统为windows时,发送ICMP回送请求报文),因此向源主机发送ICMP终点不可达差错报告报文。这样,源主机收到了路径中所有经过的路由器的IP地址,以及往返时间。
10.路由选择协议
要求
- 算法必须正确和完整
- 算法在计算上必须简单,不应使网络通信量增加太多额外开销
- 能适应通信量和网络拓扑的变化,要有自适应性。
- 算法必须稳定,在网络相对稳定的前提下,路由算法应该收敛于一个可以接受的解,不应该不停变化。
- 算法应该公平,对所有用户必须是公平的
- 算法应该是最佳的 (至少在某一方面是最佳的)
分类
按照能否自适应分为:
- 静态路由选择策略
- 动态路由选择策略
按照层次分为:
- 内部网关协议(IGP) / 域内路由选择
- 外部网关协议(EGP) / 域间路由选择
内部网关协议(RIP)
工作原理
-
基于距离向量的路由选择协议,距离的定义: 从一个路由器到直连的网络的距离定义为1,从一个路由器到另一个网络的距离为经过的路由器数目+1。距离也叫跳数(Hop Count),在RIP协议中,跳数最大为15,所以RIP协议只适用于小型网络。
-
仅和相邻的路由器交换信息
-
交换的信息是当前路由器所知道的全部信息。(自己的路由表)
-
按照固定的时间间隔更新,默认为30S,当网络的拓扑结构发生变化则会立即更新。
缺点
坏消息传播的慢,当网路出现故障,要经过比较长的时间才将此消息传播到所有的路由器
内部网关协议(OSPF)
原理
开放最短路径优先
步骤
- 使用洪泛法向本自治系统中全部路由器发送信息。
- 发送的消息是本路由器连接的全部链路信息。
- 当链路状态发送变化,则继续使用洪泛法给全部路由器发送信息。
此时,所有的路由器都会建立一个链路状态数据库。即全网的拓扑结构图。
外部网关协议(BGP-4)
目的:
并非寻找一条最佳路由,但却需要能根据策列进行调整。
工作原理:
在配置BGP时,每一个自治系统的管理员都需要指定一个路由器为本系统的BGP发言人(正常应该是边界路由器),发言人负责在各个网络之间传递数据。此时,发言人不仅要遵循外部网关协议(BGP-4),还需要遵循内部网关协议(RIP,OSPF)。
11. 路由器的工作原理
1. 路由器的结构
-
路由选择/控制部分
-
分组转发
-
输入端口
-
交换部分
-
输出端口
-
2 输入端口
2.1 路由选择和转发
- 转发(涉及一个路由器): 路由器根据转发表把收到的数据报从合适的输出端口转发出去
- 路由选择 (设计多个路由器): 很多路由器根据复杂的算法得出网络的拓扑结构,然后生成路由表。
2.2 路由表和转发表
- 路由表: 包含目的网络,下一跳(IP地址)映射
- 转发表: 从路由表计算出,包含转发功能所必须的功能,包括MAC地址等信息
2.3 影子副本
为了使得交换功能分散化,路由器会将转发表复制到全部输入端口中,复制的转发表叫做影子副本路由选择处理机负责对其转发表进行更新。
3 交换部分
实现交换结构的三种方式
-
通过存储器
-
通过总线
-
通过互连网络
4 输出端口
输出端口处理取出存放在输出端口内存巾的分组并将其发送到输出链路上 这包括选择和取出排队的分组进行传输,执行所需的链路层和物理层传输功能。
输出队列
-
在输入端口和输出端口处都能够形成分组队列,排队的位置和程度(或者在输人端口排队,或者在输出端口排队)将取决于流量负载、交换结构的相对速率和线路速率。
-
随着这些队列的增长,路由器的缓存空间将最终会耗尽,并且当元内存可用于存储到达的分组时将会出现丢包。
-
假定输入线路速度与输出线路速度是相同的,均为每秒Rin个分组,有N个输入端口N个输出端口.假设所有分组具有相同的固定长度,分组以同步的方式到达输入端口。
-
即在任何链路发送分组的时间等于在任何链路接收分组的时间,在这样的时间间隔内,在一个输入链路上能够到达0个或1个分组。
-
定义交换结构传送速率Rw为从输人端口到输出端口能够移动分组的速率。如果Rw比Rin块N倍,则在输入端口处很难会出现排队。
-
这是因为即使在最坏情况下,即所有N条输入线路都在接收分组,并且所有的分组将被转发到相同的输出端口,每批N个分组(每个输入端口一个分组)能够在下一批到达前通过交换结构处理完毕。
-
即当处理速度是输入速度端口个数(输入=输出)的时候,最坏情况就是同一时间所有输入端口都接受到了一个分组,并且这个分组想要发送给同一个输出端口。
-
此时只要能够在下一个输入端口的分组到来前,将这些分组给到相应的输出端口,就不会在输入端口发生排队。
-
但是在输出端口处会,在最坏情况下,在向输出链路发送一个分组的时间内,将有N个分组到达该输出端口。
-
因为输出端口在一个单位时间(分组传输时间)内只能发送一个分组,这N个到达的分组必须排队(等待)传输到输出链路上。
-
于是,又有N个分组可能在它只能发送已排队的N个分组中的一个的时间内到达。
-
这种情况会不断持续下去 最终,排队的分组数量会增长得很快,足以耗尽输出端口的可用内存,在这样的情况下分组被丢弃。
12.IP多播
1.IP多播的基本概念
1.1 单播
单播的优点:
-
服务器及时响应客户机的请求
-
服务器针对每个客户不同请求发送不同数据,容易实现个性化服务。
单播的缺点:
-
服务器针对每个客户机发送数据流,服务器流量=客户机数量×客户机流量;在客户数量大、每个客户机流量大的流媒体应用中服务器不堪重负。
-
现有的网络带宽是金字塔结构,城际省际主干带宽仅仅相当于其所有用户带宽之和的5%。如果全部使用单播协议,将造成网络主干不堪重负。
现在的P2P应用就已经使主干经常阻塞,只要有5%的客户在全速使用网络,其他人就不要玩了。而将主干扩展20倍几乎是不可能。
1.2 多播
多播的优点:
- 网络设备简单,维护简单,布网成本低廉
- 服务器不用向每个客户机单独发送数据,所以服务器流量负载极低。
多播的缺点:
1.无法针对每个客户的要求和时间及时提供个性化服务。
2. 网络允许服务器提供数据的带宽有限,客户端的最大带宽=服务总带宽。也就是说无法向众多客户提供更多样化、更加个性化的服务。
3. 广播禁止在Internet宽带网上传输。
2. 多播的实现
当需要在因特网内跨越多个网络进行多播时,多播的路由器必须根据IP多播地址将其数据报转发到拥有该多播组的网路中。
本地局域网的路由器并不知道自己所在的网路中是否有某个主机参与了某个多播组,此时,需要使用IGMP协议。
13.IGMP协议(网际组管理协议)
1.协议作用
让连接在本地局域网上的路由器直到本局域网上是否有主机参加或者退出了某个多播组。
2.协议原理
IGMP报文类型
- 成员查询报文
- 成员报告报文
- 离开组报文
报文说明
与ICMP类似,IGMP也是封装在一个IP数据报中传输的,IP协议号是2,同时TTL设置为1,表示只在本局域网中传播。
协议内容
1. 当加入多播组时
主机会向本局域网中的路由器发送一个成员报告的报文,报文中携带要加入的多播组的IP地址。
当路由器收到上述的报文后,会将多播组的IP地址加入自己维护的多播组列表中。
2. 监视成员变化
路由器会定时的(默认125s)发送一个成员查询报文,报文被封装到目的地址为224.0.0.1(本网络的全部主机)的IP数据报中,然后发送出去。收到报文的任意多播组成员会发送一个成员报告报文作为回应。如果路由器长时间没有收到成员报告报文,则将该多播组的IP地址从维护的列表中删除。
上述过程中,为了减少不必要的重复应答,采用了一种延时响应策略,收到查询报文的多播组成员,会等待随机1~10S,然后发送成员报告报文。此时,局域网内所有成员都会收到此成员报告报文,如果有其他同一个多播组成员,则它们就会放弃发送。
3. 当离开多播组时
当主机要退出某一个多播组时,会主动发送一个离开组报文,路由器收到后,会主动执行步骤2,当长时间没有收到报告报文,则说明此局域网中没有该多播组的成员了,从维护的多播组列表中删除该信息。