求助 有个android手机建立热点后发送组播信息的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求助 有个android手机建立热点后发送组播信息的问题相关的知识,希望对你有一定的参考价值。
MulticastSocket multicastSocket=new MulticastSocket(9898);
String BROADCAST_IP =
"224.0.0.0";
InetAddress
serverAddress = InetAddress.getByName(BROADCAST_IP);
byte
data[] = BROADCAST_IP.getBytes();
DatagramPacket mPackage = new DatagramPacket (data , data.length ,
serverAddress , 9898);
multicastSocket.joinGroup(serverAddress);
multicastSocket.joinGroup(serverAddress);就会报错java.net.SocketException:
setsockopt failed: ENODEV (No such device)
由于java 每次GC时,垃圾回收器会将session重用中的ParcelFileDescriptor
参数被回收,导致push连接的SSLsocket成为假连接,此时socket.isConnected()=true。但是实际上socket连接已经成为不可用的或者说是坏掉的,合理保存下次参数再在下次使用就可以了。 参考技术A 什么?
OSPF
NP—OSPFOSPF--属于IGP--属于公有协议--属于链路状态协议
什么叫做链路状态协议?
链路:加入OSPF的接口以及接口的简要信息
状态:有哪些OSPF的邻居
链路状态协议在发送路由更新的时候发送的就是链路以及状态的信息
OSPF是通过什么方式来发送路由更新的?
先加入组播224.0.0.5中发送hello报文,数据匹配后建立邻居关系,并且向组播地址中通告与自己相连的网段。
OSPF的组播地址:224.0.0.5和224.0.0.6
224.0.0.5--所有OSPF路由器都会加入
224.0.0.6--只有DR/BDR才会 加入
链路状态协议具有同步的概念,所以网络中的设备都对网络的认知都是一样的。
OSPF路由器,都会有自己的ID
RID——Router ID——路由器ID
Router ID:是用于唯一标识网络中每台OSPF路由器
RID的来源
①通过手动指定,手动指定的RID是具有最高的优先级的,并且是不会随网路拓扑的更新而发生变化。
②回环接口,如果没有手动指定的RID那么就会选择其回环接口的IP地址作为RID,并且也是越大越优先。
③如果没有手动指定,也没有回环接口作为RID,那么就选择双UP的物理接口的IP地址作为RID,并且也是越大越好。
OSPF的三五七
三张表:邻居表,拓扑表,路由表
①邻居表
加入组播地址的OSPF路由器会发送和接收Hello报文,如果邻居建立的前提都有满足时,双方会建立邻居关系,就会把对方的RID以及Hello包的接收接口关联起来形成邻居表。
IOU1#show ip ospf neighbor--查看邻居表
邻居建立的前提:
a.hello间隔要一致
b.认证类型要一致
c.区域ID要一致
d.特殊区域要一致
②拓扑表
也叫链路状态数据库,建立邻居后,邻居之间会相互发送LSA(链路状态通告),并且OSPF路由器会将这些通告信息汇总成一张拓扑表,最后每一台OSPF路由器的链路状态数据库会同步。
IOU1#show ip ospf database --查看拓扑表
③路由表
会根据拓扑表中的链路状态信心,通过SPF算法选出最优的路径,存入路由表中。
IOU1#show ip route ospf --查看路由表
SPF算法:以自己为准,构建一棵最短路径树,选择最优路径加表。
OSPF衡量一条最优路径的方法?
从源到目的,路径上所有出站接口的开销总和。越小越优先
OSPF接口开销的计算:10^8/接口带宽
开销的更改:手动更改
①可以通过更改带宽来更改开销。但一般不建议用这种方法,因为接口的带宽不仅仅会影响OSPF的开销计算,也会影响eigrp 的度量值的度量值计算有关。
IOU1(config-if)#bandwidth n
②可以通过直接进入接口更改OSPF的开销。一般会选择这种方法。
IOU1(config-if)#ip ospf cost 20
五个报文:Hello报文,DBD报文,LSR报文,LSU报文,LSAKC报文
Hello报文:用于发现,建立和维持邻居关系。包含:版本,RID,认证类型-密码,hello时间10s,死亡事件40s,优先级,组播地址
DBD报文:也叫做数据库摘要,用于发送LSA。包括
I:Init--初始位,置为1时代表这是该路由的第一个DBD报文。
M:More--后继位,置为1时,代表后续还有DBD报文,,置为0时代表后续没有DBD报文。
MS:Master/Slaver--主从位,置为1时代表该路由器是一个“主”,置为0时,代表该路由器是一个“从”。
主从的选举是根据比较RID的大小来确定的,RID较大的成为主。
LSR:链路状态请求包--用于请求详细的LSA信息。只有主会发送
LSU:链路状态回复包--用于回应LSR,主和从都会发送。
LSAck:链路状态确认包--ospf对于每一个发送给自己的LSU都会对其进行确认。其实ospf就是通过该报文来保证路由更新的可靠性。
七个状态:Down,Init,2-way,Exstart, Exchange,Loding,Full
①Down:断开状态,检测不到ospf的hello。有可能是因为接口松动或者重置了ospf的进程。
②Init:初始状态,启用了ospf的路由器就会开始往组播地址发送hello报文,并且会接收到对方的hello报文。
③2-way:双向通信状态,启用了ospf协议的路由会往组播地址发送hello包,同时也会接收到对方的hello包,此时如果符合条件,那么路由器就会把对方的RID加入自己的hello包中并且发送出去;如果对方同样把自己的RID加入其hello中发送出来,那么双方就形成了一种双向通信的“好朋友关系”---邻居
④Exstart:交换初始状态,双方拟定需要交换的信息,选举出主,由“主”来主导此次交换过程。
⑤Exchange:交换状态,双方一开始不会交换完整的信息,而是会交换数据库摘要信息。此时从会优先把自己的信息发送给主,主接收到信息以后会对照自己的数据库信息,如果数据库存在相应的信息,那么就直接忽略;如果数据库不存在相应的信息,那么主就会向通发送LSR请求详细的LSA信息。此时,为了保证数据库的同步,主也会把从没有的信息通过LSU发送给从。
⑥Loading:加载状态,加载LSA
⑦Full:完全邻接状态,到达这一步以后,双方已经达成了链路状态数据库的同步。
特殊状态:
⑧ATTEMPT:尝试状态,只会出现在非广播多路访问环境中,想要和对方建立邻居,但是不知道该如何发包。
OSPF的区域
为什么要划分区域?
ospf是一个链路状态协议,需要进行链路状态数据库的同步。所以需要管理庞大的链路状态信息,并且运行复杂的SPF算法,因此会对设备的CPU造成很大的消耗,对设备的性能也是很大的损耗。所以提出了区域的概念,将一整个大的ospf路由域划分成多个比较小的区域,每隔区域中的路由器只需要管理本区域内部的链路状态信息。不同的区域之间的路由器是通过传递发送路由的形式来进行数据的传递。类似于距离矢量协议。
ospf的区域划分:采用层级的方式进行划分
骨干区域:区域0
非骨干区域:除了区域0以外的其他所有区域
ospf对于区域的要求?
1、要求非骨干区域一定要与骨干区域相连
2、骨干区域与骨干区域之间一定要直连
ospf的路由器类型
ABR:区域边界路由器,连接两个不同的区域,其中一个必须是区域0
ASBR:自治系统边界路由器,连接ospf路由域和其他外部路由协议的路由器,负责将外部的路由信息注入ospf路由域,同时将ospf的路由信息传递给外部的路由协议。---重分发
IR:普通路由器,位于同一个区域内的路由器,该路由器上的所有接口都属于同一个区域。
基本配置:
IOU1(config)#router ospf 1--创建一个ospf进程,进程号是1--1只在本地有意义
IOU1(config-router)#router-id 1.1.1.1--手动指定RID
IOU1(config-router)#network 192.168.12.0 0.0.0.255 area 0--后面必须跟上区域
距离矢量协议和链路状态协议network的含义:
距离矢量协议的network是将一个网段通告进路由进程;链路状态协议的network是规定一个网段,路由器上属于该网段IP地址的接口就会划分成进ospf进程的相应区域里面。
IOU1(config-router)#int e0/0
IOU1(config-if)#ip ospf 1 area 1 --基于接口的命令比基于进程下的命令具有更高的优先级。
查看命令:
IOU1#show int e0/0
IOU3#show ip ospf interface loopback 0
IOU1# show ip ospf
IOU1#clear ip ospf process --重置路由进程
Reset ALL OSPF processes? [no]: y
既然OSPF要划分区域,肯定要选举DR和BDR
DR:指定路由器
BDR:备份指定路由器
DR/BDR的选举:是在一条以太网链路上进行选举--ospf的DR并不是常理上的选举得到,应该是由BDR晋升来。网络中首先会选举出BDR,等到BDR晋升成为DR以后才会继续选举出新的BDR。
选举规则:
①先比较接口优先级(针对以太网链路来说,默认的接口优先级是1;针对串行链路来说默认的接口优先级是0--代表不参与DR/BDR的选举),优先级大的成为DR/BDR。
IOU1(config-if)# ip ospf priority n --更改ospf的接口优先级
②如果优先级一致的话,比较双方的RID大小,同样是大的成为DR/BDR
注意:DR/BDR的选举是非抢占,网络中经过40s的等待时间选举出DR/BDR之后,已经处于稳定状态,此时就算有优先级更高的路由器加入该网络中也不会马上抢占原本DR的地位,除非重置ospf的进程--clear ip ospf process--y
OSPF的网络类型--ospf可以根据链路类型来区分网络类型
①串行链路:网络类型是点对点(P2P),点对点链路是不需要进行DR/BDR的选举,会发送组播的hello报文,hello时间是10s。
②以太网链路:网络类型是广播多路访问环境(MA),MA的网络环境需要进行DR/BDR的选举,会发送组播的hello报文,hello时间是10s。
③回环接口:网络类型是loopback,回环接口被认为是一种主机接口,所以邻居学习到的回环接口的路由信息默认都是/32位。
Loopback interface is treated as a stub Host--回环接口被认为是一种末节的主机。
影响:在网路中有可能因为掩码的不一致而导致通信障碍。
解决方案:
1、将回环接口的地址配置成32,这样双方的信息一致。
2、更改接口的网络类型
IOU1(config-if)#ip ospf network point-to-point
④非广播多路访问环境:早期的一些技术,帧中继、ATM,需要进行DR/BDR的选举,但是不会发送组播的hello报文。但是可以通过单播指定。
IOU2(config-router)#neighbor 192.168.12.1--单播指定邻居
注意:
ospf的网络类型和邻居的建立没有必然的联系,只要满足邻居建立的四个条件就可以建立邻居;
ospf的路由学习与网络类型有必然的联系,不一致的网络类型无法相互学习路由。
OSPF的LSA---链路状态通告有以下五种类型。
LSA1:IOU1#show ip ospf database router
名称:Router Link States ---路由器的LSA
内容:本区域内部的链路以及状态的信息
作用:构建本区域内的链路状态数据库,通过链路状态数据库来得到路由信息。
通告者:本区域内的所有路由器
传播范围:仅限于本区域内部
LSA2:IOU1#show ip ospf database network
名称: Net Link States--网络的LSA
内容:多路访问环境的网段和子网掩码,以及加入多路访问的邻居路由器
作用:结合1类LSA,共同描述本区域内部的链路状态信息
通告者:多路访问环境的DR
传播范围:仅限于本区域内
LSA3:IOU1#show ip ospf database summary
名称: Summary Net Link States--汇总的LSA
内容:本区域外的路由信息
作用:通告本区域内的路由信息以LSA3的形式,实现其他区域能够学习到本区域内部的路由信息,同时本区域也可以学习到其他区域的路由信息。
通告者:ABR
传播范围:整个ospf路由域
LSA4:IOU1# show ip ospf database asbr-summary
名称:Summary ASB Link States--汇总的ASBR LSA
内容:ABR到ASBR的开销
作用:告诉内部的路由器该如何到达ASBR
通告者:ABR
传播范围:除了起源区域以外的其他ospf区域。起源区域--ASBR所在的区域
LSA5:IOU1# show ip ospf database external
名称:Type-5 AS External Link States--外部的LSA
内容:ospf路由域外的路由信息
作用:实现ospf路由域外部的路由信息注入ospf路由域,同时也可以让其他的路由协议学习到ospf的路由信息。
通告者:ASBR
传播范围:整个ospf路由域
ospf的路由类型:
O:同一个区域内学习到的路由条目
O IA:不同区域间学习到的路由条目
O E2/E1:ospf外部学习到的路由条目
O E2/E1的区别:O E2是从外部学习到路由信息的时候,开销是保持不变的,默认都是20;O E1是从外部学习到路由信息的时候,开销是累加的。--默认的开销类型是O E2。
①IOU3(config-router)# redistribute rip subnets metric-type 1--将rip重分发进ospf的时候更改默认的开销类型是0 E1。
②IOU3(config-router)#redistribute rip subnets metric 40--将rip重分发进ospf的时候更改默认的开销是40
以上是关于求助 有个android手机建立热点后发送组播信息的问题的主要内容,如果未能解决你的问题,请参考以下文章