HTTP和FTP的區別
今天去面試,面試官問我這個問題,好吧,我好不容易記起來兩個協議的中文名字,又含糊其辭地說FTP是傳輸檔案的,很慫,回來補補課,每次面試完都覺得啥啥都不懂,大家共勉吧^_^
一、字面上來看
HTTP是Hyper Text Transfer Protocol,超文字傳輸協議;
FTP是File Transfer Protocol,檔案傳輸協議;
簡單說HTTP是面向網頁的,而FTP是面向檔案的。
二、複雜點兒
1.FTP
(1)FTP比HTTP複雜
FTP和HTTP一樣都是Internet上廣泛使用的協議,用來在兩臺計算機之間互相傳送檔案。相比於HTTP,FTP協議要複雜得多。複雜的原因,是因為FTP協議要用到兩個TCP連線,一個是命令鏈路,用來在FTP客戶端與伺服器之間傳遞命令;另一個是資料鏈路,用來上傳或下載資料。
(2)FTP協議有兩種工作方式:PORT方式和PASV方式,中文意思為主動式和被動式。
PORT(主動)方式的連線過程是:客戶端向伺服器的FTP埠(預設是21)傳送連線請求,伺服器接受連線,建立一條命令鏈路。當需要傳送資料時,客戶端在命令鏈上用PORT命令告訴伺服器:“我打開了XXXX埠,你過來連線我”。於是伺服器從20埠向客戶端的XXXX埠傳送連線請求,建立一條資料鏈路來傳送資料。PASV(被動)方式的連線過程是:客戶端向伺服器的FTP埠(預設是21)傳送連線請求,伺服器接受連線,建立一條命令鏈路。當需要傳送資料時,伺服器在命令鏈上用PASV命令告訴客戶端:“我打開了XXXX埠,你過來連線我”。於是客戶端向伺服器的XXXX埠
從上面可以看出,兩種方式的命令鏈路連線方法是一樣的,而資料鏈路的建立方法就完全不同。而FTP的複雜性就在於此。
2.HTTP
當我們想瀏覽一個網站的時候,只要在瀏覽器的位址列裡輸入網站的地址就可以了,例如http://www.microsoft.com,但是在瀏覽...w.microsoft.com ,你知道為什麼會多出一個“http”嗎?
(1)HTTP協議是什麼
我們在瀏覽器的位址列裡輸入的網站地址叫做URL (Uniform Resource Locator,統一資源定位符)。就像每家每戶都有一個門牌地址一樣,每個網頁也都有一個Internet地址。當你在瀏覽器的地址框中輸入一個URL或是單擊一個超級連結時,URL就確定了要瀏覽的地址。瀏覽器通過超文字傳輸協議(HTTP),將Web伺服器上站點的網頁程式碼提取出來,並翻譯成漂亮的網頁。因此,在我們認識HTTP之前,有必要先弄清楚URL的組成,例如:http://www.microsoft.com/china/index.htm。它的含義如下:1. http://:代表超文字傳輸協議,通知microsoft.com伺服器顯示Web頁,通常不用輸入;
2. www:代表一個Web(全球資訊網)伺服器;
3. Microsoft.com/:這是裝有網頁的伺服器的域名,或站點伺服器的名稱;
4. China/:為該伺服器上的子目錄,就好像我們的資料夾;
5. Index.htm:index.htm是資料夾中的一個HTML檔案(網頁)。
我們知道,Internet的基本協議是TCP/IP協議,然而在TCP/IP模型最上層的是應用層(Application layer),它包含所有高層的協議。高層協議有:檔案傳輸協議FTP、電子郵件傳輸協議SMTP、域名系統服務DNS、網路新聞傳輸協議NNTP和HTTP協議等。
自WWW誕生以來,一個多姿多彩的資訊和虛擬的世界便出現在我們眼前,可是我們怎麼能夠更加容易地找到我們需要的資訊呢?當決定使用超文字作為WWW文件的標準格式後,於是在1990年,科學家們立即制定了能夠快速查詢這些超文字文件的協議,即HTTP協議。
(2)HTTP是怎樣工作的
由於HTTP協議是基於請求/響應正規化的(相當於客戶機/伺服器)。一個客戶機與伺服器建立連線後,傳送一個請求給伺服器,請求方式的格式為:統一資源識別符號(URL)、協議版本號,後邊是MIME(關於MIME,看百度百科裡是這樣解釋的http://baike.baidu.com/view/160611.htm)資訊包括請求修飾符、客戶機資訊和可能的內容。伺服器接到請求後,給予相應的響應資訊,其格式為一個狀態行,包括資訊的協議版本號、一個成功或錯誤的程式碼,後邊是MIME資訊包括伺服器資訊、實體資訊和可能的內容。許多HTTP通訊是由一個使用者代理初始化的並且包括一個申請在源伺服器上資源的請求。最簡單的情況可能是在使用者代理和伺服器之間通過一個單獨的連線來完成。在Internet上,HTTP通訊通常發生在TCP/IP連線之上。預設埠是TCP 80,但其它的埠也是可用的。但這並不預示著HTTP協議在Internet或其它網路的其它協議之上才能完成。HTTP只預示著一個可靠的傳輸。
這個過程就好像我們打電話訂貨一樣,我們可以打電話給商家,告訴他我們需要什麼規格的商品,然後商家再告訴我們什麼商品有貨,什麼商品缺貨。這些,我們是通過電話線用電話聯絡(HTTP是通過TCP/IP),當然我們也可以通過傳真,只要商家那邊也有傳真。
以上簡要介紹了HTTP協議的巨集觀運作方式,下面介紹一下HTTP協議的內部操作過程。
在WWW中,“客戶”與“伺服器”是一個相對的概念,只存在於一個特定的連線期間,即在某個連線中的客戶在另一個連線中可能作為伺服器。基於HTTP協議的客戶/伺服器模式的資訊交換過程,它分四個過程:建立連線、傳送請求資訊、傳送響應資訊、關閉連線。這就好像上面的例子,我們電話訂貨的全過程。
其實簡單說就是任何伺服器除了包括HTML檔案以外,還有一個HTTP駐留程式,用於響應使用者請求。你的瀏覽器是HTTP客戶,向伺服器傳送請求,當瀏覽器中輸入了一個開始檔案或點選了一個超級連結時,瀏覽器就向伺服器傳送了HTTP請求,此請求被送往由IP地址指定的URL。駐留程式接收到請求,在進行必要的操作後回送所要求的檔案。在這一過程中,在網路上傳送和接收的資料已經被分成一個或多個數據包(packet),每個資料包包括:要傳送的資料;控制資訊,即告訴網路怎樣處理資料包。TCP/IP決定了每個資料包的格式。如果事先不告訴你,你可能不會知道資訊被分成用於傳輸和再重新組合起來的許多小塊。也就是說商家除了擁有商品之外,它也有一個職員在接聽你的電話,當你打電話的時候,你的聲音轉換成各種複雜的資料,通過電話線傳輸到對方的電話機,對方的電話機又把各種複雜的資料轉換成聲音,使得對方商家的職員能夠明白你的請求。這個過程你不需要明白聲音是怎麼轉換成複雜的資料的。
(3) ipc$ 是什麼
IPC$(Internet Process Connection)是共享"命名管道"的資源(大家都是這麼說的),它是為了讓程序間通訊而開放的命名管道,可以通過驗證使用者名稱和密碼獲得相應的許可權,在遠端管理計算機和檢視計算機的共享資源時使用。利用IPC$,連線者甚至可以與目標主機建立一個空的連線而無需使用者名稱與密碼(當然,對方機器必須開了ipc$共享,否則你是連線不上的),而利用這個空的連線,連線者還可以得到目標主機上的使用者列表(不過負責的管理員會禁止匯出使用者列表的)。
我們總在說ipc$漏洞ipc$漏洞,其實,ipc$並不是真正意義上的漏洞,它是為了方便管理員的遠端管理而開放的遠端網路登陸功能,而且還打開了預設共享,即所有的邏輯盤(c$,d$,e$……)和系統目錄winnt或windows(admin$)。
所有的這些,初衷都是為了方便管理員的管理,但好的初衷並不一定有好的收效,一些別有用心者(到底是什麼用心?我也不知道,代詞一個)會利用IPC$,訪問共享資源,匯出使用者列表,並使用一些字典工具,進行密碼探測,寄希望於獲得更高的許可權,從而達到不可告人的目的.
解惑:
1)IPC連線是Windows NT及以上系統中特有的遠端網路登陸功能,其功能相當於Unix中的Telnet,由於IPC$功能需要用到Windows NT中的很多DLL函式,所以不能在Windows 9.x中執行。
也就是說只有nt/2000/xp才可以建立ipc$連線,98/me是不能建立ipc$連線的(但有些朋友說在98下能建立空的連線,不知道是真是假,不過現在都2003年了,建議98的同志換一下系統吧,98不爽的)
2)即使是空連線也不是100%都能建立成功,如果對方關閉了ipc$共享,你仍然無法建立連線
3)並不是說建立了ipc$連線就可以檢視對方的使用者列表,因為管理員可以禁止匯出使用者列表.