寒假无聊 开启小项目 http服务器之一http抓包分析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mcl2840072208/article/details/85038376

实验环境及工具

ubuntu 虚拟机
wireshark

实验开始

tcp 格式分析

虚拟机使用的是NAT 模式 ,开机后开启apache2 服务, 物理机启动wireshark 并绑定vmnet 8 ,物理机访问虚拟机80端口,
在这里插入图片描述

呃 , 看到这么多包,头有点大 , 我们先从头开始,首先http协议的传输层使用TCP协议 , 先来看TCP包的格式。 参考博客,感谢这位大佬的博客贴的他的图,问了没回我。。要是不同意的话,我再换下来。

在这里插入图片描述
这幅图 ,对tcp协议有个简单的回顾。TCP 是面向流(数据有顺序)、可靠的传输协议,

源端口地址 : 一个16位字段, 定义了发送这个报文段的主机中应用程序的端口号 。

目的端口号 : 16位字段 , 定义了接收这个报文段的主机中应用程序的端口号 。

序号 : 32位字段 , 定义了指派给本报文段第一个数据字节 的编号 。 Tcp 是 流运输协议 ,为了保证连接性, 要发送的每一个字节都要编上号 。 序号 可以告诉终点, 报文段中的第一个字节是这个序号的哪一个字节。在连接建立时, 双方使用各自的随机数产生器产生一个初始序号(init sequence number)。通常,两个方向上的ISN是不同的。

确认号 : 32位字段, 定义了报文段的接收方期望从对方接收的字节编号。如果报文段的接收方成功地接收了对方发来的编号为x的字节。那么它就返回x+1作为确认号。确认可以和数据捎带一起发送。

首部长度 HLEN : 4位字段, (1~15)指出Tcp首部一共有多少个4字节字。

保留 : 6位字段, 保留今后使用。

控制 : 该6位字段定义了6种不同的控制位或标志, 同一时间可设置一位或多为标志。 这些标志用在tcp流量控制,连接建立,和终止,连接异常终止,及数据传送方式等方面。
URG :紧急至真有效 RST : 连接复位 ACK : 确认是有效的 SYN:同步序号 PSH:请求推送 FIN:终止连接

窗口大小:16位字段, 定义了发送Tcp窗口的大小,以字节位单位,16位,意味着窗口最大长度是65535字节。通常被称为接收窗口,并有接收方来决定。此情况下,发送方必须服从街上方的指示。

检验和 : 16位字段。检验和是强制性的。

紧急指针 :只有紧急标志位置位时,此字段才生效,此时报文段中包含了紧急数据。

选项:在Tcp首部中可以有多达40字节的可选信息。

tcp 三次握手

在这里插入图片描述

tcp抓包分析

知道这些后可以来看抓包分析了,
在这里插入图片描述
发现并不单纯 ,最外层是个mac帧,内部还有个ip层 , 出去红框和黄线,最后才是tcp数据。这里不对IP数据包和mac帧进行描述。重要的是:源目地端口60257(eb61)、80(0050) 、SYN=1、序号 0x24148920 ,再看服务端回应
在这里插入图片描述

源目地端口交换,80 , 60257 ,SYN=1 , ACK=1 确认序号为0x24148921 .,序号为0x43448e42 。
最后一次握手
最后一次握手 源目地端口交换 , ACK=1 , 序号0x24148921 , 确认号0x43448e43 , 完成TCP连接。
做完以后发现tcp 三次握手原来也比较简单, 可能是拥塞控制等机制比较复杂吧,

http抓包分析

来看握手成功后的第一个http数据包
在这里插入图片描述

返回对该包的确认
在这里插入图片描述

响应请求
在这里插入图片描述

在这里插入图片描述

http格式分析

参考博客

http 请求

http请求

请求行

用来说明请求类型、 访问资源和http版本
如图,请求方式 get , http 版本1.1

请求头部

说明服务附加信息
host = 192.168.149.142
…等等

空行

空行是必须的

请求数据

这里是空的

http 响应

HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
http响应

状态头

版本和状态
http/1.1 返回状态200 ,ok

消息报头

用来说明客户端要使用的一些附加信息
Date : 生成响应的日期和时间
Content-type;charset : 响应的类型和响应的编码
。。。。。等等

空行(必须的)

响应正文

这个就是数据部分

猜你喜欢

转载自blog.csdn.net/mcl2840072208/article/details/85038376