3. 基于TCP的客户端流程 (Procedure for TCP-based clients)
当基于TCP的客户端希望建立到某个对象的连接,而该对象只能通过防火墙访问时 (这种判断由具体实现决定),它必须打开到SOCKS服务器系统上适当SOCKS端口的TCP连接.SOCKS服务通常位于TCP端口1080.如果连接请求成功,客户端进入认证方法协商 (negotiation for the authentication method),使用选定的方法进行认证,然后发送中继请求 (relay request).SOCKS服务器评估该请求,并建立相应的连接或拒绝它.
除非另有说明,数据包格式图中出现的十进制数字表示相应字段的长度,以八位字节为单位.当给定的八位字节必须采用特定值时,使用语法X'hh'表示该字段中单个八位字节的值.当使用"Variable" (可变)一词时,表示相应字段具有可变长度,该长度由相关的 (一个或两个八位字节的)长度字段或数据类型字段定义.
客户端连接到服务器,并发送版本标识符/方法选择消息 (version identifier/method selection message):
+----+----------+----------+
|VER | NMETHODS | METHODS |
+----+----------+----------+
| 1 | 1 | 1 to 255 |
+----+----------+----------+
VER字段设置为X'05',表示该版本的协议.NMETHODS字段包含METHODS字段中出现的方法标识符八位字节的数量.
服务器从METHODS中给出的方法中选择一个,并发送方法选择消息 (METHOD selection message):
+----+--------+
|VER | METHOD |
+----+--------+
| 1 | 1 |
+----+--------+
如果选定的METHOD是X'FF',表示客户端列出的方法都不可接受,客户端必须 (MUST)关闭连接.
METHOD当前定义的值为:
- X'00' 无需认证 (NO AUTHENTICATION REQUIRED)
- X'01' GSSAPI
- X'02' 用户名/密码 (USERNAME/PASSWORD)
- X'03' 到 X'7F' IANA分配 (IANA ASSIGNED)
- X'80' 到 X'FE' 保留用于私有方法 (RESERVED FOR PRIVATE METHODS)
- X'FF' 无可接受方法 (NO ACCEPTABLE METHODS)
然后客户端和服务器进入方法特定的子协商 (method-specific sub-negotiation).
方法相关子协商的描述出现在单独的备忘录中.
本协议的新METHOD支持的开发人员应联系IANA获取METHOD编号.应参考ASSIGNED NUMBERS文档以获取当前的METHOD编号列表及其相应的协议.
兼容的实现必须 (MUST)支持GSSAPI,并应当 (SHOULD)支持用户名/密码认证方法.