eNSP—BGP综合实验

实验需求

1、R2-R7每台路由器均存在一个环回接口用于建立邻居,同时还存在一个环回来代表连接用户的接口,最终这些连接用户的接口网络需要可以和R1和R8的环回通讯

2、AS2网段地址172.16.0.0/16  减少路由条目数量

实验拓扑

 

实验分析

这个拓扑图中想实现的功能就是AS2两边各有一个AS,AS2内部的的用户网段可以访问两边的域外路由;AS2中采用了联邦打破了BGP的水平分割,可以让每台路由器搬运路由,最终实现用户互访,在一个簇中,至少存在一个客户端,一个RR(路由反射器)

联邦:

将一个真实的大AS,逻辑的分为多个小AS;小AS的编号建议为私有编号;小AS间构建联邦内的EBGP邻居关系,可以向真实EBGP关系一样传递路由条目,但不修改属性; 对于该大AS外的其他AS,是不知道内部的小AS情况;

路由反射器:

3者构建一个簇;可以理解为RR为中心站点,客户端或非客户端是分支站点 ;RR从一台非客户端邻居处学习到的路由条目,可以传输给本地的客户端,其他EBGP邻居;不得传输给本地的其他非客户端;

AS2的ip地址规划

172.16.0.0/16

172.16.0.0/18 --- 备份

172.16.64.0/18   ---- 骨干
172.16.64.0/30   23网段
172.16.64.4/30      34
172.16.64.8/30      47
172.16.64.12/30    67
172.16.64.16/30    56
172.16.64.20/30    25

l0
172.16.128.0/18  --- 建邻环回
172.16.128.6/32   R2
172.16.128.1/32   R3
172.16.128.2/32   R4
172.16.128.3/32   R5
172.16.128.4/32   R6
172.16.128.5/32   R7

l1
172.16.192.0/18  --- 用户     
172.16.192.0/24    R2
172.16.193.0/24    R3
172.16.194.0/24    R4
172.16.195.0/24    R5
172.16.196.0/24    R6
172.16.197.0/24    R7

配置内容

根据上方ip规划配置ip

AS2内起OSPF

【R2】

[r2]ospf 1 router-id 2.2.2.2
[r2-ospf-1]area 0
[r2-ospf-1-area-0.0.0.0]network 172.16.64.1 0.0.0.0
[r2-ospf-1-area-0.0.0.0]network 172.16.128.6 0.0.0.0
[r2-ospf-1-area-0.0.0.0]network 172.16.192.1 0.0.0.0
[r2-ospf-1-area-0.0.0.0]network 172.16.64.21 0.0.0.0


【R3】

[r3]ospf 1 ro
[r3]ospf 1 router-id 3.3.3.3
[r3-ospf-1]area 0
[r3-ospf-1-area-0.0.0.0]network 172.16.64.2 0.0.0.0
[r3-ospf-1-area-0.0.0.0]network 172.16.64.5 0.0.0.0
[r3-ospf-1-area-0.0.0.0]network 172.16.128.1 0.0.0.0
[r3-ospf-1-area-0.0.0.0]network 172.16.193.1 0.0.0.0


【R4】

[r4]ospf 1 router-id 4.4.4.4
[r4-ospf-1]area 0
[r4-ospf-1-area-0.0.0.0]network 172.16.64.6 0.0.0.0
[r4-ospf-1-area-0.0.0.0]network 172.16.64.9 0.0.0.0
[r4-ospf-1-area-0.0.0.0]network 172.16.128.2 0.0.0.0
[r4-ospf-1-area-0.0.0.0]network 172.16.194.1 0.0.0.0

【R5】

[r5]ospf 1 router-id 5.5.5.5
[r5-ospf-1]area 0
[r5-ospf-1-area-0.0.0.0]network 172.16.64.22 0.0.0.0
[r5-ospf-1-area-0.0.0.0]network 172.16.64.17 0.0.0.0
[r5-ospf-1-area-0.0.0.0]network 172.16.128.3 0.0.0.0
[r5-ospf-1-area-0.0.0.0]network 172.16.195.1 0.0.0.0

【R6】

