一、概述

一提到网络报文,大多数人对这个的第一印象是OSI七层网络模型,如下图:

本文中我们按照五层协议的体系结构来介绍:

  1. 物理层:传送数据的单位是比特。物理层的任务就是透明地传送比特流。
  2. 数据链路层(链路层):将网络层交下来的 IP 数据报组装成帧,在两个相邻结点(主机和路由器,或两个路由器)之间的链路上“透明”地传送帧中的数据。每一帧包括数据和必要的控制信息(如同步信息、地址信息、差错控制等)。
  3. 网络层:使用无连接的网际协议 IP 和许多种路由选择协议。负责为分组交换网上的不同主机提供通信服务,把运输层产生的报文段或用户数据报封装成分组(也叫IP数据报或数据报)或包进行传送。网络层的另一个任务就是选择合适的路由。
  4. 运输层:向两个主机中进程之间的通信提供服务。由于一个主机可同时运行多个进程,因此运输层有复用和分用的功能。复用就是多个应用层进程可同时使用下面运输层的服务。分用则是运输层把收到的信息分别交付给上面应用层中的相应的进程。运输层主要使用以下两种协议:1.传输控制协议TCP(数据传输的单位是报文段)2.用户数据报协议UDP(数据传输的单位是用户数据报),不保证提供可靠的交付,只能提供“尽最大努力交付”。
  5. 应用层:直接为用户的应用进程提供服务,如 HTTP、支持文件传输的 FTP 协议等。

二、解析网络报文

先附上一张Wireshark解析TCP包的图:

1. Frame Header(24 bytes)报文解析

由于网络报文是不定长格式的,所以每一段报文有多长就需要在报文头里面记录下来,每一个Frame Header则记录这些信息,包括这个包的准确时间点,有多长等。最重要的则是记录了数据传输层的类型,上图中则为Ethernet类型。

2. 数据链路层Ethernet(14 bytes)报文解析

由Frame Header可以得知数据传输层使用的是Ethernet类型传输,则我们接下来使用Ethernet解析以下报文,继续上图:

Ethernet协议很简单,只保存了源Mac地址发送到目标Mac地址,外加一个网络层的协议类型。

3. 网络层IPv4报文解析

通过在数据链路层得知下一层是一个IPv4协议,所以使用IPv4协议格式解析报文

在IPv4层中,通过ARP协议获取对应Mac地址的IP地址,网络层就可以知道这个包是从源IP发送至目标IP,同时标记传输层协议是什么。

4. 传输层TCP报文解析

通过解析网络层可以知道传输层使用的是TCP协议,所以按照TCP报文格式进行解析,上图则是经典的TCP协议格式解析,其中data才是应用真正需要用到的数据,内容比较多,就不细讲了。

发表评论