程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> TCP/IP學習筆記(8)

TCP/IP學習筆記(8)

編輯:關於VC++

一、FTP:文件傳輸協議

1、FTP協議:采用2個TCP連接來傳輸一個文件。

(1)控制連接:

控制連接通常以客戶服務器方式建立。控制連接始終等待客戶與服務器的通信,該連接將命令從客戶端傳給服務器,並傳回服務器的應答。

(2)數據連接:

該連接用於數據傳輸。

2、數據表示:

(1)文件類型:

◆ASCII文件:默認以NVT ASCII形式傳輸。這要求發送方將本地文本文件轉換為NVT ASCII碼,而接收方將NVT ASCII碼再還原為本地文本文件。用NVT ASVCII碼傳輸的每一行都以一個回車和一個換行結束。

◆EBCDIC文件:要求兩端都是EBCDIC系統。

◆二進制文件類型:數據發送一個連續的比特流,通常用於傳輸二進制文件。

◆本地文件類型:再具有不同字節大小的主機之間傳輸二進制文件。

(2)格式控制,只對ASCII和EBCDIC文件類型有效。

◆非打印(默認):文件中不含垂直格式信息。

◆遠程登錄格式控制:文件含有向打印機解釋的遠程登錄垂直格式控制。

◆Fortran回車控制:每行首字符是Fortran格式控制符。

(3)結構:

◆文件結構(默認):文件被認為是一個連續的字節流,不存在內部的文件結構。

◆記錄結構:該結構只用於文本文件。

◆頁結構:每頁都帶有頁號發送,以便收方能隨機存儲各頁。

(4)傳輸方式

◆流方式(默認):文件以字節流傳輸,對於文件結構,發送方在文件尾提示關閉數據連接。對於記錄結構,有專用的兩字節序列碼標記記錄結束和文件結束。

◆塊方式:文件以一系列塊來傳輸,每塊前面都帶有一個或多個首部字節。

◆壓縮方式:

3、FTP命令:

命令和應答在客戶和服務器的控制連接上以NVT ASCII形式傳送,這要求在每行結尾都要返回CR/LF。

FTP命令大家都很熟悉,這就不介紹了。

4、FTP應答:

應答都是ASCII碼形式的3位數字,並跟有報文選項。一些典型的應答:

◆125:數據連接已打開,傳輸開始

◆200:就緒

◆214:幫助報文

◆331:用戶名就緒,要求輸入口令

◆425:不能打開數據連接

◆452:錯寫文件

◆500:未知語法錯誤

◆501:無效參數

◆502:未實現的MODE類型

5、連接管理:

數據連接有3大用途:

(1)從客戶向服務器發送一個文件

(2)從服務器向客戶發送一個文件

(3)從服務器向客戶發送文件或目錄列表。

每一個數據連接對傳輸一個文件或目錄序列都要建立一個新的連接。

(1)客戶發出命令要求建立數據連接

(2)客戶在客戶主機上未數據連接選擇一個臨時端口號

(3)客戶使用PORT命令從控制連接上把端口號發給服務器。

(4)服務器在控制連接上接收端口號,並向客戶端主機上的端口發出主動打開,服務器的數據連接使用端口20。

二、SMTP:簡單郵件傳送協議

1、SMTP協議:

用TCP進行的郵件交換是由報文傳送代理MTA(Message Transfer Agent)完成的。兩個MTA之間用NVT ASCII進行通信,客戶向服務器發出命令,服務器用數字應答碼和可選的字符串進行響應。

常見的SMTP命令,其中只有5個SMTP命令用於發送郵件:HELLO、MAIL、RCTP、DATA和QUIT。HELO:標識自己
  MAIL:啟動用戶代理
  RCPT:標識接收方
  DATA:郵件報文內容
  QUIT:退出
  RSET:異常中止當前的郵件事務並使兩端復位
  VRFY:使客戶能夠詢問發送方以驗證接收方地址,而無需向接收方發送郵件。
  NOOP:強迫服務器響應一個OK應答碼,不做任何事。

2、信封、首部和正文

(1)信封:由MTA用來交付。

MAIL From:[email protected]

RCPT To:[email protected]

(2) 首部:由用戶代理使用。共有9個字段:Received、Message_Id、From、Data、Reply-To、X-Phone、X-Mailer、To、Subject。每個首部字段都包含一個名、緊跟一個冒號,接著是字段值。

(3)正文:是發送給接收用戶報文的內容。當用DATA命令發送時,先發送首部,緊跟一個空行,然後是正文。用DATA發送的各行都必須小於1000字節。

用戶接收正文部分,加上一些首部字段,並把結果傳給MTA。MTA加上一些首部字段,加上信封,並把結果發給另以MTA。所有這一些都以NVT ASCII格式發送。

3、擴充的SMTP:

要使用ESMTP,首先通過EHLO命令而不是HELO命令啟動與服務器的會話。它會顯示擴充命令:EXPN、SIZE、HELP、8BITMIME、XADR等。SIZE命令是讓客戶在MAIL FROM命令中以字節的多少指定報文的大小,這樣服務器可以在客戶開始發送報文之前驗證它是否接收該長度的報文。8BITMIME允許客戶把關鍵字BODY加到MAIL FROM命令中,指定正文中是否包含NVT ASCII(默認)或8位數據。除非客戶收到服務器響應EHLO命令發來的8BITMIME關鍵字,否則禁止客戶發送任何非NVT ASCII字符。

