分析协议HTTP——Wireshark

一、实验目的

1、利用Wireshark软件分析HTTP及其下层协议(TCP协议)
2、了解网络中数据封装的概念
3、掌握HTTP及TCP协议的工作过程

二、实验内容

启动ethereal软件,进行报文截获
在浏览器访问www.xjtu.edu.cn页面。(打开网页,浏览并关闭页面)
停止报文截获,将截获命名为“http—学号”
分析截获报文。

三、实验要求

从截获的报文中选择HTTP请求报文(即get报文)和HTTP应答报文,并分析各字段的值;
综合分析截获的报文,概括HTTP协议的工作过程;
从截获报文中选择TCP建立连接和释放连接的报文,分析各个字段的值并概括TCP协议连接建立和释放的工作过程;

四、实验步骤

1、截获完整报文(已过滤不相关报文)

在这里插入图片描述

2、http报文分析

在这里插入图片描述

(1)请求报文

在这里插入图片描述

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210424233041420.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0ZvdXJpZXJGaXNoZXI=,size_16,color_FFFFFF,t_70在这里插入图片描述

表项内容
URLwww.xjtu.edu.cn
版本HTTP/1.1
主机浏览器sug.so.360.cn
连接方式持久连接
Cookie有(使用过)

(2)应答报文

在这里插入图片描述

在这里插入图片描述

表项内容
版本HTTP/1.1
状态码200
短语OK
连接方式非持久连接

(3)http协议工作过程

1、客户端连接到Web服务器
一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。

2、发送HTTP请求
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据 4部分组成。

3、服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、**空行(请求空行)和响应数据(请求体)**4部分组成。

4、释放连接TCP连接
若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;

5、客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

3、TCP报文分析

在这里插入图片描述
分析一号IP分组的值
在这里插入图片描述

项目
源端口64077
目的端口80
序号0
确认号9
数据偏移0
保留000
URG0
ACK0
PSH0
RST0
SYN1
FIN0
窗口64800
校验和0xf69f
紧急指针0

(1)TCP连接建立(三次握手)

在这里插入图片描述
a.初始时候,客户端和服务端都处于CLOSED(关闭)状态。当客户端需要给服务端发送数据包的时候,客户端主动打开连接。这个时候应该是通知了服务端,让服务端也打开连接,所以服务端是被动打开连接。打开连接之后,分别开始创建传输控制模块TCB,接着服务端进入LISTEN(监听)状态,等待客户端的连接请求。客户端也开始准备连接请求数据包,开始发送。客户端发送的第一个数据包是一个连接请求报文段,这个报文的内容是一个同步位SYN=1,另一个是一个初始序号seq=0。TCP规定,SYN=1的报文段不能携带数据,但是消耗一个序列号。客户端发送了这个报文之后,进入SYN-SENT(同步已发送)状态。

b.服务端80端口己收到这个数据包之后,知道有客户端请求连接。如果当前有资源,可以同意连接,则给客户端发送确认报文。这个确认报文的内容有:SYN=1(没有变化),seq=0(变成了服务端的序列号),新增ACK=1,ack=1(客户端序列号+1)。这里SYN=1,所以报文不能携带数据,同样消耗了服务端的一个序列号。然后服务端进入了SYN-RCVD(同步收到)状态。

c.客户端收到服务端的确认报文之后,还需要给客户端发送一个客户端的确认报文。这个报文的内容是ACK=1,seq=1,ack=1。这里没有了SYN这个字段,所以这个报文可以携带数据。这个客户端确认报文发送出去之后,客户端进入ESTABLISHED(已建立连接)状态。

服务端接收到这个数据包之后,也进入了ESTABLISHED(已建立连接)状态。

(2)TCP连接释放(四次握手)

在这里插入图片描述
由于软件原因这里只检测到了三次,第二次握手未被检测到,所以b是通过理论推导的

a.当TCP连接需要释放时,客户端和服务端都是处于ESTABLISHED(已建立连接)状态。此时,客户端数据发送完毕,想要结束连接了,主动发出连接释放请求数据包。这个数据包内容:Fin=1,seq=614(这个614是这个数据包之前一个数据包的序列号+1),客户端进入FIN-WAIT-1(终止等待1)状态,不在发送数据包,等待服务端的确认。

b.服务端接收到释放数据包之后发出确认,确认包中内容:确认号ack=615,序列号seq=218(这个218是服务端上一个发送的数据包的序列号+1),另一个是ACK=1。然后服务端进入CLOSE-WAIT(关闭等待)。这个时候客户端到服务端的连接已经结束了。但是TCP是全双工通信,因为这个时候是客户端主动发起的结束,在服务端这边可能还存在着数据没有完全发送给客户端,所以服务端到客户端仍然没有结束。客户端已经不能在发送数据了,如果服务端还有数据发送过来,客户端仍然要接收。

c 客户端收到服务端的确认之后,进入FIN-2(终止等待2)状态,等待服务端发送服务端发器的连接释放数据包。这时候服务端可能还有一些数据包要发送给客户端,客户端一一接收。最后,没有数据要发送了之后,服务端发送连接释放数据包,这个数据包内容:FIN=1,ACK=1,seq=218,ack=615(确认号和上次回复客户端的请求释放连接的确认号一样)。接着服务端进入LAST-ACK(最后确认状态),等待客户端的确认。

d.客户端收到服务端的连接释放数据包之后,发出一个确认数据包,内容:ACK=1,seq=615,ack =219。然后客户端进入TIME-WAIT(时间等待)状态。这个时候TCP还没有释放。仍需要经过时间等待计时器设置的时间2MSL后,客户端才会进入CLOSED状态。MSL称为最长报文段寿命。RFC793建议把这个值设为2分钟,那这样的话,在客户端收到服务端的连接释放数据包之后,需要等待4分钟才能进入CLOSED状态。这显然时间太长了,不过这个值设为2分钟也只是建议,还是可以设置适合的时间的。最后服务端收到这个客户端的确认包之后就进入了CLOSED状态。显然,服务端一般先于客户端进入关闭状态。

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值