介绍

拓扑如下:

在该环境下,假设H1 ping H4,初始的路由规则是S1-S2-S5,一秒后,路由转发规则变为S1-S3-S5,再过一秒,规则变为S1-S4-S5,然后再回到最初的转发规则S1-S2-S5。通过这个循环调度的例子动态地改变交换机的转发规则。


pox脚本

pox脚本lab_controller.py

不得不说这脚本问题是真的多。

 from pox.core import core

 import pox.openflow.libopenflow_01 as of

 from pox.lib.util import dpidToStr

 from pox.lib.addresses import IPAddr, EthAddr

 from pox.lib.packet.arp import arp

 from pox.lib.packet.ethernet import ethernet, ETHER_BROADCAST

 from pox.lib.packet.packet_base import packet_base

 from pox.lib.packet.packet_utils import *

 import pox.lib.packet as pkt

 from pox.lib.recoco import Timer

 import time

 log = core.getLogger()

 s1_dpid = 0

 s2_dpid = 0

 s3_dpid = 0

 s4_dpid = 0

 s5_dpid = 0

 s1_p1 = 0

 s1_p4 = 0

 s1_p5 = 0

 s1_p6 = 0

 s2_p1 = 0

 s3_p1 = 0

 s4_p1 = 0

 pre_s1_p1 = 0

 pre_s1_p4 = 0

 pre_s1_p5 = 0

 pre_s1_p6 = 0

 pre_s2_p1 = 0

 pre_s3_p1 = 0

 pre_s4_p1 = 0

 turn = 0

 def getTheTime():  # fuction to create a timestamp

     flock = time.localtime()

     then = "[%s-%s-%s" % (str(flock.tm_year),
str(flock.tm_mon), str(flock.tm_mday)) if int(flock.tm_hour) < 10: hrs = "0%s" % (str(flock.tm_hour)) else: hrs = str(flock.tm_hour) if int(flock.tm_min) < 10: mins = str(flock.tm_min) secs = "0%s" % (str(flock.tm_sec)) else: secs = str(flock.tm_sec) then += "]%s.%s.%s" % (hrs, mins, secs) return then def _timer_func():
global s1_dpid, s2_dpid, s3_dpid, s4_dpid, s5_dpid, turn # print getTheTime(), "sent the port stats request to s1_dpid" if turn == 0:
msg = of.ofp_flow_mod() msg.command = of.OFPFC_MODIFY_STRICT msg.priority = 100 msg.idle_timeout = 0 msg.hard_timeout = 0 msg.match.dl_type = 0x0800 msg.match.nw_dst = "10.0.0.4" msg.actions.append(of.ofp_action_output(port=5)) core.openflow.getConnection(s1_dpid).send(msg) turn = 1 return if turn == 1:
msg = of.ofp_flow_mod() msg.command = of.OFPFC_MODIFY_STRICT msg.priority = 100 msg.idle_timeout = 0 msg.hard_timeout = 0 msg.match.dl_type = 0x0800 msg.match.nw_dst = "10.0.0.4" msg.actions.append(of.ofp_action_output(port=6)) core.openflow.getConnection(s1_dpid).send(msg) turn = 2
return if turn == 2:
msg = of.ofp_flow_mod() msg.command = of.OFPFC_MODIFY_STRICT msg.priority = 100 msg.idle_timeout = 0 msg.hard_timeout = 0 msg.match.dl_type = 0x0800 msg.match.nw_dst = "10.0.0.4" msg.actions.append(of.ofp_action_output(port=4)) turn = 0 return def _handle_portstats_received(event):
global s1_p1, s1_p4, s1_p5, s1_p6, s2_p1, s3_p1, s4_p1 global pre_s1_p1, pre_s1_p4, pre_s1_p5, pre_s1_p6, pre_s2_p1, pre_s3_p1, pre_s4_p1 if event.connection.dpid == s1_dpid: for f in event.stats: if int(f.port_no) < 65534: if f.port_no == 1:
pre_s1_p1 = s1_p1 s1_p1 = f.rx_packets if f.port_no == 4:
pre_s1_p4 = s1_p4 s1_p4 = f.tx_packets # s1_p4=f.tx_bytes if f.port_no == 5:
pre_s1_p5 = s1_p5 s1_p5 = f.tx_packets if f.port_no == 6:
pre_s1_p6 = s1_p6 s1_p6 = f.tx_packets for f in event.stats: if int(f.port_no) < 65534: if f.port_no == 1:
pre_s2_p1 = s2_p1 s2_p1 = f.rx_packets # s2_p1=f.rx_bytes if event.connection.dpid == s3_dpid: for f in event.stats: if int(f.port_no) < 65534: if f.port_no == 1:
pre_s3_p1 = s3_p1 s3_p1 = f.rx_packets if event.connection.dpid == s4_dpid: for f in event.stats: if int(f.port_no) < 65534: if f.port_no == 1:
pre_s4_p1 = s4_p1 s4_p1 = f.rx_packets def _handle_ConnectionUp(event):
global s1_dpid, s2_dpid, s3_dpid, s4_dpid, s5_dpid print "ConnectionUp: ", dpidToStr(event.connection.dpid) # remember the connection dpid for switch for m in event.connection.features.ports: if m.name == "s1-eth1": s1_dpid = event.connection.dpid print "s1_dpid=", s1_dpid elif m.name == "s2-eth1": s2_dpid = event.connection.dpid print "s2_dpid=", s2_dpid elif m.name == "s3-eth1": s3_dpid = event.connection.dpid print "s3_dpid=", s3_dpid elif m.name == "s4-eth1": s4_dpid = event.connection.dpid print "s4_dpid=", s4_dpid elif m.name == "s5-eth1": s5_dpid = event.connection.dpid print "s5_dpid=", s5_dpid if s1_dpid <> 0 and s2_dpid <> 0 and s3_dpid <> 0 and s4_dpid <> 0:
Timer(1, _timer_func, recurring=True) def _handle_PacketIn(event):
global s1_dpid, s2_dpid, s3_dpid, s4_dpid, s5_dpid packet = event.parsed if event.connection.dpid == s1_dpid: a = packet.find('arp') if a and a.protodst == "10.0.0.4":
msg = of.ofp_packet_out(data=event.ofp) msg.actions.append(of.ofp_action_output(port=4)) event.connection.send(msg) if a and a.protodst == "10.0.0.5":
msg = of.ofp_packet_out(data=event.ofp) msg.actions.append(of.ofp_action_output(port=5)) event.connection.send(msg) if a and a.protodst == "10.0.0.6":
msg = of.ofp_packet_out(data=event.ofp) msg.actions.append(of.ofp_action_output(port=6)) event.connection.send(msg) if a and a.protodst == "10.0.0.1":
msg = of.ofp_packet_out(data=event.ofp) msg.actions.append(of.ofp_action_output(port=1)) event.connection.send(msg) if a and a.protodst == "10.0.0.2":
msg = of.ofp_packet_out(data=event.ofp) msg.actions.append(of.ofp_action_output(port=2)) event.connection.send(msg) if a and a.protodst == "10.0.0.3":
msg = of.ofp_packet_out(data=event.ofp) msg.actions.append(of.ofp_action_output(port=3)) event.connection.send(msg) msg = of.ofp_flow_mod() msg.priority = 100 msg.idle_timeout = 0 msg.hard_timeout = 0 msg.match.dl_type = 0x0800 msg.match.nw_dst = "10.0.0.1" msg.actions.append(of.ofp_action_output(port=1)) event.connection.send(msg) msg = of.ofp_flow_mod() msg.priority = 100 msg.idle_timeout = 0 msg.hard_timeout = 0 msg.match.dl_type = 0x0800 msg.match.nw_dst = "10.0.0.2" msg.actions.append(of.ofp_action_output(port=2)) event.connection.send(msg) msg = of.ofp_flow_mod() msg.priority = 100 msg.idle_timeout = 0 msg.hard_timeout = 0 msg.match.dl_type = 0x0800 msg.match.nw_dst = "10.0.0.3" msg.actions.append(of.ofp_action_output(port=3)) event.connection.send(msg) msg = of.ofp_flow_mod() msg.priority = 100 msg.idle_timeout = 0 msg.hard_timeout = 1 msg.match.dl_type = 0x0800 msg.match.nw_dst = "10.0.0.4" msg.actions.append(of.ofp_action_output(port=4)) event.connection.send(msg) msg = of.ofp_flow_mod() msg.priority = 100 msg.idle_timeout = 0 msg.hard_timeout = 0 msg.match.dl_type = 0x0800 msg.match.nw_dst = "10.0.0.5" msg.actions.append(of.ofp_action_output(port=5)) event.connection.send(msg) msg = of.ofp_flow_mod() msg.priority = 100 msg.idle_timeout = 0 msg.hard_timeout = 0 msg.match.dl_type = 0x0800 msg.match.nw_dst = "10.0.0.6" msg.actions.append(of.ofp_action_output(port=6)) event.connection.send(msg) elif event.connection.dpid == s2_dpid: msg = of.ofp_flow_mod() msg.priority = 10 msg.idle_timeout = 0 msg.hard_timeout = 0 msg.match.in_port = 1 msg.match.dl_type = 0x0806 msg.actions.append(of.ofp_action_output(port=2)) event.connection.send(msg) msg = of.ofp_flow_mod() msg.priority = 10 msg.idle_timeout = 0 msg.hard_timeout = 0 msg.match.in_port = 1 msg.match.dl_type = 0x0800 msg.actions.append(of.ofp_action_output(port=2)) event.connection.send(msg) msg = of.ofp_flow_mod() msg.priority = 10 msg.idle_timeout = 0 msg.hard_timeout = 0 msg.match.in_port = 2 msg.match.dl_type = 0x0806 msg.actions.append(of.ofp_action_output(port=1)) event.connection.send(msg) msg = of.ofp_flow_mod() msg.priority = 10 msg.idle_timeout = 0 msg.hard_timeout = 0 msg.match.in_port = 2 msg.match.dl_type = 0x0800 msg.actions.append(of.ofp_action_output(port=1)) event.connection.send(msg) elif event.connection.dpid == s3_dpid: msg = of.ofp_flow_mod() msg.priority = 10 msg.idle_timeout = 0 msg.hard_timeout = 0 msg.match.in_port = 1 msg.match.dl_type = 0x0806 msg.actions.append(of.ofp_action_output(port=2)) event.connection.send(msg) msg = of.ofp_flow_mod() msg.priority = 10 msg.idle_timeout = 0 msg.hard_timeout = 0 msg.match.in_port = 1 msg.match.dl_type = 0x0800 msg.actions.append(of.ofp_action_output(port=2)) event.connection.send(msg) msg = of.ofp_flow_mod() msg.priority = 10 msg.idle_timeout = 0 msg.hard_timeout = 0 msg.match.in_port = 2 msg.match.dl_type = 0x0806 msg.actions.append(of.ofp_action_output(port=1)) event.connection.send(msg) msg = of.ofp_flow_mod() msg.priority = 10 msg.idle_timeout = 0 msg.hard_timeout = 0 msg.match.in_port = 2 msg.match.dl_type = 0x0800 msg.actions.append(of.ofp_action_output(port=1)) event.connection.send(msg) elif event.connection.dpid == s4_dpid: msg = of.ofp_flow_mod() msg.priority = 10 msg.idle_timeout = 0 msg.hard_timeout = 0 msg.match.in_port = 1 msg.match.dl_type = 0x0806 msg.actions.append(of.ofp_action_output(port=2)) event.connection.send(msg) msg = of.ofp_flow_mod() msg.priority = 10 msg.idle_timeout = 0 msg.hard_timeout = 0 msg.match.in_port = 1 msg.match.dl_type = 0x0800 msg.actions.append(of.ofp_action_output(port=2)) event.connection.send(msg) msg = of.ofp_flow_mod() msg.priority = 10 msg.idle_timeout = 0 msg.hard_timeout = 0 msg.match.in_port = 2 msg.match.dl_type = 0x0806 msg.actions.append(of.ofp_action_output(port=1)) event.connection.send(msg) msg = of.ofp_flow_mod() msg.priority = 10 msg.idle_timeout = 0 msg.hard_timeout = 0 msg.match.in_port = 2 msg.match.dl_type = 0x0800 msg.actions.append(of.ofp_action_output(port=1)) event.connection.send(msg) elif event.connection.dpid == s5_dpid: a = packet.find('arp') if a and a.protodst == "10.0.0.4":
msg = of.ofp_packet_out(data=event.ofp) msg.actions.append(of.ofp_action_output(port=4)) event.connection.send(msg) if a and a.protodst == "10.0.0.5":
msg = of.ofp_packet_out(data=event.ofp) msg.actions.append(of.ofp_action_output(port=5)) event.connection.send(msg) if a and a.protodst == "10.0.0.6":
msg = of.ofp_packet_out(data=event.ofp) msg.actions.append(of.ofp_action_output(port=6)) event.connection.send(msg) if a and a.protodst == "10.0.0.1":
msg = of.ofp_packet_out(data=event.ofp) msg.actions.append(of.ofp_action_output(port=1)) event.connection.send(msg) if a and a.protodst == "10.0.0.2":
msg = of.ofp_packet_out(data=event.ofp) msg.actions.append(of.ofp_action_output(port=2)) event.connection.send(msg) if a and a.protodst == "10.0.0.3":
msg = of.ofp_packet_out(data=event.ofp) msg.actions.append(of.ofp_action_output(port=3)) event.connection.send(msg) msg = of.ofp_flow_mod() msg.priority = 100 msg.idle_timeout = 0 msg.hard_timeout = 0 msg.match.dl_type = 0x0800 msg.match.nw_dst = "10.0.0.1" msg.actions.append(of.ofp_action_output(port=1)) event.connection.send(msg) msg = of.ofp_flow_mod() msg.priority = 100 msg.idle_timeout = 0 msg.hard_timeout = 0 msg.match.dl_type = 0x0800 msg.match.nw_dst = "10.0.0.2" msg.actions.append(of.ofp_action_output(port=2)) event.connection.send(msg) msg = of.ofp_flow_mod() msg.priority = 100 msg.idle_timeout = 0 msg.hard_timeout = 0 msg.match.dl_type = 0x0800 msg.match.nw_dst = "10.0.0.3" msg.actions.append(of.ofp_action_output(port=3)) event.connection.send(msg) msg = of.ofp_flow_mod() msg.priority = 100 msg.idle_timeout = 0 msg.hard_timeout = 0 msg.match.dl_type = 0x0800 msg.match.nw_dst = "10.0.0.4" msg.actions.append(of.ofp_action_output(port=4)) event.connection.send(msg) msg = of.ofp_flow_mod() msg.priority = 100 msg.idle_timeout = 0 msg.hard_timeout = 0 msg.match.dl_type = 0x0800 msg.match.nw_dst = "10.0.0.5" msg.actions.append(of.ofp_action_output(port=5)) event.connection.send(msg) msg = of.ofp_flow_mod() msg.priority = 100 msg.idle_timeout = 0 msg.hard_timeout = 0 msg.match.dl_type = 0x0800 msg.match.nw_dst = "10.0.0.6" msg.actions.append(of.ofp_action_output(port=6)) event.connection.send(msg) def launch():
global start_time core.openflow.addListenerByName("PortStatsReceived", _handle_portstats_received) core.openflow.addListenerByName("ConnectionUp", _handle_ConnectionUp) core.openflow.addListenerByName("PacketIn", _handle_PacketIn)

