Ⅰ tcp/ip是指什麼有什麼用上哪可以設置
什麼是TCP/IP?
TCP協議和IP協議指兩個用在Internet上的網路協議(或數據傳輸的方法)。它們分別是傳輸控制協議和互連網協議。這兩個協議屬於眾多的TCP/IP 協議組中的一部分。
TCP/IP協議組中的協議保證Internet上數據的傳輸,提供了幾乎現在上網所用到的所有服務。這些服務包括:電子郵件的傳輸 文件傳輸 新聞組的發布 訪問萬維網
在TCP/IP協議組分兩種協議:網路層的協議 應用層的協議
網路層協議
網路層協議管理離散的計算機間的數據傳輸。這些協議用戶注意不到,是在系統表層以下工作的。比如,IP協議為用戶和遠程計算機提供了信息包的傳輸方法。它是在許多信息的基礎上工作的,比如說是機器的IP地址。在機器IP地址和其它信息的基礎上,IP確保信息包能正確地到達目的機器。通過這一過程,IP和其它網路層的協議共同用於數據傳輸。如果沒有網路工具,用戶就看不到在系統里工作的IP。
應用層協議
相反地,應用層協議用戶是可以看得到的。比如,文件傳輸協議(FTP)用戶是看得到的。用戶為了傳輸一個文件請求一個和其它計算機的連接,連接建立後,就開始傳輸文件。在傳輸時,用戶和遠程計算機的交換的一部分是能看到的。
請記住這句總結性的話:TCP/IP協議是指一組使得Internet上的機器相互通信比較方便的協議。
TCP/IP是如何工作的?
TCP/IP通過使用協議棧工作。這個棧是所有用來在兩台機器間完成一個傳輸的所有協議的幾個集合。(這也就是一個通路,數據通過它從一台機器到另一台機器。)棧分成層,與這里有關的是五個層。學習下面的圖可以對層有個概念。
在數據通過圖示的步驟後,它就從網路中的一台機器傳到另一台機器了。在這個過程中,一個復雜的查錯系統會在起始機器和目的機器中執行。
棧的每一層都能從相鄰的層中接收或發送數據。每一層都與許多協議相聯系。在棧的每一層,這些協議都在起作用。本章的下一部分將分析這些服務,以及它們在棧中是如何聯系的。同時也分析一下它們的功能,它們提供的服務和與安全性的關系。
協議簡介
已經知道數據是怎樣使用TCP/IP協議棧來傳輸的了。現在仔細分析在棧中所用到的關鍵的協議。先從網路層的協議開始。
網路層協議
網路層協議是那些使傳輸透明化的協議。除了使用一些監視系統進程的工具外,用戶是看不見這些協議的。
Sniffers是能看到這些步驟的裝置。這個裝置可以是軟體,也可以是硬體,她能讀取通過網路發送的每一個包。Sniffers廣泛地用於隔離用戶看不到的、網路性能下降的問題。sniffers能讀取發生在網路層協議的任何活動。而且,正如你已經猜到的,sniffers會對安全問題造成威脅。參見 Sniffers一章。
重要的網路層協議包括:
地址解析協議(ARP)
Internet控制消息協議(ICMP)
Internet協議(IP)
傳輸控制協議(TCP)
下面僅僅簡單介紹一下。
地址解析協議ARP
地址解析協議的目的是將IP地址映射成物理地址。這在使信息通過網路時特別重要。在一個消息(或其他數據)發送之前,被打包到IP包里,或適合於 Internet傳輸的信息塊。這包括兩台計算機的IP地址。在這個包離開發送計算機之前,必須要找到目標的硬體地址。這就是ARP最初用到的地方。
一個ARP請求消息在網上廣播。請求由一個進程接收,它回復物理地址。這個回復消息由原先的那台發送廣播消息計算機接收,從而傳輸過程就開始了。
ARP的設計包括一個緩存。為了理解緩存的概念,考慮一下:許多現代的HTML瀏覽器(比如Netscape或Microsoft的Internet
Explorer)使用了一個緩存。緩存是磁碟的一部分,從Web網上經常訪問的東西就存在裡面(比如按鈕,或通用的圖形)。這是符合邏輯的,因為當你返回這些主頁的時候,這些東西不必再從遠程計算機上裝載了。從緩存中裝載的速度要比較快。
相似的,ARP的實現包括一個緩存。以這種方式,網路或遠程計算機的硬體地址就存著了,並為接著的ARP請求作準備。這樣節省了時間和網路資源。
但是,正是由於緩存,就引起了安全性。
對於網路安全來將,這並不是最重要的安全性問題。然而,地址緩存(不僅僅是在ARP而且在其他例子中)確實會引起安全性問題。一旦這些地址保存,都會是讓黑客偽造一個遠程連接,它們對緩存的地址很歡迎。 Internet控制消息協議ICMP
Internet控制消息協議是用來在兩台計算機間傳輸時處理錯誤和控制消息的。它允許這些主機共享信息。在這一方面,ICMP是用來診斷網路問題的重要工具。通過ICMP收集診斷信息的例子如下:
一台主機關機
一個網關堵塞和工作不正常
網路中其他的失敗
可能最著名的ICMP實現的網路工具是ping。ping通常用來判斷是否一台遠程機器正開著,數據包從用戶的計算機發到遠程計算機。這些包通常返回用戶的計算機。如果沒有返回數據包到用戶計算機,ping程序就產生一個表示遠程計算機關機的錯誤消息。
應用層協議
應用層協議是專門為用戶提供應用服務的。它是建立在網路層協議之上的。
Telnet
Telnet在RFC
854中有詳細地描述,Telnet協議中說明:Telnet協議的目的就是提供一個相當通用的,雙向的,面向八位位元組的通信機制。它的最初目的是允許終端和面向終端的進程之間的交互。
Telnet不僅允許用戶登錄到一個遠程主機,它允許用戶在那台計算機上執行命令。這樣,Los Angeles的一個人可以Telnet到New
York的一台機器,並在這台機器上運行程序,就跟在New York的用戶一樣。
對於熟悉Telnet的用戶來講,他的操作與BBS的界面一樣。Telnet是一個能提供建立在終端字體的訪問資料庫的一個應用程序。比如,多於80%的大學的圖書館的目錄可以通過Telnet訪問到。
即使GUI應用程序被大大採用,Telnet這個建立在字元基礎上的應用程序,仍相當的流行。這有許多原因。第一,Telnet允許你以很小的網路資源花費實現各種功能(如收發郵件)。實現安全的Telnet是件十分簡單的事。有許多這樣的程序,通用的是Secure
Shell。
要使用Telnet,用戶要指定啟動Telnet客戶的命令,並在後面指定目標主機的名字。在Linux中,可以這樣:
$telnet internic.net
這個命令啟動Telnet過程,連接到internic.net。這個連接可能被接受,或被拒絕,這與目標主機的配置有關。在UNIX,Telnet命令很久以前就是內置的。也就是說,Telnet已經包含在UNIX的發行版本中有十年了。但並不是所有操作系統都將Telnet作為內置的Telnet客戶。
文件傳輸協議FTP
文件傳輸協議是從一個系統向另一個系統傳遞文件的標准方法。它的目標在RFC 0765中寫得很清楚。
FTP的目標是1)促進文件和程序的共享,2)鼓勵間接和含蓄的使用遠程計算機,3)使用戶不必面對主機間使用的不同的文件存儲系統,4)有效和可靠地傳輸文件。FTP,盡管用戶可以直接通過終端來使用,是設計成讓別的程序使用的。
約有二十年,研究者調查了相當廣泛的文件傳輸方法。FTP經歷了多次改變。1971年作了第一次定義,整個的說名參見RFC 114。
FTP是怎樣工作的?
FTP文件傳輸應用在客戶/服務環境。請求機器啟動一個FTP客戶端軟體。這就給目標文件伺服器發出了一個請求。典型地,這個要求被送到埠21。一個連接建立起來後,目標文件伺服器必須運行一個FTP服務軟體。
FTPD是標準的FTP服務daemon。它的功能很簡單:回復inetd收到的連接請求,並滿足這些要傳輸文件的請求。這個daemon在許多發行版的UNIX中是個標准。
FTPD等待一個連接請求。當這樣的一個請求到達時,FTPD請求用戶登錄。用戶提供它的合法的登錄名和口令或匿名登錄。
一旦登錄成功,用戶可以下載文件了。在某些情況下,如果伺服器的安全允許,用戶可以上載文件。
簡單郵件傳輸協議SMTP
簡單郵件傳輸協議的目的是使得郵件傳輸可靠和高效。
SMTP是一個相當小和有效的協議。用戶給SMTP伺服器發個請求。一個雙向的連接隨後就建立了。客戶發一個MAIL指令,指示它想給Internet上的某處的一個收件人發個信。如果SMTP允許這個操作,一個肯定的確認發回客戶機。隨後,會話開始。客戶可能告知收件人的名稱和IP地址,以及要發送的消息。
盡管SMTP相當簡單,郵件服務是無窮的安全漏洞的源泉。
SMTP服務在Linux內部是內置的。其它網路操作系統也提供某些形式的SMTP。
Gopher
Gopher是一個分布式的文件獲取系統。它最初是作為Campus Wide Information
System在Minnesota大學實現的。它的定義如下:
Internet
Gopher協議最初是設計用來最為一個分布式文件發送系統的。文檔放在許多伺服器上,Gopher客戶軟體給客戶提供一個層次項和目錄,看上去象一個文件系統。事實上,Gopher的界面設計成類似一個文件系統,因為文件系統是查找文件和服務的最好模型。
Gopher服務功能相當強大。能提供文本,聲音,和其他媒體。主要用在文本模式,比通過用瀏覽器使用HTTP要來得快。毫無疑問,最流行的Gopher客戶軟體是為UNIX編寫的。其他操作系統也有Gopher客戶端軟體。
典型地,用戶啟動一個Gopher客戶端軟體,和一個Gopher伺服器。隨後,Gopher返回一個可以選擇的菜單。可能包括查找菜單,預先設置的目標,或文件目錄。
注意,Gopher模式完全是一個客戶伺服器模式。用戶每次登錄,客戶給Gopher伺服器發送一個請求,要求所有能得到的文檔。Gopher伺服器對這個信息做出反應知道用戶請求一個對象。
超聯結傳輸協議HTTP
由於它能讓用戶在網上沖浪,超聯結傳輸協議可能是最有名的協議。HTTP是一個應用層協議,它很小也很有效,符合發布、合成和超媒體文本系統的的需要。是一個通用的,面向對象的協議,通過擴展請求命令,可以用來實現許多任務。HTTP的一個特點是數據表現的類型允許系統相對獨立於數據的傳輸。
HTTP的出現永久地改變了Internet的特點,主要是使Internet大眾化。在某些程度上,他它的操作與Gopher相類似。比如,它的工作是請求/響應式的。這是相當重要的一點。其他應用程序,比如Telnet仍需要用戶登錄(當他們登錄時,便消耗系統資源)。但Gopher和HTTP協議,消除了這一現象。用戶(客戶)僅僅在他們請求或接受數據時消耗資源。
使用通用瀏覽器,象Netscape Navigator或Microsoft Internet
Explore,可以監視這一過程的發生。在WWW上的數據,你的瀏覽器會和伺服器及時聯系。這樣,它首先獲取文本,然後是圖形,再後是聲音,等等。在你的瀏覽器的狀態欄的左下角。當它裝載頁面時,看著它幾分鍾。你會看到請求和服務活動的發生,通常速度很快。
HTTP並不特別關注所需的是什麼類型的數據。各種形式的媒體都能插進,以及遠程的HTML主頁。
網路新聞傳輸協議NNTP
網路新聞傳輸協議是一個廣泛使用的協議。它提供通常作為USENET新聞組的新聞服務。
NNTP定義了一個協議,使用一個可靠的建立在流的基礎上的在Internet上傳輸新聞的分發,詢問,獲取和發布的一個協議。NNTP被設計成新聞被存儲在一個中心的資料庫,允許訂閱者選擇他們希望讀的主題。目錄,交叉引用和過期的新聞都能找到。
NNTP有許多特性和簡單郵件傳輸協議以及TCP相似。與SMTP相似,它接受一般的英語命令。和TCP相似,它是建立在流的傳輸和分發的基礎上的。NNTP通常在埠119運行。
下面詳細地講解一下乙太網,IP協議和TCP協議。
第二節 Etherner
乙太網的基本工作原理
乙太網上的所有設備都連在以太匯流排上,它們共享同一個通信通道。乙太網採用的是廣播方式的通信,即所有的設備都接收每一個信息包。網路上的設備通常將接收到的所有包都傳給主機界面,在這兒選擇計算機要接收的信息,並將其他的過濾掉。乙太網是最有效傳遞的意思是,硬體並不給發送者提供有關信息已收到的信息。比如,即使目標計算機碰巧關機了,送給它的包自然就丟失,但發送者並不會知道這一點。
乙太網的控制是分布式的。乙太網的存取方式叫做帶有Collision的Carrier Sense Multipe
Access。因為多台計算機可以同時使用乙太網,每台機器看看是否有載波信號出現判定匯流排是否空閑。如果主機介面有數據要傳輸,它就偵聽,看看是否有信號正在傳輸。如果沒有探測到,它就開始傳輸。每次傳輸都在一定的時間間隔內,即傳輸的包有固定的大小。而且,硬體還必須在兩次傳輸之間,觀察一個最小的空閑時間,也就是說,沒有一對機器可以不給其他計算機通信的機會而使用匯流排。
沖突偵測和恢復
當開始一個傳輸時,信號並不能同時到達網路的所有地方。傳輸速度實際上是光速的80%。這就有可能兩個設備同時探測到網路是空閑的,並都開始傳輸。但當這兩個電信號在網路上相遇時,它們都不再可用了。這種情況叫做沖突。
乙太網在處理這種情況時,很有技巧性。每台設備在它傳輸信號的時候都監視匯流排,看看它在傳輸的時候是否有別的信號的干擾。這種監視叫做沖突偵聽。在探測到沖突後,設備就停止傳輸。有可能網路會因為所有的設備都忙於嘗試傳輸數據而每次都產生沖突。
為了避免這種情況,乙太網使用一個2進制指數後退策略。發送者在第一次沖突後等待一個隨機時間,如果第二次還是沖突,等待時間延長一倍。第三次則再延長一倍。通過這種策略,即使兩台設備第二的等待時間會很接近,但由於後面的等待時間成指數倍增長,不就,他們就不會相互沖突了。
乙太網的硬體地址
每台連接到乙太網上的計算機都有一個唯一的48位乙太網地址。乙太網卡廠商都從一個機構購得一段地址,在生產時,給每個卡一個唯一的地址。通常,這個地址是固化在卡上的。這個地址又叫做物理地址。
當一個數據幀到達時,硬體會對這些數據進行過濾,根據幀結構中的目的地址,將屬於發送到本設備的數據傳輸給操作系統,忽略其他任何數據。
一個是地址位全為1的時表示這個數據是給所有匯流排上的設備的。
乙太網的幀結構
乙太網的幀的長度是可變的,但都大於64位元組,小於1518位元組。在一個包交換網路中,每個乙太網的幀包含一個指明目標地址的域。上圖是乙太網幀的格式,包含了目標和源的物理地址。為了識別目標和源,乙太網幀的前面是一些前導位元組,類型和數據域以及冗餘校驗。前導由64個0和1交替的位組成,用於接收同步。32位的CRC校驗用來檢測傳輸錯誤。在發送前,將數據用CRC進行運算,將結果放在CRC域。接收到數據後,將數據做CRC運算後,將結果和CRC 域中的數據相比較。如果不一致,那麼傳輸過程中有錯誤。
幀類型域是一個16位的整數,用來指示傳輸的數據的類型。當一個幀到達台設備後,操作系統通過幀類型來決定使用哪個軟體模塊。從而允許在同一台計算機上同時運行多個協議。
第三節 Internet地址
網路上的每一台計算機都有一個表明自己唯一身份的地址。TCP/IP協議對這個地址做了規定。一個IP地址由一個32位的整數表示。它的一個較為聰明的地方是很好的規定了地址的范圍和格式,從而使地址定址和路由選擇都很方便。一個IP地址是對一個網路和它上面的主機的地址一塊編碼而形成的一個唯一的地址。
在同一個物理網路上的主機的地址都有一個相同前綴,即IP地址分成兩個部分:(netid,hostid)。其中netid代表網路地址,hostid代表這個網路上的主機地址,根據他們選擇的位數的不同,可以分成以下五類基本IP地址。
通過地址的前3位,就能區分出地址是屬於A,B或C類。其中A類地址的主機容量有16777216台主機,B類地址可以有65536台主機,C類地址可以有256台主機。
將地址分成網路和主機部分,在路由定址時非常有用,大大提高了網路的速度。路由器就是通過IP地址的netid部分來決定是否發送和將一個數據包發送到什麼地方。
一個設備並不只能有一個地址。比如一個連到兩個物理網路上的路由器,它就有兩個IP地址。所以可以將IP地址看成是一個網路連接。
為了便於記憶和使用32位的IP地址,可以將地址使用用小數點分開的四位整數來表示。下面舉個例子:
IP地址: 10000000 00001010 00000010 00011110
記為: 128.10.2.30
第四節 IP協議和路由
IP協議
IP協議定義了一種高效、不可靠和無連接的傳輸方式。由於傳輸沒有得到確認,所以是不可靠的。一個包可能丟失了,或看不見了,或是延時了,或是傳輸順序錯了。但是傳輸設備並不檢測這些情況,也不通知通信雙方。無連接
因為每個包的傳遞與別的包是相互獨立的。同一個機器上的包可能通過不同的路徑到達另一台機器,或在別的機器上時已經丟失。由於傳輸設備都試圖以最快的速度傳輸,所以是最高效的。
IP協議定義了通過TCP/IP網路傳輸的數據的格式,定義了數據進行傳遞的路由功能。
IP數據包的格式如下:
由一個頭和數據部分組成。數據包的頭部分包含諸如目的地址和源地址,數據的類型等信息。
數據包頭格式:
數據包是由軟體處理的,它的內容和格式並不是由硬體所限定。
比如,頭4位是一個VERS,表示的是使用的IP協議的版本號。它表示發送者、接收者和路由器對該數據的處理都要按所示的版本進行處理。現在的版本號是4。軟體通過版本來決定怎樣進行處理。
頭長度(HLEN)也是用4位來表示以32位為計量單位的頭的長度。
TOTAL LENGTH表示這個數據包的長度(位元組數)。從而包中的數據的長度就可以通過上面兩個數據而計算出來了。
一般來說,數據部分就是一個物理的幀。對於乙太網來講,就是將整個的一個乙太網的幀數據作為一個IP數據包的數據來傳輸的。
數據包的頭裡面還包含了一些其他的信息,請參見有關資料的具體介紹。 IP路由
在一個網路上,連接兩種基本設備,主機和路由器。路由器通常連接幾個物理網路。對一台主機來講,要將一個數據包發往別的網路,就需要知道這個數據包應該走什麼路徑,才能到達目的地。對於一台路由器來講,將收到的數據包發往哪個物理網路。因此,無論主機還是路由器,在發送數據包是都要做路由選擇。
數據發送有兩種方式:直接數據發送和間接數據發送。
直接數據發送通常是在同一個物理網路里進行的。當一個主機或路由器要將數據包發送到同一物理網路上的主機上時,是採用這種方式的。首先判斷IP數據包中的目的地址中的網路地址部分,如果是在同一個物理網路上,則通過地址分析,將該IP目的地址轉換成物理地址,並將數據解開,和該地址合成一個物理傳輸幀,通過區域網將數據發出。
間接數據發送是在不同物理網路里進行的。當一個主機或路由器發現要發送的數據包不在同一個物理網路上時,這台設備就先在路由表中查找路由,將數據發往路由中指定的下一個路由器。這樣一直向外傳送數據,到最後,肯定有一個路由器發現數據要發往同一個物理網路,於是,再用直接數據發送方式,將數據發到目的主機上。
主機和路由器在決定數據怎樣發送的時候,都要去查找路由。一般,都將路由組成一個路由表存在機器中。路由表一般採用Next-Hop格式,即(N,R)對。N是目標地址的網路地址,R是傳輸路徑中的下一個路由。通常這個路由和這台機器在同一物理網路里。
第五節 TCP協議
TCP傳輸原理
TCP協議在IP協議之上。與IP協議提供不可靠傳輸服務不同的是,TCP協議為其上的應用層提供了一種可靠傳輸服務。這種服務的特點是:可靠、全雙工、流式和無結構傳輸。
它是怎樣實現可靠傳輸的呢?
TCP協議使用了一個叫積極確認和重發送(positive acknowledgement with retransmission)的技術來實現這一點的。
接收者在收到發送者發送的數據後,必須發送一個相應的確認(ACK)消息,表示它已經收到了數據。
發送者保存發送的數據的記錄,在發送下一個數據之前,等待這個數據的確認消息。在它發送這個數據的同時,還啟動了一個記時器。如果在一定時間之內,沒有接收到確認消息,就認為是這個數據在傳送時丟失了,接著,就會重新發送這個數據。
這種方法還產生了一個問題,就是包的重復。如果網路傳輸速度比較低,等到等待時間結束後,確認消息才返回到發送者,那麼,由於發送者採用的發送方法,就會出現重復的數據了。解決的一個辦法是給每個數據一個序列號,並需要發送者記住哪個序列號的數據已經確認了。為了防止由於延時或重復確認,規定確認消息里也要包含確認序列號。從而發送者就能知道哪個包已經確認了。 TCP協議中還有一個重要的概念:滑動窗口。這一方法的使用,使得傳輸更加高效。
有前面的描述可見,發送者在發送完一個數據包之後,要等待確認。在它收到確認消息之前的這段時間是空閑的。如果網路延時比較長,這個問題會相當明顯。
滑動窗口方法是在它收到確認消息以前,發送多個數據包。可以想像成有一個窗口在一個序列上移動。
如果一個包發送出去之後還沒有確認,叫做未確認包。通常未確認的包的個數就是窗口的大小。
此窗口的大小為8。發送者允許在接收到一個確認消息以前發送8個數據包。當發送者接到窗口中第一個包的確認消息時,它就將窗口下滑一個。
在接收端,也有一個滑動窗口接收和確認一個包。
埠
使用TCP傳輸就是建立一個連接。在TCP傳輸中一個連接有兩個端點組成。其實,一個連接代表的是發送和接收兩端應用程序的之間的一個通信。可以把他們想像成建立了一個電路。通常一個連接用下面的公式表示:
(host,port)
host是主機,port是埠。TCP埠能被幾個應用程序共享。對於程序員來講,可以這樣理解:一個應用程序可以為不同的連接提供服務。
TCP格式
TCP傳輸的單位是段,在建立連接,傳送數據,確認消息和告之窗口大小時均要進行段的交換。
段的格式如下圖:
段的格式也分成兩部分,頭和數據。
上面格式中的名稱已經足夠說明了他們的作用了。具體的含義請參見有關資料。
建立一個TCP連接
TCP協議使用一個三次握手來建立一個TCP連接的。
握手過程的第一個段的代碼位設置為SYN,序列號為x,表示開始一次握手。接收方收到這個段後,向發送者回發一個段。代碼位設置為SYN和ACK,序列號設置為y,確認序列號設置為x+1。發送者在受到這個段後,知道就可以進行TCP數據發送了,於是,它又向接收者發送一個ACK段,表示,雙方的連接已經建立。
在完成握手之後,就開始正式的數據傳輸了。
上面握手段中的序列號都是隨機產生的。
TCP/IP
每種網路協議都有自己的優點,但是只有TCP/IP允許與Internet完全的連接。TCP/IP是在60年代由麻省理工學院和一些商業組織為美國國防部開發的,即便遭到核攻擊而破壞了大部分網路,TCP/IP仍然能夠維持有效的通信。ARPANET就是由基於協議開發的,並發展成為作為科學家和工程師交流媒體的Internet。
TCP/IP同時具備了可擴展性和可靠性的需求。不幸的是犧牲了速度和效率(可是:TCP/IP的開發受到了政府的資助)。
Internet公用化以後,人們開始發現全球網的強大功能。Internet的普遍性是TCP/IP至今仍然使用的原因。常常在沒有意識到的情況下,用戶就在自己的PC上安裝了TCP/IP棧,從而使該網路協議在全球應用最廣。
TCP/IP的32位定址功能方案不足以支持即將加入Internet的主機和網路數。因而可能代替當前實現的標準是IPv6。