[r6]ospf 1 router-id 6.6.6.6
[r6-ospf-1]area 0
[r6-ospf-1-area-0.0.0.0]network 172.16.64.18 0.0.0.0
[r6-ospf-1-area-0.0.0.0]network 172.16.64.13 0.0.0.0
[r6-ospf-1-area-0.0.0.0]network 172.16.128.4 0.0.0.0
[r6-ospf-1-area-0.0.0.0]network 172.16.196.1 0.0.0.0

【R7】

[r7]ospf 1 router-id 7.7.7.7
[r7-ospf-1]area 0
[r7-ospf-1-area-0.0.0.0]network 172.16.64.14 0.0.0.0
[r7-ospf-1-area-0.0.0.0]network 172.16.64.10 0.0.0.0
[r7-ospf-1-area-0.0.0.0]network 172.16.128.5 0.0.0.0
[r7-ospf-1-area-0.0.0.0]network 172.16.197.1 0.0.0.0

disp ip ro pro ospf:查看路由表

 发现连接用户网段的变成了32为,所以要去R2-R7的int l1环回接口上ospf network-type broadcast更改网络类型

 

建立EBGP关系

R1和R2,直连建邻

【R1】


[r1]bgp 1
[r1-bgp]router-id 1.1.1.1
[r1-bgp]peer 12.1.1.2 as-number 2
[r1-bgp]peer 12.1.1.2 ebgp-max-hop 2


【R2】

[r2]bgp 64512
[r2-bgp]confederation id 2
[r2-bgp]peer 12.1.1.1 as-number 1
[r2-bgp]peer 12.1.1.1 ebgp-max-hop 2



R7和R8,直连建邻

【R7】
[r7]bgp 64513
[r7-bgp]router-id 7.7.7.7
[r7-bgp]confederation id 2
[r7-bgp]peer 78.1.1.2 as-number 3
[r7-bgp]peer 78.1.1.2 ebgp-max-hop 2



【R8】

[r8]bgp 3
[r8-bgp]router-id 8.8.8.8
[r8-bgp]peer 78.1.1.1 as-number 2    
[r8-bgp]peer 78.1.1.1 ebgp-max-hop 2

R2-R4使用联邦,虚拟AS号64512

【R2】
[r2]bgp 64512
[r2-bgp]confederation id 2
[r2-bgp]peer 172.16.128.1 as-number 64512
[r2-bgp]peer 172.16.128.1 next-hop-local
[r2-bgp]peer 172.16.128.1 connect-interface LoopBack 0


【R3】
[r3]bgp 64512
[r3-bgp]confederation id 2
[r3-bgp]peer 172.16.128.6 as-number 64512          
[r3-bgp]peer 172.16.128.6 next-hop-local
[r3-bgp]peer 172.16.128.6 connect-interface LoopBack 0

[r3-bgp]peer 172.16.128.2 as-number 64512              
[r3-bgp]peer 172.16.128.2 next-hop-local
[r3-bgp]peer 172.16.128.2 connect-interface LoopBack 0


【R4】
[r4]bgp 64512
[r4-bgp]confederation id 2
[r4-bgp]peer 172.16.128.1 as-number 64512
[r4-bgp]peer 172.16.128.1 next-hop-local
[r4-bgp]peer 172.16.128.1 connect-interface LoopBack 0

R5-R7使用联邦,虚拟AS号64513

【R5】
[r5]bgp 64513
[r5-bgp]confederation id 2
[r5-bgp]peer 172.16.128.4 as-number 64513
[r5-bgp]peer 172.16.128.4 next-hop-local
[r5-bgp]peer 172.16.128.4 connect-interface LoopBack 0


【R6】
[r6]bgp 64513
[r6-bgp]confederation id 2
[r6-bgp]peer 172.16.128.3 as-number 64513
[r6-bgp]peer 172.16.128.3 next-hop-local
[r6-bgp]peer 172.16.128.3 connect-interface LoopBack 0

[r6-bgp]peer 172.16.128.5 as-number 64513          
[r6-bgp]peer 172.16.128.5 next-hop-local
[r6-bgp]peer 172.16.128.5 connect-interface LoopBack 0

【R7】
[r7]bgp 64513
[r7-bgp]confederation id 2
[r7-bgp]peer 172.16.128.4 as-number 64513         
[r7-bgp]peer 172.16.128.4 next-hop-local
[r7-bgp]peer 172.16.128.4 connect-interface LoopBack 0