mininet脚本

 #!/usr/bin/python

 from mininet.topo import Topo

 from mininet.net import Mininet

 from mininet.node import CPULimitedHost

 from mininet.link import TCLink

 from mininet.util import dumpNodeConnections

 from mininet.log import setLogLevel

 from mininet.node import Controller 

 from mininet.cli import CLI

 from functools import partial

 from mininet.node import RemoteController

 import os

 class MyTopo(Topo):

     "Single switch connected to n hosts."

     def __init__(self):

         Topo.__init__(self)

         s1=self.addSwitch('s1')

         s2=self.addSwitch('s2')

         s3=self.addSwitch('s3')

         s4=self.addSwitch('s4')

         s5=self.addSwitch('s5') 

         h1=self.addHost('h1')

         h2=self.addHost('h2')

         h3=self.addHost('h3')

         h4=self.addHost('h4')

         h5=self.addHost('h5')

         h6=self.addHost('h6')

         self.addLink(h1, s1, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True)

         self.addLink(h2, s1, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True) 

         self.addLink(h3, s1, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True)

         self.addLink(s1, s2, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True) 

         self.addLink(s1, s3, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True) 

         self.addLink(s1, s4, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True) 

         self.addLink(s2, s5, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True) 

         self.addLink(s3, s5, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True)  

         self.addLink(s4, s5, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True) 

         self.addLink(s5, h4, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True) 

         self.addLink(s5, h5, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True) 

         self.addLink(s5, h6, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True) 

 def perfTest():

     "Create network and run simple performance test"

     topo = MyTopo()

     net = Mininet(topo=topo, host=CPULimitedHost, link=TCLink, controller=partial(RemoteController, ip='127.0.0.1', port=6633))

     net.start()

     print "Dumping host connections"

     dumpNodeConnections(net.hosts)

     h1,h2,h3=net.get('h1','h2','h3')

     h4,h5,h6=net.get('h4','h5','h6')

     h1.setMAC("0:0:0:0:0:1")

     h2.setMAC("0:0:0:0:0:2")

     h3.setMAC("0:0:0:0:0:3")

     h4.setMAC("0:0:0:0:0:4")

     h5.setMAC("0:0:0:0:0:5")

     h6.setMAC("0:0:0:0:0:6")

     CLI(net)

     net.stop()

 if __name__ == '__main__':

     setLogLevel('info')

     perfTest()

