TCP/IP起源於1969年美國國防部(DOD:The United States Department Of Defense)高級研究項目管理局(APRA:AdvancedResearch Projects Agency)對有關分組交換的廣域網(Packet-Switched wide-area network)科研項目,所以起初的網絡稱爲ARPANET。
1973年TCP(傳輸控制協議)
正式投入使用,1981年IP(網際協議)
協議投入使用,1983年TCP/IP協議正式被集成到美國加州大學伯克利分校的UNIX版本中,該「網絡版」操做系統適應了當時各大學、機關、企業旺盛的連網需求,於是隨着該免費分發的操做系統的普遍使用,TCP/IP協議獲得了流傳。
TCP/IP技術獲得了衆多廠商的支持,不久就有了不少分散的網絡。全部這些單個的TCP/IP網絡都互聯起來稱爲INTERNET。基於TCP/IP協議的Internet已逐步發展成爲當今世界上規模最大、擁有用戶和資源最多的一個超大型計算機網絡,TCP/IP協議也所以成爲事實上的工業標準。IP網絡正逐步成爲當代乃至將來計算機網絡的主流。編程
早在TCP/IP協議出現以前,國際標準化組織(ISO)就提出了開放系統互連(OSI)網絡模型
,爲網絡的設計、開發、編程、維護提供了便利的分而治之的思想,其先進性、科學性、實用性是不言而喻的。
TCP/IP協議不是單純的兩個協議,是一組不一樣層次上的多個協議的組合,常稱爲TCP/IP協議簇或者互聯網協議簇
。TCP/IP也是互聯網的事實上的標準,爲實現整個網絡的互聯提供指導。TCP/IP層次組合很難用OSI的七層模型來套用,它是OSI模型的濃縮,將原來的七層模型合併爲四層協議的體系結構,自頂向下分別是應用層、傳輸層、網絡層和網絡接口層,沒有OSI參考模型的會話層和表示層,通常認爲TCP/IP的會話和表示功能是在傳輸層或應用層上完成的。緩存
TCP/IP不是一個單獨的協議,而是一個協議簇,是一組不一樣層次上的多個協議的組合。上面給出了OSI與TCP/IP模型對比、TCP/IP不一樣層次的協議。網絡接口層
:有時也稱做數據鏈路層或鏈路層,一般包括操做系統中的設備驅動程序和計算機中對應的網絡接口卡。它們一塊兒處理與電纜(或其餘任何傳輸媒介)的物理接口細節。在TCP/IP協議簇中,鏈路層的協議比較多,它決定了網絡形態,但不少都不是專門爲TCP/IP設計的。經常使用的鏈路層協議包括:以太網協議、PPP協議、幀中繼協議、ATM等
。網絡層
:IP層有時也稱做互連網層,處理分組在網絡中的活動,在底層通訊網絡的基礎上,完成路由、尋徑功能,提供主機到主機的鏈接。IP是盡力傳送的、不可靠的協議。在TCP/IP協議簇中,網絡層協議包括IP協議(網際協議),ICMP協議(Internet互連網控制報文協議),ARP/RARP(地址解析/反向地址解析協議),以及IGMP協議(Internet組管理協議)
。傳輸層
:主要爲兩臺主機上的應用程序提供端到端的通訊。在TCP/IP協議簇中,有兩個不一樣的傳輸協議:TCP(傳輸控制協議)和UDP(用戶數據報協議),它們分別承載不一樣的應用。TCP協議提供可靠的服務,UDP協議提供不可靠可是高效的服務
。應用層
:這一層負責具體的應用,好比HTTP訪問、FTP文件傳輸、SMTP/POP3郵件處理等等。幾乎各類不一樣的TCP/IP實現都會提供下面這些通用的應用程序:遠程登陸(Telnet)
、文件傳輸協議(FTP)
、簡單郵件傳輸協議(SMTP)
、簡單網絡管理協議(SNMP)
。
嚴格來說,分層模型的動機就是將各層的功能儘可能獨立,每層的功能對另外一層來講是透明的,只對通訊的另外一端負責,爲編程和診斷提供良好的層次隔離,然而實際狀況並不是如此,首先軟件編程上徹底按照分層模型來作編程效率會下降,與其分層,不如按功能實現來模塊化。其次,對於許多功能實現來講,必須實現兩層子間的交互,這又違背了當初的出發點,好比鏈路層在成幀時須要接收端的物理地址,該地址必須由網絡層處理ARP地址解析才行,簡單地將ARP放在那一層都有些牽強。因此說,分層模型對於理解網絡的抽象性是有益處的,它有助於指導網絡入門,但並非網絡的精髓,只有結合具體的系統分析纔有實際意義。安全
URG緊急指針(urgent pointer)有效. ACK確認序號有效。 PSH接收方應該儘快將這個報文段交給應用層。 RST重建鏈接。 SYN同步序號用來發起一個鏈接。 FIN發端完成發送任務。
請求端(一般稱爲客戶)發送一個SYN段指明客戶打算鏈接的服務器的端口,以及初始序號(ISN)。這個SYN段爲報文段1。 服務器發回包含服務器的初始序號的SYN報文段(報文段2)做爲應答。同時,將確認序號設置爲客戶的ISN加1以對客戶的SYN報文段進行確認。一個SYN將佔用一個序號。 客戶必須將確認序號設置爲服務器的ISN加1以對服務器的SYN報文段進行確認(報文段3)。 這三個報文段完成鏈接的創建。
一個TCP鏈接是全雙工(即數據在兩個方向上能同時傳遞),所以每一個方向必須單獨進行關閉。當一方完成它的數據發送任務後就發送一個FIN來終止這個方向鏈接。當一端收到一個FIN,它必須通知應用層另外一端已經終止了那個方向的數據傳送。因此TCP終止鏈接的過程須要四個過程,稱之爲四次握手過程。
UDP是一個簡單的面向數據報的傳輸層協議,UDP不提供可靠性,它把應用程序傳給IP層的數據發送出去,可是並不保證它們能到達目的地。UDP和TCP在首部中都有覆蓋它們首部和數據的檢驗和。UDP的檢驗和是可選的,而TCP的檢驗和是必需的。
無鏈接的,不可靠的傳遞服務 數據包分段和重組 路由功能ICMP(Internet互連網控制報文協議)是IP協議的附屬協議,主要被用來與其餘主機或路由器交換錯誤報文和其餘重要信息。儘管ICMP主要被IP使用,但應用程序也能夠訪問它,例如咱們
經常使用的兩個診斷工具ping和traceroute,都使用了ICMP協議。
版本
:目前的協議版本號是4,所以IP有時也稱做I P v 4。- iOS現已支持IPV6首部長度
:首部長度指的是IP包頭中32 bit的數量,包括任何選項。因爲它是一個4比特字段,所以首部最長爲60個字節。普通IP數據報(沒有任何選擇項)字段的值是5,即長度20個字節。服務類型(TOS)字段
:包括一個3 bit的優先權子字段,4 bit的TOS子字段和1 bit未用位但必須置0的子字段。4 bit的TOS分別表明:最小時延、最大吞吐量、最高可靠性和最小費用。4 bit中只能置其中1 bit。若是全部4 bit均爲0,那麼就意味着是通常服務。如今大多數的TCP/IP實現都不支持TOS特性,可是自4.3BSD Reno之後的新版系統都對它進行了設置。另外,新的路由協議如OSPF和IS-IS都能根據這些字段的值進行路由決策。總長度字段
:指整個IP數據包的長度,以字節爲單位。利用首部長度字段和總長度字段,就能夠知道IP數據報中數據內容的起始位置和長度。因爲該字段長16比特,因此IP數據報最長可達65535字節。儘管能夠傳送一個長達65535字節的IP數據包,可是大多數的鏈路層都會對它進行分片。總長度字段是IP首部中必要的內容,由於一些數據鏈路(如以太網)須要填充一些數據以達到最小長度。儘管以太網的最小幀長爲46字節,可是IP數據可能會更短。若是沒有總長度字段,那麼IP層就不知道46字節中有多少是IP數據包的內容。標識字段
:惟一地標識主機發送的每一份數據包。一般每發送一份報文它的值就會加1樣,物理網絡層通常要限制每次發送數據幀的最大長度。IP把MTU與數據包長度進行比較,若是須要則進行分片。分片能夠發生在原始發送端主機上,也能夠發生在中間路由器上。把一份IP數據包分片之後,只有到達目的地才進行從新組裝。從新組裝由目的端的IP層來完成,其目的是使分片和從新組裝過程對傳輸層(TCP和UDP)是透明的,即便只丟失一片數據也要重傳整個數據包。TTL(time-to-live)生存時間
:該字段設置了數據包能夠通過的最多路由器數。它指定了數據報的生存時間。TTL的初始值由源主機設置(一般爲32或64),一旦通過一個處理它的路由器,它的值就減去1。當該字段的值爲0時,數據報就被丟棄,併發送ICMP報文通知源主機。協議字段
:根據它能夠識別是哪一個協議向IP傳送數據。首部檢驗和字段
:根據IP首部計算的檢驗和碼。它不對首部後面的數據進行計算。由於ICMP、IGMP、UDP和TCP在它們各自的首部中均含有同時覆蓋首部和數據效驗和碼。最後一個字段是任選項
,是數據包中的一個可變長的可選信息。這些任選項定義以下: 安全和處理限制(用於軍事領域,詳細內容參見RFC 1108[Kent 1991]) 記錄路徑(讓每一個路由器都記下它的IP地址) 時間戳(讓每一個路由器都記下它的IP地址和時間) 寬鬆的源站選路(爲數據報指定一系列必須通過的IP地址) 嚴格的源站選路(與寬鬆的源站選路相似,可是要求只能通過指定的這些地址,不能通過其餘的地址)。這些選項不多被使用,並不是全部的主機和路由器都支持這些選項。
選項字段一直都是以32 bit做爲界限,在必要的時候插入值爲0的填充字節。這樣就保證IP首部始終是32 bit的整數倍。
經常使用的「ping」就是使用的ICMP協議
。「ping」這個名字源於聲納定位操做,目的是爲了測試另外一臺主機是否可達。該程序發送一份ICMP迴應請求報文給主機,並等待返回ICMP迴應應答。通常來講,若是不能Ping到某臺主機,那麼就不能Telnet或者FTP到那臺主機。反過來,若是不能Telnet到某臺主機,那麼一般能夠用Ping程序來肯定問題出在哪裏。Ping程序還能測出到這臺主機的往返時間,以代表該主機離咱們有「多遠」。ARP過程以下
:ARP發送一份稱做ARP請求的以太網數據幀給以太網上的每一個主機。這個過程稱做廣播,ARP請求數據幀中包含目的主機的IP地址,其意思是「若是你是這個IP地址的擁有者,請回答你的硬件地址。