1. 程式人生 > >OSI七層模型及對應的資料包格式

OSI七層模型及對應的資料包格式

我接觸網路協議也比較久了,不過一直都只懂個皮毛,最近比較深入研究之後終於有點豁然開朗的感覺。也因為網路上各種協議的資料太多但是都比較分散雜亂,所以在這裡做點總結,給大家提供一些資料也備自己以後查閱。 

鑑於有些朋友沒有耐心完全看完整篇文章,所以我先給大家一個相當權威網站,該詳細提供了各種網路協議及分析(有這麼一個網站足矣)

我下面列舉的材料也基本來於此 

RFC Sourcebook

http://www.networksorcery.com/enp/default1101.htm 

 首先讓我們從OSI七層結構 說起

OSI/RM即Open System Interconnection Reference Model開放系統互連基本參考模型。開放,是指非壟斷的。系統是指現實的系統中與互聯有關的各部分。

 

層次

名稱

資料格式及行為

功能

典型裝置

TCP/IP常見協議

第七層

應用層Application

資料Data

網路服務與使用者應用程式間的一個介面

NNTP,SIP,SSI,DNS,FTP,,HTTP,NFS,NTP,DHCP,SMPP,SMTP,SNMP,,RIP,BGP

第六層

表示層Presentation

應用程式和網路間的翻譯官:對資料加密、解密,圖片、檔案的編碼、解碼等

MIME,SSL,TLS,XDR

第五層

會話層Session

維持網路上兩節點之間建立、維持和終止會話

Sockets.Session establishment in 

TCP,SIP,RTP

第四層

傳輸層Transport

資料組織成資料段Segment

在機器內部埠間傳輸資料包

TCP,UDP,SCTP,DCCP

第三層

網路層Network

分割和重新組合資料包Packet

IP地址封裝解封裝(IPMAC地址的轉換)

路由器

IP,IPsec,ICMP,IGMP,OSPF

第二層

資料鏈路層DataLink

將位元資訊封裝成資料幀Frame/及解封裝

對資料糾錯/封裝解封裝MAC地址

網橋、交換機

PPP,SLIP,PPTP,L2TP

第一層

物理層Physical

傳輸位元(bit

)流

建立、維護和取消物理連線

網絡卡、中繼器和集線器

Ethernet: 乙太網協議
下面介紹一下各個幀格式  

  • Ethernet II 
           就是DIX乙太網聯盟推出的,它由6個位元組的目的MAC地址,6個位元組的源MAC地址,2個位元組的型別域(用於標示封裝在這個Frame、裡面資料的型別)以上為Frame Header,接下來是46--1500 位元組的資料,和4位元組的幀校驗)
  • Novell Ethernet 
           它的幀頭與Ethernet有所不同其中EthernetII幀頭中的型別域變成了長度域,後面接著的兩個位元組為0xFFFF 
           用於標示這個幀是Novell Ether型別的Frame 由於前面的0xFFFF站掉了兩個位元組所以資料域縮小為44-1498個位元組,幀校驗不變。
  • IEEE 802.3/802.2 
           802.3的Frame Header和Ethernet II的幀頭有所不同EthernetII型別域變成了長度域。其中又引入802.2協議(LLC)在802.3幀頭後面添加了一個LLC首部,由DSAP(Destination Service Access Point) 
           1 byte,SSAP(Source SAP),一個控制域--1 byte! 
           SAP用於標示幀的上層協議
  • Ethernet SNAP 
           SNAP Frame與802.3/802.2 Frame的最大區別是增加了一個5 Bytes的SNAP ID其中前面3個byte通常與源mac地址的前三個bytes相同為廠商程式碼!有時也可設為0,後2 bytes 與Ethernet II的型別域相同。。。

  如何區分不同的幀格式    
       Ethernet中存在這四種Frame那些網路裝置又是如何識別的呢? 如何區分EthernetII與其他三種格式的Frame 如果幀頭跟隨source mac地址的2 bytes的值大於1500 則此Frame為EthernetII格式的。 
       接著比較緊接著的兩bytes如果為0xFFFF則為Novell Ether 型別的Frame 
       如果為0xAAAA則為Ethernet SNAP格式的Frame ,如果都不是則為Ethernet 802.3/802.2格式的幀

