1. 网络层概述
1.1 主要任务
网络层的工作主要是把数据报从一台发送主机转发到一台接收主机。网络层取得来自运输层的报文段,将每个报文段封装成一个数据报(即网络层的一个分组),然后将这个数据报转发到另一个主机。在这个过程中,主要涉及了网络层两个功能——转发与路由选择。
1.2 功能
2. 数据交换
2.1 电路交换
线路交换是相对于分组交换的一个概念。电路交换要求必须首先在通信双方之间建立连接通道。在连接建立成功之后,双方的通信活动才能开始。通信双方需要传递的信息都是通过已经建立好的连接来进行传递的,并且这个连接也将一直被维持到双方的通信结束。在某次通信活动的整个过程中,该连接将始终占用着连接建立开始时通信系统分配给它的资源(通道、带宽、时隙、码字等等),这也体现了电路交换区别于分组交换的本质特征。
优点:
- 通信时延小
- 有序传输
- 没有冲突
- 实时性强
缺点:
- 建立连接时间长
- 线路独占,使用效率低
- 灵活性差
- 无差错控制能力
线路交换的特点是:数据传输可靠、迅速、有序,但线路利用率低、浪费严重,不适合计算机网络。
e.g.:电话网络
2.2 报文交换
是数据交换的三种方式之一,报文整个地发送,一次一跳。报文交换是分组交换的前身,是由列奥纳德·克莱因饶克于1961年提出的。
主要特点:
存储接受到的报文,判断其目标地址以选择路由,最后,在下一跳路由空闲时,将数据转发给下一跳路由。报文交换系统现今都由分组交换或电路交换网络所承载。
报文交换采用”存储-转发”方式进行传送,无需事先建立线路,事后更无需拆除。
优点:
- 线路利用率高
- 故障的影响小
- 可以实现多目的报文
- 无需建立连接
- 存储转发,动态分配线路;
缺点:
- 延迟时间长且不定
- 对中间节点的要求高
- 通信不可靠、失序等
报文的优点是:高效、灵活、迅速、可靠、经济,但存在如下的缺点:有一定的延迟时间、额外的开销会影响传输效率、实现技术复杂等。
2.3 分组交换
优点:
- 无需建立连接
- 存储转发,动态分配线路
- 线路可靠性高
- 线路利用率高
- 相对于报文交换,存储管理更容易
缺点:
- 有存储转发时延
- 需要传输额外的信息量
- 乱序到目的主机时要对分组排序重组
分组交换适用于计算机网络,在实际应用中有两种类型:虚电路方式和数据报方式。虚电路方式类似”线路交换”,只不过对信道的使用是非独占方式;数据报方式类似”报文交换”。
2.3.1 数据报方式
e.g.:因特网
数据报方式为网络层提供无连接服务
每个分组携带源和目的地址
路由器根据分组的目的地址转发分组
无连接服务:不事先为分组的传输确定传输路径,每个分组独立确定传输路径,不同分组传输路径可能不同。
连接服务:首先为分组的传输确定传输路径(建立连接),然后沿该路径(连接)传输系列分组,系列分组传输路径相同,传输结束后拆除连接。
2.3.2 虚电路方式
虚电路方式为网络层提供有连接服务
虚电路将数据宝方式和电路交换方式结合,以发挥两者优点。
虚电路:一条源主机到目的主机类似于电路的路径(逻辑连接),路径上所有结点都要维持这条虚电路的建立,都维持一张虚电路表,每一项记录了一个打开的虚电路的信息。
通信过程:
2.3.3 数据报&虚电路
数据报服务 | 虚电路服务 | |
---|---|---|
连接的建立 | 不要 | 必须有 |
目的地址 | 每个分组都有完整的目的地址 | 仅在建立连接阶段使用,之后每个分组使用长度较短的虚电路号 |
路由选择 | 每个分组独立地进行路由选择和转发 | 属于同一条虚电路的分组按照同一路由转发 |
分组顺序 | 不保证分组的有序到达 | 保证分组的有序到达可靠性由网络保证 |
可靠性 | 不保证可靠通信,可靠性由用户主机来保证 | 可靠性由网络保证 |
对网络故障的适应性 | 出故障的结点丢失分组,其他分组路径选择发生变化,可正常传输 | 所有经过故障结点的虛电路均不能正常工作 |
差错处理和流量控制 | 由用户主机进行流量控制,不保证数据报的可靠性 | 可由分组交换网负责,也可由用户主机负责 |
2.4 三种交换方式比较
- 报文交换和分组交换都采用存储转发
- 传输数据量大,且传送时间远大于呼叫时,选择电路交换。电路交换传输时延最小
- 从信道利用率看,报文交换和分组交换优于电路交换,其中分组交换时延更小
3. IP数据报格式
3.1 IP数据报格式
版本号:占用4位二进制数,表示该IP数据报使用的IP协议版本。目前Internet中使用的主要是TCP/IP协议族中版本号为4的IP协议。
首部长度:占用4位二进制位,此域指出整个报头的长度(包括选项),该长度是以32位二进制数为一个计数单位的,接收端通过此域可以计算出报头在何处结束及从何处开始读数据。普通IP数据报(没有任何选项)该字段的值是5(即20个字节的长度)。
服务类型(TOS、type ofservice):
占用8位二进制位,用于规定本数据报的处理方式。服务类型字段的8位分成了5个子域:
(1)—优先权(0-7)数越大,表示该数据报优先权越高。网络中路由器可以使用优先权进行拥塞控制,如当网络发生拥塞时可以根据数据报的优先权来决定数据报的取舍。
(2)—短延迟位D(Delay):该位置1时,数据报请求以短延迟信道传输,0表示正常延时。
(3)—高吞吐量位T(Throughput):该位置1时,数据报请求以高吞吐量信道传输,0表示普通。
(4)—高可靠位R(Reliability):该位置1时,数据报请求以高可靠性信道传输,0表示普通。
(5)—保留位。
目前在Internet中使用的TCP/IP协议大多数情况下网络并未对TOS进行处理,但在实际编程时,有专门的函数来设置该字段的各域。一些重要的网际应用协议中都设置了建议使用的TOS值:
从上表可以看出,对于与用户直接交互的应用,一般使用短延时;对于有大量数据需要进行传输的应用,一般选用高吞吐量;对于数据报要传输控制信息的应用,一般选用高可靠性。在数据报的生存期内不支持TOS的,TOS字段就设置为0x00。总长度:占用16位二进制位,总长度字段是指整个IP数据报的长度(报头区+数据区),以字节为单位。利用头部长度字段和总长度字段就可以计算出IP数据报中数据内容的起始位置和长度。由于该字段长度为16位二进制数,因此理论上IP数据报最长可达65536个字节(事实上受物理网络的限制,要比这个数值小很多)。
生存时间(TTL,time to live):占用8位二进制位,它指定了数据报可以在网络中传输的最长时间。实际应用中把生存时间字段设置成了数据报可以经过的最大路由器数。TTL的初始值由源主机设置(通常为32、64、128或256),一旦经过一个处理它的路由器,它的值就减1。当该字段为0时,数据报就丢弃,并发送ICMP报文通知源主机,因此可以防止进入一个循环回路时,数据报无休止地传输下去。
上层协议标识:占用8位二进制位,IP协议可以承载各种上层协议,目标端根据协议标识就可以把收到的IP数据报送到TCP或UDP等处理此报文的上层协议了。
常用网际协议编号:校验和:占用16位二进制数,用于协议头数据有效性的校验,可以保证IP报头区在传输时的正确性和完整性。头部检验和字段是根据IP协议头计算出的检验和,它不对头部后面的数据进行计算。
原理:发送端首先将检验和字段置0,然后对头部中每16位二进制数进行反码求和的运算,并将结果存在校验和字段中。 由于接收方在计算过程中包含了发送方放在头部的校验和,因此,如果头部在传输过程中没有发生任何差错,那么接收方计算的结果应该是全1。源地址:占用32位二进制数,表示发送端IP地址。
目的地址:占用32位二进制数,表述目的端IP地址。
可选字段:0~40B,用来支持排错、测量以及安全等措施。
填充:全0,把首部补成4B的整数倍。
3.2 IP数据报分片
把一个数据报为了适合网络传输而分成多个数据报的过程称为分片,被分片后的各个IP数据报可能经过不同的路径到达目标主机。
一个IP数据报在传输过程中可能被分片,也可能不被分片。如果被分片,分片后的IP数据报和原来没有分片的IP数据报结构是相同的,即也是由IP头部和IP数据区两个部分组成:
分片后的IP数据报,数据区是原IP数据报数据区的一个连续部分,头部是原IP数据报头部的复制,但与原来未分片的IP数据报头部有两点主要不同:标志和片偏移:
标识:同意数据报的分片使用同一标识
标志:在IP数据报头部有一个叫“标志”的字段,用3位二进制数表示(只有两位有意义x _ _):
中间位DF(Do not Fragment)标志如果被置1,则数据报在传输过程中不能被分片,如网络连通性测试命令ping就可以用-F参数设置为在数据传输时不分片,但这样当数据不能通过MTU较小的网络时,将产生数据不可达的错误。
最低位MF(More Fragment)标志如果被置1,说明该数据报不是分片后的最后一个数据报,最后一个数据报的该位被置0。片偏移:IP数据报被分片后,各片数据区在原来IP数据区中的位置用13位片偏移来表示。上图中分片1的偏移为0;分片2的偏移为600;分片3的偏移为1200实际在IP地址中,由于偏移是以8个字节为单位进行计算的,因而在IP数据报中分片1的偏移是0;分片2的偏移是75;分片3的偏移是150。
4. IP分类
4.1 IP分类
网络类别 | 最大可用网络数 | 第一个可用网络号 | 最后一个可用网络号 | 每个网络中的最大主机数 |
---|---|---|---|---|
A | $2^7-2$(去掉全0全1) | 1 | 126 | $2^{24}-2 $(去掉全0全1) |
B | $2^{14}-1$(去掉全0) | 128.1 | 191.255 | $2^{16}-2$(去掉全0全1) |
C | $2^{21}-1$(去掉全0) | 192.0.1 | 223.255.255 | $2^8-2$(去掉全0全1) |
4.2 特殊IP地址
4.3 私有IP地址
地址类别 | 地址范围 | 网段个数 |
---|---|---|
A类 | 10.0.0.0~10.255.255.255 | 1 |
B类 | 172.16.0.0~172.31.255.255 | 16 |
C类 | 192.168.0.0~192.168.255.255 | 256 |
4.4 子网划分
两级IP地址的缺点:
- IP地址空间的利用率有时很低。
- 两级IP地址不够灵活。
4.4.1 子网掩码
子网掩码32位与IP地址32位对应,如果某位是网络地址,则子网掩码为1,否则为0。
子网掩码和ip地址的关系:
具体说就是两台计算机各自的IP地址与子网掩码进行“与”运算后,可以得出该主机所在的子网网络号。
使用子网时分组的转发:
第四步:将分组的目的IP地址与路由表中所有的子网掩码依次进行’与’运算,若结果与路由表中的目的网络地址匹配则进行转发,否则进入第五步
4.5 无分类编址CIDR
特点:
(1)CIDR消除了传统的A类、B类和C类地址以及划分子网的概念。CIDR把32位的IP地址划分为前后两部分,前面部分是“网络前缀”,用来指明网络,后面部分则用来指明主机。其记法是:
CIDR还使用“斜线记法”(CIDR记法),即在IP地址后面加上斜线“/”,然后写上网络前缀所占的位数。
(2)CIDR把网络前缀都相同的连续IP地址组成一个“CIDR地址块”,只要知道地址块中任何一个地址,就可以知道这个地址块的最小、最大地址,以及地址块中的地址数。
PS:“CIDR不使用子网”是指CIDR并没有在32位地址中指明若干位作为子网字段。但分配到一个CIDR地址块的单位,仍然可以在本单位内根据需要划分出一些子网。这些子网也都只有一个网络前缀和一台主机号字段,但子网的网络前缀比整个单位的网络前缀要长些。
由于一个CIDR地址块中有很多地址,多以在路由表中就利用CIDR地址块来查找目的网络。这种地址的聚合常称为路由聚合,它使路由表中的一个项目可以表示原来传统分类地址的很多个路由。路由聚合也称为构成超网。路由聚合有利于减少路由器之间的路由选择信息的交换,从而提高了整个互联网的性能。
4.6 构成超网
将多个子网聚合成一个较大的子网,叫做构成超网,或路由聚合。
超网的作用
超网的功能是将多个连续的C类的网络地址聚合起来映射到一个物理网络上。这样,这个物理网络就可以使用这个聚合起来的C类地址的共同地址前缀作为其网络号。
超网创建用来解决路由列表超出现有软件和管理人力的问题以及提供B类网络地址空间耗尽的解决办法。超网允许一个路由列表入口表示一个网络集合,就如一个区域代码表示一个区域的电话号码的集合一样。
超网(路由聚合)技术是为了解决路由表的内容冗余问题,使用路由聚合能够缩小路由表的规模,减少路由表的内存。
最长前缀匹配
在使用CIDR时,路由表中的每个项目由“网络前缀”和“下一跳地址”组成,在查找路由表时可能会得到不止一个匹配结果。应当从匹配结果中选择具有最长网络前缀的路由,这叫做最长前缀匹配。因为网络前缀越长,其地址块就越小,路由就越具体。
方法:将网络前缀缩短
5. 网络地址转换NAT
6. ARP协议
6.1 工作原理
- 每个主机都会在自己的 ARP 缓冲区中建立一个 ARP 列表,以表示 IP 地址和 MAC 地址之间的对应关系。
- 主机(网络接口)新加入网络时(也可能只是mac地址发生变化,接口重启等), 会发送免费ARP报文把自己IP地址与Mac地址的映射关系广播给其他主机。
- 网络上的主机接收到免费ARP报文时,会更新自己的ARP缓冲区。将新的映射关系更新到自己的ARP表中。
- 某个主机需要发送报文时,首先检查 ARP 列表中是否有对应 IP 地址的目的主机的 MAC 地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送 ARP 数据包,该数据包包括的内容有:源主机 IP 地址,源主机 MAC 地址,目的主机的 IP 地址等。
- 当本网络的所有主机收到该 ARP 数据包时:
(A)首先检查数据包中的 IP 地址是否是自己的 IP 地址,如果不是,则忽略该数据包。
(B)如果是,则首先从数据包中取出源主机的 IP 和 MAC 地址写入到 ARP 列表中,如果已经存在,则覆盖。
(C)然后将自己的 MAC 地址写入 ARP 响应包中,告诉源主机自己是它想要找的 MAC 地址。 - 源主机收到 ARP 响应包后。将目的主机的 IP 和 MAC 地址写入 ARP 列表,并利用此信息发送数据。如果源主机一直没有收到 ARP 响应数据包,表示 ARP 查询失败。
7. IPv6
7.1 IPv6数据报格式
7.2 IPv6和IPv4
- IPv6将地址从32位(4B) 扩大到128位(16B),更大的地址空间。
- IPv6将IPv4的校验和字段彻底移除,以减少每跳的处理时间。
- IPv6将IPv4的可选字段移出首部,变成了扩展首部,成为灵活的首部格式,路由器通常不对扩展首部进行检查,大大提高了路由器的处理效率。
- IPv6支持即插即用(即自动配置),不需要DHCP协议。
- IPv6首部长度必须是8B的整数倍,IPv4首部是4B的整数倍。
- IPv6只能在主机处分片,IPv4可以在路由器和主机处分片。
- ICMPv6:附加报文类型“分组过大”。
- IPv6支持资源的预分配,支持实时视像等要求,保证一定的带宽和时延的应用。
- IPv6取消了协议字段,改成下一个首部字段。
- IPv6取消了总长度字段,改用有效载荷长度字段。
- IPv6取消了服务类型字段。
7.3 IPv6地址格式
IPv6的地址长度是128位(bit)。
将这128位的地址按每16位划分为一个段,将每个段转换成十六进制数字,并用冒号隔开。
例如:2000:0000:0000:0000:0001:2345:6789:abcd
这个地址很长,可以用两种方法对这个地址进行压缩,
- 前导零压缩法:
将每一段的前导零省略,但是每一段都至少应该有一个数字
例如:2000:0:0:0:1:2345:6789:abcd - 双冒号法:
如果一个以冒号十六进制数表示法表示的IPv6地址中,如果几个连续的段值都是0,那么这些0可以简记为::。每个地址中只能有一个::。
例如:2000::1:2345:6789:abcd
8. 路由算法分类
9. 网络层设备
9.1 路由器
输入端口对线路上收到的分组的管理
输出端口对分组的管理
若路由器处理分组的速率赶不上分组进入队列的速率,则队列的存储空间最终必定减少到零,这就是后面再进入队列的分组由于没有存储空间而只能被丢弃。
路由器的输入或输出队列产生溢出是造成分组丢失的重要原因。
9.2 三层设备区别
路由器:可以互联两个不同网络层协议的网段。
网桥:可以互联两个物理层和链路层不同的网段。
集线器:不能互联两个物理层不同的网段。
能否隔离冲突域 | 能否隔离广播域 | |
---|---|---|
物理层设备(中继器,集线器) | × | √ |
链路层设备(网桥,交换机) | √ | × |
网络层设备(路由器) | √ | √ |