984 KiB
网络层
基本概念
主要任务是将分组从源端发送到目的端,未分组交换网上的不同主机提供通信服务。
传输单位
- 应用层的传输单位是报文。
- 传输层的传输单位是报文或报文段。
- 网络层的传输单位是IP数据报或分组。
- 数据链路层的传输单位是帧。
- 物理层的传输单位是比特流。
网络层功能
- 路由选择域分组转发(最佳路径)。
- 异构网络互联。
- 拥塞控制:若网络所有结点都来不及接收分组,而要大量丢弃分组的话会使网络处于拥塞状态,所以就需要控制这种拥塞。(开环控制:在拥塞之前就提前设计解决;闭环控制:在拥塞时自动调整解决问题)
数据交换
数据报和分组的关系:分组是一段比较长的数据,将它进行切割成一段段之后就得到数据报。
电路交换
- 建立连接(电路建立)。
- 通信。
- 释放连接(拆除电路)。
链路支持多路复用(可参考数据链路层的TDM等)。
优点:
- 通信时延小。
- 有序传输。
- 无冲突争用。
- 实时性强。
缺点:
- 建立连接时间长。
- 线路独占,使用效率低。
- 灵活性较差。
- 无差错控制能力。
报文交换
报文:源应用发送的信息整体。
- 源先根据报文加上IP地址,物理地址等,通过物理层发送。
- 交换机收到报文之后,先进行存储,等待链路空闲之后进行转发,但是转发的路径不是固定的,是比较随机的。
- 最后通过许多交换机最终到达目的地。
优点:
- 无需建立连接。
- 存储转发,动态分配线路。
- 线路可靠性高。
- 线路利用率较高。
- 多目标服务。
缺点:
- 有存储转发时延。
- 报文大小不定,需要网络结点有较大的缓存空间。
分组交换
将大的数据块分割为小的数据块。分组交换和报文交换基本相同,就是将报文切割之后再进行发送。
优点:
- 无需建立连接。
- 存储转发,动态分配线路。
- 线路可靠性高。
- 线路利用率较高。
- 分组大小一定,存储管理更容易。
缺点:
- 有存储转发时延。
- 需要传输额外的信息量(编号、目的地址等)。
- 乱序到达目的主机时,需要对分组进行排序。
例题 已知要传输一份信息大小为10000bit,需要经过两个交换设备。所有链路的传输速率为1000bps。假如分组交换中每一个分组为10bit,其他条件忽略(如接收时延,排队时延、报文头部长度等),求报文交换与分组交换两种方式所需要的传输时间。
报文交换:
10000÷1000=10(s),从而报文在每一个链路上需要10s的传输时延。因为要经过两个交换设备所以有三条链路,从而一共需要10×3=30秒。
分组交换:
10÷1000=0.01(s),而一共有10000÷10=1000个分组,所以一共需要0.01×1000=10秒发送所有分组。
此时10秒的时候所有的分组已经发送出去了,按照报文交换的视角整个数据都到达了第一个交换设备,而按分组交换视角,是最后一个分组到达了第一个交换设备,倒数第二个分组到达第二个交换设备,倒数第三个分组以及以前的分组都已经到达了,所以我们还需要计算还需要多少秒完全传输完。倒数第一个分组是最后一个,所以只用考虑它。最后一个分组还需要传输两个链路,所以还需要0.01×2=0.02秒,所以总共的分组交换需要10+0.02=10.02秒。
计算时需要注意:
- 单位换算。
- 是否考虑传播时延。
- 选择最少跳数。
- 起始时间。
- 是否要计算头部大小。
- 报文交换时延更长,分组交换时延可能不是整数。
- 报文交换和分组交换都采用存储转发。
- 传输数据量大且传输时间远大于呼叫时间,就选择电路交换,其传输时延最小。
- 报文交换分组交换在信道利用率上优于电路交换。
分组交换传输方式
分组交换分为数据报方式和虚电路方式两种。
数据报方式
- 提供无连接服务,不事先为分组的传输确定传输路径,每个分组独立确定传输路径,不同分组传输路径可能不同。
- 每个分组携带源和目的地址。
- 路由器根据分组的目的地址转发组:基于路由协议/算法构建转发表(目的网络地址与链路接口的散列对);检索转发表;每个分组独立选路。
虚电路方式
虚电路将数据报方式与电路交换方式结合。
虚电路是一条源主机到目的主机类似电路的逻辑连接,路径上所有结点都要维持该虚电路的建立,都维持一张虚电路表,每一项都记录一个打开的虚电路的信息。
虚电路方式提供连接服务,首先为分组的传输确定传输路径,然后沿该路径/连接传输系列分组,分组的传输路径相同,结束后拆除连接。
- 建立虚电路连接:每个分组携带虚电路号,而非目的地址,源主机发送呼叫请求分组并收到呼叫应答分组后才算建立连接。
- 数据传输:全双工通信。
- 释放虚电路连接:源主机发送释放请求分组以拆除虚电路。
| 数据报服务 | 虚电路服务 | |
|---|---|---|
| 建立连接 | 不用 | 必须 |
| 目的地址 | 每个分组都要有完成的目的地址 | 仅在建立连接时使用,之后每个分组使用较短的虚电路号 |
| 路由选择 | 每个分组单独进行路由选择与转发 | 属于同一条虚电路的分组按照同一个路由转发 |
| 分组顺序 | 不保证有序到达 | 保证有序到达 |
| 可靠性 | 不保证,可靠性依靠用户主机保证 | 保证 |
| 网络故障适应性 | 强 | 弱 |
| 差错控制和流量控制 | 用户主机完成 | 可由网络完成也可以由用户主机完成 |
IP协议
网际协议是TCP/IP协议栈中两个最主要的协议。与之配套的还有地址解析协议ARP,网际控制报文协议ICMP、网际组管理协议IGMP,还有一个逆地址解析协议RARP已不被使用。
IP协议使用ARP协议,而ICMP与IGMP使用IP协议。
IP数据报
IP数据报格式
当单个IP数据报太长,就会被划分不同的数据部分加上IP首部,就是分组。
固定部分20B、160bit,按照五行来展示而不是真的这样排列,一行32比特。
| 名称 | 注释 | 大小 |
|---|---|---|
| 版本 Version | ipv4或者ipv6 | 4位 |
| 首部长度 IHL | 单位为4字节,同时因为IP数据报固定长度(最小值)为20字节,所以此处最小值为5,即二进制的0101 | 4位 |
| 区分服务 DSCP + ECN | 希望获得哪种服务,用的比较少 | 8位 |
| 总长度 Total Length | 首部+数据的长度,单位为1字节,最大为$2^{16}-1=65535$B,但是实际上永远不会达到该长度,因为有MTU的限制 | 16位 |
| 标识 Identification | 用来表示是哪一个数据报的分片,同一个数据报的分片标识相同 | 8位 |
| 标志 Flags | 用来表示是否分片和分片是否结束;中间位DF(Don't Fragment)为1表示禁止分片,如果是0代表允许分片;最低位MF(More Fragment)为1表示后面还有分片,如果为0表示最后一片分片 | 3位,但实际有用的只有后两位 |
| 片偏移 Fragment Offset | 用来标记分片之后,该分片在原来的数据报的位置,以8字节为单位 | 13位 |
| 生存时间 Time To Live | 即TTL,每经过一个路由器TTL-1,0时自动放弃,根据系统不同默认的TTL不同,为了防止无法传输的数据报在链路中无限传输 | 8位 |
| 协议 Protocol | 用来标记数据部分协议名的字段值,如ICMP:1;IGMP:2;TCP:6;EGP:8;IGP:9;UPD:17;IPv6:41;ESP:50;OSPF:89 | 8位 |
| 首部检验和 Header Checksum | 检验首部的字段是否出错,出错就丢弃此数据报 | 16位 |
| 源地址 Source IP Address | 发送方ip地址 | 32位 |
| 目的地址 Destination IP Address | 接收方ip地址 | 32位 |
| 可选字段 Options | 用来排错等安全检测 | 未知,可在0-40位之间 |
| 填充 | 将数据报对齐成4字节的整数倍,数值全部为0 | 未知,根据可选字段来定 |
IP数据报分片
- 最大传送单元MTU,数据链路层帧可封装的数据的上限,以太网的MTU是1500字节。
- 当IP分组超过MTU时为了传输就必须要分片,而如果IP分组不允许分片则无法传输,会返回上层一个差错报告。
- 除了最后一个分片,每个分片的长度必然为八字节的整数倍。
例题 假如现在一个数据报,首部为20字节,数据部分3800字节,需要分片为长度不超过1420字节的数据报片,求每一个报片的片偏移量。
已知MTU=1420字节,此题目中首部为20字节,所以每一个分片的数据部分最大为1400字节。
数据部分为3800字节,所以可以分为三片,数据大小分别为1400、1400、1000字节。
所以第一个报片的数据部分是从0到1399字节的,所以该片的片偏移为0,因为分片后数据开头的地方不变。
第二个报片的数据部分是从1400到2799字节,且偏移量以8字节为单位,所以该片的偏移量为1400÷8=175。
第二个报片的数据部分是从2800到3799字节,所以该片的偏移量为2800÷8=350。
IP地址
默认指IPv4地址,全世界唯一的32位/4字节标识符,标识路由器主机的接口。IP地址={网络号,主机号}。
IP地址一共分为五类。
其中一些IP地址被予以保留做特殊用途:
还有私有IP地址:
私有IP地址也叫做可重用地址,不同于一般的全球IP地址,这些地址可以在机构内部自行分配使用,这张网络就是专用互联网或是本地互联网,当然也无法直接用于与因特网的通信。
由于网络号不能全0或全1,所以基本上可用的都要减二。
| 网络类别 | 最大可指派的网络数 | 第一个可指派的网络号 | 最后一个可指派的网络号 | 每个网络中的最大主机数 |
|---|---|---|---|---|
| A类 | 126 | 1 | 126 | 16777214 |
| B类 | 16383 | 128.1 | 191.255 | 65534 |
| C类 | 2097151 | 192.0.1 | 223.255.255 | 254 |
为什么A类最大是126.x.x.x?
因为网络号最开始第一位是0,一共八位,所以二进制表示位0xxxxxxx,最大就是2^7-1=127,但是因为127.x.x.x是特殊ip地址,所以将其去掉。
为什么B类最大是191.255.x.x?
因为网络号最开始第一位是10,一共八位,所以二进制表示位10xxxxxx,最大就是10111111=191,最小就是10000000=128,无特殊IP地址。
为什么C类最大是223.255.x.x?
因为网络号最开始第一位是110,一共八位,所以二进制表示位110xxxxx,最大就是11011111=223,最小就是10000000=192,无特殊IP地址。
专用网络通信
VPN
当目的地址是私有(专用)IP地址时路由器一律不转发,而如果在内网的私有IP地址要转发或接收本地网络其他主机的数据怎么办呢?
可以利用公用的互联网作为本地各专用网之间的通信载体,这种网络就是虚拟专用网VPN。这种网络不同于互联网是因为它只用于本地网络的通信,但是又依靠互联网传输,所以就需要对数据进行加密。
当VPN需要外部机构加入就是外联网VPN;如果成员分布分散,通过某种软件建立VPN通道,这种VPN就是远程接入VPN。
NAT
如果专用网的内部某些主机已经分配到了本地专用IP地址,又想无加密的跟互联网上的主机通信,就需要网络地址转换NAT。
只用在专用网与因特网的路由器上按照NAT软件,安装了NAT软件的路由器就是NAT路由器,其至少有一个有效的外部全球IP地址。
NAT路由器就是该本地专用网的代表,负责与外部因特网联通,分发外部的数据信息。
NAT路由器维护NAT转换表,包含WAN端与LAN端的散列值对。每个值都包含网络号与端口号。NAT路由器在发送和接收时都需要根据转换表更改IP地址。
子网与超网
分级IP地址的缺点:
- IP地址空间利用率较低。
- 两级IP地址不够灵活。
子网划分
由两级IP地址(网络号+主机号)变为三级IP地址(网络号+子网号+主机号),将原来的主机号分割出来一部分作为子网号,子网的划分由单位内部完成,但是对外仍表现一个网络,外部无法看到本单位内子网的划分。
子网号可以全0或全1,但是主机号仍然不能全0全1。
子网的标识依靠子网掩码,其中网络号和子网号的部分全部位数为1,而主机号部分全部为0。
将子网掩码与IP地址逐位进行与操作,就可以得到子网网络地址。
- A类地址的默认子网掩码是255.0.0.0。
- B类地址的默认子网掩码是255.255.0.0。
- C类地址的默认子网掩码是255.255.255.0。
| 二进制 | 十进制 |
|---|---|
| 1000 0000 | 128 |
| 1100 0000 | 192 |
| 1110 0000 | 224 |
| 1111 0000 | 240 |
| 1111 1000 | 248 |
| 1111 1100 | 252 |
| 1111 1110 | 254 |
| 1111 1111 | 255 |
注意:可用子网数量不用减二。
例题 已知IP地址位141.14.72.24,子网掩码为255.255.192.0,求网络地址。
已知子网掩码前两个八位都是255,表示掩码前16位全部是1,相与时不变,所以网络前16位依然为141.14。
而子网掩码最后一个八位全部是0,所以与24相与全部是0,从而网络地址为141.14.x.0。
主要看子网掩码第三个八位既有0又有1的部分。72用二进制表示为0100 1000,而192用二进制表示为1100 0000,子网号为2位,主机号为14位,从而进行与操作得到网络号为64。
所以最后网络号为141.14.64.0。
子网分组转发
路由表包括:
- 目的网络地址。
- 目的网络子网掩码。
- 下一跳地址。
路由器转发分组的算法:
- 提取目的IP地址。
- 查看是否可直接交付。
- 查看是否有特定主机路由,就直接按此路由传输。
- 检测路由表中有无合适路径。
- 默认路由0.0.0.0,发送给其他路由器查看是否有该地址。
- 超过TTL,丢弃并报告转发分组出错。
IP广播
如之前的保留地址所展示,如果需要进行广播,则包含两种广播方式。
受限(有限)广播地址是32位全1的IP地址(255.255.255.255)。受限的广播地址是255.255.255.255。该地址用于主机配置过程中IP数据报的目的地址,此时,主机可能还不知道它所在网络的网络掩码,甚至连它的IP地址也不知道。在任何情况下,路由器都不转发目的地址为受限的广播地址的数据报,这样的数据报仅出现在本地网络中。
直接广播地址包含一个有效的网络号和一个全1的主机号,如果我们要求一个IP地址的直接广播地址,那么需要根据IP地址与子网掩码,将网络号部分与出来,然后将所有的主机号位全部置1,从而得到的地址就是该网络地址的直接广播地址。
CIDR
一般子网划分在同一个单位下的子网掩码都是相同长度的,而无分类编址CIDR就是变长的子网掩码。
CIDR构建的超网可以在单位内部根据不同部门的主机个数分配不同数量的子网IP地址。
通过CIDR就将子网划分的三级IP地址又回归为两级IP地址(网络前缀+主机号)。
CIDR记法:IP地址后加上/,然后写上网络前缀的位数。
也可用使用:二进制网络前缀*。
CIDR把网络前缀都相同的连续的IP地址组成一个CIDR地址块。
如根据128.14.35.7/20,可以得到其二进制是10000000 00001110 0010|0011 00000111,所以其最小地址就是将竖线后面的位全部变为0,最大地址就是将竖线后的位全部变为1,即为128.14.32.0与128.14.47.255,可用地址就是$2^{12}-2$个,地址块就是128.14.32.0/20。
构成超网
将多个子网构成一个较大的子网就是构成超网,也就是路由聚合。
方法就是将网络前缀缩短。
最长前缀匹配:使用CIDR时,查找路由表时可能得到多格匹配结果,应该选择具有最长网络前缀的路由,前缀越长,地址块越小,路由也越具体。
例题 路由器R0的路由表见下表:若进入路由器R0的分组的目的地址为132.19.237.5,请问该分组应该被转发到哪一一个下一跳路由器()。
A. R1 B. R2 C. R3 D. R4
| 目的网络 | 下一跳 |
|---|---|
| 132.0.0.0/8 | R1 |
| 132.0.0.0/11 | R2 |
| 132.19.232.0/22 | R3 |
| 0.0.0.0/0 | R4 |
其中D表示默认路由,代表本路由表中找不到对应的路由,只能交给其他路由器查找。如果ABC都不对D才能作为选项。
如果是R1,网络前缀是8的话,目的地址的网络号就是132.0.0.0,所以与路由表中目的网络网络号一致,可用作为下一跳的选项。
如果是R2,网络前缀是11的话,目的地址的网络号就是132.0.0.0,所以也可用作为下一条的选项。
如果是R3,网络前缀是22的话,目的地址的网络号是132.19.236.0,与路由表中目的网络网络号不一致,所以不能作为选项。
所以AB都是可选的,而根据最长前缀匹配,需要选择网络前缀最长的、地址最具体的,所以选择B。
例题 某网络的IP地址空间为192.168.5.0/24,采用定长子网划分,子网掩码为255.255.255.248,则该网络中的最大子网个数、每个子网内的最大可分配地址个数分别是()。
A. 32, 8 B. 32, 6 C. 8, 32 D.8, 30
已知IP为192.168.5.0/24,前24位都是网络前缀,又采用定长子网划分,所以要对后面八位进行子网划分。
子网掩码为255.255.255.248,所以前五位为子网号,后三位为主机号。所以子网号就是$2^5=32$。主机号为$2^3=8$,但是全0全1不可用,所以就是6。所以最后选B。
IPv6
无论是NAT技术还是CIDR技术都无法完全解决IPv4地址耗尽的问题,
ARP协议
在实际网络的链路上传输数据帧时,都必须使用MAC地址,所以ARP协议就是完成主机或路由器IP地址到MAC地址的映射,从而决定下一跳的走向。
数据帧的IP地址不变,但是源与目的MAC地址会在不同的路由器中发生变化。
ARP协议使用流程
- 检查在主机或路由器上的ARP高速缓存,如果有对应项就写入MAC帧。
- 没有对应项,就用FF-FF-FF-FF-FF-FF作为目的MAC地址,并广播ARP请求分组,同一个局域网内的所有主机都能收到该请求。
- 目的主机收到请求后会向源主机单播一个ARP响应分组,源主机收到后将该映射写入ARP缓存中。(10-20min更新)
- 如果源主机将源MAC地址与目的MAC地址与操作,发现目的主机不在同一个局域网,就查询本局域网的默认网关地址并填入目的MAC地址,传送到其他局域网。
ARP协议的典型情况
- 主机A发送给本网络的主机B:用ARP找到主机B的硬件地址。
- 主机A发送给另一网络的主机B:用ARP找到本网络上一个路由器(网关)的硬件地址。
- 路由器发送给本网络的主机A:用ARP找到主机A的硬件地址。
- 路由器发送给另一网络的主机B:用ARP找到本网络上一个路由器(网关)的硬件地址。
例题 主机发送IP数据报给主机B,经过了5个路由器,此过程中一共使用了多少次ARP协议?
因为五个路由器,所以有六段链路,所以需要选择路由六次,所以使用了六次ARP协议。
ICMP协议
网际控制报文协议支持差错报告与网络探寻。主要通过发送特定ICMP报文来实现。
ICMP协议是网络层的协议,ICMP报文是作为IP报文的一部分而传输的。
ICMP报文类型
报文类型的值占四个字节。
ICMP差错报文
| 类型 | 值 | 说明 |
|---|---|---|
| 终点不可达 | 3 | 当路由器或主机不能交付数据报时就向源点发送终点不可达报文 |
| 时间超过 | 11 | 当路由器收到生存时间TTL=0的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,并向源点发送时间超过报文 |
| 参数问题 | 12 | 当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文 |
| 改变路由(重定向) | 5 | 路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由) |
不应发送ICMP差错报文的情况
- 对ICMP差错报告报文(即使差错报文本身出错也不会管)。
- 对第一个分片的数据报片之后的所有后续数据报片。
- 对具有组播地址的数据报。
- 对具有特殊地址(如127.0.0.1等)的数据报。
ICMP询问报文
| 类型 | 值 | 说明 |
|---|---|---|
| 回送请求和回答报 | 8或0 | 主机或路由器向特定目的主机发出的询问,收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。测试目的站是否可达以及了解其相关状态 |
| 时间戳请求和回答报 | 13或14 | 请某个主机或路由器回答当前的日期和时间。用来进行时钟同步和测量时间。 |
ICMP应用
- ping:测试两个主机之间的连通性,使用了ICMP回送请求和回答报文。
- traceroute:跟踪一个分组从源点到终点,使用了ICMP时间超过差错报告报文。
路由算法与协议
路由算法就是让路由知道收到报文之后下一步怎么走。
路由算法与协议概述
- 静态路由算法(非自适应路由算法)管理员手工配置路由信息;简便、可靠,在负荷稳定,拓扑变化不大的网络中较好;适用于高度安全的军事网络与较小的商业网络;路由更新慢,不适合用于大型网络。
- 动态路由算法(自适应路由算法)路由器之间交换信息,按照路由算法优化出路由表;路由更新快,适用大型网络,及时响应链路反应与网络拓扑变化;算法复杂,加重网络负担。
- 全局性:所有路由器掌握完整的网络拓扑和链路费用信息;如链路状态路由算法OSPF。
- 分散性:路由器只掌握物理相连的相邻路由器与链路费用;距离向量路由算法RIP。
由于因特网规模大,而许多单位不想让外界知道自己的路由选择协议但是仍想接入因特网,所以就出现了自治系统。
自治系统AS就是多个使用同一种内部选择路由的协议的路由器之间构成的单独的小圈子,圈子内使用自己的协议,圈子和圈子之间也需要另一种AS协议。
路由选择协议分为内部网关协议IGP(RIP、OSPF)与外部网关协议EGP(BGP)。
IP多播
MPLS
移动IP
网络层设备
[]