1、TCP/IP協(xié)議基本框架:
客戶端通過(guò)http發(fā)起一個(gè)請(qǐng)求時(shí),應(yīng)用層、傳輸層、網(wǎng)絡(luò)層和鏈路層的相關(guān)協(xié)議依次對(duì)該請(qǐng)求進(jìn)行包裝并攜帶對(duì)應(yīng)的首部,在鏈路層生成以太網(wǎng)數(shù)據(jù)包,以太網(wǎng)數(shù)據(jù)*通過(guò)物理介質(zhì)傳輸給對(duì)方主機(jī),對(duì)方接收到數(shù)據(jù)包以后,然后再一層一層采用對(duì)應(yīng)的協(xié)議進(jìn)行拆包,把應(yīng)用層數(shù)據(jù)交給應(yīng)用程序處理,如下圖:
2、應(yīng)用層
應(yīng)用層做為 TCP/IP 協(xié)議的高層級(jí),主要工作就是定義數(shù)據(jù)格式并按照對(duì)應(yīng)的格式解讀數(shù)據(jù),運(yùn)行在TCP協(xié)議上的協(xié)議主要有:
lHTTP(Hypertext Transfer Protocol,超文本傳輸協(xié)議),主要用于普通瀏覽。HTTPS(Hypertext Transfer Protocol over Secure Socket Layer, or HTTP over SSL,安全超文本傳輸協(xié)議),HTTP協(xié)議的安全版本。
lFTP(File Transfer Protocol,文件傳輸協(xié)議),由名知義,用于文件傳輸。
l還有POP3(收郵件用)、SMTP(發(fā)送電子郵件)、TELNET(通過(guò)終端登錄到網(wǎng)絡(luò))、SSH(加密安全登錄)等
3、傳輸層:傳輸層提供了兩種到達(dá)目標(biāo)網(wǎng)絡(luò)的方式
l用戶數(shù)據(jù)報(bào)協(xié)議UDP:只提供了基本的錯(cuò)誤檢測(cè),是一個(gè)無(wú)連接的協(xié)議。
l傳輸控制協(xié)議TCP:提供了完善的錯(cuò)誤控制和流量控制,能夠確保數(shù)據(jù)正常傳輸,是一個(gè)面向連接的協(xié)議
lTCP報(bào)文結(jié)構(gòu)以及每部分的含義和作用
u源端口號(hào)/目的端口號(hào): 表示數(shù)據(jù)從哪個(gè)進(jìn)程來(lái), 到哪個(gè)進(jìn)程去.
u32位序號(hào): 占4個(gè)字節(jié),TCP連接中傳送的字節(jié)流中的每個(gè)字節(jié)都按順序編號(hào)
u32位確認(rèn)號(hào):占4個(gè)字節(jié),是期望收到對(duì)方下一個(gè)報(bào)文的一個(gè)數(shù)據(jù)字節(jié)的序號(hào)
u4位首部長(zhǎng)度: 表示該tcp報(bào)頭有多少個(gè)4字節(jié)(32個(gè)bit)
u6位標(biāo)志位:
nURG: 標(biāo)識(shí)緊急指針是否有效
nACK: 標(biāo)識(shí)確認(rèn)序號(hào)是否有效
nPSH: 用來(lái)提示接收端應(yīng)用程序立刻將數(shù)據(jù)從tcp緩沖區(qū)讀走
nRST: 要求重新建立連接. 我們把含有RST標(biāo)識(shí)的報(bào)文稱(chēng)為復(fù)位報(bào)文段
nSYN: 請(qǐng)求建立連接. 我們把含有SYN標(biāo)識(shí)的報(bào)文稱(chēng)為同步報(bào)文段
nFIN: 通知對(duì)端, 本端即將關(guān)閉. 我們把含有FIN標(biāo)識(shí)的報(bào)文稱(chēng)為結(jié)束報(bào)文段
u6位保留: 顧名思義, 先保留著, 以防萬(wàn)一
u16位窗口大?。赫?字節(jié),指的是通知接收方,發(fā)送本報(bào)文你需要有多大的空間來(lái)接受(即預(yù)留多大空間存儲(chǔ))
u16位檢驗(yàn)和:占2字節(jié),校驗(yàn)首部和數(shù)據(jù)這兩部分
u16位緊急指針:占2字節(jié),指出本報(bào)文段中的緊急數(shù)據(jù)的字節(jié)數(shù)
4、Tcp連接的建立(三次連接)
tcp連接的建立的機(jī)制來(lái)確認(rèn)兩端口之間的連接是否可用。開(kāi)始的時(shí)候客戶端和服務(wù)器都是處于CLOSED狀態(tài)。主動(dòng)打開(kāi)連接的為客戶端,被動(dòng)打開(kāi)連接的是服務(wù)器,如圖:
一次握手:客戶端想要連接,創(chuàng)建傳輸控制塊TCB,狀態(tài)變?yōu)橹鲃?dòng)打開(kāi)。發(fā)送給服務(wù)器不包含數(shù)據(jù)內(nèi)容的連接請(qǐng)求報(bào)文。
二次握手:TCP服務(wù)器收到連接請(qǐng)求報(bào)文,如果同意連接則發(fā)送確認(rèn)報(bào)文。
三次握手:客戶端收到確認(rèn)后還要再向服務(wù)器發(fā)送確認(rèn)報(bào)文。
5、TCP連接的釋放(四次揮手)
l數(shù)據(jù)傳輸完畢后,雙方都可釋放連接。開(kāi)始的時(shí)候,客戶端和服務(wù)器都是處于ESTABLISHED狀態(tài),然后客戶端主動(dòng)關(guān)閉,服務(wù)器被動(dòng)關(guān)閉。
一次揮手:客戶端從ESTABLISHED狀態(tài)變?yōu)橹鲃?dòng)關(guān)閉狀態(tài),客戶端發(fā)送請(qǐng)求釋放連接報(bào)文給服務(wù)器,F(xiàn)IN=1,seq=u(等于前面已經(jīng)傳送過(guò)來(lái)的數(shù)據(jù)的一個(gè)字節(jié)的序號(hào)加1),此時(shí)客戶端進(jìn)入FIN-WAIT-1(終止等待1)狀態(tài)。
二次揮手:服務(wù)器接收到客戶端發(fā)來(lái)的請(qǐng)求釋放報(bào)文以后,發(fā)送確認(rèn)報(bào)文告訴客戶端我收到了你的請(qǐng)求,內(nèi)容差不多就是seq=v,ack=u+1,ACK=1,此時(shí)服務(wù)器進(jìn)入CLOSE-WAIT(關(guān)閉等待)狀態(tài)。
三次揮手:服務(wù)器所有的數(shù)據(jù)都發(fā)送完了,認(rèn)為可以關(guān)閉連接了,于是向客戶端發(fā)送連接釋放報(bào)文,內(nèi)容FIN=1,seq=w,ack=u+1(客戶端沒(méi)發(fā)送消息,所以提醒客戶端下一次還是從u+1開(kāi)始發(fā)送序列),ACK=1。此時(shí)服務(wù)器進(jìn)入了 LAST-
ACK(確認(rèn))狀態(tài),等待客戶端發(fā)送確認(rèn)報(bào)文。
6、網(wǎng)絡(luò)層
本層包含IP協(xié)議、RIP協(xié)議(Routing Information Protocol,路由信息協(xié)議),負(fù)責(zé)數(shù)據(jù)的包裝、尋址和路由。網(wǎng)路層負(fù)責(zé)在原機(jī)器和目標(biāo)機(jī)器之間建立它們所使用的路由。這一層本身沒(méi)有任何錯(cuò)誤檢測(cè)和修正機(jī)制,因此,網(wǎng)絡(luò)層必須依賴端到端之間的可靠傳輸服務(wù)。
7、鏈路層
提供TCP/IP協(xié)議的數(shù)據(jù)結(jié)構(gòu)和實(shí)際物理硬件之間的接口。物理層的任務(wù)就是為它的上一層提供一個(gè)物理連接,以及它們的機(jī)械、電氣、功能和過(guò)程特性。鏈路層的主要功能是如何在不可靠的物理線路上進(jìn)行數(shù)據(jù)的可靠傳遞。