java代码实现网桥 java基于nio网络编程代码( 二 )


2,H3主机向H5主机发送数据帧 。首先看网桥B1,网桥B1从其接口2收到这个数据帧 。网桥B1的转发表中没有H3,因此在B1的转发表中写入地址H3 和接口2 。再查找目的地址H5 。现在网桥B1的转发表中可以查询到H5 , 其转发的接口是2,和这个帧进入网桥B1的接口一样 。于是网桥B1知道,不用自己转发这个?。琀5也能收到H3发送的帧 。于是网桥B1把这个帧丢弃,不再继续转发了 。再看网桥B2,网桥B2从其借口1 收到这个帧 。网桥B2的转发表中没有H3 , 因此在B2的转发表中写入地址H3 和接口 1 。再查找目的地址H5 。现在网桥B2的转发表中可以查询到H5 , 其转发的接口是 2  , 于是网桥B2直接将这个帧从接口2 转发出去 。
3,H6主机向H5主机发送数据帧 。首先看网桥B2 , 网桥B2从其接口2 收到这个数据帧 。网桥B2的转发表中没有H6,因此在B2的转发表中写入地址H6和接口 2 。再查找目的地址H5 。现在网桥B2的转发表中可以查询到H5,其转发的接口是2,和这个帧进入网桥B2的接口一样 。于是网桥B2知道,不用自己转发这个帧,H5也能收到H6发送的帧 。于是网桥B2把这个帧丢弃,不再继续转发了 。再看网桥B1,其根本不会收到H6主机向H5发送的数据?。圆换嵊腥魏纹渌僮?。
PS:在网桥的转发表中写入的信息除了地址和接口外,还有帧进入该网桥的时间 。网桥中的接口管理软件周期性的扫描转发表中的项目 。只要在一定时间以前登记的都要删除 。这样就使得网桥中的转发表能反映当前网络的最新拓扑状态 。还有一点网桥是一种工作在数据链路层的网络设备,它能对于接收到的数据帧进行有条件的转发并且能隔离冲突域 。
运行时可调用浏览器打开一个网页,网页地址在代码中的java代码怎么写?网页地址在代码中的java代码写法如下:
packagecom.test;
importjava.lang.reflect.Method;
//实现打开浏览器并跳到指定网址的类
publicclassBareBonesBrowserLaunch{
publicstaticvoidopenURL(Stringurl){
try{
browse(url);
}catch(Exceptione){
}
}
privatestaticvoidbrowse(Stringurl)throwsException{
//获取操作系统的名字
StringosName=System.getProperty("os.name","");
if(osName.startsWith("MacOS")){
//苹果的打开方式
ClassfileMgr=Class.forName("com.apple.eio.FileManager");
MethodopenURL=fileMgr.getDeclaredMethod("openURL",newClass[]{String.class});
openURL.invoke(null,newObject[]{url});
}elseif(osName.startsWith("Windows")){
【java代码实现网桥 java基于nio网络编程代码】//windows的打开方式 。
Runtime.getRuntime().exec("rundll32url.dll,FileProtocolHandler"+url);
}else{
//UnixorLinux的打开方式
String[]browsers={"firefox","opera","konqueror","epiphany","mozilla","netscape"};
Stringbrowser=null;
for(intcount=0;countbrowsers.lengthbrowser==null;count++)
//执行代码,在brower有值后跳出,
//这里是如果进程创建成功了,==0是表示正常结束 。
if(Runtime.getRuntime().exec(newString[]{"which",browsers[count]}).waitFor()==0)
browser=browsers[count];
if(browser==null)
thrownewException("Couldnotfindwebbrowser");
else
//这个值在上面已经成功的得到了一个进程 。
Runtime.getRuntime().exec(newString[]{browser,url});
}
}
}
//主方法测试类
publicstaticvoidmain(String[]args){
Stringurl="";
BareBonesBrowserLaunch.openURL(url);
}
用Java实现生成树协议 快速生成树协议(RSTP)STP并不是已经淘汰不用java代码实现网桥,实际上不少厂家目前还仅支持STP 。STP的最大缺点就是java代码实现网桥他的收敛时间太长,对于现在网络要求靠可靠性来说 , 这是不允许的,快速生成树的目的就是加快以太网环路故障收敛的速度 。1.RSTP 5种端口类型STP定义java代码实现网桥了4种不同的端口状态,监听(Listening),学习(Learning) , 阻断(Blocking)和转发(Forwarding),其端口状态表现为在网络拓扑中端口状态混合(阻断或转发),在拓扑中的角色(根端口、指定端口等等) 。在操作上看,阻断状态和监听状态没有区别,都是丢弃数据帧而且不学习MAC地址,在转发状态下,无法知道该端口是根端口还是指定端口 。表8-20中看RSTP的端口状态只有三种状态,Discarding、Leaning和Forwarding 。表8-20 STP和RSTP端口状态比较RSTP有五种端口类型 。根端口和指定端口这两个角色在RSTP中被保留,阻断端口分成备份和替换端口角色 。生成树算法(STA)使用BPDU来决定端口的角色,端口类型也是通过比较端口中保存的BPDUB来确定哪个比其java代码实现网桥他的更优先 。1)根端口非根桥收到最优的BPDU配置信息的端口为根端口,即到根桥开销最小的端口 , 这点和STP一样 。请注意图8-16上方的交换机 , 根桥没有根端口 。按照STP的选择根端口的原则,SW-1和SW-2和根连接的端口为根端口 。2)指定端口与STP一样,每个以太网网段段内必须有一个指定端口 。假设SW-1的BID比SW-2 优先,而且SW-1的P1口端口ID比P2优先级高,那么P1为指定端口,如图8-17所示 。图8-16 RSTP根端口图8-17 指定端口的选择3)替换端口如果一个端口收到另外一个网桥的更好的 BPDU , 但不是最好的,那么这个端口成为替换端口,如图8-18所示 。对于SW-2来说 , 端口P3收到的BPDU比自己优先,自己为次优先,P3为替换端口 。4)备份端口如果一个端口收到同一个网桥的更好 BPDU , 那么这个端口成为备份端 。当两个端口被一个点到点链路的一个环路连在一起时,或者当一个交换机有两个或多个到共享局域网段的连接时,一个备份端口才能存在 。如图8-19所示,SW-1的P1和P2口同时接入到以太网的同一网段,P1为指定端口,P2 优先级低,则P2端口为备份端口 。图8-18 替换端口的选择图8-19 备份端口的选择5)禁用端口在快速生成树协议应用的网络运行中不担当任何角色 。2.BPDU更新与变化RSTP添加标志位 , 如图8-20所示 。在STP中,标志位只有0为TC和7为TCA使用,RSTP使用其中保留的6位 。另外,RSTP在BPDU指定java代码实现网桥了端口的角色和端口状态,并且采用提议/同意的控制机制 。具体 参考 下

推荐阅读