OSI/TCP/IP深入淺出

ngaiwe發表於2018-02-07

一.OSI七層網路模型—Open System Interconnection

OSI 功能 TCP/IP協議
應用層(Application Layer) 面向計算機使用者,提供應用程式和網路之間的介面,向使用者提供服務,完成使用者希望在網上完成的各種工作 HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等
表示層(Presentation Layer) 處理來自應用層的的命令和資料,對各種語法解釋,按照規格傳給會話層。處理編碼,資料可是轉換和加密解密 沒有協議
會話層(Session Layer) 使用者應用程式和網路之間的介面,向兩個實體表示層提供連線和連線方法,不同實體之間的表示層連線叫做會話,因此主要功能是維護和協調會話之間的資料通訊 沒有協議
傳輸層(Transport Layer) 為會話層和網路層提供傳輸服務,從會話層獲得資料,在必要時進行分割,然後傳送給網路層,主要起到建立,維護和取消傳輸連線功能,負責兩節點的可靠傳輸 TCP、UDP
網路層(Network Layer) 通過路由演算法(兩節點之間可能有多條路徑),為報文選擇最適當的路徑,在網路層資料轉換為資料包,通過路徑選擇等控制,將資訊從一個網路裝置傳送到另一個網路裝置 IP、ICMP、RIP、OSPF、BGP、IGMP等
資料鏈路層(Data Link Layer) 資料鏈路層的資料傳輸單元成為幀,就是將網路層轉發的資料封裝為幀,傳輸給物理層,以及分析物理層傳輸過來的資料幀 SLIP、CSLIP、PPP、ARP、RARP、MTU等
物理層(Physical Layer) 為資料鏈路層提供資料幀和接收資料幀然後管理電腦通訊裝置和網路媒體之間的互通。包括了針腳、電壓、線纜規範、集線器、中繼器、網路卡、主機介面卡等 ISO2110等

二 .TCP/IP模型

OSI TCP/IP 協議
應用層/表示層/會話層 應用層 HTTP、FTP、TFTP、SMIP、SNMP、DNS
傳輸層 傳輸層 TCP、UDP
網路層 網路層 ICMP、IGMP、IP、ARP、RARP
資料鏈路層/物理層 網路介面層 由底層網路定義協議

三.TCP/IP分層模型圖

tcp圖解

  • 鏈路層—網路介面層

    網路介面層是TCP/IP模型的最底層,負責接收從上一層交來的資料包並將資料包通過底層的物理網路傳送出去,比較常見的就是裝置的驅動程式。ARP(地址解析協議)和RARP(逆地址解析協議)是某些網路介面(如乙太網和令牌環網)使用的特殊協議,用來轉換IP層和網路介面層使用的地址

  • 網路層

    對應OSI網路層,負責資料包裝、定址、路由和交換錯誤報文。只管傳送資料,不管成功與否

    IP網路協議一種不可靠的服務,快速將源節點送到目標節點,被TCP/UDP使用,TCP和UDP的每組資料都通過端系統和每個中間路由器中的IP層在網際網路中進行傳輸。

  • 傳輸層

    位於應用層和網路介面層之間,為兩臺主機提供端到端的通訊,在TCP/IP協議族中,有兩個互不相同的傳輸協議:TCP(傳輸控制協議)和UDP(使用者資料包協議)。

    TCP為兩臺主機提供高可靠性的資料通訊,如圖:

tcpport

TCP首部最小為20位元組,這20位元組分為5行,每行4個位元組也就是32個位。

  • 第一行是源埠號和目標埠號,分別佔用16位,也就是埠號最大是2^16,所以埠號的範圍是0~65536

  • 第二行,第三行分別是32位序列號和32位確認號,在建立連線時,計算機生成一個隨機序列號作為初始值,傳遞給目標,當對方接收完畢之後,接收端會返回一個32位確認應答號是序列號加資料長度,當傳送端收到確認應答號後,用來確認這個位置以前所有資料都被正常接收,否則將會從新連線傳送

  • 第四行主要分為兩大部分,左側16位分別是4位首首部長度,如果沒有可選欄位,那這裡的值就是5,表示TCP首都的長度為20位元組,也就是說5行x每行32bit。一位8bit,所以就是5x4=20位元組。然後是6位保留用作未來使用,暫時都為0.

    然後是6位控制位,連線,傳輸和斷開都受到這六個控制位的指揮

    • URG (urgent緊急) — 緊急標誌位,表示的是此報文段中有緊急資料,將緊急資料排在普通資料的前面;當接受端收到此報文後後必須先處理緊急資料,而後再處理普通資料。 通常用來暫時中斷通訊
    • ACK (acknowledgement確認) — 置1時表示確認號合法,為0表示資料段不包含確認資訊,確認號被忽略
    • PSH (push推送) — 置1時請求的報文在接收方收到時,會盡快交付接收應用程式,而不在等到整個快取區都填滿後再交付給應用程式
    • RST (reset重置) — 置1時重新連線,表示出現錯誤,需要釋放連線,再重新建立連線
    • SYN (synchronous同步) — 置1時連線請求或同意報文,當SYN=1而ACK=0時,表明這是一個連線請求報文段。對方若同意建立連線,則應在響應的報文段中使SYN=1和ACK=1
    • FIN (FINis終止) — 釋放連線,提出斷開連線的一方將FIN置為1表示斷開連線

    然後第二部分是16位視窗大小

    • 視窗 — 指對於傳送報文段一方而言的接收視窗。 視窗值 — 則是告訴傳送方,從報文段首部的確認號算起,接收方目前允許對方傳送的資料量
  • 第五行分別為16位校驗和、16位緊急指標

    • 16位校驗和 — 傳送端計算校驗和,接收端進行檢驗計算和,如果兩次校驗一致表示資料正確,否則認為資料被破壞,接收端將丟棄該資料,主要用來差錯控制
    • 16位緊急指標 — 當URG置為1時,指向後面優先資料,URG為0時,則無效作為填充,主要用來加快處理標識為URG的緊急資料
  • 可選項 — TCP頭部長度最多為60位元組,所以可選項最多為40位元組,在這裡不做太多陳述,具體可查閱TCP頭部選項

  • 應用層

    應用層是我們經常接觸使用的部分,比如常用的http協議、ftp協議(檔案傳輸協議)、snmp(網路管理協議)、telnet(遠端登入協議)、smtp(簡單郵件傳輸協議)、dns(域名解析),主要是面向使用者的互動的。這裡的應用層整合了osi分層模型中 的應用、表示、會話層三層的功能。

TCP三次握手,四次揮手

  • TCP是面向連線的協議,它在源點和終點之間建立虛擬連線,而不是物理連線
  • 在資料通訊之前,傳送端與接收端要先建立連線,等資料傳送結束後,雙方再斷開連線
  • TCP連線的每一方都是由一個IP地址和一個埠組成

TCP連線圖

  • 首先建立連線,客戶端連線服務端,傳送32位序列號seq=x,並且SYN置1,服務端監聽客戶端傳送的序列號,然後傳送32位確認響應swq=y和ack=x+1,並將SYN、ACK置1,然後客戶端接收以後,說明服務端接收成功,然後再返回ack=y+1,表示客戶端已經接收成功可以開始連線
  • 當需要斷開資料的時候,客戶端傳送序列號seq=x+2,確認號ack=y+1,並FIN置1,服務端接收以後,返回ack=x+3,並ACK置1,如果有資料沒有傳送完畢,等待傳送完畢返回序列號seq=y+1也就是返回確認號,並FIN置1,如果沒有資料則合併ack=x+3,seq=y+1 FIN置1,最後客戶端接收以後返回給服務端確認號ack=y+2來確認斷開

抓包

  • Window用科來網路分析系統,如圖

TCP抓包

  • 如圖所示三次握手,第一次客戶端傳送seq序列號,ACK置0,SYN置1。然後服務端收到序列號後傳送列號seq,確認號ack為客戶端序列號+1,且SYN、ACK置1,然後客戶端接收以後傳送序列號為服務端的ack確認號,併傳送確認號為服務端序列號+1,且ACK置1

  • 如圖所示四次揮手變三次揮手,因為沒有資料需要等待傳輸,首先客戶端傳送序列號為服務端在握手中傳送的確認號,確認號為服務端傳送的序列號+1,且ACK、FIN置1,當服務端收到以後開始傳送給客戶端,序列號為客戶端傳送的確認號,確認號為客戶端傳送的序列號+1,且ACK、FIN置1,當客戶端收到以後再傳送給服務端,序列號為服務端發的確認號,確認號為服務端傳送的序列號+1,且ACK置1,結束連線

  • Mac用WireShark

    WireShark主要用於抓包,在這裡我們需要用wireshark檢視tcp的三次握手和4次揮手,具體請檢視WireShark教程

UDP則為應用層提供一種非常簡單的服務,如圖:

  • UDP是一個無連線、不保證可靠性的傳輸層協議,也就是說傳送端不關心傳送的資料是否到達目標主機、資料是否出錯等,收到資料的主機也不會告訴 傳送方是否收到了資料,它的可靠性由上層協議來保障
  • 首部結構簡單,在資料傳輸時能實現最小的開銷,如果程式想傳送很短的報文而對可靠性要求不高可以使用

UDP

  • 16位源埠號和16位目標埠號和TCP一樣
  • 16位UDP長度代表資料長度
  • 16位UDP校驗和,用於差錯控制
  • 主要應用於QQ、視訊軟體、TFTP 簡單檔案傳輸協議(簡訊)

三.應用互動舉例

應用互動圖

四.參考

五.部落格

魏燃技術部落格

有任何問題可留言或者傳送本人

郵箱:ngaiwe@126.com

相關文章