然后注意的是R2和R5,R4和R7需要建立联邦内的AS之间的邻居关系

【R2】
[r2]64512
[r2-bgp]confederation peer-as 64513
[r2-bgp]peer 172.16.128.3 as-number 64513
[r2-bgp]peer 172.16.128.3 ebgp-max-hop 2
[r2-bgp]peer 172.16.128.3 connect-interface LoopBack 0


【R5】
[r5]64513
[r5-bgp]confederation peer-as 64512
[r5-bgp]peer 172.16.128.6 as-number 64512
[r5-bgp]peer 172.16.128.6 ebgp-max-hop 2
[r5-bgp]peer 172.16.128.6 connect-interface LoopBack 0


【R4】
[r4]bgp 64512
[r4-bgp]confederation peer-as 64513                   
[r4-bgp]peer 172.16.128.5 as-number 64513
[r4-bgp]peer 172.16.128.5 ebgp-max-hop 2
[r4-bgp]peer 172.16.128.5 connect-interface LoopBack 0

【R7】
[r7]bgp 64513
[r7-bgp]confederation peer-as 64512
[r7-bgp]peer 172.16.128.2 as-number 64512
[r7-bgp]peer 172.16.128.2 ebgp-max-hop 2
[r7-bgp]peer 172.16.128.2 connect-interface LoopBack 0

配置R1的环回和R8的环回能够互访

R1的路由宣告

【R1】
[r1]bgp 1
[r1-bgp]network 1.1.1.1 32

R8的路由宣告

【R8】
[r1]bgp 3
[r1-bgp]network 8.8.8.8 32

R3做路由反射器,R4为客户端

[r3]bgp 64512           
[r3-bgp]peer 172.16.128.2 reflect-client 

R6做路由反射器,R7为客户端

[r6]bgp 64513
[r6-bgp]peer 172.16.128.5 reflect-client 

这样所有路由器都能学到R1的环回,并且还优

AS2的路由宣告自己的客户端网段

【R2】
[r2]bgp 64512
[r2-bgp]network 172.16.192.1 24

【R3】
[r3]bgp 64512
[r3-bgp]network 172.16.193.1 24

【R4】
[r4]bgp 64512
[r4-bgp]network 172.16.194.1 24

【R5】
[r5]bgp 64513
[r5-bgp]network 172.16.195.1 24

【R6】
[r6]bgp 64513
[r6-bgp]network 172.16.196.1 24

【R7】
[r7]bgp 64513
[r7-bgp]network 172.16.197.1 24

R1的BGP表

R8的BGP表

 

测试

R5的用户访问R1和R8的环回

其他也都能访问

 R1的环回访问R8的环回

