radius基础以及c/c++ lib

(本文不是介绍radius协议的理论的)在开始这篇博客之前,看看wiki关于radius的介绍。

客户端-服务器结构

RADIUS协议是一种基于主从式架构的协议。RADIUS 协议中的客户端是对用户(人或者计算机)提供网络连接服务的器材,对服务器提出验证和计费要求。服务器针对客户端的通过进行验证和计费给予应答。服务器只有针对客户端的请求进行应答,而无法反方向地对用户进行服务停止等的请求。

RADIUS 客户端的实例

因特网连接服务中,拨号呼叫装置和宽带接入服务器(BAS、Broadband Access Server)等接收装置(NAS、Network Access Server)即为 RADIUS 客户端。(虽然名字含有“服务器”,但从 RADIUS 协议的角度来看是客户端)。无线 LAN 环境中的无线接取器和 VLAN 中的 VLAN开关等都是。在内容提供的服务中,Web 服务器起到了 RADIUS 客户端的作用。

协议的概要

客户端对服务器提出“RADIUS 请求包”,服务器对客户端发送“RADIUS 应答包”。双方通信均由 IP 的UDP包进行。

双方的数据包,头部分由20个 8位元和“属性”组成。头部分包括类别码(Code)1个8位元、识别码(Identifier)1个8位元、数据包整体长度2个8位元、验证码(Authenticator)16个8位元。识别码根据客户端决定的需求而设定,服务器直接照抄到应答包里,因为客户端需要在收到的应答包与过去曾接收到的请求包对照。实际客户端一般只是进行累计数值编号,但没有规定必须是序列号。验证码是为了证明无发送者伪装和篡改。属性部分是将属性値对 (Attribute Value Pair)任意次重复。属性値对由属性编号1个8位元、长度1个8位元、属性値组成。对于値可以赋予4个8位元的整数値、4个8位元IP地址、1 - 253个8位元的文字串等等。

对于每个属性编号,每个属性値对里值的含义在RFC文件里均有规定,还可以通过给属性编号赋予新的定义来增加使用目的,RADIUS 协议的灵活性所在也是其最大的特征。但是一般不推荐各个机器产商为各自目的独自给属性标号赋值。产商特有功能应做为属性编号 26 号 (Vendor Specific)的值与产商编号一起加到数据里。属性编号 26 号的属性値对一般称为 VSA (Vendor Specific Attribute) 。厂家编号由IANA进行管理和赋予。

协议通过属性値对里含有各种个样信息进行验证和计费。为实现验证,用户名和密码各有属性编号。拨号上网使用PPP时针对 PPP 用的验证协议 PAPCHAPEAP均备有各自的属性编号。为实现计费,备有使用秒数、收发数据量等的属性编号。由此根据属性编号可以判断、验证和计费两功能是只有一种才能使用还是二者可同时使用。

RADIUS分组的最大长度,在RADIUS验证协议中是4096个8位元、RADIUS计费协议中是 4095 个 8 位元,这个差异据说并没有特殊含义,而是 RFC 当初的错字将错就错地沿用下来的缘故。


    radius协议的简介图


需要补充(或者说需要强调的)是以下几处内容。

radius协议基于key:length:value方式处理属性值。故而,是可扩展的。

为了让你有一个直观的感受,我提供一个radius协议通信抓包的结果图。


抓包图可以看出radius协议是应用层的,传输层是udp协议,radius常规端口是1812/1813,网络层以下不是我关注的内容,我忽略掉。

此包为账号验证(Code=Access-Request)请求包,应答包如下:


freeradius:linux平台的radius服务器比较知名的有freeradius,freeradius是c语言写的radius开源项目,有radius服务器和radius客户端。此项目更多的是提供安装包的目的。因此如果你是为了找一个radius协议的library,很遗憾的告诉你,这个不是你需要的。如大多数开源软件一样,既然是软件,则必然包含诸多逻辑和附加功能。如果你是为了部署一个radius服务器(需要自行部署数据库),那freeradius应该能够给你提供帮助。这个开源项目我没细看,编译执行应该是常规的

#./configure
#make
root#make install


tinyradius:tinyradius是Java版本的radius library。项目有一个比较详细的中文说明文档。如果需要biger big,请移步官方页面

如果需要中文版本文档,请猛击

ace-radius:ace-radius是一个和tinyradius类似的radius library,不过这个是用c实现的。项目简单易用,请挪至官方页面查看其文档。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章