TCP/IP(Transmission Control Protocol/Internet Protocol,傳輸控制協議/網際協議)是指能夠在多個不同網絡間實現信息傳輸的協議簇。TCP/IP協議不僅僅指的是TCP 和IP兩個協議,而是指一個由FTP、SMTP、TCP、UDP、IP等協議構成的協議簇, 只是因為在TCP/IP協議中TCP協議和IP協議最具代表性,所以被稱為TCP/IP協議。
TCP/IP協議,包含了一系列構成互聯網基礎的網絡協議。這些協議最早發(fā)源于美國國防部的ARPA網項目。TCP/IP字面上代表了兩個協議:TCP(傳輸控制協議)和IP(網際協議)。
TCP/IP傳輸協議,即傳輸控制/網絡協議,也叫作網絡通訊協議。它是在網絡的使用中的最基本的通信協議。TCP/IP傳輸協議對互聯網中各部分進行通信的標準和方法進行了規(guī)定。并且,TCP/IP傳輸協議是保證網絡數據信息及時、完整傳輸的兩個重要的協議。TCP/IP傳輸協議嚴格來說是一個四層的體系結構,應用層、傳輸層、網絡層和數據鏈路層都包含其中。 [2]TCP/IP協議是Internet最基本的協議,其中應用層的主要協議有Telnet、FTP、SMTP等,是用來接收來自傳輸層的數據或者按不同應用要求與方式將數據傳輸至傳輸層;傳輸層的主要協議有UDP、TCP,是使用者使用平臺和計算機信息網內部數據結合的通道,可以實現數據傳輸與數據共享;網絡層的主要協議有ICMP、IP、IGMP,主要負責網絡中數據包的傳送等;而網絡訪問層,也叫網絡接口層或數據鏈路層,主要協議有ARP、RARP,主要功能是提供鏈路管理錯誤檢測、對不同通信媒介有關信息細節(jié)問題進行有效處理等。
1983年1月1日,在因特網的前身(ARPA網)中,TCP/IP協議取代了舊的網絡核心協議(NCP,Network Core Protocol),從而成為今天的互聯網的基石。最早的TCP/IP由Vinton Cerf和Robert Kahn兩位開發(fā),慢慢地通過競爭戰(zhàn)勝了其他一些網絡協議的方案,比如國際標準化組織ISO的OSI模型。TCP/IP的蓬勃發(fā)展發(fā)生在上世紀的90年代中期。當時一些重要而可靠的工具的出世,例如頁面描述語言HTML和瀏覽器Mosaic,導致了互聯網應用的飛速發(fā)展。
隨著互聯網的發(fā)展,目前流行的IPv4協議(網際協議版本四)已經接近它的功能上限。IPv4最致命的兩個缺陷在與:
地址只有32位,IP地址空間有限;
不支持服務等級(Quality of Service, QoS)的想法,無法管理帶寬和優(yōu)先級,故而不能很好的支持現今越來越多的實時的語音和視頻應用。因此IPv6(網際協議版本六)浮出海面,用以取代IPv4。
TCP/IP成功的另一個因素在于對為數眾多的低層協議的支持。這些低層協議對應與OSI模型 中的第一層(物理層)和第二層(數據鏈路層)。每層的所有協議幾乎都有一半數量的支持TCP/IP,例如: 以太網(Ethernet),令牌環(huán)(Token Ring),光纖數據分布接口(FDDI),端對端協議(PPP),X.25,幀中繼(Frame Relay),ATM,Sonet, SDH等。
TCP/IP是指能夠在多個不同網絡間實現信息傳輸的協議簇。它不僅僅包括TCP和IP兩個協議,而是由多個協議組成的協議簇,包括FTP、SMTP、UDP等?。TCP/IP協議是Internet最基本的協議,定義了電子設備如何連入因特網以及數據如何在它們之間傳輸的標準?。
TCP/IP協議棧組成
整個通信網絡的任務,可以劃分成不同的功能區(qū)塊,即所謂的層級(layer) 。用于互聯網的協議可以比照TCP/IP參考模型進行分類。TCP/IP協議棧起始于第三層協議IP(網際協議)。所有這些協議都在相應的RFC文檔中討論及標準化。重要的協議在相應的RFC文檔中均標記了狀態(tài): “必須”(required) ,“推薦”(recommended) ,“可選”(elective) 。其他的協議還可能有“試驗”(experimental) 或“歷史”(historic) 的狀態(tài)?!?
必須協議
所有的TCP/IP應用都必須實現IP和ICMP。對于一個路由器(router)而言,有這兩個協議就可以運作了,雖然從應用的角度來看,這樣一個路由器 意義不大。實際的路由器一般還需要運行許多“推薦“使用的協議,以及一些其他的協議。
幾乎所有連接到互聯網上的計算機上都存在的IPv4協議出生在1981年,今天的版本和最早的版本并沒有多少改變。升級版IPv6的工作始于1995年,目的在與取代IPv4。ICMP協議主要用于收集有關網絡的信息查找錯誤等工作。
范例: 不同計算機運行的不同協議
一個簡單的路由器上可能會實現ARP, IP, ICMP, UDP, SNMP, RIP。
WWW用戶端使用ARP, IP, ICMP, UDP, TCP, DNS, HTTP, FTP。
一臺用戶電腦上還會運行如TELNET, SMTP, POP3, SNMP, ECHO, DHCP, SSH, NNTP。
無盤設備可能會在固件比如ROM中實現了ARP, IP, ICMP, UDP, BOOT, TFTP (均為面向數據報的協議,實現起來相對簡單)。
TCP/IP參考模型
TCP/IP參考模型是一個抽象的分層模型,這個模型中,所有的TCP/IP系列網絡協議都被歸類到4個抽象的"層"中。每一抽象層建立在低一層提供的服務上,并且為高一層提供服務。
完成一些特定的任務需要眾多的協議協同工作,這些協議分布在參考模型的不同層中的,因此有時稱它們?yōu)橐粋€協議棧。
TCP/IP參考模型為TCP/IP協議棧訂身制作。其中IP協議只關心如何使得數據能夠跨越本地網絡邊界的問題,而不關心如何利用傳輸媒體,數據如何傳輸。整個TCP/IP協議棧則負責解決數據如何通過許許多多個點對點通路(一個點對點通路,也稱為一"跳", 1 hop)順利傳輸,由此不同的網絡成員能夠在許多"跳"的基礎上建立相互的數據通路。
如想分析更普遍的網絡通信問題,ISO的OSI模型也能起更好的幫助作用。
因特網協議組是一組實現支持因特網和大多數商業(yè)網絡運行的協議棧的網絡傳輸協議。它有時也被稱為TCP/IP協議組,這個名稱來源于其中兩個最重要的協議:傳輸控制協議(TCP)和因特網協議(IP),它們也是最先定義的兩個協議。
同許多其他協議一樣網絡傳輸協議也可以看作一個多層組合,每層解決數據傳輸中的一組問題并且向使用這些低層服務的高層提供定義好的服務。高層邏輯上與用戶更為接近,所處理數據更為抽象,它們依賴于低層將數據轉換成最終能夠進行物理控制的形式。
網絡傳輸協議能夠大致匹配到一些廠商喜歡使用的固定7層的OSI模型。然而并不是所有這些層能夠很好地與基于ip的網絡對應(根據應用的設計和支持網絡的不同它們確實是涉及到不同的層)并且一些人認為試圖將因特網協以組對應到OSI會帶來混淆而不是有所幫助。
因特網協議棧中的層
人們已經進行了一些討論關于如何將TCP/IP參考模型映射到到OSI模型。由于TCP/IP和OSI模型組不能精確地匹配,還沒有一個完全正確的答案。
另外,OSI模型下層還不具備能夠真正占據真正層的位置的能力;在傳輸層和網絡層之間還需要另外一個層(網絡互連層)。特定網絡類型專用的一些協議應該運行在網絡層上,但是卻運行在基本的硬件幀交換上。類似協議的例子有地址解析協議和生成樹協議(用來保持冗余網橋的空閑狀態(tài)直到真正需要它們)。然而,它們是本地協議并且在網絡互連功能下面運行。不可否認,將兩個組(更不用說它們只是運行在如ICMP等不同的互連網絡協議上的邏輯上的網絡層的一部分)整個放在同一層會引起混淆,但是OSI模型還沒有復雜到能夠做更好的工作。
下面的圖表試圖顯示不同的TCP/IP和其他的協議在最初OSI模型中的位置:
通常人們認為OSI模型的最上面三層(應用層、表示層和會話層)在TCP/IP組中是一個應用層。由于TCP/IP有一個相對較弱的會話層,由TCP和RTP下的打開和關閉連接組成,并且在TCP和UDP下的各種應用提供不同的端口號,這些功能能夠被單個的應用程序(或者那些應用程序所使用的庫)增加。與此相似的是,IP是按照將它下面的網絡當作一個黑盒子的思想設計的,這樣在討論TCP/IP的時候就可以把它當作一個獨立的層。
應用層
該層包括所有和應用程序協同工作,利用基礎網絡交換應用程序專用的數據的協議。 應用層是大多數普通與網絡相關的程序為了通過網絡與其他程序通信所使用的層。這個層的處理過程是應用特有的;數據從網絡相關的程序的以這種應用內部使用的格式的傳過來,然后被編碼成標準協議的格式。
一些特定的程序被認為運行在這個層上。它們提供服務直接支持用戶應用。這些程序和它們對應的協議包括HTTP(The World Wide Web)、FTP(文件傳輸)、SMTP(電子郵件)、SSH(安全遠程登陸)、DNS (名稱<-> IP 地址尋找)以及許多其他協議。
一旦從應用程序來的數據被編碼成一個標準的應用層協議,它將被傳送到IP棧的下一層。
在傳輸層,應用程序最常用的是TCP或者UDP,并且服務器應用程序經常與一個公開的端口號相聯系。服務器應用程序的端口由Internet Assigned Numbers Authority (IANA)正式地分配,但是現今一些新協議的開發(fā)者經常選擇它們自己的端口號。由于在同一個系統上很少超過少數幾個的服務器應用,端口沖突引起的問題很少。應用軟件通常也允許用戶強制性地指定端口號作為運行參數。
連結外部的客戶端程序通常使用系統分配的一個隨機端口號。監(jiān)聽一個端口并且然后通過服務器將那個端口發(fā)送到應用的另外一個副本以建立對等連結(如IRC上的dcc文件傳輸)的應用也可以使用一個隨機端口,但是應用程序通常允許定義一個特定的端口范圍的規(guī)范以允許端口能夠通過實現網絡地址轉換(NAT)的路由器映射到內部。
每一個應用層(TCP/IP參考模型 的最高層) 協議一般都會使用到兩個傳輸層協議之一: 面向連接的TCP傳輸控制協議和無連接的包傳輸的UDP用戶數據報文協議 。
常用的應用層協議有:
運行在TCP協議上的協議:
HTTP(Hypertext Transfer Protocol,超文本傳輸協議),主要用于普通瀏覽。
HTTPS(Hypertext Transfer Protocol over Secure Socket Layer, or HTTP over SSL,安全超文本傳輸協議),HTTP協議的安全版本。
FTP(File Transfer Protocol, 文件傳輸協議),由名知義,用于文件傳輸。
POP3 (Post Office Protocol, version 3, 郵局協議) ,收郵件用。
SMTP (Simple Mail Transfer Protocol,簡單郵件傳輸協議) ,用來發(fā)送電子郵件 。
TELNET(Teletype over the Network, 網絡電傳),通過一個終端(terminal)登陸到網絡。
SSH (Secure Shell,用于替代安全性差的TELNET),用于加密安全登陸用。
運行在UDP協議上的協議:
BOOTP (Boot Protocol,啟動協議) ,應用于無盤設備。
NTP (Network Time Protocol,網絡時間協議) ,用于網絡同步。
其他:
DNS (Domain Name Service,域名服務) ,用于完成地址查找,郵件轉發(fā)等工作(運行在TCP和UDP協議上) 。
ECHO (Echo Protocol, 回繞協議) ,用于查錯及測量應答時間(運行在TCP和UDP協議上) 。
SNMP (Simple Network Management Protocol, 簡單網絡管理協議) ,用于網絡信息的收集和網絡管理。
DHCP(Dynamic Host Configuration Protocol,動態(tài)主機配置協議),動態(tài)配置IP地址。
ARP (Address Resolution Protocol,地址解析協議) ,用于動態(tài)解析以太網硬件的地址。
傳輸層
傳輸層的協議能夠解決諸如可靠性(“數據是否已經到達目的地?”)和保證數據按照正確的順序到達這樣的問題。在TCP/IP協議組中,傳輸協議也包括所給數據應該送給哪個應用程序。
在TCP/IP協議組中技術上位于這個層的動態(tài)路由協議通常被認為是網絡層的一部分;一個例子就是OSPF(IP協議89)。
TCP(IP協議6)是一個“可靠的”、面向連結的傳輸機制,它提供一種可靠的字節(jié)流保證數據完整、無損并且按順序到達。TCP盡量連續(xù)不斷地測試網絡的負載并且控制發(fā)送數據的速度以避免網絡過載。另外,TCP試圖將數據按照規(guī)定的順序發(fā)送。這是它與UDP不同之處,這在實時數據流或者路由高網絡層丟失率應用的時候可能成為一個缺陷。
較新的SCTP也是一個“可靠的”、面向連結的傳輸機制。它是面向紀錄而不是面向字節(jié)的,它在一個單獨的連結上提供了通過多路復用提供了多個子流。它也提供了多路自尋址支持,其中連結終端能夠被多個IP地址表示(代表多個物理接口),這樣的話即使其中一個失敗了連接也不中斷。它最初是為電話應用開發(fā)的(在IP上傳輸SS7),但是也可以用于其他的應用。
UDP(IP協議號17)是一個無連結的數據報協議。它是一個“best effort”或者“不可靠”協議——不是因為它特別不可靠,而是因為它不檢查數據包是否已經到達目的地,并且不保證它們按順序到達。如果一個應用程序需要這些特點,它必須自己提供或者使用TCP。
UDP的典型性應用是如流媒體(音頻和視頻等)這樣按時到達比可靠性更重要的應用,或者如DNS查找這樣的簡單查詢/響應應用,如果建立可靠的連結所作的額外工作將是不成比例地大。
DCCP目前正由IEFT開發(fā)。它提供TCP流動控制語義,但對于用戶來說保留了UDP的數據報服務模型。
TCP和UDP都用來支持一些高層的應用。任何給定網絡地址的應用通過它們的TCP或者UDP端口號區(qū)分。根據慣例一些大眾所知的端口與特定的應用相聯系。
RTP是為如音頻和視頻流這樣的實時數據設計的數據報協議。RTP是使用UDP包格式作為基礎的會話層,然而據說它位于因特網協議棧的傳輸層。
網絡層
正如最初所定義的,網絡層解決在一個單一網絡上傳輸數據包的問題。類似的協議有X.25和ARPANET的Host/IMP Protocol。
隨著因特網思想的出現,在這個層上添加了附加的功能,也就是將數據從源網絡傳輸到目的網絡。這就牽涉到在網絡組成的網上選擇路徑將數據包傳輸,也就是因特網。
在因特網協議組中,IP完成數據從源發(fā)送到目的基本任務。IP能夠承載多種不同的高層協議的數據;這些協議使用一個唯一的IP協議號進行標識。ICMP和IGMP分別是1和2。
一些IP承載的協議,如ICMP(用來發(fā)送關于IP發(fā)送的診斷信息)和IGMP(用來管理多播數據),它們位于IP層之上但是完成網絡層的功能,這表明了因特網和OSI模型之間的不兼容性。所有的路由協議,如BGP、 OSPF、和RIP實際上也是網絡層的一部分,盡管似乎它們應該屬于更高的協議棧。
鏈路層
鏈路層實際上并不是因特網協議組中的一部分,但是它是數據包從一個設備的網絡層傳輸到里另外一個設備的網絡層的方法。這個過程能夠在網卡的軟件驅動程序中控制,也可以在韌體或者專用芯片中控制。這將完成如添加報頭準備發(fā)送、通過物理媒介實際發(fā)送這樣一些數據鏈路功能。另一端,鏈路層將完成數據幀接收、去除報頭并且將接收到的包傳到網絡層。
然而,鏈路層并不經常這樣簡單。它也可能是一個虛擬專有網絡(VPN)或者隧道,在這里從網絡層來的包使用隧道協議和其他(或者同樣的)協議組發(fā)送而不是發(fā)送到物理的接口上。VPN和隧道通常預先建好,并且它們有一些直接發(fā)送到物理接口所沒有的特殊特點(例如,它可以加密經過它的數據)。由于現在鏈路“層”現在是一個完整的網絡,這種協議組的遞歸使用可能引起混淆。但是它是一個實現常見復雜功能的一個優(yōu)秀方法。(盡管需要注意以防一個已經封裝并且經隧道發(fā)送下去的數據包進行再次地封裝和發(fā)送)。
TCP/IP層次結構
TCP/IP協議族按照功能被劃分為四個層次,從上到下依次是:
應用層(Application Layer):直接為用戶的應用程序提供服務,包括HTTP(超文本傳輸協議)、FTP(文件傳輸協議)、SMTP(簡單郵件傳輸協議)等。
傳輸層(Transport Layer):負責數據在主機之間的傳輸,主要協議有TCP和UDP(User Datagram Protocol,用戶數據報協議)。TCP提供可靠的、面向連接的通信服務,而UDP則提供無連接的、不可靠的服務,但速度更快。
網絡層(Network Layer):負責數據的路由和轉發(fā),核心協議是IP。此外,還包括ICMP(Internet Control Message Protocol,互聯網控制消息協議)、ARP(Address Resolution Protocol,地址解析協議)等輔助協議。
數據鏈路層(Data Link Layer):負責物理網絡中幀的傳輸和錯誤檢測,包括以太網、PPP(Point-to-Point Protocol,點對點協議)等協議。該層通常還包含MAC地址管理和邏輯鏈路控制(LLC)功能。
TCP/IP工作原理
TCP/IP協議的工作可以概括為以下幾個關鍵步驟:
地址解析:當應用程序準備發(fā)送數據時,首先通過DNS(Domain Name System,域名系統)將域名解析為IP地址,同時確定目標主機的MAC地址(如果需要)。
封裝與分段:應用層數據被封裝成傳輸層報文段(TCP/UDP),再根據網絡層最大傳輸單元(MTU)大小進行分段,每個分段加上IP頭部,形成IP數據包。
路由選擇:IP數據包通過路由器在網絡中傳輸,每個路由器根據數據包的目的IP地址和自身的路由表決定最佳路徑。
傳輸控制:TCP協議在數據傳輸過程中,通過三次握手建立連接,使用序列號確保數據順序,通過確認應答(ACK)機制保證數據到達,并在必要時進行超時重傳。
數據重組:接收端根據IP數據包中的序列號重新組裝成原始的應用層數據,再傳遞給上層應用程序。
連接釋放:TCP連接在完成數據傳輸后,通過四次揮手過程優(yōu)雅地關閉連接,釋放資源。
TCP/IP的分層結構:
TCP/IP 協議族按照層次由上到下分成 4 層,分別是應用層(Application Layer)、傳輸層(Transport Layer)、網絡層(Internet Layer,或稱網際層)和網絡接口層(Network Interface Layer,或稱數據鏈路層)。
應用層包含所有的高層協議,比如 Telnet(Telecommunications Network,遠程登錄協議)、FTP、SMTP(Simple Mail Transfer Protocol,簡單郵件傳輸協議)、DNS(Domain Name Service,域名服務)、NNTP(Net News Transfer Protocol,網絡新聞傳輸協議)和 HTTP 等。Telnet 允許一臺機器上的用戶登錄遠程機器進行工作,FTP 提供將文件從一臺機器上移到另一臺機器上的有效方法,SMTP用于電子郵件的收發(fā),DNS 用于把主機名映射到網絡地址,NNTP 用于新聞的發(fā)布、檢索和獲取,HTTP 用于在 WWW 上獲取主頁。
應用層的下面一層是傳輸層,著名的 TCP 和 UDP(User Datagram Protocol,用戶數據報協議)就在這一層。TCP 是面向連接的協議,它提供可靠的報文傳輸和對上層應用的連接服務。為此,除了基本的數據傳輸外,它還有可靠性保證、流量控制、多路復用、優(yōu)先權和安全性控制等功能。UDP 是面向無連接的不可靠傳輸協議,主要用于不需要TCP的排序和流量控制等功能的應用程序。
傳輸層的下面一層是網絡層,該層是整個 TCP/IP 體系結構的關鍵部分,其功能是使主機可以把數據報(Packet,或稱為分組)發(fā)往任何網絡,并使分組獨立地傳向目標。這些分組經由不同的網絡到達的順序和發(fā)送的順序可能不同。網絡層使用的協議有 IP。
網絡層的下面是數據鏈路層,該層是整個體系結構的基礎部分,負責接收 IP 層的 IP 數據報,通過網絡向外發(fā)送,或接收從網絡上來的物理幀,抽出 IP 數據報,向 IP 層發(fā)送。該層是主機與網絡的實際連接層。
數據鏈路層下面就是實體線路(比如以太網絡、光纖網絡等)。數據鏈路層有以太網、令牌環(huán)網等標準,負責網卡設備的驅動、幀同步(就是從網線上檢測到什么信號算作新幀的開始)、沖突檢測(如果檢測到沖突就自動重發(fā))、數據差錯校驗等工作。交換機可以在不同的數據鏈路層的網絡之間(比如十兆以太網和百兆以太網之間、以太網和令牌環(huán)網之間)轉發(fā)數據幀,由于不同數據鏈路層的幀格式不同,交換機要將進來的數據報拆掉報頭重新封裝之后再轉發(fā)。
不同的協議層對數據報有不同的稱謂,在傳輸層叫作段(Segment),在網絡層叫作數據報(Datagram),在數據鏈路層叫作幀(Frame)。數據封裝成幀后發(fā)送到傳輸介質上,到達目的主機后,每層協議再剝掉相應的報頭,最后將應用層數據交給應用程序處理。