1.網(wǎng)絡(luò)接口層:網(wǎng)卡及網(wǎng)絡(luò)硬件設(shè)備以及驅(qū)動程序。
2.網(wǎng)絡(luò)層:處理機器之間跨多個網(wǎng)絡(luò)的路由燥翅,并且管理網(wǎng)絡(luò)名稱和地址,以方便處理這種行為蜀漆。它執(zhí)行TCP/IP的3個主要任務(wù):分段兆解、尋址和路由昆婿。有IP協(xié)議菲饼、ICMP協(xié)議吵护、ARP協(xié)議赡若、RARP協(xié)議和BOOTP協(xié)議达布。
3.傳輸層:為應(yīng)用程序提供通信方法,通常設(shè)為TCP逾冬、UDP這兩個協(xié)議黍聂。
4.應(yīng)用層:通常被定義為處理層,是協(xié)議棧和主機上的應(yīng)用或者處理程序交界的層,用戶處理與應(yīng)用的接口也定義在這里分冈,有FTP圾另、HTTP、TELNET雕沉、SMTP集乔、DNS等協(xié)議。
HTTP:
HTTP協(xié)議是建立在請求/響應(yīng)模型上的坡椒。首先由客戶建立一條與服務(wù)器的TCP鏈接扰路,并發(fā)送一個請求到服務(wù)器,請求中包含請求方法倔叼、URI汗唱、協(xié)議版本以及相關(guān)的MIME樣式的消息。服務(wù)器響應(yīng)一個狀態(tài)行丈攒,包含消息的協(xié)議版本哩罪、一個成功和失敗碼以及相關(guān)的MIME式樣的消息。HTTP/1.0為每一次HTTP的請求/響應(yīng)建立一條新的TCP鏈接巡验,因此一個包含HTML內(nèi)容和圖片的頁面將需要建立多次的短期的TCP鏈接际插。一次TCP鏈接的建立將需要3次握手。另外显设,為了獲得適當?shù)膫鬏斔俣瓤虺冢瑒t需要TCP花費額外的回路鏈接時間(RTT)。每一次鏈接的建立需要這種經(jīng)常性的開銷捕捂,而其并不帶有實際有用的數(shù)據(jù)瑟枫,只是保證鏈接的可靠性,因此HTTP/1.1提出了可持續(xù)鏈接的實現(xiàn)方法指攒。HTTP/1.1將只建立一次TCP的鏈接而重復(fù)地使用它傳輸一系列的請求/響應(yīng)消息慷妙,因此減少了鏈接建立的次數(shù)和經(jīng)常性的鏈接開銷。
這里有必要再講一下三次握手的過程:
第一次握手:建立連接時允悦,客戶端發(fā)送syn包(syn=j)到服務(wù)器景殷,并進入SYN_SENT狀態(tài),等待服務(wù)器確認澡屡;SYN:同步序列編號(Synchronize Sequence Numbers)。
第二次握手:服務(wù)器收到syn包咐旧,必須確認客戶的SYN(ack=j+1)驶鹉,同時自己也發(fā)送一個SYN包(syn=k),即SYN+ACK包铣墨,此時服務(wù)器進入SYN_RECV狀態(tài)室埋;ACK:確認字符(Acknowledgement)
第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認包ACK(ack=k+1),此包發(fā)送完畢姚淆,客戶端和服務(wù)器進入ESTABLISHED(TCP連接成功)狀態(tài)孕蝉,完成三次握手。
Socket是什么呢腌逢? Socket是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件抽象層降淮,它是一組接口。在設(shè)計模式中搏讶,Socket其實就是一個門面模式佳鳖,它把復(fù)雜的TCP/IP協(xié)議族隱藏在Socket接口后面,對用戶來說媒惕,一組簡單的接口就是全部系吩,讓Socket去組織數(shù)據(jù),以符合指定的協(xié)議妒蔚。
TCP(Transmission Control Protocol穿挨,傳輸控制協(xié)議)是基于連接的協(xié)議,也就是說肴盏,在正式收發(fā)數(shù)據(jù)前科盛,必須和對方建立可靠的連接。一個TCP連接必須要經(jīng)過三次“對話”才能建立起來叁鉴,其中的過程非常復(fù)雜土涝,我們這里只做簡單、形象的介紹幌墓,你只要做到能夠理解這個過程即可但壮。我們來看看這三次對話的簡單過程:主機A向主機B發(fā)出連接請求數(shù)據(jù)包:“我想給你發(fā)數(shù)據(jù),可以嗎常侣?”蜡饵,這是第一次對話;主機B向主機A發(fā)送同意連接和要求同步(同步就是兩臺主機一個在發(fā)送胳施,一個在接收溯祸,協(xié)調(diào)工作)的數(shù)據(jù)包:“可以,你什么時候發(fā)舞肆?”焦辅,這是第二次對話;主機A再發(fā)出一個數(shù)據(jù)包確認主機B的要求同步:“我現(xiàn)在就發(fā)椿胯,你接著吧筷登!”,這是第三次對話哩盲。三次“對話”的目的是使數(shù)據(jù)包的發(fā)送和接收同步前方,經(jīng)過三次“對話”之后狈醉,主機A才向主機B正式發(fā)送數(shù)據(jù)。
UDP(User Data Protocol惠险,用戶數(shù)據(jù)報協(xié)議)是與TCP相對應(yīng)的協(xié)議苗傅。它是面向非連接的協(xié)議,它不與對方建立連接班巩,而是直接就把數(shù)據(jù)包發(fā)送過去渣慕! UDP適用于一次只傳送少量數(shù)據(jù)、對可靠性要求不高的應(yīng)用環(huán)境趣竣。比如摇庙,我們經(jīng)常使用“ping”命令來測試兩臺主機之間TCP/IP通信是否正常,其實“ping”命令的原理就是向?qū)Ψ街鳈C發(fā)送UDP數(shù)據(jù)包遥缕,然后對方主機確認收到數(shù)據(jù)包卫袒,如果數(shù)據(jù)包是否到達的消息及時反饋回來,那么網(wǎng)絡(luò)就是通的单匣。例如夕凝,在默認狀態(tài)下,一次“ping”操作發(fā)送4個數(shù)據(jù)包(如圖2所示)户秤。大家可以看到码秉,發(fā)送的數(shù)據(jù)包數(shù)量是4包,收到的也是4包(因為對方主機收到后會發(fā)回一個確認收到的數(shù)據(jù)包)鸡号。這充分說明了UDP協(xié)議是面向非連接的協(xié)議转砖,沒有建立連接的過程。正因為UDP協(xié)議沒有連接的過程鲸伴,所以它的通信效果高府蔗;但也正因為如此,它的可靠性不如TCP協(xié)議高汞窗。QQ就使用UDP發(fā)消息姓赤,因此有時會出現(xiàn)收不到消息的情況。
tcp協(xié)議和udp協(xié)議的差別
TCP UDP
是否連接 面向連接 面向非連接
傳輸可靠性 可靠 不可靠
應(yīng)用場合 傳輸大量數(shù)據(jù) 少量數(shù)據(jù)
速度 慢 快