如果是在不同的机器使用的pox将控制器ip修改到对应pox所在的ip,我使用的是同一台计算机上的就直接修改成了127.0.0.1。


然后运行pox脚本再运行mininet脚本,得到下图:

mininet运行没啥问题,不过提示0丢包率是非法的emmmmm。 然后pox的内容有些奇怪,咋感觉少了一句的感觉。强迫症,到脚本里填上。在第260行填上一行输出。得到下图:

鉴于有人说,h1 ping不到 h4,就先pingall一下,得到下图:

一切正常。 然后继续实验,在mininet输入h1 ping -i 0.1 h4 每秒从h1传送10个包到h4。

mininet界面到时挺正常的,但是pox界面emmm一片死寂,所以我反复了几次,结果没有变化。估计不是pox出问题了,就是pox脚本写的有问题吧,难不成是我实验环境有问题?

由于对脚本内容了解的不够,所以我先尝试了一下使用poxdesk图形界面来显示结果。先安装一下。

 cd ./pox/ext
git clone https://github.com/MurphyMc/poxdesk
cd poxdesk
wget http://downloads.sourceforge.net/qooxdoo/qooxdoo-2.0.2-sdk.zip
unzip qooxdoo-2.0.2-sdk.zip
mv qooxdoo-2.0.2-sdk qx
cd poxdesk
./generate.py

