网络层概述
问题回顾(上一篇文末)
- 跨节点传输?
网络层相关内容
IP协议详解
-
虚拟互联网络
- 计算机网络是错综复杂的
- 物理设备通过使用IP协议,屏蔽了物理网络之间的差异
- 当网络中主机使用IP协议连接时,则无需关注网络细节
- IP协议使得复杂的实际网络便为一个虚拟互联的网络
- IP协议使得网络层可以屏蔽底层细节而专注网络层的数据转发
- IP协议
解决了在虚拟网络中数据报传输路径的问题
-
IP协议
MAC地址和IP地址的区别
IP协议定义
- IP地址长度为32位,常分成4个8位
- IP地址常用使用点分十进制来表示(0-255.0--255.0--255.0--255)
例如: 114.114.114.114 、 1.1.1.1 、8.8.8.8 、70.12.34.34 、255.255.255.255 、111.111.111.111
总共有2^32 = 4294961292
个IP地址
对于上节提到的"帧"数据,主要是分为"帧"首部,"帧"尾部,"帧"的数据;对于帧的数据主要就是
IP数据报
IP数据报
IP数据报分为 IP首部
和IP数据报的数据
IP首部图解如下:
- 版本 :占四位,指的是IP协议的版本,通信双方的版本必须一致,当前主流版本是4,即IPv4,也有IPv6
- 首部长度: 占4个字节,最大数值为15,表示的是IP首部长度,单位是"32位字"(4个字节),也即是IP首部最大长度为60字节,最小长度为20字节
- 总长度:占16位,最大数值为65535,表示的是IP数据报总长度(IP首部+IP数据),最大的数据链路长度MTU为1500,显然65535远大于1500,因此数据链路层会把IP协议进行分片.
- 标识:协议内部主要的相关信息
- 标志: 标记IP报文是否可以分片
- 片偏移:将IP报文进行分片,拆分成多个数据帧.记录当前数据帧保存的是第几个偏移的数据.
-
TTL:占8位,IP数据报文在网络中的寿命,每经过一个设备,TTL减1,当TTL=0时
,网络设备必须丢弃该报文
,丢掉之后通过会发出一个ICPM终点不可达差错报文
解决的是,当IP报文找不到终点的时候,避免IP数据在网络中无限的传输而消耗带宽,因此设置TTL可以让IP在有限次传输后到达目的机器或者未到达丢弃掉. -
协议:占8位,表明IP数据所携带的具体数据是什么协议的(如:TCP、UDP等)
具体如下图:
- 首部校验和: 占16位,校验IP首部是否有出错!
- 源IP地址:发送IP数据包的IP地址
- 目的IP地址:数据包到达目的地的IP地址
IP协议的转发流程
逐跳(hop-by-hop)
路由表简介
流程:
- A通过网卡发出数据帧
- 数据帧到达路由器,路由器取出前6字节
- 路由器匹配MAC地址表,找到对应的网络接口
- 路由器往该网络接口发送数据帧
计算机或者路由器都拥有路由表
IP协议的转发流程
流程如下:
- A发出目的地为C的IP数据报,
查询路由表发现下一跳为E
- A将数据报发送给E
- E
查询路由发现下一跳为F
,将数据报发送给F - F
查询路由表发现目的地C直接连接
,将数据报发送给C
结合数据链路层/网络层:
- A发出目的地为C的IP数据报,
查询路由表发现下一跳为E
- A将IP数据报
交给数据链层,并告知目的MAC地址是E
- 数据链路层
填充源MAC地址A
和目的MAC地址E
- 数据链路层通过物理层将数据发送给E
- E的数据链路层接收到数据帧,把帧数据交给网路层
- E
查询路由表
,发现下一跳为F
- E
把数据报交个数据链路层
,并告知目的MAC地址为F
- E的数据链路层
封装数据帧并发送
- F的数据链路层接收到数据层,
把帧数据交给网路层
- F查询路由表,发现下一跳为C
- F
把数据报交给数据链路层
,并告知目的地MAC地址为C
- F的数据链路层
封装数据帧并发送
总结:
- 数据帧的
每一跳的MAC地址都在变化
- IP数据报
每一跳的IP地址始终不变
ARP协议与RARP协议
转发基本流程
- A通过网卡发出数据帧
- 数据帧到达路由器,路由器取出前6字节
- 路由器匹配MAC地址表,找到对应的网络接口
- 路由器往该网络接口发送数据帧
问题:路由器不知道C的MAC地址?
- E检查MAC地址表,发现没有C的信息
- E将广播A的数据包到除A以外的端口
- E将收到来自B、C的回应,并将MAC 地址记录
A把IP数据包交给数据链路层处理 ,并且得知下一跳的MAC地址为E
那么
A是如何知道E的MAC地址呢
?
ARP(Addess resolute Protocol)地址解析协议
将网络层的IP32位地址转换为数据链路层MAC48位地址
ARP缓存表
ARP缓存表有两种情况
- ARP缓存表缓存有IP地址和MAC地址的映射关系(如 转发基本流程)
- ARP缓存表没有缓存IP地址和MAC地址的映射关系(如 上述提到的问题)
因此 ARP缓存表
是ARP协议和RARP协议运行的关键,
ARP缓存表缓存了IP地址到硬件地址之间的映射关系
,ARP缓存表中的记录并不是永久有效的,有一定的期限.(cmd -> arp -a)
ARP协议具体的报文信息
注意:ARP是直接封装到数据链路层中的数据帧中的
如图:
RARP(Revese Address Resolute Rrotocol)逆地址解析协议
图解:
与ARP类似
补充:在前面的跳转传递中,需先要查询ARP缓存表得知目的地的MAC地址
IP地址的子网划分
IP地址长度为32为位,常分成4个8位
分类的IP地址
主要是网络号、主机号总共是32位
A类地址:网络号----8位、主机号----24位、首位是0
B类地址:网络号----16位、主机号----16位、首位是10
C类地址:网络地址----24位、主机号----8位、首位是110
特殊主机号:
- 主机号全0表示当前网络段,不可分配为特定主机
- 主机号为全1表示广播地址,向当前网络段所有主机发消息
如1.2.3.4、1.0.0.0 、1.255.255.255
特殊的网络号: - A类地址
网络段全0(00000000)
表示特殊网络 - A类地址
网络段后7位全1(01111111:127)
表示回环地址 - B类地址
网络段(10000000.00000000:128.0)
是不可使用的 - C类地址
网络段(192.0.0)
是不可使用的
精确图解(对比上图)
125.125.3.60: 前八位 01111101
163.70.31.23:前八位10100011
210.36.127.11:前八位11010010
127.0.0.1,通常被称为本地回环地址( Loopback Address,不属于任何
个有类别地址类。它代表设备的本地虚拟接口,所以默认被看作是永远
不会宕掉的接口。在 Windows操作系统中也有相似的定义,所以通常在
安装网卡前就可以ping通这个本地回环地址。一般都会用来检查本地网络
协议、基本数据接口等是否正常的
划分子网
某公司拥有256名员工,每人配备一个计算机,请问该公司应该申请哪种网络段?
答:应该选择A类地址,但是造成了很大的地址空间浪费
因此新增子网号
问题:子网号这么多有没有办法快速判断某个IP的网络号?
答:通过子网掩码
子网掩码
- 子网掩码和|P地址一样,都是32位
- 子网掩码由连续的1和连续的0组成
-
某一个子网的子网掩码具备网络号位数个连续的1
图解:
子网掩码划分(看图解析)
网络号:193.10.10.0
无分类编址CIDR
- CIDR中没有A、B、C类网络号、和子网划分的概念
- CIDR将网络前缀相同的IP地址称为一个“CIDR地址块”
主要是分为网络前缀(网络前缀是任意位数的
)、主机号
斜线记法
-
193.10.10.129/25
25:表示当前的网络号前缀为25位
公司
城市
网络地址转换NAT技术
- 网络地址转换NAT(Network Address Translation)
- NAT技术用于多个主机通过一个公有IP访问互联网的私有网络中
- NAT减缓了IP地址的损耗,但是增加了网络通信的复杂度
首先我们先了解
内网地址:
- 内部机构使用
- 避免与外网地址重复
外网地址:
- 全球范围使用
- 全球公网唯一
三类内网地址
- 10.0.0.0 ~ 10.255.255.255 (支持万级数量级设备)
- 172.16.0.0 ~ 172.31.255.255(支持百万级数量级设备)
- 192.168.0.0 ~ 192.168.255.255(支持万数量级设备)
对于公司:可以在外部使用外网IP,在内部使用内网地址;对于家庭:可以使用外网IP,在内部使用C类的内网地址
图解:
如果电脑(192.168.2.11)发送数据报文到手机(192.168.2.10),通过路由器(173.21.59.10)将地址替换成路由器的地址和端口号,手机接收到的实际上是路由器的IP地址. 也就是内网-外网相互转换
ICMP协议解析
- 网际控制报文协议(Internet Control Message Protocol)
- 辅助IP协议传输,ICMP协议可以报告信息错误或者异常情况
- 封装在IP数据包中,ICMP是IP是数据中的一部分
图解:
ICMP首部
8位类型:主要是ICPM种类
8位代码:不同的ICPM出现的错误代码
16位校验和:对ICMP报文数据进行校验
ICMP协议详解
在进行传输的时候,会将在IP数据包中将ICMP中的字段值 1 写入
报文类型
- 差错报告报文
-
询问报文
ICMP的应用
- Ping 应用
- Traceroute应用
-
Ping应用
ping应用,会发出ICMP的询问报文,因此在输入Ping命令的时候,首先会组装IP协议的报文,数据包里面会组装一个ICMP的询问报文,并将其封装到IP协议中,在通过数据链路层发出.
Ping回环地址127.0.0.1
Ping网关地址
Ping远端地址
因为IP首部最小字节数为20,所有该数据报(在这里表示ICMP,因为无数据)为12,时间表示传输时间
-
Traceroute应用
Traceroute可以探测IP数据报在网络中做够的路径
图解如下:
网络层的路由概述
(见上述IP转发流程)
自治系统(Autonomous System)
- 一个自治系统(AS)是处于一个管理机构下的网络设备群
- AS内部网络自行管理,AS对外提供一个或多个出(入)口
自治系统内部路由的协议称为:内部网关协议(RIP,OSPF)
自治系统外部路由的协议称为:外部网关协议(BGP)
例如:公司内部AS1
和 学校内部AS2 通信
内部网关路由协议之RIP协议
距离矢量(DV)算法
- 每一个节点使用两个向量
Di
和Si
-
Di
描述的是当前节点到别的节点的距离 -
Si
描述的是当前节点到别的节点的下一节点 - 每一个节点与相邻的节点交换向量Di和Si的信息
每一个节点根据交换的信息更新自己的节点信息
图解
蒙蔽
目的就是为了求dij的最小值
DV图解
通过观察发现距离矢量信息会有所差别
原因是:
A -> C -> B: A到B的距离可能是由A到C在到B的
B -> C -> D -> A:同上
RIP协议的过程
- RIP(Route Infomation Protocol) 协议
- RIP协议是使用DV算法的一种路由协议
- RIP协议把网络的跳数(hop)作为DV算法的距离
- RIP协议
每隔30s
交换一次路由信息 - RIP协议认为
跳数 > 15
的路由则为不可达路由
RIP协议的过程
- 路由器初始化路由信息(两个向量Di和Si)
- 对相邻路由器X发来的信息,对信息的内容进行修改(下一跳地址设置为X,所有距离加1)
i. 检索本地路由,将信息中的新的路由插入到路由表里面
ii. 检索本地路由,对于下一跳为X的,更新为修改后的信息
iii. 检索本地路由,对比相同目的地距离,如果更新信息的距离更小,则更新本地路由() - 如果3分钟没有收到相邻的路由信息,则把相邻路由设置为不可达(>15跳)
图解
图1代表的是路由器到D的距离为2下一跳的为A, 收到图2新路由发到A点的距离为4下一跳为C,到B点的距离为2下一跳为C,图三(灰色)是图二距离加1后更新的信息,图四是将新的路由器(图二)中的路由表添加到图一中
-
DV算法过程
iii
RIP缺点
RIP协议:实现简单,开销很小
RIP协议:限制了网络的规模
RIP协议:"坏消息传递慢",更新收敛时间过长
Dijkstra(迪杰斯特拉)算法
- Dijkstra算法是著名的图算法
- Dijkstra算法解决有权图从
一个节点到其他节点的最短路径问题
- "以起始点为中心,向外层层扩展"
- 初始化两个集合(S,U)(S为只有初始顶点A的集合,U为其他顶点集合
- 如果U不为空,对U集合顶点进行距离的排序,并取出距离A最近的一个顶点D
i. 将顶点D的纳入S集合
ii. 更新通过顶点D到达U集合所有点的距离(如果距离更小则更新,否则不更新
iii. 重复2步骤 - 知道U集合为空,算法完成
(网上查查资料明白道理就好/~)
内部网关路由协议之OSPF协议
链路状态(LS)协议
- 消息描述该路由器相邻路由器的链路状态(距离、时延、带宽)
特点:
- 向所有的路由器发送消息
- 消息描述该路由器与相邻路由器的
链路状态
- 只有链路状态发生变化时,才发送更新信息
OSPF协议的过程
- OSPF(Open Shorttest Path First:开放最短路径优先)
- OSPF的协议的核心是Dijkstra算法
1. 向所有路由器发送消息
获取网络中的所有信息 => "网络的完整拓扑"
每个路由器都会运行Dijkstra算法,进而找到自己到达某个顶点的最短路径
* 也称为"链路状态数据库"
* "链路状态数据库"是全网一致的
2.消息描述该路由器与相邻路由器的链路状态
OSPF协议更加客观、更加先进(仔细理解理解~)
3.只有链路状态发生变化时,才发送更新信息
减少了数据的交换,更快收敛
五种消息类型
- 问候消息(Hello)
- 链路状态数据库描述信息
- 链路状态请求信息
- 链路状态更新信息
- 链路状态确认消息
图解:
OSPF
RIP和OSPF协议对比
RIP VS OSPF外部网关路由协议之BGP协议
- BGP(Border Gateway Protocol:边际网关协议)
- BGP协议是运行在AS之间的一种协议
- BGP协议能够找一套到达目的比较好的路由
原由
- 互联网规模很大
-
AS内部使用不同的路由协议
BGP - AS之间需要考虑除网络特性以外的一些因素(政治、安全...)
BGP发言人(speaker)
- BGP并不关心内部网络拓扑
- AS之间通过BGP发言人交流信息
-
BGP Speaker 可以认为配置策略
BGP Speaker
网友评论