乙太網幀結構概述
  乙太網幀是OSI參考模型資料鏈路層的封裝,網路層的資料包被加上幀頭和幀尾,構成可由資料鏈路層識別的資料幀。雖然幀頭和幀尾所用的位元組數是固定不變的,但根據被封裝資料包大小的不同,乙太網幀的長度也隨之變化,變化的範圍是64-1518位元組(不包括8位元組的前導字)。

 、典型幀結構:Ethernet_II (最常用,所以只介紹這個)
  Ethernet_II中所包含的欄位:
  目的地址:接收端的MAC地址,6位元組長;
  源地址:傳送端的MAC地址,6位元組長;
  型別:資料包的型別(即上層協議的型別),2位元組長;
  資料:被封裝的資料包,46-1500位元組長;
  Ethernet_II的主要特點是通過型別域標識了封裝在幀裡的資料包所採用的協議,型別域是一個有效的指標,通過它,資料鏈路層就可以承載多個上層(網路層)協議。但是,Ethernet_II的缺點是沒有標識幀長度的欄位。

Ethernet II or DIX

0x0600 XNS (Xerox)
0x0800 IP (the Internet protocol)
0x6003 DECNET

 IP: Internet Protocol

MAC 頭

IP 頭 資料 :::

IP header:

 8 bits.
This field specifies the next encapsulated protocol.

Value Protocol References
0 HOPOPT, IPv6 Hop-by-Hop Option. RFC 1883
1 ICMP, Internet Control Message Protocol. RFC 792
2 IGAP, IGMP for user Authentication Protocol.
IGMP, Internet Group Management Protocol.
RGMP, Router-port Group Management Protocol.
RFC1112
3 GGP, Gateway to Gateway Protocol. RFC 823
5 ST, Internet Stream Protocol. RFC 1190, RFC 1819
6 TCP, Transmission Control Protocol. RFC 793
7 UCL,CBT.
8 EGP, Exterior Gateway Protocol. RFC 888
9 IGRP, Interior Gateway Routing Protocol.
10 BBN RCC Monitoring.
11 NVP, Network Voice Protocol. RFC 741
12 PUP.
13 ARGUS.
14 EMCON, Emission Control Protocol.
16 Chaos.
17 UDP, User Datagram Protocol. RFC 768
18 TMux, Transport Multiplexing Protocol. IEN 90
19 DCN Measurement Subsystems.
20 HMP, Host Monitoring Protocol. RFC 869
21 Packet Radio Measurement.
22 XEROX NS IDP.
23 Trunk-1.
24 Trunk-2.
25 Leaf-1.
26 Leaf-2.
27 RDP, Reliable Data Protocol. RFC 908
28 IRTP, Internet Reliable Transaction Protocol. RFC 938
29 ISO Transport Protocol Class 4. RFC 905
30 NETBLT, Network Block Transfer.
31 MFE Network Services Protocol.
32 MERIT Internodal Protocol.
33 DCCP, Datagram Congestion Control Protocol.
34 Third Party Connect Protocol.
35 IDPR, Inter-Domain Policy Routing Protocol.
36 XTP, Xpress Transfer Protocol.
37 Datagram Delivery Protocol.
38 IDPR, Control Message Transport Protocol.
39 TP++ Transport Protocol.
40 IL Transport Protocol.
41 IPv6 over IPv4. RFC 2473
42 SDRP, Source Demand Routing Protocol.
43 IPv6 Routing header.
44 IPv6 Fragment header.
45 IDRP, Inter-Domain Routing Protocol.
46 RSVP, Reservation Protocol.
47 GRE, General Routing Encapsulation.
48 DSR, Dynamic Source Routing Protocol.
49 BNA.
50 ESP, Encapsulating Security Payload.
51 AH, Authentication Header.
52 I-NLSP, Integrated Net Layer Security TUBA.
53 SWIPE, IP with Encryption.
54 NARP, NBMA Address Resolution Protocol.
56 TLSP, Transport Layer Security Protocol using Kryptonet key management.
57 SKIP.
58 ICMPv6, Internet Control Message Protocol for IPv6.
MLD, Multicast Listener Discovery.
59 IPv6 No Next Header.
60 IPv6 Destination Options.
61 Any host internal protocol.
62 CFTP.
63 Any local network.
64 SATNET and Backroom EXPAK.
65 Kryptolan.
66 MIT Remote Virtual Disk Protocol.
67 Internet Pluribus Packet Core.
68 Any distributed file system.
69 SATNET Monitoring.
70 VISA Protocol.
71 Internet Packet Core Utility.
72 Computer Protocol Network Executive.
73 Computer Protocol Heart Beat.
74 Wang Span Network.
75 Packet Video Protocol.
76 Backroom SATNET Monitoring.
77 SUN ND PROTOCOL-Temporary.
78 WIDEBAND Monitoring.
79 WIDEBAND EXPAK.
81 VMTP, Versatile Message Transaction Protocol.
82 SECURE-VMTP
83 VINES.
84 TTP.
85 NSFNET-IGP.
86 Dissimilar Gateway Protocol.
87 TCF.
88 EIGRP.
89 OSPF, Open Shortest Path First Routing Protocol.
MOSPF, Multicast Open Shortest Path First.
90 Sprite RPC Protocol.
91 Locus Address Resolution Protocol.
92 MTP, Multicast Transport Protocol.
93 AX.25.
94 IP-within-IP Encapsulation Protocol.
95 Mobile Internetworking Control Protocol.
96 Semaphore Communications Sec. Pro.
98 Encapsulation Header.
99 Any private encryption scheme.
100 GMTP.
101 IFMP, Ipsilon Flow Management Protocol.
102 PNNI over IP.
103 PIM, Protocol Independent Multicast.
104 ARIS.
105 SCPS.
106 QNX.
107 Active Networks.
108 IPPCP, IP Payload Compression Protocol. RFC 2393
109 SNP, Sitara Networks Protocol.
110 Compaq Peer Protocol.
111 IPX in IP.
112 VRRP, Virtual Router Redundancy Protocol. RFC 3768, RFC 5798
113 PGM, Pragmatic General Multicast.
114 any 0-hop protocol.
115 L2TP, Level 2 Tunneling Protocol.
116 DDX, D-II Data Exchange.
117 IATP, Interactive Agent Transfer Protocol.
118 ST, Schedule Transfer.
119 SRP, SpectraLink Radio Protocol.
120 UTI.
121 SMP, Simple Message Protocol.
122 SM.
123 PTP, Performance Transparency Protocol.
124 ISIS over IPv4.
125 FIRE.
126 CRTP, Combat Radio Transport Protocol.
127 CRUDP, Combat Radio User Datagram.
128 SSCOPMCE.
129 IPLT.
130 SPS, Secure Packet Shield.
131 PIPE, Private IP Encapsulation within IP.
132 SCTP, Stream Control Transmission Protocol.
133 Fibre Channel.
136 UDP-Lite, Lightweight User Datagram Protocol.
137 MPLS in IP. RFC 4023
138 MANET protocols. RFC 5498
139 HIP, Host Identity Protocol. RFC 5201
140 Shim6, Level 3 Multihoming Shim Protocol for IPv6. RFC 5533
141 WESP, Wrapped Encapsulating Security Payload. RFC 5840
142 ROHC, Robust Header Compression. RFC 5858
143
-
252
253
254
Experimentation and testing.
255 reserved.

