TCP/IP的層次結構、各層數據封裝過程、數據包結構--解析

一、TCP/IP的層次結構

Tcp/ip協議的四個層次

 

TCP、IP協議的分層結構圖

 

TCP-IP與OSI的對應關係.png
CP/IP協議與OSI模型的對應關係(五層分法)

 1、應用層爲用戶的應用程序提供接口,使用戶可以訪問網絡。(IE瀏覽器就處於應用層)

  HTTP、TFTP、FTP、NFS等屬於應用層的協議 。是用戶客戶端程序或軟件之間使用的協議。

  HTTP 超文本傳輸協議(瀏覽網頁服務)
  TFTP 文件傳輸協議(較快,但是不可靠)
  FTP 文件傳輸協議(提供文件上傳,文件下載服務,較慢但是可靠)
  NFS 網絡文件系統(Unix和Linux系統之間共享文件)
  SMTP 簡單郵件傳輸協議(郵件的發送和轉發)
  POP3 接收郵件(由服務器下載到本地)
  Talnet (遠程登錄功能(配置交換機、路由器))
  SNMP 簡單網絡管理協議(通過網管軟件來管理網絡)
  DNS 域名系統,將域名解析爲IP地址(將百度的域名轉換爲服務器的IP地址)

2、傳輸層(運輸層)提供端到端的通信(兩臺計算機上的軟件間的連接),對信息流具有調節作用。

  TCP、UDP屬於運輸層的協議。在TCP/IP協議族中,網絡層IP提供的是一種不可靠的服務,,它儘可能的把分組從源節點送到目的節點,但是並不提供任何可靠保證。而TCP在不可靠的IP層上提供了一個可靠的運輸層(參見TCP三次握手),爲了提供這種可靠的服務,TCP採用了超時重傳,發送和接收的端到端的確認分組等機制。

  TCP 傳輸控制協議 面向連接(打電話) 可靠服務
  在通信之前要先建立連接 需要同時在線
  UDP 用戶數據報協議 非面向連接(發快遞)不可靠 不穩定 但速度更快

TCP數據格式.png
傳輸層-TCP數據包格式

  源端口(Source Port) 目的端口(Desination Port)
  序列號(Sequence Number)【數據包的序號】
  確認號(Acknowledgment Number)(序列號+1)【用於指示下一個數據包序號】

  報頭的長度(HLEN):以32字節爲單位的報頭長度
  保留域(Reserved):設置爲0

  編碼位(Code Bits):用於控制段的傳輸(如會話的建立和終止)
  包括:URG、ACK、PSH、RST、SYN、FIN 6個位
  SYN(synchronous):請求建立TCP連接
  FIN:斷開TCP連接
  RST:重置TCP連接
  ACK:確認、反饋連接情況
  PSH:將數據立刻送到應用層進行處理的命令
  URG:判斷緊急指針是否有效的命令

  窗口大小(Windows):接收方能夠繼續接收的字節數【控制發送的速度】
  校驗和(Checksum):baokuo TCP報頭和數據在內的校驗和【判斷數據傳輸是否出錯】
  緊急指針(Urgent Pointer):當前序列號到緊急位置的偏移量

  選項(Option):廠商根據需要自定義的內容
  MAC地址
  數據(Data):上層協議數據

TCP端口.png
傳輸層-TCP端口號

  HTTP:80
  端口範圍是:0-6535(1 --- 255 之間一般是知名的端口號;256 --- 1023的端口號,通常是由Unix系統佔用(系統佔用);1024 ---5000 是大多數TCP、IP實現的臨時分配;大於5000的一般是給其他服務預留的(Internet上並不常用的服務))

端口的使用.png
端口的使用
TCP的三次握手.png
TCP的三次握手
順序號和確認號.png
順序號和確認號
TCP滑動窗口.png
TCP滑動窗口
UDP數據結構.png
UDP數據結構

 

 3、網絡層(Internet層)IP包的封裝和路徑的選擇

  ICMP、IP、IGMP是網絡層的協議。ICMP(控制報文協議)是IP協議的附屬協議,IP層用它來與其他主機或路由器交換錯誤報文和其他重要信息;ICMP是Internet組管理協議,它用來把一個UDP數據多播到多個主機上。

  網絡層的協議
  IP