(1)首部變化:非ASCII字符

用途主要是為了允許發送方名、接收方名以及主題中使用其他的字符。

首部字段中可以包含編碼字(coded word),其格式如下:

=?charset?encoding?encoded-text?=

charset表示字符集,有效值時us-ascii和iso-8859-x。

encoding是一個單個字符用來指定編碼方法,支持2個值:

◆Q:意思是引號中可打印的,目的是用於拉丁字符集。大多數字符作為NVT ASCII發送的。任何要發送的字符若第8位是1則被作為3個字符發送,第一個字符是"=",跟著兩個16進制數,如0xe9,則發送3個字符"=E9",空格通常作為下劃線或三個字符"=20"發送。

◆B:意思是以64為基數的編碼。文本中的3個連續字節(24位)被編碼為4個6位值,用於表示所有可能的6位值的64個NVT ASCII字符。當要編碼的個數不是3的倍數時,等號被用作填充符。

(2)正文變化:通用Internet郵件擴充可以把結構置入正文,這就是MIME,即通用Internet擴充。MIME不要求任何擴充,

但加入了一些告知收件者正文結構的新標題,正文仍然可以用NVT ASCII發送,而不考慮郵件內容。MIME定義5個新標題:

Mime-version:當前版本是1.0

Content-Tyoe:內容類型是無格式ASCII文本,即Internet郵件的默認選擇。可以為: text,multipart,message,application,image,audio,video。

Content-Transfer-Encoding:內容傳送編碼有5中:7bit(即NVT ASCII ),quoted-printable,base64,8bit,binary。

Content-ID:

Content-Description:

三、NFS:網絡文件系統

1、遠程過程調用RPC(Remote Procedue Access),主要過程如下:

(1)當客戶程序調用遠程的過程時,它實際上只調用了一個位於本機上的由RPC程序生成的函數,這個函數稱為客戶殘樁(stub),客戶殘樁將過程的參數封裝為一個網絡報文並將該報文發送給服務器程序。

(2)服務器主機上的一個服務器殘樁負責接收這個網絡報文,它從網絡報文中提取參數,然後調用服務器進程。

(3)當服務器函數返回時,它返回到服務器殘樁。服務器殘樁提取返回值,把返回值封裝成一個網絡報文,然後將報文發送給客戶殘樁。

(4)客戶殘樁從接收的網絡報文中取出返回值,將其返回給客戶程序。

2、XDR:外部數據表示

XDR用來對RPC調用報文和應答報文中的值進行編碼,這些值包括RPC首部字段(XID、程序號、接收狀態等)、過程參數和過程結果。XDR定義了很多數據類型以及它們如何在一個RPC報文中傳輸的具體形式。發送者必須采用XDR格式構造一個RPC報文,然後接收者將XDR格式的報文轉換為本機形式。

3、端口映射器

包含遠程過程的RPC服務器程序使用的是臨時窗口,這就要求跟蹤RPC程序使用了哪一個臨時端口。端口映射器本身必須由一個知名端口111,同時由一個程序號(100000),一個版本號(2)。服務器程序使用RPC調用端口映射器注冊本身,客戶程序使用使用RPC調用端口映射器查詢。

端口映射器提供4個服務進程:

(1)PMAPPROC_SET:RPC服務器啟動時調用這個過程,注冊程序號、版本號和帶有一個端口的協議。

(2)PMAPPROC_UNSRET:RPC服務器刪除一個已經注冊的映射。

(3)PMAPPROC_GETPORT:RPC客戶啟動時調用,根據給定的程序號、版本號和協議來獲得注冊的端口號。

(4)PMAPPROC_DUMP:返回端口映射器數據庫中所有記錄。

4、NFS協議

(1)訪問的是一個本地文件還是NFS文件對於客戶是透明的,當文件被打開時,由內核決定。

(2)NFS客戶通過它的TCP/IP模塊向NFS服務器發送RPC請求。

(3)NFS服務器一般在端口2049接收作為UDP數據報的客戶請求。

(4)NFS服務器收到客戶請求時,它將這個請求傳遞給本地文件訪問例程,後者訪問服務器主機上的一個本地文件。

(5)大多數NFS服務器是多線程的,可以處理多個請求。

(6)客戶也可以運行多個NFS客戶。

5、文件句柄

文件句柄是一個不透明的對象,用來引用服務器上的一個文件或目錄。服務器創建文件句柄,把它傳遞給客戶,然後客戶訪問文件時使用這個句柄。

6、安裝協議

客戶必須在訪問服務器上一個文件系統中的文件之前,使用安裝協議安裝哪個文件系統。一般時客戶主機引導時完成。

7、NFS過程:前綴為NFSPROC_

(1)GETATTR:返回文件屬性

(2)SETATTR:設置文件屬性

(3)STATUS:返回一個文件系統的狀態

(4)LOOKUP:查找一個文件

(5)READ:讀數據

(6)WRITE:寫數據

(7)CREATE:創建文件

(8)REMOVE:刪除文件

(9)RENAME:重命名文件

(10)LINK:為一個文件構造一個硬鏈接

(11)SYMLINK:為一個文件構造一個符號鏈接

(12)READLINK:讀符號鏈接

(13)MKDIR:建立目錄

(14)RMDIR:刪除目錄

(15)READDIR:讀目錄。

---------END--------

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved