et,put)。 建议只有在一个应用协议的客户端在使用connect命令建立主连接后才可以使用bind命令建 立第二个连接。建议socks服务器使用dst.addr和dst.port来评价bind请求。 在一个bind请求的操作过程中,socks服务器要发送两个应答给客户端。当服务器建立并绑 定一个新的套接口时发送第一个应答。bnd.port字段包含socks服务器用来监听进入的连接的端 口号,band.addr字段包含了对应的ip地址。客户端通常使用这些信息来告诉(通过主连接或控 制连接)应用服务器连接的汇接点。第二个应答仅发生在所期望到来的连接成功或失败之后。在第 二个应答中,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的数据报都必须被丢 弃。 一个socks的udp编程界面(the programming interface for a socks-aware udp)必须报告 当前可用udp数据报缓存空间小于操作系统提供的实际空间。 ? 如果 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: mleech@bnr.ca rfc1929——sockets v5 sockets v5 rfc文档中文翻译计划