數據包的封裝,定義IP地址
  ICMP錯誤診斷(用ping測試網絡連通性)
  ARPIP地址解析爲MAC地址
  RARPMAC地址轉換爲IP地址

  IP地址分類:IPV4長32位共4個字節(用點分十進制記法表示),由網絡地址和主機地址組成。網絡地址表示其屬於互聯網的哪一個網絡,主機地址表示其屬於該網絡中的哪一臺主機。二者是主從關係;又按字節分成4段,每個字段是一個字節,8位,最大值是255。

  IP地址根據網絡號和主機號分爲A、B、C三類及特殊地址D、E。 全0和全1的都保留不用。
  A類:(1.0.0.0-126.0.0.0)(默認子網掩碼:255.0.0.0或 0xFF000000)第一個字節爲網絡號,後三個字節爲主機號。該類IP地址的最前面爲“0”,所以地址的網絡號取值於1~126之間。一般用於大型網絡。
  B類:(128.0.0.0-191.255.0.0)(默認子網掩碼:255.255.0.0或0xFFFF0000)前兩個字節爲網絡號,後兩個字節爲主機號。該類IP地址的最前面爲“10”,所以地址的網絡號取值於128~191之間。一般用於中等規模網絡。
  C類:(192.0.0.0-223.255.255.0)(子網掩碼:255.255.255.0或 0xFFFFFF00)前三個字節爲網絡號,最後一個字節爲主機號。該類IP地址的最前面爲“110”,所以地址的網絡號取值於192~223之間。一般用於小型網絡。
  D類:是多播地址。該類IP地址的最前面爲“1110”,所以地址的網絡號取值於224~239之間。一般用於多路廣播用戶[1]  。
  E類:是保留地址。該類IP地址的最前面爲“1111”,所以地址的網絡號取值於240~255之間。

  在IP地址3種主要類型裏,各保留了3個區域作爲私有地址,其地址範圍如下: 
  A類地址:10.0.0.0~10.255.255.255 
  B類地址:172.16.0.0~172.31.255.255 
  C類地址:192.168.0.0~192.168.255.255

  回送地址:127.0.0.1。 也是本機地址,等效於localhost或本機IP。一般用於測試使用。例如:ping 127.0.0.1來測試本機TCP/IP是否正常。

 

4、數據鏈路層爲上層提供可靠的數據幀透明傳輸

  鏈路管理、幀同步、尋址、流量控制、差錯控制  
  MAC地址(網卡編號):48位的二進制數。表示爲12位的16進制數。分爲兩部分:前24位爲廠商編號,後24位爲網卡的編號(由專門的機構分配)

二、TCP/IP各層數據封裝過程 

TCP/IP的層次結構以及各層數據封裝的過程
封裝流程圖

 

  UDP數據與TCP數據基本一致,唯一不同的是,UDP傳給IP的信息單元稱爲UDP數據包,並且UDP的首部長爲8字節。

  在上面的TCP、IP的分層結構圖中我們可以看見,用戶程序、TCP、UDP、ICMP等都會向IP傳送數據,因此在IP的首部加入了長度爲8bit的標識;1表示ICMP協議,2表示IGMP協議,6表示TCP,17表示UDP協議。

  TCP、和UDP在傳送數據的過程中都會用到一個16bit的端口號來表示不同的應用程序TCP和UDP把源端口號和目的端口號分別存入報文首部中。(216= 65536)

  網絡接口通常要發送和接收IP、ARP、RARP數據,因此在以太網的首部(及幀的首部)也有一個16bit的標識。

                                                                         數據封裝過程

 三、各層數據包的結構

  1、(鏈路層)以太幀結構http://c.biancheng.net/view/6391.html

以太幀結構(格式)

字段 含義
前同步碼 用來使接收端的適配器在接收 MAC 幀時能夠迅速調整時鐘頻率,使它和發送端的頻率相同。前同步碼爲 7 個字節,1 和 0 交替。
幀開始定界符 幀的起始符,爲 1 個字節。前 6 位 1 和 0 交替,最後的兩個連續的 1 表示告訴接收端適配器:“幀信息要來了,準備接收”。
目的地址 接收幀的網絡適配器的物理地址(MAC 地址),爲 6 個字節(48 比特)。作用是當網卡接收到一個數據幀時,首先會檢查該幀的目的地址,是否與當前適配器的物理地址相同,如果相同,就會進一步處理;如果不同,則直接丟棄。
源地址 發送幀的網絡適配器的物理地址(MAC 地址),爲 6 個字節(48 比特)。
類型 上層協議的類型。由於上層協議衆多,所以在處理數據的時候必須設置該字段,標識數據交付哪個協議處理。例如,字段爲 0x0800 時,表示將數據交付給 IP 協議。
數據 也稱爲效載荷,表示交付給上層的數據。以太網幀數據長度最小爲 46 字節,最大爲 1500 字節。如果不足 46 字節時,會填充到最小長度。最大值也叫最大傳輸單元(MTU)。

在 Linux 中,使用 ifconfig 命令可以查看該值,通常爲 1500。
幀檢驗序列 FCS 檢測該幀是否出現差錯,佔 4 個字節(32 比特)。發送方計算幀的循環冗餘碼校驗(CRC)值,把這個值寫到幀裏。接收方計算機重新計算 CRC,與 FCS 字段的值進行比較。如果兩個值不相同,則表示傳輸過程中發生了數據丟失或改變。這時,就需要重新傳輸這一幀。

  

  2、(網絡層)IP數據報結構https://blog.csdn.net/prsniper/article/details/6762145

  如圖,一個刻度表示1個二進制位(比特)。

  1-1.版本4位,表示版本號,目前最廣泛的是4=B1000,即常說的IPv4;相信IPv6以後會廣泛應用,它能給世界上每個鈕釦都分配一個IP地址。

  1-2.頭長4位,數據包頭部長度。它表示數據包頭部包括多少個32位長整型,也就是多少個4字節的數據。無選項則爲5(紅色部分)。

  1-3.服務類型,包括8個二進制位,每個位的意義如下:
       過程字段:3位,設置了數據包的重要性,取值越大數據越重要,取值範圍爲:0(正常)~ 7(網絡控制)
       延遲字段:1位,取值:0(正常)、1(期特低的延遲)
       流量字段:1位,取值:0(正常)、1(期特高的流量)
       可靠性字段:1位,取值:0(正常)、1(期特高的可靠性)
       成本字段:1位,取值:0(正常)、1(期特最小成本)
       保留字段:1位 ,未使用

  1-4.包裹總長16位,當前數據包的總長度,單位是字節。當然最大隻能是65535,及64KB。

  2-1.重組標識16位,發送主機賦予的標識,以便接收方進行分片重組。

  2-2.標誌3位,他們各自的意義如下:
       保留段位(2):1位,未使用
       不分段位(1):1位,取值:0(允許數據報分段)、1(數據報不能分段)
       更多段位(0):1位,取值:0(數據包後面沒有包,該包爲最後的包)、1(數據包後面有更多的包)

  2-3.段偏移量13位,與更多段位組合,幫助接收方組合分段的報文,以字節爲單位。

  3-1.生存時間8位,經常ping命令看到的TTL(Time To Live)就是這個,每經過一個路由器,該值就減一,到零丟棄。

  3-2.協議代碼8位,表明使用該包裹的上層協議,如TCP=6,ICMP=1,UDP=17等。

  3-3.頭檢驗和16位,是IPv4數據包頭部的校驗和。

  4-1.源始地址,32位4字節,我們常看到的IP是將每個字節用點(.)分開,如此而已。

  5-1.目的地址,32位,同上。

  6-1.可選選項,主要是給一些特殊的情況使用,往往安全路由會當作攻擊而過濾掉,普聯(TP_LINK)的TL-ER5110路由就能這麼做。

  7-1.用戶數據。

 

  3、(傳輸層)tcp數據包結構https://blog.csdn.net/prsniper/article/details/6762145

  1-1.源始端口16位,範圍當然是0-65535啦。

  1-2.目的端口,同上。

  2-1.數據序號32位,TCP爲發送的每個字節都編一個號碼,這裏存儲當前數據包數據第一個字節的序號。

  3-1.確認序號32位,爲了安全,TCP告訴接受者希望他下次接到數據包的第一個字節的序號。

  4-1.偏移4位,類似IP,表明數據距包頭有多少個32位。

  4-2.保留6位,未使用,應置零。

  4-3.緊急比特URG—當URG=1時,表明緊急指針字段有效。它告訴系統此報文段中有緊急數據,應儘快傳送(相當於高優先級的數據)。

  4-3.確認比特ACK—只有當ACK=1時確認號字段纔有效。當ACK=0時,確認號無效。參考TCP三次握手

  4-4.復位比特RST(Reset) —當RST=1時,表明TCP連接中出現嚴重差錯(如由於主機崩潰或其他原因),必須釋放連接,然後再重新建立運輸連接。參考TCP三次握手

  4-5.同步比特SYN—同步比特SYN置爲1,就表示這是一個連接請求或連接接受報文。參考TCP三次握手

  4-6.終止比特FIN(FINal)—用來釋放一個連接。當FIN=1時,表明此報文段的發送端的數據已發送完畢,並要求釋放運輸連接。

  4-7.窗口字段16位,窗口字段用來控制對方發送的數據量,單位爲字節。TCP連接的一端根據設置的緩存空間大小確定自己的接收窗口 大小,然後通知對方以確定對方的發送窗口的上限。

  5-1.包校驗和16位,包括首部和數據這兩部分。在計算檢驗和時,要在TCP報文段的前面加上12字節的僞首部。

  5-2.緊急指針16位,緊急指針指出在本報文段中的緊急數據的最後一個字節的序號。

  6-1.可選選項24位,類似IP,是可選選項。

  6-2.填充8位,使選項湊足32位。

  7-1.用戶數據

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章