TCP: Transmission Control Protocol.

MAC 頭 IP 頭 TCP 頭 Data :::

TCP header:

目的埠所用的服務可以檢視該網站

http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers

UDP, User Datagram Protocol

MAC 頭 IP 頭 UDP 頭 Data :::

UDP header:

00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Data :::

RIP, Routing Information Protocol 

MAC header IP header UDP header RIP header Data :::

RIPv1 header:

00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

RIPv2 header:

00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

HTTP, HyperText Transfer Protocol

MAC 頭 IP 頭 TCP 頭 HTTP 訊息 :::

HTTP message:

Methods:

 列舉了最常見的幾個協議,下面來分析一下一段幀來練習鞏固一下。

在這之前先給大家介紹一款國外很優秀的抓取資料包的軟體 Wireshark,是想從事網路協議工作人士必不可少的好軟體;存在著各種版(不過基於linux的版本安裝起來比較麻煩,因為事先得自己手動安裝很多個依賴的包)

官方下載地址:

http://www.wireshark.org/download.html 

先給個截圖


以下是完整的一個數據包

 序列

0000  | 00 1d 92 32 d0 90 00 1f  3a 3a f6 72 08 00 45 00                
0010  | 00 40 f6 67 40 00 80 06  80 ea c0 a8 01 0b c0 a8              
0020  | 01 0a 12 08 00 8b e0 b1  20 42 00 00 00 00 b0 02  
0030  | 20 00 7f 14 00 00 02 04  05 b4 01 03 03 00 01 01   
0040  | 08 0a 00 00 00 00 00 00  00 00 01 01 04 02

所有都是以16進製表示一個byte位元組(8個bits),也就是每個數字都代表4個bits。

首先我們知道最低層肯定是Ehernet協議,所以這段資料的最開頭就是該協議的頭,可以參考上面資料

第一行 

00 1d 92 32 d0 90 | 00 1f  3a 3a f6 72 |                      08 00                               | 45 00 

   目的MAC地址              源MAC地址              接下來資料協議型別(0x0800是IP)

所以從第一行最後2個位元組開始就是IP包的頭了:

                                                                                  4                             5                                           00

                                                                               版本是4         ip包頭長度是5(也32bits為單位)        區別服務(不太重要)

                                                                                                          ,也就是20個位元組

00  40                          |   f6 67      |                40 00                                           |                              80                                                    

ip包的總共長度,                         序列號        轉化成bit是 010 0 0000 0000 0000                TTL = 128 (windows預設128,linux預設 64)

4*16 = 64 個位元組                                       更加flag的定義是:不要分段,且是最後一段         該資料包生存週期(即最多能通過路由的個數,等於0時拋棄)      

  |             06                    |     80 ea    |  c0 a8 01 0b |c0 a8

    在IP協議之上的協議          checksum       源機器IP        目標

     06是TCP協議                                  192.168.1.11

01 0a                |       12 08       |                        00 8b                                    |   e0 b1  20 42    |

ip地址                      源機器埠                        目標機器埠                                    該tcp的序列號                  

 192.168.1.10            4616                 139(NETBIOS Session Service.)

          00 00 00 00                     |        b                        |     0      02                                               

    接下來想接受到的tcp包序列號           TCP包頭長度                 bits:0000 0000 0010

                                                     11*4 = 44位元組                 零都代表預設,唯一的一個1代表SYN

20 00               |    7f 14       |   00 00     |  02 04   05 b4      01 03 03 00     01 01 |     08  0a          00  00  | 

00  00    00  00 |  00  00     01  01 |  04  02      

視窗大小8192       checksum      緊急標誌           Options (不太重要)

表示Ethernet頭,共14位元組

IP頭, 共 20 位元組 

TCP頭,共44位元組

跟內容完全符合