<think>好的,用户问的是如何区分PC和H5获取录音权限。首先,我需要明确用户的需求。他们可能是在开发一个需要录音功能的Web应用,想要了解在桌面浏览器(PC)和移动浏览器(H5)上获取麦克风权限的不同方法。需要从技术实现、API使用、用户交互、兼容性等方面进行分析。 首先,回忆一下Web Audio API的相关知识。在Web开发中,获取用户麦克风权限通常使用navigator.mediaDevices.getUserMedia方法。这个方法在PC和移动端的基本调用方式是一样的,但实际应用中可能会有差异。需要分步骤说明两者的不同点。 接下来,权限请求的触发方式。在PC端,大多数浏览器要求用户必须在用户交互(比如点击事件)中触发权限请求,否则会被阻止。而在移动端,尤其是H5页面,可能同样需要用户交互,但不同移动浏览器的行为可能不同。需要确认这一点,是否有例外情况。 然后,用户提示的差异。PC端浏览器通常会在地址栏显示权限请求的图标,而移动端可能会以弹窗或底部提示的方式出现。这里可能需要具体举例,比如Chrome在PC和手机上的不同表现。 安全上下文的要求。无论是PC还是移动端,使用getUserMedia都需要在HTTPS环境下,本地开发环境(localhost)除外。这一点是否一致?需要确认。 设备检测方面,移动端可能需要处理更多设备适配问题,比如前后麦克风的选择,而PC端可能通常只有一个麦克风。但这里可能需要更准确的描述,比如移动设备可能有多个麦克风,但通常由系统管理,而开发者可能不需要特别处理。 兼容性问题。需要列举不同浏览器在PC和移动端对录音权限的支持情况。比如Safari在iOS上的限制,或者某些安卓浏览器的不同行为。 接下来,代码示例部分。需要提供一个基本的请求麦克风权限的代码示例,并指出在PC和H5中的注意事项。比如在移动端可能需要处理自动播放策略,或者用户拒绝后的不同处理方式。 另外,权限持久化方面,PC端浏览器可能会记住用户的选择,而移动端可能每次都需要重新请求,或者有不同的会话管理方式。需要确认不同浏览器的具体行为。 最后,总结关键点,帮助用户区分两者的主要差异,比如触发方式、用户提示、兼容性处理等。确保回答结构清晰,步骤明确,用户能够逐步理解和应用。 需要验证一些不确定的点,比如移动端是否真的每次都需要用户交互触发,或者不同浏览器是否有不同的策略。例如,iOS上的Safari对getUserMedia的调用是否有严格的用户手势要求,而Chrome on Android是否允许在某些情况下自动触发。此外,权限请求的UI展示在不同平台上的具体表现,可能需要进一步查证。 另外,设备检测方面,是否需要使用mediaDevices.enumerateDevices来列出麦克风设备,这在移动端是否有必要,或者是否通常只有一个可用麦克风。这部分可能需要简化,避免复杂化问题。 最后,确保回答符合用户可见层的要求,结构清晰,逐步解决问题,并且内容真实可靠。避免技术错误,比如错误的API名称或不兼容的浏览器示例。</think>区分PC端和移动端H5获取录音权限的实现差异,主要涉及浏览器API调用方式、用户交互流程及兼容性处理。以下是关键点分析: --- ### **一、核心API调用** 无论PC或H5均使用Web API `navigator.mediaDevices.getUserMedia()`,但实现细节不同: ```javascript // 通用代码框架 async function requestMicrophone() { try { const stream = await navigator.mediaDevices.getUserMedia({ audio: true }); // 成功获取音频流 } catch (error) { // 处理权限拒绝或错误 } } ``` --- ### **二、用户交互差异** | **场景** | **PC端** | **H5(移动端)** | |----------------|----------------------------------------|---------------------------------------| | **触发条件** | 需用户主动交互(如点击按钮) | 同样需用户手势触发,部分浏览器更严格 | | **权限弹窗** | 浏览器顶部地址栏提示 | 系统级弹窗或底部提示栏 | | **持久化策略** | 浏览器可记住用户选择 | 部分移动浏览器每次刷新需重新授权 | --- ### **三、兼容性注意事项** 1. **PC端重点问题** - 旧版Edge/Firefox 需处理 `getUserMedia` 前缀 - Safari 要求 HTTPS 环境 2. **H5移动端特殊处理** - **iOS Safari**:首次拒绝后需手动开启(设置 > Safari > 麦克风) - **微信浏览器**:需配置JS接口安全域名 - **安卓WebView**:需应用层声明录音权限 --- ### **四、关键代码适配技巧** 1. **检测设备类型** ```javascript const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); ``` 2. **错误处理优化** ```javascript catch (error) { if (error.name === 'NotAllowedError') { // 提示用户手动开启权限 if (isMobile) alert('请前往系统设置启用麦克风权限'); } } ``` 3. **自动播放策略(H5重点)** ```javascript // 移动端需在用户交互后立即播放音频,避免静音阻塞 audioElement.play().catch(() => { /* 处理自动播放失败 */ }); ``` --- ### **五、调试建议** 1. **PC端**:使用Chrome `chrome://settings/content/microphone` 管理权限 2. **H5移动端**: - Android Chrome:长按页面 > 站点设置 - iOS Safari:需完全关闭页面后重新进入 --- ### **总结** - **本质相同**:均依赖 `getUserMedia` API,但交互流程和系统限制不同 - **核心差异**:移动端涉及更多系统级权限管控和浏览器兼容问题 - **适配关键**:结合设备检测优化提示逻辑,优先在HTTPS环境部署
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值