avatar
fireworks99
keep hungry keep foolish

Wireshark capture Ethernet message

Description

用Wireshark捕捉以太网报文并分析其结构

报文的封装

图1 报文封装过程

我打开超星网站,提交了登录请求,用Wireshark进行捕捉。

请求 Package List面板

捕捉到了这个请求及其响应

我们看请求

请求 Package Details面板

  • 第1行(物理层):这是捕获的38个帧,共373个字节,因每个字节含8个二进制位,故总共373 * 8 = 2984个bit位。
  • 第2行(链路层):以太网V2标准,6字节源地址,6字节目的地址。(以太网MAC帧中目的地址在前,源地址在后)。
  • 第3行(网络层):IPV4,6字节源地址,6字节物理地址。
  • 第4行(运输层):TCP,2字节(16位)源端口号,2字节(16位)目的端口号,4字节(32位)序号,4字节(32位)确认序号。
  • 第6行(应用层):HTTP

请求 Package Byte面板

  • 行前的数字代表本行第一个字节在总数据流中算第几个字节(从0开始算)
  • 每两位16进制代表一个字节,可验证总字节数:(0710H)=(368D),最后一个字节是372,因为是从0开始计数,所以总共373个字节。
  • 右边是对左边每个字节的ASKII码翻译,比如4c -> 76 -> L

ASKII

以太网V2的MAC帧格式

图2 以太网MAC帧的格式

图3 以太网MAC帧的格式(2)

分析以太网MAC帧的结构

Ethernet MAC frame

选中Package Details面板链路层对应的第2行,下面Package Byte面板跟着选中了前14个字节,这14个字节对应以太网MAC帧的前14个字节(由图2、图3可知):前六个字节是目的地址,接下来六个字节是源地址,接下来两个字节是类型字段(用来标志上一层使用的是什么协议,以便把收到的MAC帧的数据交给上一层的这个协议。0x8000代表上层使用的是IP数据报)

这14个字节后面紧跟的就是IP数据报了

网络层 IP报头

图4 网络层IP报头

分析IP数据报的结构

IP structure

选中Package Details面板网络层对应的第3行,下面Package Byte面板跟着选中了20个字节,这20个字节对应的IP数据报前20个字节(由图4可知):最后8个字节中,前四个对应源IP地址,后四个对应目的IP地址。

传输层 UDP报头

图5 传输层UDP报头

传输层 TCP报头

图6 传输层TCP报头

分析TCP段结构

TCP structure

选中Package Details面板网络层对应的第4行,下面Package Byte面板跟着选中了20个字节,这20个字节对应的TCP段前20个字节(由图6可知):前4个字节中,前两个对应源端口号,后两个对应目的端口号。

HTTP Request

图7 HTTP请求

HTTP Response

图8 HTTP 响应

分析HTTP Request结构

HTTP

选中Package Details面板网络层对应的第5行,下面Package Byte面板出现了另外的1981个字节!!!据图7分析,前1662个字节对应着 请求行、请求头部、空白行。后319个字节对应着请求数据,而这后319个字节就是以太网MAC帧的后319个字节。

其他

Package Byte面板分左右两部分,左边是物理层比特流对应的16进制数据,右边是对它的ASKII翻译,ASKII码前32(0~31)个字符是控制字符,无法打印,在这里用 . 表示了(16进制表示 < 20)。第128个字符编号127对应DEL,虽不是控制字符但也无法打印,所以16进制表示 >= 7f 的符号也无法打印,用 . 来表示。

所以理论上我们得到左边的比特流,完全可以手动算出右边的信息。

Site by Baole Zhao | Powered by Hexo | theme PreciousJoy