网络层
本文主要参考eaglebear2002的博客
使用IP地址(而不使用硬件地址)的原因:
- 设备数量和供应商多
- 规格不一致
- 定位复杂
一、网络层概述
- 对于不同帧使用同一的方案进行处理
- 希望通过路由选择算法进行路径的选择和转发,对第二层是透明的。(即第二层的具体实现不影响第三层)
- 第三层只能避免拥塞(流量控制在第四层)
第三层职责
- 通过网络来移动数据,划分广播域,跨网段传播数据。
- 使用分层寻址方案(IP地址)
- 细分网络
- 减少交通拥堵,基于IP做分段和传达
- 与其他网络交谈
一般,第三次负责的是联通和传达,而数据可靠性由终端设备(第四层及以上)来进行保证(不然会带来比较大的计算量)
第三层设备概述
1、路由器:
- 互连网段或网络(不同网段的分割)
- 根据 IP 地址做出合理的决定
- 确定最佳路径,根据路由表。
- 将数据包从入站端口切换到出站端口
路由器转发的只会是不同网段的地址
二、IP地址和子网划分
- 首部部分:蓝框部分
- 版本号:4bit,IP协议版本(IPv4或IPv6)
- 首部长度:4bit,最长60字节(一个单位表示4字节,而4bit最多表示15位)
- 服务类型:8bit,用来获得更好的服务,前6位区分服务码,后2位保留
- 总长度:16bit,首部+数据长度(最大65535字节,但是大多数不超过1500字节(帧大小限制))
- 标识:16bit,用来给报文分片然后合并(按照标识的计数)
- 标志:3bit,最高位0,DF位表示是否允许分片(0允许1不允许),MF位表示是否为最后一个分片(0表示是)
- 片偏移:13bit,表示分组在分片后在原分组中的位置,8个字节为偏移单位。如果标识号相同,那么就根据片偏移进行重拍,偏移小的靠前(因为先发未必先到,所以要重排)
报文分配:
根据报文数据在原分组中的位置确定偏移
-
生存时间:8bit,数据报在网络中可通过的路由器数的最大值。最大值为255,路由器每转发一次,就会对生存时间 -1,减小为 0 后,就会丢弃掉,并且通知给发送方我已经丢弃掉这个报文(防止环上回路问题)
-
协议:8bit,指出数据使用何种协议,来确定交给哪个进程
-
首部检验和:16bit,只检验首部,不包括数据部分。传输前后的检验和应该相同(不同说明传输出现差错)
网络层地址
IPv4地址为32位长,包括两个部分:网络ID+主机ID
- 网络ID:标识网段,标识设备所连接的网段
- 主机ID:标识网段上的特定设备,由网络管理员分配
IP地址
分类:A、B、C、D、E类地址
Class A | N | H | H | H |
---|---|---|---|---|
Class B | N | N | H | H |
Class C | N | N | N | H |
N标识网络ID,H标识主机ID
具体划分方法:
- A类地址:开头固定为0,0-127
- B类地址:开头固定为10(只有一个1),128-191
- C类地址:开头固定为110(有两个1),192-223
- D类地址:开头固定为1110(三个1),224-239,为多播地址(组播)
- E类地址:开头固定1111(四个1),240-255,为研究
host不能全取0或1(全0标识网段地址,全1标识广播地址)
主机的数量:
A类:2^24-2
B类:2^16-2
C类:2^8-2
减去2:不能为全0或全1,为保留地址
专用地址空间
A类:10.0.0.0-10.255.255.255
B类:172.16.0.0-172.31.255.255
C类:192.168.0.0-192.168.255.255
IPv6有效解决了IPv4耗尽的问题(长度达到128位,是v4的32位的四倍)
子网划分
子网:将网络划分为较小的网络,提供额外寻址灵活性(小的局域网可以完成隔离)
- 需要从主机字段借来几位。
子网划分只需要本网段网络管理员在本地分配,减小了广播域,提高网络利用率
可借用位数
子网不能为全0或全1,因此需要减去两个
可以借用的最小位数:2(其中两个需要给保留地址(全0和全1),剩下两个可以表示不同子网)
可以借用的最大位数:全部主机位中保留两位给主机号即可。
子网掩码
网络位和借用的位赋为1,其他为0
在计算需要几位主机位时,记得需要把用位数算出来的可表示的值减2
计算时,将每八个位看成一个十进制数字,表示出来。
有的时候子网掩码会在IP地址后面加一个斜杠和数字(/24),这也表示的是子网掩码,意思是前面有24个1
子网网络地址:直接将地址和子网掩码按位与运算
三、第三层设备
路由器
两个功能:
- 路径选择
- 分组转发
路径选择:
根据链路带宽、跳数、延迟选择到达目的地的路径的下一条地址
-
路由器连接网络,每个网络都需要网络号(包含在网络设备的IP地址中),IP地址是我们配置的,有层次的(确定网段)
-
路由器有端口,记录网段IP地址,并且一个路由器可能有不同网段的IP地址(分隔网段)
-
路由器连接在这个网段的端口的IP地址即为这个网段的网关。路由器在每个网段的端口的IP地址都是不一样的
发送过程:
A5想要发送给B5,先把帧放到总线上,被路由器接收,发现目的地是B5(解封装),于是检查路由表,寻找到对应的端口B1,形成新的帧转发,其mac地址变成了B5的mac地址
IP地址分配
- 动态地址分配:RARP(反向地址解析协议)、BOOTP(BOOTstrap协议)、DHCP(动态主机配置协议)
四、ARP协议
Address Resolution Protocol 地址解析协议(单网段内)
解决下一跳走哪里的问题,使计算机能够查找与IP地址关联的计算机的mac地址,即IP地址->Mac地址
ARP示例:
首先需要查询ARP table,寻找有没有目的IP地址,如果没有,就发送一个request请求(将Mac地址全设为1,作为广播发送),然后每个主机如果不是目标主机就丢弃,是目标主机就记录下来发送给对方作为应答。同时对方记录下主机A的MAC地址。同时主机A的ARP表中也会更新这一项,然后再次形成一个数据帧发送出去
- ARP请求时本网段形成的,不能跨网段进行广播
不在同一网段怎么交流?
- 默认网关(连接到路由器)
- 代理ARP(Proxy ARP)
ARP对应目的方不是本地?
- 路由器把Router MAC地址给你,在路由器另一端口形成新的帧
ARP攻击
一个机器发送无用帧,将cache写满(解决方法:一段时间不处理,等记录失效)
四、网络层设备
面向连接的网络设备
传输数据前先要建立连接,数据有序传输,差错需要接收方处理,可靠传输,代缴高
无连接的网络服务
分别对待每个数据包,无需建立连接、缓存,不处理报文丢失,可靠性低(报文数量少时可以提高效率)
电路交换
先建立一个虚电路关系,报文走对应的虚电路。属于面向连接,数据在同一虚拟电路上传播。强于面向连接。
报文交换
数据包传输时可以切换路径、乱序到达。根据各种标准为每个数据包确定路径,将原始数据分为很多子报文。基于packet switched进行实现,出现问题只需重传对应部分报文
五、网络协议操作
routed protocol 被动可路由协议:支持网络层的协议
Non-routable protocol 不可路由协议:不支持网络层的协议,
路由协议的的分类
- 静态路由:网络管理员在路由器中手动输入信息
- 动态路由:路由器在运行过程中互相学习信息(手动维护代价较大)
静态路由:用于隐藏部分网络,安全,测试网络中的特定链接,
动态路由:维护路由表,适应不断变化的网络状态。打开后会启动进程,学习网上的信息,根据算法生成路由表。
routing protocol 主动可路由协议,用来构建路由表
- Routed Portocol 用于路由器之间,用来保证路由器之间连通(完成转发),保证路由器有效连通。
- Routing Protocol 用于做各自的路由表的生成:路由器彼此交换信息。
- Routing Protocol 决定 Routed Protocals
动态路由协议的分类
**内部网关协议:**可在自治系统中使用(RIP,IGRP,OSPF)
**内部网关协议:**在自治系统之间路由数据包(EGP,BGP)
自治系统是逻辑的划分,不是物理层次的划分
内部网关协议的分类:DVP and LSP:
DVP(距离矢量协议):RIP,IGRP,在路由器之间添加距离向量,将路由表的副本传给邻居路由器。
LSP(链路状态协议):获取整个网络拓扑的通用视图,计算到其他路由器的最短路径,事件触发的更新,将链路状态路由更新到其他路由器。
RIP:DVP的代表
- 指数是跳数,最大为15
- 每30秒更新一次
- 并非选择最快的路径
- 产生大量的网络流量
OSPF:LSP的代表
- 指标为带宽、速度、流量,可靠性和安全性(本科阶段只考虑带宽)
- 事件触发的更新
IGRP and EIGRP
- 基于距离向量的最大网关协议
- IGRP最大跳数255,EIGRP指标由带宽、负载、延迟和可靠性组成
- 90秒更新一次
- EIGRP是IGRP的高级版本
六、可变长度子网掩码VLSM
经典路由:无子网掩码,会造成网络号的浪费。
VLSM:有子网掩码,允许单个自治系统的网路具有不同的的子网掩码。
可以在主机少的网络上使用长掩码,主机多的子网上使用短掩码。
- 路由网络连接上使用30位子网掩码255.255.255.252
- 用户网路的子网掩码为255.255.255.0
- 也可以使用更少的子网掩码(1000个用户)(255.255.252.0)
VLSM被称为子网划分,用于最大化寻址效率,缩小IPv4和IPv6之间的差距
VSLM的优缺点
会导致地址空间浪费:(广播地址和网络号都无法使用)
表示方法:192.168.1.1/30,其中的/30就表示前面多少位表留给网络位
VLSM的例子
我们需要为四个路由器划分网段,其中KL、Perth、Sydney、Singapore分别需要28,60,12,12个主机。
-
KL需要5为主机号;Perth需要6位主机号,Sydney、Singapore需要4位主机号
-
首先我们可以为Perth分配网络号,即将子网掩码设为26位(255.255.255.192),就可以划分成四个子网,其中一个给Perth使用,可以给Perth的网段记为192.168.10.0/26。剩下三个记为unused。
-
我们可以将剩下三个unused网段每个划分为更小的网段。即再借用一位。我们就可以将剩下的三个网段分成六个更小的网段,即1923168310.64/27、192.168.10.96/27等等。其中我们可以选择192.168.10.64/27作为KL的子网掩码。然后再将剩下的标记位unused
-
接下来继续将其划分的更小,将子网掩码设为28位,就可以得到从192.168.10.96/28一直打192.168.10.240/28的所有网段。将这这里面的前两个网段分配给Sydney和Singapore,然后再将剩余的网段置为unused。
-
为WAN连接分配地址。每个WAN连接需要两个IP地址,需要2位来表示。从192.168.10.128/28上可以划分成192.168.10.128/30和192.168.10.132/30两个网段。
**注意:**只有未使用的(unused)子网才可以进一步划分子网。
路由聚集 Route Aggregation
多个路由条目汇聚成小的路由条目
聚集方法:每个路由写在一起,划线到第一个有不同的位的左边,那么这条线左边的位为1,右边的位为0
- 减少了路由表条目的数量
- 隔离拓扑更改
- 全0子网会在题目中说是否可用
- 全1子网尽量不要使用
七、因特网控制报文协议ICMP
- 允许主机或路由器提供有关异常情况的报告
- ICMP报文可以作为IP数据报的数据部分发送出去
- 路由器丢弃报文时一般都会返回一个ICMP差错报文
ICMP报文格式:
两种ICMP报文:
目的站不可到达:
- 网络不可到达(net unreachable)
- 主机不可到达(host unreachable)
- 协议不可到达(protocol unreachable)
- 端口不可到达(port unreachable)
- 源路由选择不能完成(source route failed)
- 目的网络不可知(unknown destination network)
- 目的主机不可知(unknown destination host)
- 不可知是完全不可以解析,不可达是可以解析但是不可以到达
差错报告报文的数据字段的内容
相当于将原来的IP数据报的首部前后+8字节组装到ICMP差错报告报文的IP数据报的数据部分,然后前面再加上新的首部,组成新的IP数据报
不应发送ICMP差错报告报文的几种情况:
- 对ICMP差错报告报文不再发送
- 第一个分片的数据报片的所有后续数据报片都不发送(每次传送只需发送一次)
- 多播地址数据报
- 特殊地址,如127.0.0.0和0.0.0.0
PING(Packet InterNet Groper)
- 使用ICMP的"Echo request“和”Echo reply"消息来实现的
- 用来测试两个主机之间的连通信(局域网)。ping需要同时发送的过去和应答的过来
- 使用ICMP回送请求和回送回答报文
- 应用层直接使用网络层ICMP,没有使用运输车的TCP、UDP
八、不同设备的比较
1、路由器:互联两个不同网络层协议的网络
2、网桥:互联两个物理层的链路层不同的网段
3、集线器:不能互联两个物理层不同的网段
能否隔离冲突域 | 能否隔离广播域 | |
---|---|---|
物理层设备(中继器、集线器) | × | × |
链路层设备(网桥、交换机) | × | √ |
网路层设备(路由器) | √ | √ |