Wireshark capture Ethernet message
Description
用Wireshark捕捉以太网报文并分析其结构
报文的封装
我打开超星网站,提交了登录请求,用Wireshark进行捕捉。
捕捉到了这个请求及其响应
我们看请求
- 第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
- 行前的数字代表本行第一个字节在总数据流中算第几个字节(从0开始算)
- 每两位16进制代表一个字节,可验证总字节数:(0710H)=(368D),最后一个字节是372,因为是从0开始计数,所以总共373个字节。
- 右边是对左边每个字节的ASKII码翻译,比如
4c -> 76 -> L
以太网V2的MAC帧格式
分析以太网MAC帧的结构
选中Package Details面板链路层对应的第2行,下面Package Byte面板跟着选中了前14个字节,这14个字节对应以太网MAC帧的前14个字节(由图2、图3可知):前六个字节是目的地址,接下来六个字节是源地址,接下来两个字节是类型字段(用来标志上一层使用的是什么协议,以便把收到的MAC帧的数据交给上一层的这个协议。0x8000代表上层使用的是IP数据报)
这14个字节后面紧跟的就是IP数据报了
网络层 IP报头
分析IP数据报的结构
选中Package Details面板网络层对应的第3行,下面Package Byte面板跟着选中了20个字节,这20个字节对应的IP数据报前20个字节(由图4可知):最后8个字节中,前四个对应源IP地址,后四个对应目的IP地址。
传输层 UDP报头
传输层 TCP报头
分析TCP段结构
选中Package Details面板网络层对应的第4行,下面Package Byte面板跟着选中了20个字节,这20个字节对应的TCP段前20个字节(由图6可知):前4个字节中,前两个对应源端口号,后两个对应目的端口号。
HTTP Request
HTTP Response
分析HTTP Request结构
选中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 的符号也无法打印,用 . 来表示。
所以理论上我们得到左边的比特流,完全可以手动算出右边的信息。