NCP协议是一个很多子协议构成的主要取决于网络层封装的什么协议比如
三层协议 | NCP协议 |
---|---|
ip | IPCP |
IPv6 | IPv6CP |
MPLS | MPLSCP |
NCP能够协商的内容包括:
1.网络层协议(ip?ipv6?MPLS?…)
2.协商地址
主要了解使用最多的IPCP
上文说到NCP能够协商地址
那在IPCP中如何协商IP地址呢?
主要分为两类:
1.IPCP-静态协商IP地址(互推地址,只能协商不能分配)
在NCP的Config-request里面推送IP地址
此过程是双向进行的,即R1向R2协商地址同时R2也会向R1协商地址
(1)经过前几个阶段的认证后(LCP、密码验证),进入NCP阶段R1会向R2发送包含自己IP地址的Request报文
(2)R2拿到R1的地址会对R1的地址进行合法检测(如是否冲突、是否位为空),检测通过后会在R2的路右边内生成一个32为主机路由,并向R1回复ACK报文进行确认
下面展示他的具体报文内容↓
在以太网中,两端地址必须处于同一网段才能通信
但是通过这种方法向对方推送,由于是直接生成一条32位的主机路由,因此即使不在一个网段,也是能互通的
静态的缺点:
可能形成环路,三层环路比二层环路隐蔽,他并不会在拓扑上呈现为一个环
如下就是一条环路
当我们用R1正常ping 12.1.1.2是正常的
但是我们ping 12.1.1.8 就会出现环路
会一直持续到TTL值超期
接下来我们查看路由表发现,当访问12.1.1.8时,R1从1口发出,R2收到又从2口发给R1
那如何避免这种问题呢?
这也就是PPP点到点链路和以太网的区别,在PPP成为点到点链路,顾名思义两端只连接两台设备,因此我们就要把掩码设置为30位让他只有一个可用地址,因为他也不需要更多地址,一端只能连接一台设备,上文也说到了,ppp链路两段即使不在一个网段也能相互通信,他就不应该设置为24位掩码
2.IPCP-动态协商IP地址(能够协商,也能够分配)
(1)R2需要配置地址池且R1开启获取地址功能,当收到request中IP地址为0.0.0.0时会认为他没有地址,拒绝本次链接,并通过拒绝报文NAK携带分给他的地址
(2)R1收到地址后重新发起request请求,R2拿到R1的地址会对R1的地址进行合法检测(如是否冲突、是否位为空),检测通过后会在R2的路右边内生成一个32为主机路由,并向R1回复ACK报文进行确认
配置示例:
R1的配置:
interface Serial4/0/1
ip address ppp-negotiate //地址设置为从邻居获取
分配端分为两种方式,直接在接口配置给对方的地址 or 从地址池中拿
R2的配置(直接分配):
interface Serial4/0/1
ip address 12.1.1.2 30 //设置自己的地址
remote address 12.1.1.1 //给对方的地址
R2的配置(地址池分配):
interface Serial4/0/1
ip address 12.1.1.2 30 //设置自己的地址
remote address chizi //只当拿地址的地址池
ip pool chizi
network 12.1.1.0 mask 24
由于存在IP推送机制,派生出一种借用IP地址的机制,能够节省地址
一般借用环回口
[PPP链路接口下] ip address unnumbered interface [接口号] //借用某接口的地址
可能有点不好理解,下面放一些模拟器中实际的路由表,颜色对应上图
红色的配置:
interface LoopBack0
ip address 1.1.1.1 30
interface Serial4/0/0
ip address unnumbered interface LoopBack0
interface Serial4/0/1
ip address unnumbered interface LoopBack0
蓝色的配置:
interface Serial4/0/0
ip address 2.2.2.2 30
绿色的配置:
interface Serial4/0/0
ip address 5.5.5.5 30
我们查看一下红色的接口信息,会发现有多个重复的地址
最后查看三台路由器的路由表
红:
蓝:
绿: