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