宋揚
【摘要】本文介紹了互聯網的標準協議和分析方法。介紹互聯網協議文件RFC,并作為舉例分析了FTP協議
【關鍵字】RFC 互聯網協議
前言
近年來,互聯網正以令人眩目的速度增長,這個增長包括互聯網這個網絡規模和與之相關的技術,規模的增長帶來互聯網技術的廣泛普及,使其中的如IP,TCP,HTTP,FTP,TELNET,HTML,NNTP等等毫無爭議地成為事實的標準,同時又給以上技術提出新的要求和為其發展帶來了直接的動力;技術的不斷提高又克服了一個又一個網絡相聯出現的難題和障礙,技術和應用的相互促進,使人類文明能在事實上的邁入類信息社會。
隨著互聯網的不斷擴大,發展的無序化日益嚴重,互聯網的標準化無疑對保證互聯網及相關技術健康發展起了決定性作用。
在這里作者對互聯網標準組織,互聯網標準化過程,互聯網標準文件等做個簡單的介紹,希望 能提供給讀者一個直接快速地深入了解互聯網的方法,同時鼓吹一種深入核心技術和融入世界規范的思想。
1 描述互聯網協議的官方文件 RFC(Request For Comment)
在互聯網的開發和研究中,產生了一系列技術協議(protocol),而其中一些被互聯網的標準化機構采用,解析這些協議的文件被稱為RFC(request for comments),中文意思是請求評注。由于RFC包含了一系列文件,所以下文用RFCs表示這一系列的文件。這些文件是關于互聯網標準的最權威的定義,是互聯網 OFFICIAL PROTOCOL STANDARDS,參見RFC-2400。
RFCs文檔由互聯網中的標準化機構-因特網活動委員會IAB(互聯網 Activities Board)負責編輯管理和發表。這里不對IAB做詳細介紹,有興趣請參閱RFC-1160 "The 互聯網 Activities Board"和RFC-1601 "Charter of the 互聯網 Architecture Board(IAB)"。 IAB下屬有因特網工程特別任務組IETF(互聯網 Engineering Task Force)和因特網研究特別任務組IRTF(互聯網 Research Task Force),這兩個任務組各有一個領導組被稱做IESG(互聯網 Engineering Steering Group)和IRSG(互聯網 Research Steering Group)。 大部分的互聯網協議的開發和標準化活動在IETF的工作組中進行。
一篇RFC的發表必須得到IESG的同意,對于一些記錄實驗工作的文章,編輯者在發表前通知了IESG,由相關的IETF工作組或IRTF研究組檢討并向作者提供評價意見。
2 互聯網協議的分析方法
第一尋找可以找到RFCs文件的地方
有關互聯網的問題當然最好在互聯網中找答案,RFCs文件在互聯網的許多地方可以找到,根據本人實踐,我發現以下站點對此組織得不錯,資料查找起來非常方便。
http://www.cis.ohio-state.edu/hypertext/information/rfc.html
第二確定您所研究的協議的最新版本的RFC文件。
如前文所述,在RFC-2400中有協議的完整清單,按照清單找到的RFC一般是協議的最新版本,如果協議的STATE是Standard就更好了。如下文所分析的FTP協議的RFC文件是RFC-959。
第三,獲取RFC文件
根據RFC文件編號查看以上站點的RFCs文件索引
http://www.cis.ohio-state.edu/htbin/rfc/INDEX.rfc.html
在里面您可以很快地找到您要找的RFC文件。
第四,閱讀描述協議的RFC文件全文
這不用說了。
第五,實踐
實踐是檢驗真理的唯一標準,雖然互聯網協議不是什么真理,但如果能實踐一下對理解和掌握都有好處,許多互聯網應用層的協議可視程度非常高,協議中許多控制和參數用英文短語來表示,所傳輸的數據如文本也是ASCII碼,如HTTP,FTP等,這類協議單純用Telnet就可以模擬一下客戶端程序的運作,當然,編程實現是最好的鍛煉。
第六,總結
總結確實是不錯的學習方法,自己的文章是一面鏡子。
3.舉例:FTP協議分析
FTP協議的定義在 RFC-959 "FILE TRANSFER PROTOCOL"(Standard,Recommended)。
3.1介紹
FTP 文件傳輸協議(File Transfer Protocol)
FTP協議是一個應用層協議,在TCP上實現的。
開發FTP的目的是
1)促進文件(計算機程序和/或數據)的共享。
2)鼓勵對遠程計算機間接或隱式(implicit)(通過程序)的使用。
3)對用戶屏蔽不同主機系統中的文件儲存的細節。
4)可靠和高效率地實現文件的傳送。
用戶雖然可以直接通過一個終端使用FTP協議,但FTP協議的設計主要是給程序使用的。
3.2常用的FTP命令解釋
由于篇幅所限,這里不對以上每個FTP命令做解釋,這里僅解釋一下作者認為比較重要或常用的FTP命令,如果讀者需要深入了解請參閱 RFC-959 "FILE TRANSFER PROTOCOL"。
USER NAME(USER〈sp〉〈username〉)
本命令的參數〈username〉標識用戶名,服務器憑這個用戶的權限使用文件系統。這個命令一般是在控制連接后的第一個命令。這個命令成功執行后,服務器會等待PASS命令,PASS也成功執行后,用戶才算等錄成功,可以存取Server-FTP中的文件。
PASSWORD(PASS〈sp〉〈password〉)
這個命令是USER命令的補充,向Server-FTP發送由〈password〉所表示的密碼,該命令執行成功,USER命令所指示的〈username〉才算成功登錄。這里的〈password〉是明文傳送。
CHANGE WORKING DIRECTORY(CWD〈SP〉〈pathname〉)
令Server-FTP改變當前目錄到〈pathname〉。
LOGOUT(QUIT)
這個命令表示用戶停止使用FTP,Server-FTP會關閉控制連接。
DATA PORT(PORT 〈SP〉〈host-port〉)
User-FTP這個命令告訴Server-FTP,等待Server-DTP連接的DTP(可能是User-DTP或其他的Server-DTP)的地址,〈host-port〉所指示的就是這個地址,具體的PORT命令形式如下。
PORT h1,h2,h3,h4,p1,p2
以上六個參數都是小于256的數字。
h1,h2,h3,h4表示IP地址,如192,168,0,1 表示IP地址是192.168.0.1的主機。
p1,p2,表示端口號,注意p1和p2都是小于256,所以1000表示為3,232(1000=3*256+232)
RETRIEVE(RETR〈SP〉〈pathname〉)
這個命令請求Server-FTP通過數據連接向User-DTP傳送由〈pathname〉指示的文件的數據。
STOR(RETR 〈SP〉〈pathname〉)
這個命令請求Server-FTP通過數據連接接收User-DTP傳送的數據,數據保存在由〈pathname〉指示的文件中。注意〈pathname〉是在Server-FTP的主機上的。
PRINT WORKING DIRECTORY(PWD)
Server-FTP收到該命令后在回應中返回當前工作目錄名。
LIST(LIST [〈SP〉〈pathname〉])
Server-FTP收到該命令后向User-DTP發送目錄〈pathname〉的文件目錄信息。如果沒有〈pathname〉參數,則返回當前目錄的文件目錄信息。
STATUS(STAT [〈SP〉〈pathname〉])
這個命令的回應有兩種情況,沒有〈pathname〉參數和有〈pathname〉參數。
1)沒有參數,Server-FTP會在回應中返回的一些狀態信息,如以下是我Linux上的Server-FTP返回的信息:
211-zfm.home FTP server status:
Version wu-2.4.2-VR17(1)Mon Apr 19 09:21:53 EDT 1999
Connected to zfl_k6.home(192.168.0.1)
Logged in as fszfl
TYPE:ASCII,FORM:Nonprint;STRUcture:File;transfer MODE:Stream
No data connection
0 data bytes received in 0 files
0 data bytes transmitted in 0 files
0 data bytes total in 0 files
145 traffic bytes received in 0 transfers
4306 traffic bytes transmitted in 0 transfers
4501 traffic bytes total in 0 transfers
211 End of status
2)如果有〈pathname〉參數,則在回應中返回〈pathname〉的目錄信息,如以下是我發送STAT . 的結果:
213-status of .:
total 64
drwxrwxr-x 2 fszfl fszfl 1024 Nov 25 01:37 .
drwx------ 12 fszfl fszfl 1024 Nov 29 00:35 ..
213 End of Status
這個功能好象和LIST有點相似,但LIST中的目錄信息在數據連接中返回的。
HELP [〈SP〉〈string〉]
這是幫助命令,如果沒有參數則返回FTP命令列表,如果有參數則返回〈string〉表示的命令的語法。
3.3 FTP回應
3.3.1 回應的格式
FTP回應有3位數字編碼和有關信息的文本組成,編碼后一個分隔符,如果回應中返回信息的長度大于一行,則編碼后跟減號(-),否則跟空格(〈sp〉)。多于一行的信息可以參考上面的例子。注意最后還有"213 End of Status"表示信息的結束。FTP回應使用的編碼是約定好的,信息文本可以由具體的Server-FTP設計。顯然,編碼為了方便程序設計,文本信息可以方便閱讀。
為了敘述方便,下文把這3位編碼稱為回應碼。
3.3.2 回應碼含義
3位回應碼的每一位都有確定的含義。第一位表示命令的執行結果,表示成功,失敗,或命令沒有完成。第二位表示回應的類型,第三位一般指第二位的進一步細化,預留給將來的發展。
第1位可能的取值:
1yz 初步確認(Positive Preliminary reply)
表示請求的命令已經開始,請等待進一步的回應,在此之前不要發送新的FTP命令。
2yz 完成確認(Positive Completion reply)
表示請求的命令已經成功完成,可以發送新的請求。
3yz 中間狀態確認(Positive Intermediate reply)
請求的命令已經被接受,等待下一條相關的命令提供進一步的信息。這個回應用于一些命令序列中,如USER和PASS,如果USER被接受則可以得到這個回應,表明還需要密碼來完成用戶的登錄。
4yz 暫時否認(Transient Negative Completion reply)
Server-FTP由于一些暫時的原因沒有接收命令,User-FTP最好重新請求這個命令。如果是命令序列,則需要從該序列的第一條指令開始。
5yz 命令有錯(Permanent Negative Completion reply)
命令沒有被接收,具體的拒絕原因由回應碼第二位指出。
第2位可能的取值,描述回應的分類:
x0z 語法(Syntax)- 命令語法不正確,或Server-FTP沒有實現這個功能。
x1z 信息(Information)- 描述如STAT或HELP等命令要求Server-FTP信息的返回。
x2z 連接(Connections)- 描述有關控制和數據連接。
x3z 帳戶和認證(Authentication and accounting)- 登錄過程的回應。
x4z 現在還沒有指定。
x5z 文件系統(File system)- 這個回應反映服務器的文件系統的狀態。
第3位的的含義需要根據第1,2位的值再細化。
3.3.3 回應舉例
3位回應碼的不同組合產生了許多不同的含義,篇幅所限不一一列舉,具體請查 RFC-959。下面是幾個例子:
200 Command okay.
500 Syntax error,command unrecognized.
501 Syntax error in parameters or arguments
3.4 實踐
有條件的讀者可以按以上例子實踐一下,在win98的user-FTP程序中有debug命令,可以打開調式模式,調式模式中會顯示使用中的FTP命令和回應,讀者可以很清晰地驗證FTP的使用過程。
如果還有條件可以用TCP編程技術,按FTP的原理和約定編制一個簡單的User-FTP或Server-FTP程序,應該不是非常困難的事,但非常有利于理解。