备注:本篇文档是根据rfc1928协议和网络上相关的译文编写的,由于阅读这些内容时感觉到晦涩难懂。所以,在该文档中编写本篇内容时,夹杂了较多的个人理解的内容。这些内容难免会有理解错误的地方,希望在阅读时稍加注意。
1.背景
防火墙的使用,有效的隔离了机构的内部网络和外部网络,这种类型的Internet架构变得越来越流行。这些防火墙系统大都充当着网络之间的应用层网关的角色,通常提供经过控制的Telnet、FTP和SMTP访问。为了推动全球信息的交流,更多的新的应用层协议的推出。这就有必要提供一个总的架构使这些协议能够更明显和更安全的穿过防火墙。也就有必要在实际上为它们穿过防火墙提供一个更强的认证机制。这种需要源于客户机-服务器联系在不同组织网络之间的实现,而这种联系需要被控制和是很大程度上被认证的。
该协议框架是为了让使用TCP和UDP的客户/服务器应用程序更方便地使用网络防火墙所提供的服务所设计的。该协议在概念上被描述为一个介于应用层和传输层之间的"隔离层",但是这类服务并不提供网络层网关服务,如ICMP报文的传输。
2.现有的协议
SOCKS4为基于TCP的客户机/服务器应用程序提供了一种不安全的穿越防火墙的机制,包括TELNET、FTP和当前最流行的信息发现(information-discovery)协议如HTTP、WAIS和GOPHER. 这个新的协议扩展了SOCKS4模型以包含UDP,通过扩展了框架以包含通用强认证方案的条款,通过扩展地址解析方案(addressing scheme)以包含域名和IPV6地址。
SOCKS协议的实现通常涉及到基于TCP的客户端应用程序的重新编译或者重新链接,以使用SOCKS库中适当的封装程序。
3.基于TCP客户机的程序
当一个基于TCP协议的客户端希望与一个只能通过防火墙可以到达的目标(这是由实现所决定的)建立连接时,它就必须在SOCKS服务器端的适当的SOCKS端口打开一个TCP连接。S通常这个TCP端口是1080。当连接建立后,客户端进入协议的“握手(negotiation)”过程:认证方式的选择,根据选中的 方式进行认证,然后发送转发的要求。SOCKS服务器检查这个要求,根据结果,或建立合适的连接,或拒绝。
备注:
除非特别说明,所有出现在报文格式图中的十进制数字均表示该字段的字节长度。如果某个字节需要给出具体的数值,则使用X’hh’的格式来表示这个字段的值。如果某个字段的给定的字节长度是’Variable’,则表示该字段的字节长度是可变的,具体的字节长度由一个相关联字段指定。该关联字段定义长度的方式有两种,一种是具体的长度数值(1-2个字节),另外一种是说明数值类型。
客户端连到服务器后,然后就发送请求来协商版本和认证方法:
VER |
NMETHODS |
METHODS |
1 |
1 |