天天看點

TCP和UDP的差別

首先先簡單的說一下TCP與UDP的差別:

 1。基于連接配接與無連接配接 

 2。對系統資源的要求(TCP較多,UDP少) 

 3。UDP程式結構較簡單 

 4。流模式與資料報模式 

 5。TCP保證資料正确性,UDP可能丢包,TCP保證資料順序,UDP不保證

從專業的角度說,TCP的可靠保證,是它的三次握手機制,這一機制保證校驗了資料,保證了他的可靠性。而UDP就沒有了,是以不可靠。不過UDP的速度是TCP比不了的,而且UDP的反應速度更快,QQ就是用UDP協定傳輸的,HTTP是用TCP協定傳輸的,不用我說什麼,自己體驗一下就能發現差別了。再有就是UDP和TCP的目的端口不一樣(這句話好象是多餘的),兩個都是傳輸層的協定。 

TCP/IP協定介紹 

TCP/IP的通訊協定 

這部分簡要介紹一下TCP/IP的内部結構,為讨論與網際網路有關的安全問題打下基礎。TCP/IP協定組之是以流行,部分原因是因為它可以用在各種各樣的信道和底層協定(例如T1和X.25、以太網以及RS-232串行接口)之上。确切地說,TCP/IP協定是一組包括TCP協定和IP協定,UDP(User Datagram Protocol)協定、ICMP(Internet Control Message Protocol)協定和其他一些協定的協定組。 

TCP/IP整體構架概述 

TCP/IP協定并不完全符合OSI的七層參考模型。傳統的開放式系統互連參考模型,是一種通信協定的7層抽象的參考模型,其中每一層執行某一特定任務。該模型的目的是使各種硬體在相同的層次上互相通信。這7層是:實體層、資料鍊路層、網路層、傳輸層、話路層、表示層和應用層。而TCP/IP通訊協定采用了4層的層級結構,每一層都呼叫它的下一層所提供的網絡來完成自己的需求。這4層分别為: 

應用層:應用程式間溝通的層,如簡單電子郵件傳輸(SMTP)、檔案傳輸協定(FTP)、網絡遠端通路協定(Telnet)等。 

傳輸層:在此層中,它提供了節點間的資料傳送服務,如傳輸控制協定(TCP)、使用者資料報協定(UDP)等,TCP和UDP給資料包加入傳輸資料并把它傳輸到下一層中,這一層負責傳送資料,并且确定資料已被送達并接收。 

互連網絡層:負責提供基本的資料封包傳送功能,讓每一塊資料包都能夠到達目的主機(但不檢查是否被正确接收),如網際協定(IP)。 

網絡接口層:對實際的網絡媒體的管理,定義如何使用實際網絡(如Ethernet、Serial Line等)來傳送資料。

TCP/IP中的協定 

以下簡單介紹TCP/IP中的協定都具備什麼樣的功能,都是如何工作的:

   1. IP 

網際協定IP是TCP/IP的心髒,也是網絡層中最重要的協定。 

IP層接收由更低層(網絡接口層例如以太網裝置驅動程式)發來的資料包,并把該資料包發送到更高層---TCP或UDP層;相反,IP層也把從TCP或UDP層接收來的資料包傳送到更低層。IP資料包是不可靠的,因為IP并沒有做任何事情來确認資料包是按順序發送的或者沒有被破壞。IP資料包中含有發送它的主機的位址(源位址)和接收它的主機的位址(目的位址)。 

高層的TCP和UDP服務在接收資料包時,通常假設包中的源位址是有效的。也可以這樣說,IP位址形成了許多服務的認證基礎,這些服務相信資料包是從一個有效的主機發送來的。IP确認包含一個選項,叫作IP source routing,可以用來指定一條源位址和目的位址之間的直接路徑。對于一些TCP和UDP的服務來說,使用了該選項的IP包好象是從路徑上的最後一個系統傳遞過來的,而不是來自于它的真實地點。這個選項是為了測試而存在的,說明了它可以被用來欺騙系統來進行平常是被禁止的連接配接。那麼,許多依靠IP源位址做确認的服務将産生問題并且會被非法入侵。

   2. TCP 

如果IP資料包中有已經封好的TCP資料包,那麼IP将把它們向‘上’傳送到TCP層。TCP将包排序并進行錯誤檢查,同時實作虛電路間的連接配接。TCP資料包中包括序号和确認,是以未按照順序收到的包可以被排序,而損壞的包可以被重傳。 

TCP将它的資訊送到更高層的應用程式,例如Telnet的服務程式和客戶程式。應用程式輪流将資訊送回TCP層,TCP層便将它們向下傳送到IP層,裝置驅動程式和實體媒體,最後到接收方。 

面向連接配接的服務(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性,是以它們使用了TCP。DNS在某些情況下使用TCP(發送和接收域名資料庫),但使用UDP傳送有關單個主機的資訊。

   3.UDP 

UDP與TCP位于同一層,但對于資料包的順序錯誤或重發。是以,UDP不被應用于那些使用虛電路的面向連接配接的服務,UDP主要用于那些面向查詢---應答的服務,例如NFS。相對于FTP或Telnet,這些服務需要交換的資訊量較小。使用UDP的服務包括NTP(網落時間協定)和DNS(DNS也使用TCP)。 

欺騙UDP包比欺騙TCP包更容易,因為UDP沒有建立初始化連接配接(也可以稱為握手)(因為在兩個系統間沒有虛電路),也就是說,與UDP相關的服務面臨着更大的危險。

   4.ICMP 

ICMP與IP位于同一層,它被用來傳送IP的的控制資訊。它主要是用來提供有關通向目的位址的路徑資訊。ICMP的‘Redirect’資訊通知主機通向其他系統的更準确的路徑,而‘Unreachable’資訊則指出路徑有問題。另外,如果路徑不可用了,ICMP可以使TCP連接配接‘體面地’終止。PING是最常用的基于ICMP的服務。

   5. TCP和UDP的端口結構 

TCP和UDP服務通常有一個客戶/伺服器的關系,例如,一個Telnet服務程序開始在系統上處于空閑狀态,等待着連接配接。使用者使用Telnet客戶程式與服務程序建立一個連接配接。客戶程式向服務程序寫入資訊,服務程序讀出資訊并發出響應,客戶程式讀出響應并向使用者報告。因而,這個連接配接是雙工的,可以用來進行讀寫。 

兩個系統間的多重Telnet連接配接是如何互相确認并協調一緻呢?TCP或UDP連接配接唯一地使用每個資訊中的如下四項進行确認: 

源IP位址 發送包的IP位址。 

目的IP位址 接收包的IP位址。 

源端口 源系統上的連接配接的端口。 

目的端口 目的系統上的連接配接的端口。 

端口是一個軟體結構,被客戶程式或服務程序用來發送和接收資訊。一個端口對應一個16比特的數。服務程序通常使用一個固定的端口,例如,SMTP使用25、Xwindows使用6000。這些端口号是‘廣為人知’的,因為在建立與特定的主機或服務的連接配接時,需要這些位址和目的位址進行通訊。

本文轉自 古道卿 51CTO部落格,原文連結:http://blog.51cto.com/gudaoqing/1279763