mininet-mptcp-topo1.py 解析,iperf命令

勘误:h1-th0:ip:10.0.1.2/24应该是h1-th1

addlink()
self.addLink(node1, node2, bw=10, delay='5ms', max_queue_size=1000, loss=10, use_htb=True)

上述表示添加双向链路、延迟和丢包率等特性,参数:

bw: 表示带宽的数值,单位Mbps
delay: 表示延迟,如'5ms' '100us'
loss: 表示丢包率,0-100
简单用法:

linkopts = dict(bw=10, delay='5ms', loss=10, max_queue_size=1000, use_htb=True)
     # (or you can use brace syntax: linkopts = {'bw':10, 'delay':'5ms', ... } )
     self.addLink(node1, node2, **linkopts)
     #表示运用上面规则

可以设置此参数,修改链路的延迟和丢包
注释版:mptcp-topo1.py

#!/usr/bin/env python
from mininet.net import Mininet
from mininet.cli import CLI
from mininet.link import Link, TCLink,Intf
from subprocess import Popen, PIPE
from mininet.log import setLogLevel
 
if '__main__' == __name__:
	setLogLevel('info')
	#创建对象net
	net = Mininet(link=TCLink)
	key = "net.mptcp.mptcp_enabled"
	#value数值表示是否开启mptcp
	#1表示开启,0表示不开启,详见笔记02
	value = 1
	#执行命令
	p = Popen("sysctl -w %s=%s" % (key, value), shell=True, stdout=PIPE, stderr=PIPE)
	stdout, stderr = p.communicate()
	print "stdout=",stdout,"stderr=", stderr
	#增加主机
	h1 = net.addHost('h1')
	h2 = net.addHost('h2')
	r1 = net.addHost('r1')
	#设置链路参数10Mbps,当然也可以添加其他选项
	linkopt={'bw':10}
	#增加一个双向链接,详细参数见下方详解
	net.addLink(r1,h1,cls=TCLink, **linkopt)
	net.addLink(r1,h1,cls=TCLink, **linkopt)
	net.addLink(r1,h2,cls=TCLink, **linkopt)
	net.addLink(r1,h2,cls=TCLink, **linkopt)
	net.build()
	
	#配置网络设备 此时只是声明
	r1.cmd("ifconfig r1-eth0 0")
	r1.cmd("ifconfig r1-eth1 0")
	r1.cmd("ifconfig r1-eth2 0")
	r1.cmd("ifconfig r1-eth3 0")
	h1.cmd("ifconfig h1-eth0 0")
	h1.cmd("ifconfig h1-eth1 0")
	h2.cmd("ifconfig h2-eth0 0")
	h2.cmd("ifconfig h2-eth1 0")
	
"""	
/proc/sys/net/ipv4/ip_forward
  该文件表示是否打开IP转发。
  0,禁止
  1,转发
  基本用途:如VPN、路由产品的利用;

  出于安全考虑,Linux系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将包发往本机另一网卡,该网卡根据路由表继续发送数据包。这通常就是路由器所要实现的功能。

配置Linux系统的ip转发功能,首先保证硬件连通,然后打开系统的转发功能
less /proc/sys/net/ipv4/ip_forward,该文件内容为0,表示禁止数据包转发,1表示允许,将其修改为1。

可使用命令echo "1" > /proc/sys/net/ipv4/ip_forward 修改文件内容,重启网络服务或主机后效果消失。若要其自动执行,可将命令echo "1" > /proc/sys/net/ipv4/ip_forward 写入脚本/etc/rc.d/rc.local 或者 在/etc/sysconfig/network脚本中添加 FORWARD_IPV4="YES"
"""
	r1.cmd("echo 1 > /proc/sys/net/ipv4/ip_forward")
  
  
	#临时为网卡配置ip地址和掩码
	r1.cmd("ifconfig r1-eth0 10.0.0.1 netmask 255.255.255.0")
	r1.cmd("ifconfig r1-eth1 10.0.1.1 netmask 255.255.255.0")
	r1.cmd("ifconfig r1-eth2 10.0.2.1 netmask 255.255.255.0")
	r1.cmd("ifconfig r1-eth3 10.0.3.1 netmask 255.255.255.0")
	h1.cmd("ifconfig h1-eth0 10.0.0.2 netmask 255.255.255.0")
	h1.cmd("ifconfig h1-eth1 10.0.1.2 netmask 255.255.255.0")
	h2.cmd("ifconfig h2-eth0 10.0.2.2 netmask 255.255.255.0")
	h2.cmd("ifconfig h2-eth1 10.0.3.2 netmask 255.255.255.0")
	
	#路由规则的添加
    """
进行路由时,根据路由规则来进行匹配,按优先级(pref)从低到高匹配,直到找到合适的规则.所以在应用中配置默认路由是必要的..    
ip rule show 显示路由规则路由规则的添加
ip rule add from 192.168.1.10/32 table 1 pref 100
如果pref值不指定,则将在已有规则最小序号前插入注:
创建完路由规则若需立即生效须执行#ip route flush cache;刷新路由缓冲    
可参数解析如下:   
From -- 源地址        
To -- 目的地址(这里是选择规则时使用,查找路由表时也使用)    
Tos -- IP包头的TOS(type of sevice)域Linux高级路由- 
Dev -- 物理接口     
Fwmark -- iptables标签
"""
	h1.cmd("ip rule add from 10.0.0.2 table 1")
	h1.cmd("ip rule add from 10.0.1.2 table 2")
    
	#更改默认路由表
    #在表一中10.0.0.0/24 通过网卡h1-th0转发
	h1.cmd("ip route add 10.0.0.0/24 dev h1-eth0 scope link table 1")
    #在一号表中添加默认路由为10.0.0.1
	h1.cmd("ip route add default via 10.0.0.1 dev h1-eth0 table 1")
	h1.cmd("ip route add 10.0.1.0/24 dev h1-eth1 scope link table 2")
	h1.cmd("ip route add default via 10.0.1.1 dev h1-eth1 table 2")
    #增加一条默认的全局路由记录。欲到达的目标网络XX.XX.XX.XX(nexthop via XX.XX.XX.XX), 经由网关(以太网卡 eth0)
	h1.cmd("ip route add default scope global nexthop via 10.0.0.1 dev h1-eth0")
  
	h2.cmd("ip rule add from 10.0.2.2 table 1")
	h2.cmd("ip rule add from 10.0.3.2 table 2")
	h2.cmd("ip route add 10.0.2.0/24 dev h2-eth0 scope link table 1")
	h2.cmd("ip route add default via 10.0.2.1 dev h2-eth0 table 1")
	h2.cmd("ip route add 10.0.3.0/24 dev h2-eth1 scope link table 2")
	h2.cmd("ip route add default via 10.0.3.1 dev h2-eth1 table 2")
	h2.cmd("ip route add default scope global nexthop via 10.0.2.1 dev h2-eth0")
	CLI(net)
	net.stop()

run the script:
In home sudo python mptcp-topo1.py

相关链接:
https://blog.csdn.net/asddasads/article/details/110678750
https://github.com/mininet/mininet/wiki/Introduction-to-Mininet
https://www.cnblogs.com/mmx8861/p/9277108.html
https://blog.csdn.net/weixin_34208283/article/details/85659274
https://blog.csdn.net/li_101357/article/details/78415461
路由表操作:
https://www.cnblogs.com/yldf/p/1e19442f0dcd926c50ded4c667199b26.html

posted @ 2021-05-11 16:50  海大一只鼠  阅读(739)  评论(0)    收藏  举报