我的小水管算是把我卡死了

然后通过命令运行:

 ./pox.py 脚本名 web messenger messenger.log_service messenger.ajax_transport openflow.of_service poxdesk

然后进入浏览器查看:http://pox-ip:8000/poxdesk。这里pox-ip是pox所在的ip,如果本地就直接使用127.0.0.1就行。

观察s1目标为h4的,发现output一直在5和6之间变化,但是理论来说应该有三种不同的路由规则。结果很尴尬。。。

Mininet实验 动态改变转发规则的更多相关文章

  1. mininet实验 动态改变转发规则实验

    写在前面 本实验参考 POX脚本设置好控制器的转发策略,所以只要理解脚本. mininet脚本设置好拓扑和相关信息,所以也只要理解脚本. POX脚本目前基本看不懂. 本实验我学会了:POX控制器Web ...

  2. Mininet系列实验(六):Mininet动态改变转发规则实验

    一. 实验目的 熟悉Mininet自定义拓扑脚本的编写:熟悉编写POX脚本动态改变转发规则 二.实验原理 在SDN环境中,控制器可以通过对交换机下发流表操作来控制交换机的转发行为.在本实验中,基于Mi ...

  3. SSH的本地、远程、动态端口转发实验笔记

    SSH端口转发 SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据.但是,SSH 还能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的加密及解密服务.这一 ...

  4. js动态改变css伪类样式

    首先我们来看下页面上需要实现的基本效果,如下图所示: 因此我们可以使用如下js代码来试试看,是否能使用js改变伪类?如下代码所示: $(function() { $('.listnav li').cl ...

  5. jquery.validate动态更改校验规则

    有时候表单中有多个字段是相互关联的,以下遇到的就是证件类型和证件号码的关联,在下拉框中选择不同的证件类型,证件号码的值的格式都是不同的,这就需要动态的改变校验规则. 点击(此处)折叠或打开 <! ...

  6. JQuery EasyUI 动态改变表单项的验证守则

    //JQuery EasyUI 动态改变表单项的验证规则 $(document).ready(function(){ $('#FILE_QUALITY').combobox({ onChange:fu ...

  7. jquery.validate动态更改校验规则 【转】

    有时候表单中有多个字段是相互关联的,以下遇到的就是证件类型和证件号码的关联,在下拉框中选择不同的证件类型,证件号码的值的格式都是不同的,这就需要动态的改变校验规则. <!DOCTYPE html ...

  8. 哈工大 计算机网络 实验三 IPv4 分组收发实验&IPv4 分组转发实验

    计算机网络实验代码与文件可见github:计算机网络实验整理 实验名称 IPv4 分组收发实验&IPv4 分组转发实验 实验目的: (注:实验报告模板中的各项内容仅供参考,可依照实际实验情况进 ...

  9. easyui如何动态改变列的编辑属性

    动态改变列的编辑属性 var tt=$('#dg').datagrid('getColumnOption', 'yearContent'); //通过列名获得此列 tt.editor={type:'t ...

随机推荐

  1. React性能优化总结(转)

    原文链接: https://segmentfault.com/a/1190000007811296?utm_source=tuicool&utm_medium=referral 初学者对Rea ...

  2. 开发一个c#的数据库连接池

    c#操作数据库是一个经典,用习惯了以后真感觉不错,很简单的.现在很多关系数据库都支持c#.c#的ADO.NET规范都遵守. 对于一般的设置,ADO.NET都放在数据库连接字符串上.比如池化,连接超时等 ...

  3. FirstBird--项目流程

    创建项目(英文路径)—–img图片文件 创建窗体–设置大小(Basic—size–>320*480)—最大化功能禁用(Expert–>setResizable(false)) 添加面板–设 ...

  4. MySql基本数据类型及约束

    1. 常用的数据类型(data_type) 字符串类型 CHAR(n) : 固定长度 VARCHAR(n) : 可变长度 NCHAR(n) : 使用utf8存储,固定长度 NVARCHAR(n) : ...

  5. 小程序登录 -41003: aes 小程序加密数据解密失败问题

    在微信小程的开发中,登录问题,一定要按照这样的顺序 1. 小程序请求login,拿到code 然后传给服务端:  2.服务端拿到code 到微信服务器拿到sessionKey :3.然后小程序调用ge ...

  6. 【ssh服务配置】

    根据项目需求,搭建好拓扑图如下: 第一种验证方式:给予密码和用户名登录 Ssh server配置: 首先在服务器上创建一个rsa加密算法的秘钥对: 对ssh服务进行开启: 创建用户的虚拟终端登录界面: ...

  7. JDK8新垃圾回收机制--G1垃圾回收机制

    G1全称是Garbage First Garbage Collector,使用G1的目的是简化性能优化的复杂性.例如,G1的主要输入参数是初始化和最大Java堆大小.最大GC中断时间. G1 GC由Y ...

  8. web学习第二天

    今天是学习web的第二天,早上用css3做了个会动的小熊,border-radius为圆的半径, .smallxiong {    width: 400px;    height: 400px;    ...

  9. hack游戏攻略(黑吧安全吧的黑客闯关游戏)古墓探秘

    2019.2.11 这个是找到的一个黑客游戏,就是一关一关,挺像ctf的,玩玩也挺有意思,还能涨知识. 地址:http://hkyx.myhack58.com/ 入口: 入口就是这样的.提示是 图内有 ...

  10. 002---tcp/ip五层详解

    tcp/ip 五层模型讲解 越靠底层就越接近硬件,越靠上层越接近用户.先从底层看起,理解整个互联网通信的原理. 物理层(传输电信号) 孤立的计算机想要一起玩.就必须用硬件在计算机之间完成组网.以硬件做 ...