歡迎您光臨本站 註冊首頁

linux下網路編程學習——基本協議學習

←手機掃碼閱讀     火星人 @ 2014-03-29 , reply:0

如果學過網路,我們肯定知道網路的體系結構:OSI參考模型和Tcp/Ip參考模型。

前者是理論模型,後者確是實際運行的模型。

1)我們這裡先簡單學習一下Tcp/IP模型。
下面是Tcp/Ip協議層次
CODE:
===============================

應用程序 應用程序 應用層
---------|----------------------|---------------------------------------------------
Tcp協議 udp協議 傳輸層
----------\----------------------------/------------------------------------------
\ /
\ /
ip協議 --- icmp協議 網路層
----------------|-------------------------------------------------------------------
網路介面 數據鏈路層

===============================

ip協議是網路層協議,作為一個網路層協議,ip協議主要完成數據包的發送,將數據包傳送到遠程機器,而不管這兩台機器是否處於同一個網路。ip協議為高層協議提供了一個非面向連接的和不可靠的數據包傳送服務。

建立在ip協議之上的傳輸層協議,tcp協議提供了這樣一種可靠的通通道路 。該協議保證通信的可靠性,保持數據位元組的順序,提供流量控制等。

[詳細資料可以查看上面參考資料所在的地址。]

2)ftp協議

ftp協議屬於應用層的協議。
應用層協議包括一些已經標準化的協議,比如ftp,telnet,ssh等,當然我們也可以自己開發一套協議。

簡介:

ftp協議,全稱File Transfer Protocol(文件傳輸協議),這是大家非常熟悉的網路協議之一,也是Internet中使用最多的文件傳輸協議。主要用於在兩台計算機之間實現文件的上傳與下載,其中一台計算機作為FTP的客戶端,另一台作為FTP的伺服器端。通過FTP協議可以上傳、下載幾乎所有的文件類型,比如TXT、EXE、 DOC、MP3、ZIP、RAR等等。

應用:

在實際應用中,FTP不僅可以作為網路文件下載的主要格式,還可以作為單獨的命令來使用。比如我們在下MP3的時候,經常遇到ftp://www.xxx.com/1.mp3,其中,ftp://表示文件傳輸格式,www.xxx.com 表示遠程計算機域名,1.mp3就是要下載的文件。另外,在Windows中還集成了ftp命令,比如在Windows XP的「命令提示符」中鍵入「ftp www.xxx.com」,就可以打開www.xxx.com遠程計算機,具體的命令參數可以鍵入「ftp/?」查看。

深入介紹:

 大多數的TCP服務是使用單個的連接,一般是客戶向伺服器的一個周知埠發起連接,然後使用這個連接進行通訊。但是,FTP協議卻有所不同,它使用雙向的多個連接,而且使用的埠很難預計。一般,FTP連接包括:

一個控制連接(control connection)

這個連接用於傳遞客戶端的命令和伺服器端對命令的響應。它使用伺服器的21埠,生存期是整個FTP會話時間。


幾個數據連接(data connection)

這些連接用於傳輸文件和其它數據,例如:目錄列表等。這種連接在需要數據傳輸時建立,而一旦數據傳輸完畢就關閉,每次使用的埠也不一定相同。而且,數據連接既可能是客戶端發起的,也可能是伺服器端發起的。


下面,我們通過一個FTP客戶程序看一下控制連接。這裡,我們需要使用debug模式(ftp -d)才能顯示客戶發出的FTP協議命令。在客戶程序的輸出信息中,這些協議命令是以--->開頭的,例如:

---> USER nixe0n

在命令發出之後,伺服器會發出響應,響應信息以數字開頭,例如:

530 Login incorrect.

下面,我們和FTP伺服器建立一個連接,使用用戶名nixe0n登錄,在會話過程中發出兩次目錄切換名,一次成功一次失敗,其中黑體是我們的輸入:

ftp -d ftp.linuxaid.com.cn
Connected to ftp.linuxaid.com.cn.
220 ftp.linuxaid.com.cn FTP server ready.
Name (ftp.linuxaid.com.cn:nixe0n): nixe0n
---> USER nixe0n
331 Password required for nixe0n.
Password:
---> PASS XXXX
230 User nixe0n logged in.
---> SYST
215 UNIX Type: L8
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd one
---> CWD one
250 CWD command successful.
ftp> cd tmp
---> CWD tmp
550 tmp: No such file or directory.
ftp> bye
---> QUIT
221-You have transferred 0 bytes in 0 files.
221-Total traffic for this session was 398 bytes in 0 transfers.
221 Thank you for using the FTP service on ftp.linuxaid.com.cn.

在FTP 協議中,控制連接使用周知埠21,因此使用SSH的標準埠轉發就可以這種連接進行很好的安全保護。相反,數據傳輸連接的目的埠通常實現無法知道,因此處理這樣的埠轉發非常困難。FTP協議使用一個標準的埠21作為ftp-data埠,但是這個埠只用於連接的源地址是伺服器端的情況,在這個埠上根本就沒有監聽進程。FTP的數據連接和控制連接的方向一般是相反的,也就是說,是伺服器向客戶端發起一個用於數據傳輸的連接。連接的埠是由伺服器端和客戶端協商確定的。FTP協議的這個特徵對SSH轉發以及防火牆和NAT的配置增加了很多困難。

除此之外,還有另外一種FTP模式,叫做被動模式(passive mod)。在這種模式下,數據連接是由客戶程序發起的,和剛才討論過的模式(我們可以叫做主動模式)相反。是否採取被動模式取決於客戶程序,在ftp命令行中使用passive命令就可以關閉/打開被動模式。

展開:

如果要實現FTP搜索引擎,一個最關鍵的模塊是實現「數據採集」,即獲得第三方ftp伺服器上的文件信息。
而這個數據採集過程如果從底層來出發,那麼等於要實現一些ftp協議客戶端的功能,比如最簡單的,我們需要實現自動登錄,登錄后發送list命令並接受相關的文件信息[這裡涉及到上面提到的埠控制問題,比較麻煩],關閉連接。另外,如果還考慮到某些文件名的命名不規則,需要抽取部分文件內部信息,進行進一步的索引,從而更好的服務用戶,那麼還需要實現一些其他命令。
當然,「數據採集」還涉及好多文件信息的處理問題,比如不良信息過濾,中文分詞,索引等技術。

[火星人 ] linux下網路編程學習——基本協議學習已經有251次圍觀

http://coctec.com/docs/linux/show-post-204059.html