TCP/IP详解读后感第九弹:番外获取RFC文件

之前,笔者聊过TCP/IP协议簇标准化过程,所有有关Internet的正式标准最后都会以RFC文档出版。当然,还有大量的备忘RFC文档,并非正式标准,但能够提供更加完善的信息。于是,学习网络过程中,如果遇到一些疑难问题,需要查看标准文档,这就涉及到今日本文重点——获取RFC文档。

首先简单介绍何为RFC文档(网络知识圣经)——“征求意见稿(Request For Comments,RFC),始于1969年,最初用于记录有关ARPANET开发的非正式文档,最终演变为用于记录互联网规范、协议、过程等,由互联网工程任务组(IETF)发布的一系列标准备忘录。文件收集有关互联网相关信息,以及UNIX和互联网社区的软件文件,以编号排定。目前RFC文件由互联网协会(ISOC)赞助发行。”(摘自维基百科)

然后先说简单方法,笔者于此贴三处网址:

http://www.faqs.org/rfcs/index.html/;

RFC编辑组首页,https://www.rfc-editor.org/;

IETF有关RFC的工具页,https://tools.ietf.org/rfc/index;

大家喜闻乐见的中文RFC参考文档,http://www.cnpaf.net/class/rfcall/.

最后聊聊符合程序员特质的方法(所谓程序员特质,即能让人看不懂就一定不让人看懂,能让人看懂就尽量不让人看懂),使用匿名ftp获取RFC文档。何为ftp,ftp代表的意思是“文件传输协议”,一种用于Internet的协议,属于TCP/IP协议簇。ftp使文件能够从Internet上的某一台计算机(服务器)传送至另一台。现在有很多基于ftp协议开发的应用程序。ftp程序使用者必须同时登陆到双方主机,如此才能于它们之间传输文件。因此用户必须于两台主机上均有帐号与密码从而实现登陆。

Internet上存在很多类似于RFC的档案站点(档案站点是一台存储大量信息的服务器,非常类似传统意义的图书馆)。Internet用户能够通过ftp从这些档案站点获得数量巨大的信息,从中找到自己想要的答案。为解决访客用户登录问题,这些档案站点,通常会提供一个公用帐号,即所谓“匿名ftp”。

“匿名ftp”是档案站点给予外界对其档案信息进行一般性访问的一种实现方式。此类站点创建一特殊帐号,叫做“anonymous”。普通Internet用户以“anonymous”身份对档案站点有限制地访问。“anonymous”用户操作权限相当有限,仅有的被允许的操作,包括使用ftp登陆进站;访问有限的目录;查阅有限的目录内容;下载有限可视范围内的文件(被禁止向档案站点上传文件)。通常,匿名用户帐号能够接受任何字符串作为密码,但目前普遍采用的密码是“guest”或者一电子邮件地址。如今,很多档案站点明确要求使用电子邮件地址作为匿名用户密码,拒绝如“guest”这样的密码。提供电子邮件地址,有助于这些档案站点了解自己的用户构成。

唠叨结束,下面随笔者进入实作,从ftp.rfc-editor.org获取RFC 959文档(有关ftp协议的标准文件):

首先以匿名ftp的方式访问站点ftp.rfc-editor.org,如图,

接着笔者希望罗列自己有权访问的目录列表,于是查询站点提供的ftp命令支持,如图,

然后使用dir命令罗列目录,但是凡事总会出现意外,一帆风顺那是不存在的。

此处可看到,并未出现大家希望的结果。从提示看,命令执行成功,但没有出现目录列表,那么问题出在哪?

注意红框内容,提示要求笔者考虑使用PASV模式,至此,有必要介绍有关ftp的两种连接模式——主动模式(PORT)和被动模式(PASV)。

ftp是通信协议中比较特殊的,其它通信协议如http,只需要一条连接与一个端口,但ftp需要两条连接与两个端口,其中一条用于传递客户端与服务器间的命令(通常服务器把命令端口设置为21),另一条用于传递文件数据(通常服务器把数据端口设置为20)。

主动模式:

其实上述问题产生原因,是由于早期ftp协议制定时,并没有能够有效考虑到后续网络防火墙的发展。于默认的主动模式下,客户端随机开启一大于1023的端口N,并与服务器端口21建立连接。之后客户端继续开启端口N+1等待连接,并通知服务器预备的数据端口N+1已准备就绪,于是服务器端口20开始主动尝试与客户端端口N+1建立连接。问题就发生于服务器主动寻求连接的最后一步,对于客户端而言,外部系统尝试访问计算机内部端口的连接都是存在巨大风险的行为,它应该被禁止。

步骤一、客户端使用port 1050与服务器建立连接,并提供port 1051相关信息给服务器;

步骤二、服务器响应客户端连线;

步骤三、服务器尝试主动与客户端port 1051建立连接(存在防火墙时,问题多发于此步骤);

步骤四、客户端答复服务器。

于是,我们发展出第二种连接模式,被动模式:

被动模式下,无论命令连接还是资料连接都由客户端实现,即开始的命令连接与主动模式相同,区别是数据连接时,客户端提供PASV命令(而非此前的IP地址与端口号)。服务器收到PASV命令后,准备一大于1023的通信端口,并把服务器IP与端口号回复给客户端,被动等待客户端连接上线。

步骤一、客户端使用port 1050与服务器建立连接,并发出PASV的请求;

步骤二、服务器回应客户端连接,并通知客户端,服务器已开启port 2345等待数据连线;

步骤三、客户端使用port 1051与服务器port 2345建立数据连接;

步骤四、服务器答复客户端。

此模式虽然解决问题,但是对服务器提出更多要求,最明显的即需要服务器预留开启一定范围的端口供客户端连接。

接着,笔者以被动模式再次尝试演示。

区别仅仅是红框中增加“-p”选项,即开启passive模式,“-d”选项只是用于开启调试模式。大家能够看到根目录下存在两个子目录,其中in-notes就是笔者所需,通过“cd in-notes”切换到指定目录,然后执行“get rfc-index-latest.txt”即可获取最新索引目录——索引到手,天下我有。

完~

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180314A05W5Q00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券