1.TCP/IP簡(jiǎn)介
TCP/IP協(xié)議源于1969年,是針對(duì)Internet開(kāi)發(fā)的一種體系結(jié)構(gòu)和協(xié)議標(biāo)準(zhǔn),目的在于解決異種計(jì)算機(jī)網(wǎng)絡(luò)的通信問(wèn)題。使得網(wǎng)絡(luò)在互聯(lián)時(shí)能為用戶提供一種通用、一致的通信服務(wù)。是Internet采用的協(xié)議標(biāo)準(zhǔn)。
TCP/IP是一組通信協(xié)議的代名詞,是由一系列協(xié)議組成的協(xié)議簇。它本身指兩個(gè)協(xié)議集:
TCP(傳輸控制協(xié)議)。
IP(互聯(lián)網(wǎng)絡(luò)協(xié)議)。
TCP/IP協(xié)議的基本傳輸單位是數(shù)據(jù)包(Datagram)。
TCP/IP傳輸協(xié)議,即傳輸控制/網(wǎng)絡(luò)協(xié)議,也叫作網(wǎng)絡(luò)通訊協(xié)議。它是在網(wǎng)絡(luò)的使用中的最基本的通信協(xié)議。TCP/IP傳輸協(xié)議對(duì)互聯(lián)網(wǎng)中各部分進(jìn)行通信的標(biāo)準(zhǔn)和方法進(jìn)行了規(guī)定。并且,TCP/IP傳輸協(xié)議是保證網(wǎng)絡(luò)數(shù)據(jù)信息及時(shí)、完整傳輸?shù)膬蓚€(gè)重要的協(xié)議。TCP/IP傳輸協(xié)議是嚴(yán)格來(lái)說(shuō)是一個(gè)四層的體系結(jié)構(gòu),應(yīng)用層、傳輸層、網(wǎng)絡(luò)層和數(shù)據(jù)鏈路層都包含其中。
2.TCP/IP協(xié)議分層模型
TCP/IP協(xié)議族是一組不同層次上的多個(gè)協(xié)議的組合。TCP/IP通常被認(rèn)為是一個(gè)四層協(xié)議系統(tǒng)。
應(yīng)用層(Application Layer)
包含各種網(wǎng)絡(luò)應(yīng)用協(xié)議。如HTTP、FTP、telnet、SMTP、DNS、SNMP等。
傳輸層(Transport Layer)
負(fù)責(zé)在源主機(jī)和目的主機(jī)的應(yīng)用程序間建立、管理和拆除可靠而又有效的端到端連接 。主要有TCP和UDP兩個(gè)傳輸協(xié)議。
網(wǎng)絡(luò)互聯(lián)層(Internet Layer)
負(fù)責(zé)將分組獨(dú)立地從信源傳送到信宿,主要解決路由選擇、擁塞控制和網(wǎng)絡(luò)互聯(lián)等問(wèn)題。如最重要的協(xié)議——IP。
網(wǎng)絡(luò)接口層(Network Access Layer)
負(fù)責(zé)將IP分組封裝成適合在物理網(wǎng)絡(luò)上傳輸?shù)膸袷讲鬏?;或?qū)奈锢砭W(wǎng)絡(luò)接收到的幀解封,取出IP分組交給網(wǎng)絡(luò)互聯(lián)層。當(dāng)前幾乎所有的物理網(wǎng)絡(luò)上都可運(yùn)行TCP/IP協(xié)議。
3.傳輸控制協(xié)議TCP
TCP協(xié)議, 即傳輸控制協(xié)議,是一個(gè)可靠的、面向連接的協(xié)議。所謂連接,就是兩個(gè)對(duì)等實(shí)體為進(jìn)行數(shù)據(jù)通信而進(jìn)行的一種結(jié)合。面向連接服務(wù)是在數(shù)據(jù)交換之前,必須先建立連接。當(dāng)數(shù)據(jù)交換結(jié)束后,則應(yīng)終止這個(gè)連接。面向連接服務(wù)具有:連接建立、數(shù)據(jù)傳輸和連接釋放這三個(gè)階段。在傳送數(shù)據(jù)時(shí)是按序傳送的。
3.1 TCP數(shù)據(jù)格式
3.2 三次握手
第一次握手:
建立連接時(shí),客戶端發(fā)送syn包(syn=j)到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器確認(rèn)。
第二次握手:
服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=j+1),同時(shí)自己也發(fā)送一個(gè)SYN包(syn=k),即SYN+ACK包,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài)。
第三次握手:
客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完成三次握手。
為什么握手是三次, 而不是兩次或者四次?
為了保證雙方都具備收發(fā)能力,則雙方都需要發(fā)送SYN和ACK,兩次握手則只能確一方具備收發(fā)能力;三次握手則可剛好可確定雙方都是可以進(jìn)行收發(fā)的。
第一次握手是客戶端發(fā)送 SYN, 服務(wù)端接收, 服務(wù)端得出客戶端的發(fā)送能力和服務(wù)端的接收能力都正常;
第二次握手是服務(wù)端發(fā)送 SYN+ACK, 客戶端接收, 客戶端得出客戶端發(fā)送接收能力正常, 服務(wù)端發(fā)送接收能力也都正常, 但是此時(shí)服務(wù)器并不能確認(rèn)客戶端的接收能力是否正常;
第三次握手客戶端發(fā)送 ACK, 服務(wù)器接收, 服務(wù)端才能得出客戶端發(fā)送接收能力正常,服務(wù)端自己發(fā)送接收能力也都正常。
3.3 四次揮手
TCP 一個(gè)特別的概念叫作半關(guān)閉, 這個(gè)概念是說(shuō), TCP 的連接是全雙工(可以同時(shí)發(fā)送和接收) 連接, 因此在關(guān)閉連接的時(shí)候, 必須關(guān)閉發(fā)送和接收兩個(gè)方向上的連接。
第一次揮手: 客戶端發(fā)出釋放 FIN=1, 自 己序列號(hào) seq=u, 進(jìn)入 FIN-WAIT-1 狀態(tài)。
第二次揮手: 服務(wù)器收到客戶端的后, 發(fā)出 ACK=1 確認(rèn)標(biāo)志和客戶端的確認(rèn)號(hào) ack=u+1,自己的序列號(hào) seq=v, 進(jìn)入 CLOSE-WAIT 狀態(tài)。
第三次揮手: 客戶端收到服務(wù)器確認(rèn)結(jié)果后, 進(jìn)入 FIN-WAIT-2 狀態(tài)。 此時(shí)服務(wù)器發(fā)送釋放 FIN=1 信號(hào), 確認(rèn)標(biāo)志 ACK=1, 確認(rèn)序號(hào) ack=u+1, 自 己序號(hào) seq=w, 服務(wù)器進(jìn)入LAST-ACK(最后確認(rèn)態(tài))。
第四次揮手: 客戶端收到回復(fù)后, 發(fā)送確認(rèn) ACK=1, ack=w+1, 自 己的 seq=u+1, 客戶端進(jìn)入 TIME-WAIT(時(shí)間等待) 。 客戶端經(jīng)過(guò) 2 個(gè)最長(zhǎng)報(bào)文段壽命后, 客戶端 CLOSE;服務(wù)器收到確認(rèn)后, 立刻進(jìn)入 CLOSE 狀態(tài)。
為么需要四次揮手
因?yàn)闉樵跀嚅_(kāi)連接時(shí),服務(wù)器收到客戶端斷開(kāi)請(qǐng)求時(shí)可能此時(shí)還沒(méi)有完成數(shù)據(jù)傳輸,所以需要先回復(fù)客戶端我收到你的請(qǐng)求了,等將數(shù)據(jù)傳輸完成后,再通知客戶開(kāi)端可以斷開(kāi)連接了,所以服務(wù)器需要將應(yīng)答ack和FIN分兩次發(fā)送,因此需要四次揮手。
審核編輯 黃昊宇
-
Linux
+關(guān)注
關(guān)注
87文章
11320瀏覽量
209849 -
編程
+關(guān)注
關(guān)注
88文章
3628瀏覽量
93812 -
TCP
+關(guān)注
關(guān)注
8文章
1372瀏覽量
79142
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論