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