rfc1928:RFC1928-vb教程



中国互动出版网()
RFC文档中文翻译计划(-
pub.com/compters/emook/aboutemook.htm)
E-mail:
译者:Radeon(Radeon )
译文发布时间:2001-6-18
版权:本中文翻译文档版权归中国互动出版网所有可以用于非商业用途自由转载
但必须保留本文档翻译及版权信息




Network Working GroupM. Leech
Request for Comments:1929Bell-Northern Research Ltd
Category: Standard TrackM. Ganis
International Business Machines
Y. Lee
NEC s Laboratory
R. Kuris
Uny Corporation
D. Koblas
Independent Consultant
L. Jones
Hewlett-Packard Company
March 1996

SOCKS V5

本备忘录状态:
本文档讲述了种Internet社区Internet标准跟踪协议它需要进步进行讨论和建议以
得到改进请参考最新版“Internet正式协议标准” (STD1)来获得本协议标准化程度和状
本备忘录发布不受任何限制
知识背景
这个备忘录描述了从同协议版本(版本4[1])发展而来个协议这个新协议起
源于当前些讨论和原型实现(active discussions and prototype implementations)关键
献人有:Marcus Leech: Bell-Northern Research, David Koblas: Independent Consultant, Ying-Da
Lee: NEC s Laboratory, LaMont Jones: Hewlett-Packard Company, Ron Kuris: Uny
Corporation, Matt Ganis: International Business Machines

目录

1.介绍2
2.现有协议2
3.基于TCP协议客户3
4.请求3
5.地址4
6.应答4
7.基于UDP协议客户6
8. 安全性考虑7
9. 参考书目7

1.介绍
利用网络防火墙可以将组织内部网络结构从外部网络如INTERNET中有效地隔离这种思路方法
在许多网络系统中正变得流行起来这种防火墙系统通常以应用层网关形式工作在两个网络的
提供TELNET、FTP、SMTP等接入随着越来越多使全球信息查找更容易复杂应用层协


出现有必要提供个通用框架来使这些协议安全透明地穿过防火墙而且在实际应用中还需
种安全认证方式用以穿越防火墙这个要求起源于两个组织网络中客户/服务器关系
这个关系需要得到控制并要求有安全认证
在这儿所描述协议框架是为了让使用TCP和UDP客户/服务器应用更方便安全地使用
网络防火墙所提供服务所设计这个协议从概念上来讲是介于应用层和传输层的间“中介层
(shim-layer)”因而不提供如传递ICMP信息的类由网络层网关所提供服务


2.现有协议
当前存在个协议SOCKS 4它为TELNET、FTP、HTTP、WAIS和GOPHER等基于TCP协议
户/服务器提供了个不安全防火墙而这个新协议扩展了SOCKS V4以使其支持UDP、
框架规定安全认证方案、地址解析方案(addressing scheme)中所规定域名和IPV6为了实现
这个SOCKS协议通常需要重新编译或者重新链接基于TCP客户端应用以使用SOCKS库中相
加密
注意:
除非特别注明所有出现在数据包格式图中十进制数字均以字节表示相应域长度
果某域需要给定个字节用X´hh´来表示这个字节中如果某域中用到单
词´Variable´这表示该域长度是可变且该长度定义在个和这个域相关联(1 – 2
个字节)域中个数据类型域中


3.基于TCP协议客户
个基于TCP协议客户端希望和个只能通过防火墙可以到达目标(这是由实现所决定
)建立连接它必须先建立个和SOCKS服务器上SOCKS端口TCP连接通常这个TCP端口是
1080当连接建立后客户端进入协议“握手(negotiation)”过程:认证方式选择根据选
方式进行认证然后发送转发要求SOCKS服务器检查这个要求根据结果或建立合适
连接或拒绝
除非特别注明所有出现在数据包格式图中十进制数字均以字节表示相应域长度如果某
域需要给定个字节用X´hh´来表示这个字节中如果某域中用到单
词´Variable´这表示该域长度是可变且该长度定义在个和这个域相关联(1 – 2个
字节)域中个数据类型域中
客户端连到服务器后然后就发送请求来协商版本和认证思路方法:

