TCP/IP四層模型
成都創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計(jì)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的??稻W(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!TCP/IP參考模型
ISO制定的OSI參考模型的過(guò)于龐大、復(fù)雜招致了許多批評(píng)。與此對(duì)照,由技術(shù)人員自己開(kāi)發(fā)的TCP/IP協(xié)議棧獲得了更為廣泛的應(yīng)用。如圖2-1所示,是TCP/IP參考模型和OSI參考模型的對(duì)比示意圖。
2.1 TCP/IP參考模型的層次結(jié)構(gòu)
TCP/IP協(xié)議棧是美國(guó)國(guó)防部高級(jí)研究計(jì)劃局計(jì)算機(jī)網(wǎng)(Advanced Research Projects Agency Network,ARPANET)和其后繼因特網(wǎng)使用的參考模型。ARPANET是由美國(guó)國(guó)防部(U.S.Department of Defense,DoD)贊助的研究網(wǎng)絡(luò)。最初,它只連接了美國(guó)境內(nèi)的四所大學(xué)。隨后的幾年中,它通過(guò)租用的電話線連接了數(shù)百所大學(xué)和政府部門。最終ARPANET發(fā)展成為全球規(guī)模的互連網(wǎng)絡(luò)-因特網(wǎng)。最初的ARPANET于1990年永久性地關(guān)閉?! ?br />TCP/IP參考模型分為四個(gè)層次:應(yīng)用層、傳輸層、網(wǎng)絡(luò)互連層和主機(jī)到網(wǎng)絡(luò)層。如圖2-2所示。
在TCP/IP參考模型中,去掉了OSI參考模型中的會(huì)話層和表示層(這兩層的功能被合并到應(yīng)用層實(shí)現(xiàn))。同時(shí)將OSI參考模型中的數(shù)據(jù)鏈路層和物理層合并為主機(jī)到網(wǎng)絡(luò)層。下面,分別介紹各層的主要功能。
1、主機(jī)到網(wǎng)絡(luò)層
實(shí)際上TCP/IP參考模型沒(méi)有真正描述這一層的實(shí)現(xiàn),只是要求能夠提供給其上層-網(wǎng)絡(luò)互連層一個(gè)訪問(wèn)接口,以便在其上傳遞IP分組。由于這一層次未被定義,所以其具體的實(shí)現(xiàn)方法將隨著網(wǎng)絡(luò)類型的不同而不同?! ?br />2、網(wǎng)絡(luò)互連層
網(wǎng)絡(luò)互連層是整個(gè)TCP/IP協(xié)議棧的核心。它的功能是把分組發(fā)往目標(biāo)網(wǎng)絡(luò)或主機(jī)。同時(shí),為了盡快地發(fā)送分組,可能需要沿不同的路徑同時(shí)進(jìn)行分組傳遞。因此,分組到達(dá)的順序和發(fā)送的順序可能不同,這就需要上層必須對(duì)分組進(jìn)行排序。
網(wǎng)絡(luò)互連層定義了分組格式和協(xié)議,即IP協(xié)議(Internet Protocol)?! ?br />網(wǎng)絡(luò)互連層除了需要完成路由的功能外,也可以完成將不同類型的網(wǎng)絡(luò)(異構(gòu)網(wǎng))互連的任務(wù)。除此之外,網(wǎng)絡(luò)互連層還需要完成擁塞控制的功能。
3、傳輸層
在TCP/IP模型中,傳輸層的功能是使源端主機(jī)和目標(biāo)端主機(jī)上的對(duì)等實(shí)體可以進(jìn)行會(huì)話。在傳輸層定義了兩種服務(wù)質(zhì)量不同的協(xié)議。即:傳輸控制協(xié)議TCP(transmission control protocol)和用戶數(shù)據(jù)報(bào)協(xié)議UDP(user datagram protocol)?! ?br />TCP協(xié)議是一個(gè)面向連接的、可靠的協(xié)議。它將一臺(tái)主機(jī)發(fā)出的字節(jié)流無(wú)差錯(cuò)地發(fā)往互聯(lián)網(wǎng)上的其他主機(jī)。在發(fā)送端,它負(fù)責(zé)把上層傳送下來(lái)的字節(jié)流分成報(bào)文段并傳遞給下層。在接收端,它負(fù)責(zé)把收到的報(bào)文進(jìn)行重組后遞交給上層。TCP協(xié)議還要處理端到端的流量控制,以避免緩慢接收的接收方?jīng)]有足夠的緩沖區(qū)接收發(fā)送方發(fā)送的大量數(shù)據(jù)?! ?br />UDP協(xié)議是一個(gè)不可靠的、無(wú)連接協(xié)議,主要適用于不需要對(duì)報(bào)文進(jìn)行排序和流量控制的場(chǎng)合?! ?br />4、應(yīng)用層
TCP/IP模型將OSI參考模型中的會(huì)話層和表示層的功能合并到應(yīng)用層實(shí)現(xiàn)?! ?br />應(yīng)用層面向不同的網(wǎng)絡(luò)應(yīng)用引入了不同的應(yīng)用層協(xié)議。其中,有基于TCP協(xié)議的,如文件傳輸協(xié)議(File Transfer Protocol,F(xiàn)TP)、虛擬終端協(xié)議(TELNET)、超文本鏈接協(xié)議(Hyper Text Transfer Protocol,HTTP),也有基于UDP協(xié)議的。
2.2 TCP/IP報(bào)文格式
1、IP報(bào)文格式
IP協(xié)議是TCP/IP協(xié)議族中最為核心的協(xié)議。它提供不可靠、無(wú)連接的服務(wù),也即依賴其他層的協(xié)議進(jìn)行差錯(cuò)控制。在局域網(wǎng)環(huán)境,IP協(xié)議往往被封裝在以太網(wǎng)幀中傳送。而所有的TCP、UDP、ICMP、IGMP數(shù)據(jù)都被封裝在IP數(shù)據(jù)報(bào)中傳送。如圖2-3所示:
其中:
●版本(Version)字段:占4比特。用來(lái)表明IP協(xié)議實(shí)現(xiàn)的版本號(hào),當(dāng)前一般為IPv4,即0100?! ?br />●報(bào)頭長(zhǎng)度(Internet Header Length,IHL)字段:占4比特。是頭部占32比特的數(shù)字,包括可選項(xiàng)。普通IP數(shù)據(jù)報(bào)(沒(méi)有任何選項(xiàng)),該字段的值是5,即160比特=20字節(jié)。此字段值為60字節(jié)?! ?br />●服務(wù)類型(Type of Service ,TOS)字段:占8比特。其中前3比特為優(yōu)先權(quán)子字段(Precedence,現(xiàn)已被忽略)。第8比特保留未用。第4至第7比特分別代表延遲、吞吐量、可靠性和花費(fèi)。當(dāng)它們?nèi)≈禐?時(shí)分別代表要求最小時(shí)延、吞吐量、高可靠性和最小費(fèi)用。這4比特的服務(wù)類型中只能置其中1比特為1??梢匀珵?,若全為0則表示一般服務(wù)。服務(wù)類型字段聲明了數(shù)據(jù)報(bào)被網(wǎng)絡(luò)系統(tǒng)傳輸時(shí)可以被怎樣處理。例如:TELNET協(xié)議可能要求有最小的延遲,F(xiàn)TP協(xié)議(數(shù)據(jù))可能要求有吞吐量,SNMP協(xié)議可能要求有高可靠性,NNTP(Network News Transfer Protocol,網(wǎng)絡(luò)新聞傳輸協(xié)議)可能要求最小費(fèi)用,而ICMP協(xié)議可能無(wú)特殊要求(4比特全為0)。實(shí)際上,大部分主機(jī)會(huì)忽略這個(gè)字段,但一些動(dòng)態(tài)路由協(xié)議如OSPF(Open Shortest Path First Protocol)、IS-IS(Intermediate System to Intermediate System Protocol)可以根據(jù)這些字段的值進(jìn)行路由決策?! ?br />●總長(zhǎng)度字段:占16比特。指明整個(gè)數(shù)據(jù)報(bào)的長(zhǎng)度(以字節(jié)為單位)。長(zhǎng)度為65535字節(jié)。
●標(biāo)志字段:占16比特。用來(lái)唯一地標(biāo)識(shí)主機(jī)發(fā)送的每一份數(shù)據(jù)報(bào)。通常每發(fā)一份報(bào)文,它的值會(huì)加1。
●標(biāo)志位字段:占3比特。標(biāo)志一份數(shù)據(jù)報(bào)是否要求分段?! ?br />●段偏移字段:占13比特。如果一份數(shù)據(jù)報(bào)要求分段的話,此字段指明該段偏移距原始數(shù)據(jù)報(bào)開(kāi)始的位置?! ?br />●生存期(TTL:Time to Live)字段:占8比特。用來(lái)設(shè)置數(shù)據(jù)報(bào)最多可以經(jīng)過(guò)的路由器數(shù)。由發(fā)送數(shù)據(jù)的源主機(jī)設(shè)置,通常為32、64、128等。每經(jīng)過(guò)一個(gè)路由器,其值減1,直到0時(shí)該數(shù)據(jù)報(bào)被丟棄。
●協(xié)議字段:占8比特。指明IP層所封裝的上層協(xié)議類型,如ICMP(1)、IGMP(2) 、TCP(6)、UDP(17)等?! ?br />●頭部校驗(yàn)和字段:占16比特。內(nèi)容是根據(jù)IP頭部計(jì)算得到的校驗(yàn)和碼。計(jì)算方法是:對(duì)頭部中每個(gè)16比特進(jìn)行二進(jìn)制反碼求和。(和ICMP、IGMP、TCP、UDP不同,IP不對(duì)頭部后的數(shù)據(jù)進(jìn)行校驗(yàn))?! ?br />●源IP地址、目標(biāo)IP地址字段:各占32比特。用來(lái)標(biāo)明發(fā)送IP數(shù)據(jù)報(bào)文的源主機(jī)地址和接收IP報(bào)文的目標(biāo)主機(jī)地址?! ?br />可選項(xiàng)字段:占32比特。用來(lái)定義一些任選項(xiàng):如記錄路徑、時(shí)間戳等。這些選項(xiàng)很少被使用,同時(shí)并不是所有主機(jī)和路由器都支持這些選項(xiàng)??蛇x項(xiàng)字段的長(zhǎng)度必須是32比特的整數(shù)倍,如果不足,必須填充0以達(dá)到此長(zhǎng)度要求?!?br />2、TCP數(shù)據(jù)段格式
TCP是一種可靠的、面向連接的字節(jié)流服務(wù)。源主機(jī)在傳送數(shù)據(jù)前需要先和目標(biāo)主機(jī)建立連接。然后,在此連接上,被編號(hào)的數(shù)據(jù)段按序收發(fā)。同時(shí),要求對(duì)每個(gè)數(shù)據(jù)段進(jìn)行確認(rèn),保證了可靠性。如果在指定的時(shí)間內(nèi)沒(méi)有收到目標(biāo)主機(jī)對(duì)所發(fā)數(shù)據(jù)段的確認(rèn),源主機(jī)將再次發(fā)送該數(shù)據(jù)段。
如圖2-5所示,是TCP頭部結(jié)構(gòu)(RFC 793、1323)。
●源、目標(biāo)端口號(hào)字段:占16比特。TCP協(xié)議通過(guò)使用"端口"來(lái)標(biāo)識(shí)源端和目標(biāo)端的應(yīng)用進(jìn)程。端口號(hào)可以使用0到65535之間的任何數(shù)字。在收到服務(wù)請(qǐng)求時(shí),操作系統(tǒng)動(dòng)態(tài)地為客戶端的應(yīng)用程序分配端口號(hào)。在服務(wù)器端,每種服務(wù)在"眾所周知的端口"(Well-Know Port)為用戶提供服務(wù)。
●順序號(hào)字段:占32比特。用來(lái)標(biāo)識(shí)從TCP源端向TCP目標(biāo)端發(fā)送的數(shù)據(jù)字節(jié)流,它表示在這個(gè)報(bào)文段中的第一個(gè)數(shù)據(jù)字節(jié)?! ?br />●確認(rèn)號(hào)字段:占32比特。只有ACK標(biāo)志為1時(shí),確認(rèn)號(hào)字段才有效。它包含目標(biāo)端所期望收到源端的下一個(gè)數(shù)據(jù)字節(jié)?! ?br />●頭部長(zhǎng)度字段:占4比特。給出頭部占32比特的數(shù)目。沒(méi)有任何選項(xiàng)字段的TCP頭部長(zhǎng)度為20字節(jié);最多可以有60字節(jié)的TCP頭部?! ?br />●標(biāo)志位字段(U、A、P、R、S、F):占6比特。各比特的含義如下:
◆URG:緊急指針(urgent pointer)有效?! ?br />◆ACK:確認(rèn)序號(hào)有效?! ?br />◆PSH:接收方應(yīng)該盡快將這個(gè)報(bào)文段交給應(yīng)用層。
◆RST:重建連接?! ?br />◆SYN:發(fā)起一個(gè)連接?! ?br />◆FIN:釋放一個(gè)連接?! ?br />●窗口大小字段:占16比特。此字段用來(lái)進(jìn)行流量控制。單位為字節(jié)數(shù),這個(gè)值是本機(jī)期望一次接收的字節(jié)數(shù)?! ?br />●TCP校驗(yàn)和字段:占16比特。對(duì)整個(gè)TCP報(bào)文段,即TCP頭部和TCP數(shù)據(jù)進(jìn)行校驗(yàn)和計(jì)算,并由目標(biāo)端進(jìn)行驗(yàn)證。
●緊急指針字段:占16比特。它是一個(gè)偏移量,和序號(hào)字段中的值相加表示緊急數(shù)據(jù)最后一個(gè)字節(jié)的序號(hào)?! ?br />●選項(xiàng)字段:占32比特??赡馨?窗口擴(kuò)大因子"、"時(shí)間戳"等選項(xiàng)。
3、UDP數(shù)據(jù)段格式
UDP是一種不可靠的、無(wú)連接的數(shù)據(jù)報(bào)服務(wù)。源主機(jī)在傳送數(shù)據(jù)前不需要和目標(biāo)主機(jī)建立連接。數(shù)據(jù)被冠以源、目標(biāo)端口號(hào)等UDP報(bào)頭字段后直接發(fā)往目的主機(jī)。這時(shí),每個(gè)數(shù)據(jù)段的可靠性依靠上層協(xié)議來(lái)保證。在傳送數(shù)據(jù)較少、較小的情況下,UDP比TCP更加高效。
如圖2-6所示,是UDP頭部結(jié)構(gòu)(RFC 793、1323):
●源、目標(biāo)端口號(hào)字段:占16比特。作用與TCP數(shù)據(jù)段中的端口號(hào)字段相同,用來(lái)標(biāo)識(shí)源端和目標(biāo)端的應(yīng)用進(jìn)程。
●長(zhǎng)度字段:占16比特。標(biāo)明UDP頭部和UDP數(shù)據(jù)的總長(zhǎng)度字節(jié)。
●校驗(yàn)和字段:占16比特。用來(lái)對(duì)UDP頭部和UDP數(shù)據(jù)進(jìn)行校驗(yàn)。和TCP不同的是,對(duì)UDP來(lái)說(shuō),此字段是可選項(xiàng),而TCP數(shù)據(jù)段中的校驗(yàn)和字段是必須有的。
2.3 套接字
在每個(gè)TCP、UDP數(shù)據(jù)段中都包含源端口和目標(biāo)端口字段。有時(shí),我們把一個(gè)IP地址和一個(gè)端口號(hào)合稱為一個(gè)套接字(Socket),而一個(gè)套接字對(duì)(Socket pair)可以唯一地確定互連網(wǎng)絡(luò)中每個(gè)TCP連接的雙方(客戶IP地址、客戶端口號(hào)、服務(wù)器IP地址、服務(wù)器端口號(hào))。
是常見(jiàn)的一些協(xié)議和它們對(duì)應(yīng)的服務(wù)端口號(hào)。
需要注意的是,不同的應(yīng)用層協(xié)議可能基于不同的傳輸層協(xié)議,如FTP、TELNET、SMTP協(xié)議基于可靠的TCP協(xié)議。TFTP、SNMP、RIP基于不可靠的UDP協(xié)議?! ?br />同時(shí),有些應(yīng)用層協(xié)議占用了兩個(gè)不同的端口號(hào),如FTP的20、21端口,SNMP的161、162端口。這些應(yīng)用層協(xié)議在不同的端口提供不同的功能。如FTP的21端口用來(lái)偵聽(tīng)用戶的連接請(qǐng)求,而20端口用來(lái)傳送用戶的文件數(shù)據(jù)。再如,SNMP的161端口用于SNMP管理進(jìn)程獲取SNMP代理的數(shù)據(jù),而162端口用于SNMP代理主動(dòng)向SNMP管理進(jìn)程發(fā)送數(shù)據(jù)?! ?br />還有一些協(xié)議使用了傳輸層的不同協(xié)議提供的服務(wù)。如DNS協(xié)議同時(shí)使用了TCP 53端口和UDP 53端口。DNS協(xié)議在UDP的53端口提供域名解析服務(wù),在TCP的53端口提供DNS區(qū)域文件傳輸服務(wù)。
2.4 TCP連接建立、釋放時(shí)的握手過(guò)程
1、TCP建立連接的三次握手過(guò)程
TCP會(huì)話通過(guò)三次握手來(lái)初始化。三次握手的目標(biāo)是使數(shù)據(jù)段的發(fā)送和接收同步。同時(shí)也向其他主機(jī)表明其一次可接收的數(shù)據(jù)量(窗口大?。?,并建立邏輯連接。這三次握手的過(guò)程可以簡(jiǎn)述如下:
●源主機(jī)發(fā)送一個(gè)同步標(biāo)志位(SYN)置1的TCP數(shù)據(jù)段。此段中同時(shí)標(biāo)明初始序號(hào)(Initial Sequence Number,ISN)。ISN是一個(gè)隨時(shí)間變化的隨機(jī)值?! ?br />●目標(biāo)主機(jī)發(fā)回確認(rèn)數(shù)據(jù)段,此段中的同步標(biāo)志位(SYN)同樣被置1,且確認(rèn)標(biāo)志位(ACK)也置1,同時(shí)在確認(rèn)序號(hào)字段表明目標(biāo)主機(jī)期待收到源主機(jī)下一個(gè)數(shù)據(jù)段的序號(hào)(即表明前一個(gè)數(shù)據(jù)段已收到并且沒(méi)有錯(cuò)誤)。此外,此段中還包含目標(biāo)主機(jī)的段初始序號(hào)?! ?br />●源主機(jī)再回送一個(gè)數(shù)據(jù)段,同樣帶有遞增的發(fā)送序號(hào)和確認(rèn)序號(hào)?! ?br />至此為止,TCP會(huì)話的三次握手完成。接下來(lái),源主機(jī)和目標(biāo)主機(jī)可以互相收發(fā)數(shù)據(jù)。整個(gè)過(guò)程可用圖2-8表示。
2、TCP釋放連接的四次握手過(guò)程