精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
锐英源精品开源心得,转载请注明出处:锐英源,www.wisestudy.cn,孙老师作品,联系电话13803810136。
注意
本文是RADIUS协议。最初RADIUS使用UDP 1645端口,因为和“datametrics”服务冲突后来官方将其改为1812端口。
为什么RADIUS使用UDP而不使用TCP作为传输层协议是一个最常使用到的问题。使用UDP有严格的技术原因。
RADIUS是一个基于事务的协议,有一些有趣的特点:
1. 如果主服务器的请求失败,必须请求备用服务器。
为了满足这个需求,需要在传输层保留用作重传的报文复本。同时需要重传计时器。
2. 这个协议对时间的需求和TCP协议有很大不同
一个极端是,RADIUS协议不需要丢失数据的应答检测。用户愿意等待几秒进行认证。不需要TCP重传机制(基于平均往返时间),也不需要增加TCP的这部分负载。
另一个极端是,用户不愿意等待几分钟进行认证。所以TCP2分钟的可信传输时间没用。快速的偿失另一台服务器在用户放弃前让用户通过认证。
3. UDP无状态特性是协议很简单。
客户端和服务器过来过去。系统重启都不依赖于循环动力。一般情况下,TCP的超时和丢包检测没有理由存在,通过代码可以处理异常时间。UDP完全没有这些异常处理机制。每一个客户端和服务器可以只打开UDP传输一次然后一直为所有网络失败时间开放。
4. UDP简化服务器实现。
早期的RADIUS服务器实现中,服务器使用单线程。只有一个请求被接收、处理、返回。当后端安全策略占据1秒或以上时间时,就不能控制了。在真实环境中每分钟有上百个进行认证服务器请求队列已满,应答返回的的时间比用户可以等待的时间还要长(当有数据库查询或DNS需要30秒以及更长时间时这种情况更加严重)。显而易见的解决方案是使用多线程服务器。使用UDP会更加容易。每一个独立的线程被为每一个请求服务,并且这些线程可以直接使用简单的UDP报文应答客户端NAS。
UDP不是灵丹妙药。使用UDP需要实现TCP中的一些内置功能:必须手动处理同一个服务器的重传计时器。这时使用UDP的一个不足。
一个RADIUS报文封装在UDP报文中,端口是1812。当应答生成后,源端口和目的端口被倒转。
这份文档介绍RADIUS协议。最初的RADIUS协议使用UDP 1645端口,这和datametrics服务冲突。RADIUS协议的正式端口是1812。
RADIUS协议数据结构如下,数据从左向右传送。
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Code | Identifier | Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | Authenticator | | | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Attributes ... +-+-+-+-+-+-+-+-+-+-+-+-+- |
Code字段长度为一个字节,表示RADIUS报文的类型。如果收到报文Code字段非法,则被静默丢弃。
RADIUS报文中code字段含义如下:
字段 |
类型 |