VER
NMETHODS
METHODS
1
1
1 to 255
这个版本SOCKS协议中VER字段被设置成X´05´NMETHODS字段包含了在METHODS字段中
出现思路方法标示数目(以字节为单位)
服务器从这些给定思路方法中选择个并发送个思路方法选中消息回客户端:
VER
METHOD
1
1
如果选中消息是X´FF´这表示客户端所列出思路方法列表中没有个思路方法被选中客户端
必须关闭连接
当前定义思路方法有:
?X´00´不需要认证
?X´01´ GSSAPI
?X´02´ 用户名/密码
?X´03´ -- X´7F´ 由IANA分配
?X´80´ -- X´FE´ 为私人思路方法所保留
?X´FF´ 没有可以接受思路方法
然后客户和服务器进入由选定认证思路方法所决定子协商过程(sub-negotiation)各种区别
思路方法子协商过程描述请参考各自备忘录
开发者如果要为自己思路方法得到个思路方法号可以联系IANA可以参考有关已经被分配号码
文档以得到当前所有思路方法列表和相应协议
符合本文档SOCKS V5实现必须支持GSSAPI并且在将来支持用户名/密码认证方式


4.请求
旦子协商过程结束后客户端就发送详细请求信息如果协商思路方法中有以完整性检查和
/或安全性为目封装这些请求必须按照该思路方法所定义方式进行封装
SOCKS请求格式如下:
VER
CMD
RSV
ATYP
DST.ADDR
DST.PORT
1
1
X´00´
1
Variable
2
其中
?VER 协议版本: X´05´
?CMD
?CONNECT:X´01´
?BIND:X´02´
?UDP ASSOCIATE:X´03´
?RSV 保留
?ATYP 后面地址类型
?IPV4:X´01´
?域名:X´03´
?IPV6:X´04´´
?DST.ADDR 目地址
?DST.PORT 以网络字节顺序出现端口号
SOCKS服务器会根据源地址和目地址来分析请求然后根据请求类型返回个或多个应答

5.地址
ATYP字段中描述了地址字段(DST.ADDRBND.ADDR)所包含地址类型:
?X´01´
基于IPV4IP地址4个字节长
?X´03´
基于域名地址地址字段中字节是以字节为单位该域名长度没有结尾NUL字

?X´04´
基于IPV6IP地址16个字节长


6.应答
旦建立了个到SOCKS服务器连接并且完成了认证方式协商过程客户机将会发送
个SOCKS请求信息给服务器服务器将会根据请求以如下格式返回:
VER
REP
RSV
ATYP
BND.ADDR
BND.PORT
1
1
X´00´
1
Variable
2
其中:
?VER 协议版本: X´05´
?REP 应答字段:
?X´00´ 成功
?X´01´ 普通SOCKS服务器请求失败
?X´02´ 现有规则不允许连接
?X´03´ 网络不可达
?X´04´ 主机不可达
?X´05´连接被拒
?X´06´ TTL超时
?X´07´ 不支持命令


?X´08´ 不支持地址类型
?X´09´ – X´FF´ 未定义
?RSV 保留
?ATYP 后面地址类型
?IPV4:X´01´
?域名:X´03´
?IPV6:X´04´
?BND.ADDR 服务器绑定地址
?BND.PORT 以网络字节顺序表示服务器绑定段口
标识为RSV字段必须设为X´00´
如果选中思路方法中有以完整性检查和/或安全性为目封装这些应答必须按照该思路方法所定
方式进行封装

CONNECT
在对个CONNECT命令应答中BND.PORT包含了服务器分配用来连到目标机端口号
BND.ADDR则是相应IP地址由于SOCKS服务器通常有多个IP应答中BND.ADDR常和客户端
连到SOCKS服务器那个IP区别
SOCKS服务器可以利用DST.ADDR和DST.PORT以及客户端源地址和端口来对个CONNECT请
求进行分析

BIND
BIND请求通常被用在那些要求客户端接受来自服务器连接协议上FTP是个典型
它建立个从客户端到服务器端连接来执行命令以及接收状态报告而使用另个从服务
器到客户端连接来接收传输数据要求(如LSGETPUT)
建议只有在个应用协议客户端在使用CONNECT命令建立主连接后才可以使用BIND命令建
立第 2个连接建议SOCKS服务器使用DST.ADDR和DST.PORT来评价BIND请求
个BIND请求操作过程中SOCKS服务器要发送两个应答给客户端当服务器建立并绑
个新套接口时发送第个应答BND.PORT字段包含SOCKS服务器用来监听进入连接
口号BAND.ADDR字段包含了对应IP地址客户端通常使用这些信息来告诉(通过主连接或控
制连接)应用服务器连接汇接点第 2个应答仅发生在所期望到来连接成功或失败的后在第
2个应答中BND.PORT和BND.ADDR字段包含了连上来主机IP地址和端口号

