路由器技术深入剖解(5) 操作系统介绍 1、Linux Linux是一个诞生于网络,成长于网络且成熟于网络的奇特的操作系统。1991年,芬兰大学生Linus Torvalds萌发开发了一个自由的UNIX操作系统的想法,并将Linux通过Internet进行发布。从此一大批编程人员加入到开发过程中来,Linux逐渐成长起来。Linux一开始要求所有的源代码必须公开,后来转向GPL( GNUG eneral Public Licence),成为GUN的阵营的主要一员。只要遵守GPL的规定,就可以免费获得复制,因此Linux是一个免费软件。同样,Linux下遵循GPL规定的C, C++, Java等一系列的工具开发包,从功能的角度上看并不亚于商用的开发包,但却可以极大的降低开发成本,这一优势是其它商用操作系统无法比拟的。 Linux 操作系统最突出的是网络部分,基本上所有的网络协议和网络接口都可以在Linux上找到,Linux的内核比标准的UNIX处理网络协议更加高效,系统的网络吞吐性能更好,这也是Linux网络服务器市场上占据较大的市场分额的重要原因。对于一般的小型的SOHO路由器,Linux的网络技术无疑是其开发运行的最佳选择,Linux完全能对给其提供全方位的网络技术支持。Linux作为互联网的产物,许多关于Linux的文档可以在Internet上下载到。 2、uClinux操作系统 uclinux是嵌入式Linux的一个分支,在uClinux这个英文单词中u表示Micro,小的意思,C表示Control,控制的意思,所以uclinux就是Micro-Control-Linux,字面上的理解就是“针对微控制领域而设计的Linux系统”。同标准的Linux相比,由于uClinux自身不支持MMU,多任务的实现就需要技巧了。但是,在uClinux上运行的绝大多数的用户程序并不需要多任务。另外,针对uclinux内核的二进制代码和源代码都是经过了重新编写,以紧缩和裁剪基本的代码。这就使得uClinux的内核同标准的Linux内核相比非常之小,但是它仍保持了Linux操作系统的主要的优点,如稳定性、强大的网络功能和出色的文件系统支持等。uclinux包含Linux常用的API、小于512K的内核和相关的工具。操作系统所有的代码加起来小于900KB。 uClinux简介admin 管理员组文章数量: 887018
uClinux的基本架构 |
路由器技术深入剖解(7) 内核编译核心部分 1、文件系统分析 文件系统是uClinux操作系统的重要组成部分,uClinux文件系统是操作运行的基础。许多嵌入式系统在不存在磁盘的情况下也可以运行。文件系统可以随同内核一起被打包并在启动时作为一个文件系统的映像被加载。对一个简单的应用系统来说,这己足够了。文件系统可以存放在一个传统磁盘中,但也可以存放在非易失性的存储介质— 闪存中。闪存有一个引导块,它存放了CPU上电后运行的第一个软件,这个软件可以是uclinux的引导程序,也可以是自己编的bootloader。uClinux的内核可以被引导程序从闪存中拷贝到RAM中全速运行。闪存也可以作为文件的存储介质,必要时写入一些需要保存的数据。 uClinux支持NFS(Network File System),它允许通过网络加载各种应用程序。由于用在每一个嵌入式系统上的软件可以从一个公用的服务器上加载,这在控制软件的修订或升级中是很重要的.在系统运行的过程中,导入和导出数据、配置、状态信息的备份也很重要。对用户监控而言,这是一个非常强大的功能。例如,一个嵌入式系统可能装配了一个RAM DISK,它包含着与系统当前状态的更新维持一致的(状态)文件。那么别的嵌入式系统仅需通过网络把这个RAM DISK作为远程磁盘mount过来便可以访问那些位于远端RAM DISK中的状态文件。这也允许在另一台机器上的WEB服务器借助简单的CGI脚本来访问那些状态信息。运行在其他机器上的应用程序包能够很容易地访问这些数据。uClinux操作系统根据不同的安装选择可以生成不同的文件系统。系统中提供了十分丰富的文件系统以供不同需要的用户选择。每种类型的文件系统的基本块大小、优化分配策略、一次传送的数据长度等等都是相互匹配的,使得本类文件系统均有相应的最佳性能。 2、嵌入式Web服务器 对uClinux操作系统下嵌入式Web技术的实现主要用于用户可以通过网 页方式来管理路由器。 ⑴uClinux下Web Server的实现 uClinux下,主要有三个WebServer:htpd,thttpd和Boa。Httpd是最简单的一个Web Server,它的功能最弱,不支持认证,不支持CGI。Thttpd和Boa都支持认证、CGI等,功能都比较全。为了实现动态Web技术,这里我们选择实现一个支持CGI的、非常适合于嵌入式系统的Boa Web Server。Boa是一个单任务的http服务器,源代码开放、性能高。目前,uClinux的代码中已经包含boa的源代码,在uClinux下实现Boa,需要对Boa做一些配置和修改。这主要通过对boa.conf和mime.types文件进行修改来实现,需要改动的配置有以下几项: ①建目录 由于uClinux默认的根文件系统romfs是只读的,不能用mkdir等命令来新建目录,故应在编译内核前先建好要用到的目录,这通过修改 /uclinux-samsung/vendors/Samsung/4510b/makefile文件来实现。在ROWFS_DIRS=bin dev etc home lib mnt proc usr var的后边增加home/webhome/web/cgi-bin,这样修改后编译内核,编译好的根文件系统romfs中就包含这些目录了。 ②指定Web 服务器的根目录路径(SERVER ROOT) 进入 /uclinux-samsung/user/boa/src/目录,通过修改define.h文件中#define ERVER ROOT "/home”语句来指定SERVER ROOT。另外,还可以通过命令行来指定,例如:boa-c/home/&。而且命令行指定的SERVER ROOT可以覆盖define.h文件所指定的。 ③修改boa.conf文件 在. /uclinux-samsung/user/boa/src/boa.conf里修改: *将 user obody和Group ogroup改为User0 和Group0 ; *将 DocumentRoot/var/www改为DocumentRoot/home/web,这样web服务器的文档根目录为/home/web; *将 MimeTypes/eWmime.types改为MimeTypes/home/web/mime.types; 定义默认首页和CGI程序所在目录,即 DirectoyIndex index.html ScriptAlias/cgi-bin//home/web/cgi-bin/ 这样指定后,.index.htm为远程浏览客户访问WebServer所看到的首页默认值,用C编写的CGI程序编译成二进制文件,放到/cgi-bin/目录下,CGI程序能被正确地执行。 Boa.conf文件和mime.types文件必须放到Web服务器根目录下,所以把修改后的bao.conf和mime.types拷贝到“./uclinux-samsung/romfs/home/”目录下。然后在/uclinux- samsung/Vendors/Samsung/4510b/initab里修改,在:inet:unknown:/bin/inetd后加入: boa:unknown:/bin/boac/homeo 配置过程后,重新编译内核,编译时选中Boa选项。把编译好的内核下载到硬件板,启动uclinux,完成IP配置,启动Boa Web Server,然后就可以通过lE访问你的网页了。如果想启动uclinux时自动启动Boa Web Server,可以修改re文件,进入uclinux-samsung/vendors/Samsung/4510B目录,在运行脚本rc中增加两行: ifconfig eth0 192.168.0.101 up boa-c/home/& 修改后重新编译内核,再下载到硬件板运行.运行uclinux后,不需要配置就可以直接通过IE来访问 [url]http://192.168.0.101[/url],看到你的网页了。 ⑵uclinux下实现动态Web页面的CGI技术 到目前为止,实现动态Web页面有4种技术可供选择:CGI(Common Gateway Interface), ASP(ActiveXServerPage),PHP(PersonalHomePage)和JSP(JavaServerPage).在uclinux下如果要实现动态网页,只能采用CGI,因此目前uclinux还不支持ASP, PHP等动态Web页面技术。CGI(通用网关接口)提供Web服务器一个执行外部程序的通道,这种服务端技术使得浏览器和服务器之间具有交互性。CGI程序属于一个外部程序,需要编译成可执行文件,以便在服务端运行。浏览器将用户输入的数据送到Web服务器,Web服务器将数据使用STDIN送给CGI程序,在执行CGI程序后,可能会访问存储数据的一些文档,最后使用STDOUT输出HTML形式的结构文件,经Web服务器送回浏览器显示给用户。CGI程序可以用任何程序设计语言编写,如Shell脚本语言、Perl,Fortran, Pascal, C语言等。但目前uclinux不支持Pert, Fortran等语言,而且C语言在平台无关性上表示不错,所以我们选择用C来编写CGI程序。另外,uClinux也不支持数据库,所以需要保存的数据只能保存到文件中,CGI查询数据时也是查询这些文件,而不是访问数据库。 ⑶uClinux下动态Web页面的实现 下面通过一个例子来说明如何实现uClinux下的动态Web页面技术。此例子的目的是使用户能够通过Web页面内嵌表单提交数据,并能把用户提交的数据通过Web浏览器正确地返回给用户。实现动态Web页面的第一步是用HTML语言编写Web页及内建表单。编写Web页面时,要由ACTION属性来指定相关的CGI程序,如ACTION=cgi-bin/demo;由MOTHOD属性来指明所用的提交数据的方法,即MOTHOD=POST(GET)。 实现动态 Web页面的第二步是用C编写CGI程序,CGI程序分为以下几部分:①根据POST方法或GET方法从提交的表单中接收数据;②URL编码的解码;③用printf() 函数来产生HTML源代码,并将经过解码后的数据正确地返回给浏览器。包括demo.c, cgivars.h和cgivars.c三个文件。将编写好的CGI程序编译成二进制文件放在cgi-bin/目录下,CGI程序能被正确地执行,最终CGI程序就可以对上述表单数据的进行处理了。 下面对程序稍加说明。若以GET方法提交数据,表单中的数据被保存在QUERY_STRING环境变量中,通过调用函数getenv("QUERY_STRING")来读取数据;若以POST方法提交数据,则程序先从CONTENT LENGTH环境量得到数据的字长,然后从标准输入中读取相应长度的字符串即可得到提交的数据。数组postinput[i] 中保存的就是从表单中提取的数据。 URL编码的解码过程较为复杂,URL编码的规则下:①变量之间用“&”分开;② 变量与其对应值之间用“=”连接;③空格符用“+”代替;④特殊意义的字符用%接相应的十六进制ASCI码代替。解码即为编码的逆过程。在程序中,对于从表单中提取过来的postinput[i]中的数据,当发现字符为“+”时,将它转换成空格;当发现字符为“&”时,意味着个名字2值对的结束,在此处将字符中切成几个字符串;当再现字符为“=”时,意味着一个名字/值对的名字部分的结束,在此再将名字/值对分开。最后通过调用unescape_url(char *url)子函数将十六进制ASCII码值表示的特殊字符转换成相应的ASCII字符。 路由器技术深入剖解(8) 3、PPPOE拨号实现 PPPOE主要针对ADSL宽带接入方式,实现用户的的认证上网方式就是采用这种方式接入。 ⑴PPPOE简介 1998年后期问世的以太网上点对点协议(PPP over Ethernet)技术是由Redback网络公司、客户端软件开发商RouterWare公司以及Worldcom子公司UUNET Technologies公司在IETF RFC制的基础上联合开发的。通过把最经济的局域网技术以太网和点对点协议的可扩展性及管理控制功能结合在一起,网络服务提供商和电信运营商便可利用可靠和熟悉的技术来加速部署高速互联网业务。它使服务提供商在通过数字用户线、电缆调制解调器或无线连接等方式,提供支持多用户的宽带接入服务时更加简便易行.同时该技术亦简化了最终用户在动态地选择这些服务时的操作. ⑵PPPOE实现 实现步骤 : pppoe的实现有两种方式,一种是作为一个用户态的应用程序运行,就是rp-pppoe这个程序;另一种是选择在kernel ppp里支持pppoe功能,这同时也需要pppd支持pppoe。 具体的细节实现步骤本文不做详述,有兴趣的读者可以查阅相关的Linux资料进行更深一步的学习研究。 4、基于IPTable过滤式防火墙 网络防火墙用来保护一个网络不受来自另一个网络的***,是网络安全环节中进行的一个防御步骤。在路由器中配置IPTable过滤式防火墙,可以对IP数据封包进行规则检查和过滤,保证内网安全。 ⑴防火墙概述 防火墙是一套能够在两个或两个以上的网络之间,明显区隔出实体线路联机的软硬件设备组合。被区隔开来的网络,可以透过封包转送技术来相互通讯,透过防火墙的安全管理机制,可以决定哪些数据可以流通,哪些资料无法流通,藉此达到网络安全保护的目的。 防火墙产品可以概略归类为硬件式防火墙和软件式防火墙,但实际上无论是硬件式或软件式防火墙,它们都需要使用硬件来作为联机介接,也需要使用软件来设定安全政策,严格说两者间的差别并不太大。我们只能从使用的硬件与操作系统来加以区分,硬件式防火墙是使用专有的硬件,而软件式防火墙则使用一般的计算机硬件,硬件式防火墙使用专有的操作系统,而软件式防火墙则使用一般的操作系统。 防火墙依照其运作方式来分类,可以区分为封包过滤式防火墙(Packet Filter)、应用层网关式防火墙(Application-Level Gateway,也有人把它称为Proxy防火墙)、电路层网关式防火墙(Circuit-Level Gateway).其中被广为采用的是封包过滤式防火墙,本文要介绍的iptables防火墙就是属于这一种。 封包过滤是最早被实作出来的防火墙技术,它是在TCP/IP四层架构下的IP层中运作.封包过滤器的功能主要是检查通过的每一个IP数据封包,如果其标头中所含的数据内容符合过滤条件的设定就进行进一步的处理,主要的处理方式包含:放行(accept)、丢弃(drop)或拒绝(reject)。要进行封包过滤,防火墙必须要能分析通过封包的来源IP与目的地IP,,还必须能检查封包类型、来源端口号与目的端口号、封包流向、封包进入防火墙的网卡接口、TCP的联机状态等数据。 ⑵IPtable的原理及实现 IPTables是Linux操作系统中的一个管理内核包过滤的工具,它可以添加、插入或删除核心包过滤表(1)中的规则,以实现防火墙功能。 一个iptables命令基本上包含如下五部分:希望工作在哪个表上、希望使用该表的哪个链、进行的操作(M入,添加,删除,修改)、对特定规则的目标动作、匹配数据报条件。 基本的语法为: iptables -t table -Operation chain -target match(es) 例如,希望添加一个规则,允许所有从任何地方到本地smtp端口的连接: iptables -t filter -A INPUT -ACCEPT -p tcp --dport smtp 当然 ,还有其他的对规则进行操作的命令如:清空链表,设置链缺省策略,添加一个用户自定义的链... 经过一系列深入的配置后,基本的路由功能器就这样诞生了,当然实际中路由器还有相当多的应用功能,这些都是通过软件开发来逐步深层次实现的,如果你想成为一个嵌入式工程师的话,那这篇文章就算是一个引路人吧,要达到更高的境界,还需要自己刻苦学习研究,一步一步在魔幻般的技术殿堂中自由遨游。
转载于:https://blog.51cto/xionghui/29302
版权声明:本文标题:路由器技术深入剖解(5)-(8) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1726804253h1031505.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论