网络层
重点:网际协议IP,网际控制报文协议ICMP,IPv6特点
网际协议IP
与IP协议配套使用的三个协议:
- ARP:地址解析协议
- ICMP:网际控制报文协议
- IGMP:网际组管理协议
ICMP和IGMP使用IP协议,IP协议使用ARP协议
虚拟互联网络
网络有很多种,要将这些不同的网络连接起来需要使用中间设备:
- 物理层:转发器
- 数据链路层:网桥
- 网络层:路由器
- 网络层以上:网关
分类的IP
IP:给全球的所有电脑或路由器的每一个端口分配一个32位的全球唯一的标识符
IP编码方式三个阶段:
- 分类的IP地址
- 子网的划分
- 构成超网
IP是在操作系统的定义的
IP={网络号,主机号}
A,B,C类用于计算机
网络号 或主机号 全零全1不能用
网络号127本地测试用
默认网关:你的网络要跟外网通信,你的网络进入的第一个路由器的端口IP就是你的网络的网关
IP地址与硬件地址
- IP地址:IP地址是网络层以上各层使用的逻辑地址
- 物理地址:数据链路层和物理层使用的地址
网络层屏蔽了硬件不同造成的影响,只要使用相同的IP地址协议就能够实现通信
划分子网
从两级IP地址到三级IP地址
两级IP地址问题:
- IP得知空间利用率低
- 给每个物理网络分配一个网络号会造成路由表变化太大是网络性能变坏
- 两级IP地址不灵活
解决办法:在IP地址中加入了子网号字段
三级IP:
子网掩码
解决的问题:怎么把目的IP145.13.3.10分配到145.13.3.0的子网中
解决办法:把目的IP和255.255.255.0进行与运算,结果就是子网IP
其中255.255.255.0就是子网掩码
默认子网掩码:
- A类:255.0.0.0
- B类:255.255.0.0
- C类:255.255.255.0
使用子网后分组的转发
路由表中包含三项内容:
- 目的网络地址
- 子网掩码
- 下一跳地址
路由器中与运算工作方式:
- 从数据包首部提取目的IP
- 判断直接交付:与路由器直接相连的网络进行检查,把目的IP与路由器中每个网络号对应的子网掩码进行与运算,判断结果是否与路由器中的网络号一致,一致即可确定下一跳的端口
- 判断间接交付:路由表中有目的地址为目的IP的主机路由,确定下一跳的路由器
- 对路由表中的每一行进行检查,把目的IP与每一行的子网掩码进行与运算,判断结果是否与这一行的网络地址一致,确定下一跳的地址
- 如果路由表中有默认路由,确定下一跳地址
- 报告分组转发出错
ARP
局域网协议
ARP:从IP地址解析出MAC地址
网络中的每个设备都有两个地址:IP地址和MAC地址
从一个主机到另一个主机通信:
要经过多个局域网,从始至终IP地址不变,但是在每个局域网传输时的MAC地址是变的,这是就要查找每个主机的ARP(高速缓存表)得知下一个的MAC地址
第一种情况:
当源主机和目的主机在同一个网络(网络地址相同)
- 源主机运行ARP协议,通过广播的方式广播自己的IP和MAC以及要找的IP和MAC
- 目的主机发现他要找的MAC地址和自己的MAC地址相同,就发一个响应信息
第二种情况:
当源主机和目的主机不在同一个网络
源主机使用ARP解析自己的默认网关的IP地址
第三种情况:
路由器运行ARP协议找到下一跳的路由器
第四种情况:
路由器运行ARP协议找到目的主机
ARP高速缓存表不断更新
IP数据报格式
首部长度:20-60字节,一般为20
IP数据报各个字段:
- 版本:4位,指IP协议的版本,主要是4或者6
- 首部:4位,最小值5,最大值15
- 区分服务:8位,区分服务时才使用
- 总长度:16位,因此数据报的最大长度是65535字节
- 标识:16位,计数器,产生一个计数器,计数器加一
- 标志:3位
- MF=1:后面还有分片
- MF=0:这是最后一片
- DF:不能分片
- DF=0:允许分片
- 片偏移:13位,
- 生存时间(TTL):8位,表示数据报在网络中能通过的路由器数
- 协议:8位,指明数据部分是什么协议封装的
常见协议:
- 首部校验和:16位,
- 源地址:32位
- 目的地址:32位
超网
CIDR:无分类域间路由选择
IP:{网络前缀,主机号}
CIDR使用斜线记法:主机号后面加一个/,后面写上网络前缀所占的位数
可以使用子网掩码或者地址掩码
地址掩码:斜线后面的数字就是1的个数,剩下的都是0
主机号不能全0或全1
全0表示源IP,全1表示目的IP
地址块:主机号全0到全1
最长前缀匹配
路由表由网络前缀和下一跳地址组成,如果有如果有多个网络前缀的下一跳多能到达目标IP,应该匹配最长的网络前缀
匹配的网络前缀越长,地址号范围就越小,去地址块中查找就容易找到
网际控制报文协议ICMP
ICMP协议的作用就是在IP发送出错时给源主机报告错误
发送出错后丢弃IP数据报,并向源主机发送ICMP报告错误
ICMP格式
ICMP种类
两种:
- ICMP差错报告报文
- ICMP询问报文
四种差错报告报文:
- 终点不可达:路由器或者主机不能转发IP时
- 时间超时:TTL问0时IP还没有到达
- 参数问题:当路由器或者主机IP的首部参数有错误
- 改变路由(重定向):路由器给源主机发送ICMP告诉源主机应该给另一个路由器发送IP数据报
应用
ping命令主要使用的就是ICMP协议
traceroute:Unix命令,通过使TTL为1向路由器发送错
路由选择协议
两大类:
- 静态路由选择:人工配置每一条路由,可以用于小网络,无法使用网络的变化
- 动态路由选择:复杂,开销大,可以适应外部网络的变化,适用于大网络
分层路由选择协议
对动态路由选择进行探讨
自治系统(AS):把互联网分成多个较小的AS,一个AS对其他的AS表现出单一的路由选择策略
大的自治系统(ISP):
AS的路由选择协议分为两大类:
- 内部网关协议(IGP):AS内部使用的路由选择协议,包括RIP和OSPF
- 外部网关协议(EGP):AS之间交换路由信息时使用的协议,包括BGP-4
内部网关协议RIP
分布式的基于距离向量的路由选择协议,使用广泛,并且简单
使用RIP协议:要求每个路由器维护自己到其他网络的距离
距离(跳数):与路由器直接相连的网络距离为1,不直接相连就是路由器个数加1,最大为15,16就是不可达的。
RIP协议只选择最短的距离,即使他的时延高
RIP和OSPF都是分布式协议
分布式协议:不断地跟其他的路由器交换信息
RIP的分布式协议特点:
- 只跟相邻的路由器交换信息
- 交换自己的全部的路由信息
- 固定时间间隔交换路由信息
一开始路由器的路由表中是空的,然后通过与相邻的路由器交换路由信息一点点的完善自己的路由信息
路由表中重要的信息就是距离,每次更新的目的也是找出最短的距离
距离向量算法
采用Bellman-For算法:a到b之间有一个c,如果a到b是最短的,那么a到c和c到b也是最短的
处理相邻路由器X发过来的RIP报文:
-
修改RIP报文:把所有的下一跳地址改为X,所有的距离加一,使得每一项RIP报文包括三个关键数据:
目的网络N,距离d,下一跳路由X -
RIP中的数据与路由器自己的数据对比:
- RIP中目的网络N自己没有,直接加进来
- RIP中目的网络N自己有并且下一跳X相同,替换
- RIP中目的网络N自己有但是下一跳X不同,如果d比自己的小,替换
-
三分钟没有收到相邻路由器的RIP,把相邻路由器标记为不可达(d=16)
-
返回
内部网关协议OSPF
使用最短路径算法:SPF
使用分布式的链路状态协议
与RIP比三个特点:
- 向AS中所有的路由器发送信息
- 发送的信息是:本路由器与相邻的所有的路由器的链路状态
- 只有链路状态发生变化时才会发送信息
最终:OSPF把一个AS分成多个区域,每个区域所有的路由器都相同的全网的拓扑结构图
AS分成一个主干区域和其他的区域,每个区域有一个区域边界路由器,主干区域有多个区域边界路由器,R3,R4,R7为区域边界路由器
OSPF采用IP数据报传送信息
外部网关协议BGP
AS之间的通信使用BGP
每个AS有多个BGP发言人与外部AS通信
四种报文:
- OPEN报文
- UPDATE报文
- KEEPALIVE报文
- NOTIFICATION报文
路由器构成
两大部分:
- 分组转发:输入,交换,输出
- 路由选择(控制部分):制造路由表,和周围的路由器交换路由信息维护路由表
IPv6
- 地址由32位增大到128位
- 数据报首部与IPv4不兼容,首部长度固定
- 允许协议继续扩充
- 支持自动配置
IPv6数据报格式:
记法:
128位分成8段,每段16位,16进制表示,用 :分开
VPN和NAT
内网IP:互联网不转发的IP
这些IP是在本地网内部使用的专网IP
VPN
VPN:虚拟专用网
路由器必须至少有一个合法的外网IP,如果这个局域网中发出的消息是外网的IP,那么就交给这个路由器封装一层外网IP向外发送
对外界来说与这个这个内网IP通信其实都是与这一个路由器的外网IP通信
NAT
NAT:网络地址转换
专用网内部的主机可以不具有外网IP实现与外网通信,节约全球互联网IP
路由器有一个或多个外网IP,如果专网IP需要与外网通信,通过路由器外网IP与互联网通信,在经过路由器时源IP换成路由器的外网IP并且在路由器中的NAT地址转换表中记录IP转换,用于在路由器收到一个IP时查找表找到内网IP
如果在记录转换过程时也记录端口号,如果是TCP协议,这个端口号就是TCP的端口号,如果是UDP协议,这个端口号就是UDP的端口号,这样就可以实现多个内网IP使用同一个外网IP,叫做NAPT