UDP ASSOCIATE
UDP ASSOCIATE请求通常是要求建立个UDP转发进程来控制到来UDP数据报DST.ADDR和
DST.PORT 字段包含客户端所希望用来发送UDP数据报IP地址和端口号服务器可以使用这个
信息来限制进入连接如果客户端在发送这个请求时没有地址和端口信息客户端必须用全0来
填充
当和UDP相应TCP连接中断时该UDP连接也必须中断
应答UDP ASSOCIATE请求时BND.PORT 和BND.ADDR字段指明了客户发送UDP消息至服务器
端口和地址

应答处理
个应答(REP值不等于00)指明出错时SOCKS服务器必须在发送完应答消息后小段时间
内终止TCP连接这段时间应该在发现后少于10秒
如果个应答(REP值等于00)指明成功并且请求是个BIND或CONNECT时客户端就可以
开始发送数据了如果协商认证思路方法中有以完整性、认证和/或安全性为目封装这些请求
必须按照该思路方法所定义方式进行封装类似当以客户机为目数据到达SOCKS服务器
SOCKS服务器必须用正在使用思路方法对这些数据进行封装


7.基于UDP协议客户
在UDP ASSOCIATE应答中由BND.PORT指明了服务器所使用UDP端口个基于UDP协议
客户必须发送数据报至UDP转发服务器该端口上如果协商认证思路方法中有以完整性、认证和/
或安全性为目封装这些数据报必须按照该思路方法所定义方式进行封装每个UDP数据报都有
个UDP请求头在其首部:
RSV
FRAG
ATYP
DST.ADDR
DST.PORT
DATA
2
1
1
Variable
2
Variable
在UDP请求头中字段是:

?RSV 保留 X´0000´
?FRAG 当前分段号
?ATYP 后面地址类型
?IPV4:X´01´
?域名:X´03´
?IPV6:X´04´
?DST.ADDR 目地址
?DST.PORT 以网络字节顺序出现端口号
?DATA 用户数据
个UDP转发服务器转发个UDP数据报时不会发送任何通知给客户端;同样它也将丢
弃任何它不能发至远端主机数据报当UDP转发服务器从远端服务器收到个应答数据报时
必须加上上述UDP请求头并对数据报进行封装
UDP转发服务器必须从SOCKS服务器得到期望客户端IP地址并将数据报发送到UDP
ASSOCIATE应答中给定端口号如果数据报从任何IP地址到来而该IP地址和该特定连接中指
IP地址区别那么该数据报会被丢弃
FRAG字段指明数据报是否是些分片中如果SOCKS服务器要实现这个功能X´00´
指明数据报是独立;其他则越大越是数据报尾端介于1到127的间值介绍说明了该分片在分片
序列里位置每个接收者都为这些分片提供个重组队列和个重组计时器这个重组队列必
须在重组计时器超时后重新并丢弃相应数据报或者当个新到达数据报有个比当
前在处理数据报序列中最大FRAG值要小时也必须重新化从组队列重组计时器必须小
于5秒只要有可能应用最好不要使用分片
分片实现是可选;如果某实现不支持分片所有FRAG字段不为0数据报都必须被丢

个SOCKSUDP编程界面(The programming erface for a SOCKS-aware UDP)必须报告
当前可用UDP数据报缓存Cache空间小于操作系统提供实际空间
?如果 ATYP是 X´01´ - 10+method_dependent octets smaller
?如果 ATYP是X´03´ - 262+method_dependent octets smaller
?如果 ATYP是X´04´ - 20+method_dependent octets smaller

8. 安全性考虑
这篇文档描述了个用来透过IP网络防火墙应用层协议这种传输安全性在很大程度上
依赖于特定实现所拥有以及在SOCKS客户和SOCKS服务器的间经协商所选定特殊认证和封装方

系统管理员需要对用户认证方式选择进行仔细考虑




9. 参考书目

[1] Koblas, D., \"SOCKS\", Proceedings: 1992 Usenix Security Symposium.


作者地址
Marcus Leech
Bell-Northern Research Ltd
P.O. Box 3511, Station C
Ottawa, ON
CANADA K1Y 4H7
Phone: (613) 763 - 9145
EMail:
RFC1929——SOCKETS V5 SOCKETS V5
RFC文档中文翻译计划



Tags:  vb.net教程 vb6.0教程 vb教程 rfc1928

延伸阅读

最新评论

发表评论