网关监控软件设计与实现

文档目的

本文阐述了控制网关中软件的实现,一个是检测和控制MPTCP传输参量的程序。

  由于控制网关是Linux平台,根据Linux平台的特点,在Linux内核中已经编译了MPTCP的传输层文件的基础上,本网关软件的研发采用“Shell编程”+“MPTCP配置文件”的方案,从而实现对传输参量的方便可靠监控。

程序设计

       具体来说,Shell脚本是跟Windows下的批处理文件类似的脚本程序,可以将各类命令预装入一个文件中,因此通过Shell脚本程序访问预编译进内核的MPTCP配置文件,也就是说Shell编程可作为MPTCP配置文件的编程接口。网关控制软件的框架如下所示:


       MPTCP的主要配置文件有:mptcp_enabled、mptcp_checksum、mptcp_syn_retries、mptcp_debug、mptcp_path_manager.

    这些配置文件具有不同的监控传输参量的功能,功能说明如下:

mptcp_enabled:控制MPTCP的开关,实现MPTCP与传统TCP之间的切换;

  mptcp_checksum:控制MPTCP传输层中数据序列号校验和(DSS-checksum)的开关,DSS-checksum主要跟传输可靠性相关;

mptcp_syn_retries:指定SYN的重传次数,SYN里包含了MP_CAPABLE选项字段。通过此配置文件,SYN将不会包含MP_CAPABLE选项,这是为了处理会丢弃含有未知TCP选项的SYN的网络中间件;

       mptcp_debug:调试MPTCP,控制是否打印debug报告文件;

       mptcp_path_manager:MPTCP路径管理,有三个不同的配置值,分别是default/ndiffports/fullmesh,分别可以选择单路、多路或者全路进行传输。其中单路是指跟传统TCP状态一样还是用单一的TCP子流进行传输,多路是当前所有TCP子流中用户选择x条子流数进行传输,全路是指将当前所有可用的TCP子流应用到网络传输中[7]

       通过预留的编程接口,在Shell脚本程序里访问以上所述的配置文件,从而监控当前的传输参量,对MPTCP进行传输管理,程序的算法设计如下:

网关监控软件设计与实现_第1张图片

       根据此算法设计图,用Shell编程语言编写可以访问MPTCP配置文件的Shell脚本程序,实现对当前传输参量的监控。

程序实现

       Shell脚本程序的详细代码如下:

#!/bin/bash
command=./mptcp_configure.sh
echo "***********************************************************************"
echo "List of configurations:"
echo "1.mptcp_checksum:Values is 0 or 1,disabled/enabled mptcp checksum.
If one side has it enabled, DSS-checksums will be used"
echo
echo "2.mptcp_debug:Values range from 0 to 1,disabled/enabled mptcp debug"
echo
echo "3.mptcp_enabled:Values range from 0 to 1,disabled/enabled mptcp"
echo
echo "4.mptcp_path_manager:Posible values are default/fullmesh/ndiffports 
'default': This path-manager actually does not do anything. 
'fullmesh': It will create subflows among all available subflows.
'ndiffports': This one will create X subflows across the same pair of IP-addresses, modifying the source-port."
echo
echo "5.mptcp_syn_retries:Possible values are integers.Default is 3.
Specifies how often we retransmit a SYN with the MP_CAPABLE-option. After this, the SYN will not contain the MP_CAPABLE-option."
echo
echo "6.quit:QUit the process"
echo "***********************************************************************"
read -p "Check the present values and choose what you want to modify [1-6]:" choice
case $choice in
1)
	echo "The present value is:"
	sysctl -n net.mptcp.mptcp_checksum
	echo "To disable/enable checksum,please input 0/1:"
	read -p "" checksum
	while [ $checksum != 0 ] && [ $checksum != 1 ] 
	do	
		echo "Configure failed!Please input 0/1:"
		read -p "" checksum1
		checksum=$checksum1
	done
	sysctl -w net.mptcp.mptcp_debug=$checksum
	echo "Configure succeeded!!!"
	echo
	$command
	;;
2)
	echo "The present value is:"
	sysctl -n net.mptcp.mptcp_debug
	echo "To disable/enable debug,please input 0/1:"
	read -p "" debug
	while [ $debug != 0 ] && [ $debug != 1 ] 
	do	
		echo "Configure failed!Please input 0/1:"
		read -p "" debug1
		debug=$debug1
	done
	sysctl -w net.mptcp.mptcp_debug=$debug
	echo "Configure succeeded!!!"
	echo
	$command
	;;
3)
	echo "The present value is:"
	sysctl -n net.mptcp.mptcp_enabled
	echo "To disable/enable mptcp,please input 0/1:"
	read -p "" mptcp
	while [ $mptcp != 0 ] && [ $mptcp != 1 ] 
	do	
		echo "Configure failed!Please input 0/1:"
		read -p "" mptcp1
		mptcp=$mptcp1
	done
	sysctl -w net.mptcp.mptcp_enabled=$mptcp
	echo "Configure succeeded!!!"
	echo
	$command
	;;
4)
	echo "The present value is:"
	sysctl -n net.mptcp.mptcp_path_manager
	echo "Set path manager mode default/fullmesh/ndiffports:"
	read -p "" pm
	if [ "$pm" == "ndiffports" ]; then
		sysctl -w net.mptcp.mptcp_path_manager=$pm
		echo "The present number of subflows is:"
		sysctl -n net.mptcp.mptcp_ndiffports
		echo "Please input X[1-4] to control the number of subflows:" 
		read -p "" x
		while [ $x != 1 ] && [ $x != 2 ] && [ $x != 3 ] && [ $x != 4 ] 
		do	
			echo "Configure failed!Please input 1-4:"
			read -p "" x1
			x=$x1
		done
		sysctl -w net.mptcp.mptcp_ndiffports=$x
		echo "Configure succeeded!!!"
		echo
		$command
	else 
		while [ "$pm" != "default" ] && [ "$pm" != "fullmesh" ] 
		do	
			echo "Configure failed!Please input default/fullmesh/ndiffports:"
			read -p "" pm1
			pm=$pm1
		done
		sysctl -w net.mptcp.mptcp_path_manager=$pm
		echo "Configure succeeded!!!"
		$command
	fi
	;;
5)
	echo "The present value is:"
	sysctl -n net.mptcp.mptcp_syn_retries
	echo "To set up syn_retries,please input number from 0 to 10:"
	read -p "" retries
	while [ 0 -gt $retries ] | [ 10 -lt $retries ] 
	do	
		echo "Configure failed!Please input 0-10:"
		read -p "" retries1
		retries=$retries1
	done
	sysctl -w net.mptcp.mptcp_syn_retries=$retries
	echo "Configure succeeded!!!"
	echo
	$command
	;;
6)
	cd /home/leo/unix
	;;
*)
	echo "invalid input!!!"
	;;
esac

       本系统成功在安装并编译了MPTCP的网关里编写了网关软件,网关软件实现了如下功能:

1)利用MPTCP的预留接口控制传输参量,达到根据网络环境变化调整传输参量的目的;

2)网关软件供用户实时查看传输层参量,获知当前网络传输情况,以此可选择是否调整;

3)将Linux命令集成到了一个程序中,提供了不同于传统Linux终端的界面,具有用户友好的操作。



你可能感兴趣的:(tcp,网络,脚本,软件,linux内核)