计算机网络第二次实验作业——Web服务器配置,HTTP报文捕获
实验要求
(1)搭建Web服务器(自由选择系统),并制作简单Web页面,包含简单文本信息(至少包含专业、学号、姓名)。
(2)通过浏览器获取自己编写的Web页面,使用Wireshark捕获与Web服务器的交互过程,并进行简单分析说明。
Web服务器的搭建
- 系统:windows xp 虚拟机
- 软件:apache(phpnow)
- 虚拟机IP:192.168.141
- 端口:默认端口80
- 访问方式:主机浏览器访问虚拟机ip
安装软件后,在安装路径C:\phpnow\htdocs\
下添加页面,本次实验所需的html文件将统一放置在netword
子路径下
具体代码内容将在下一部分(数据包捕获)详述
通过Wireshark捕获与Web服务器的交互过程
网页访问概览
打开Wireshark,选择需要捕获的网卡,这里由于是使用NAT模式下的虚拟机搭建的服务器,所以选用VMnet8
为了观察连接的建立和页面访问的基本过程,使用一个空的文件1.html
访问
可以看到Wireshark捕获到的内容。
界面大致分为四个区:命令菜单区、俘获分组列表区、选定分组首部细节区、十六进制和ASCII格式分组内容区。
其中,命令菜单区的应用显示过滤器部分可以筛选显示的分组,例如可以查找TCP协议下包含80端口的消息;能够找到在source
或destination
中包含该ip的消息,由于没有使用127.0.0.1,所以查找结果为空
TCP
对于第一条消息,为TCP原型
消息分为4个部分
- Frame,指的是==物理层的数据帧概况==
- Ethernet II,第0-13个字节,表示数据层以太网帧头部信息,包含目的地址、源地址和协议类型
源地址为00:50:56:c0:00:08在数据包的第6-11字节表示发送端的物理地址,看到是主机网卡中的信息,源ip信息与源网卡信息相对应,可以看到是主机向“服务器”发送的网络请求
目的地址为00:0c:29:8d:b9:51
在数据包的前六个字节,是虚拟机对应的网卡,表示消息发送至虚拟机网卡
协议类型为IPV4,用0x0800表示
整体格式符合定义
|
- Internet Protocol Version 4,第14-33个字节,互联网层IP包头部信息
对应内容为
typedef struct IPHeader_t {//IP首部 |
例如源IP地址为192.168.89.1,以十六进制显示在消息中为c0.a8.59.01
- Transmission Control Protocol,第34个字节开始,传输层的数据段头部信息
可以看到,消息是由主机的3164端口发送至虚拟机的80端口
HTTP
选取一条HTTP消息
消息格式为在原有TCP格式的基础上,增加超文本传输协议部分
可以看到十六进制的消息和对应的字符
连接的建立与断开
- 找到IP对应的mac地址
broadcast为设置目的地址为全1(十六进制下的全f),类型为ARP,用0x0806表示
目的地址全零表示未知地址
主机向虚拟机回复ip地址对应的MAC
- 三次握手
由第7条消息可以看到,采用的是HTTP/1.1,使用双端口进行连接,防止头阻塞
对于每个端口,由主机向服务器发送连接建立请求SYN,服务器向主机回复SYN消息并携带确认消息ACK,主机收到服务器的回复并再次向服务器发送ACK
- 四次挥手
同样,使用双端口,对于每个端口有以下过程
- 主机向服务器发送连接断开请求,服务器回复确认,
- 服务器关闭与服务器的连接,并发送FIN和ACK。客户端收到消息,回复确认
获取网页文字信息
网页
<html> |
使用过滤器进行查找
在这个区找到我们写的html内容,可以看到我们的文件一共由九行,与上述代码相对应
中文由\xxx
八进制编码显示,在字符区由16进制表示,例如使用URL解码工具
获取图片信息
<html> |
利用GET请求图片文件,
返回状态码200代表请求成功,同时返回图片内容(43号消息)
与图片的16进制编码进行比对,证明是图片内容
获取视频信息
<body> |
捕捉到一系列数据包
TCP包中的win代表接收窗口的大小,即表示这个包的发送方当前还有多少缓存区可以接收数据
TS(Timestamps) Timestamps在tcp选项中包括两个32位的timestamp: TSval(Timestamp value)和TSecr(Timestamp Echo Reply)。如果设置了TS这个选项,发送方发送时,将当前时间填入TSval,接收方回应时,将发送方的TSval填入TSecr即可(注意发送或接收都有设置TSval和TSecr )。
“TCP segment of a reassembled PDU”,指TCP层收到上层大块报文后分解成段后发出去
PSH所表达的是发送方通知接收方传输层应该尽快的将这个报文段交给应用层
通过观察可以发现消息显示出明显的周期性,即服务器发送三条消息,最后一条带有psh标志,客户端回应一条ack消息,且len=0
最后,返回状态码206,表示部分请求成功,视频获取完毕
在文本框输入信息并回显
<html> |
输入姓名,点击submit
页面回显,但是在wireshark中没有找到回显内容相关数据包,猜测是因为使用了alert的函数是由浏览器直接处理的,并不将数据提交至服务器
总结
- 在实验过程中,我们发现,当第一次请求页面并请求成功时,页面会返回状态码200表示请求成功,并同时返回页面的html内容;当再次请求且页面没有修改时会返回304表示页面未修改可以直接使用浏览器缓存的内容
- 传输流程整体为:
- 客户端发出请求,服务器在局域网内(因为使用的是本地的虚拟机)发送查找网卡请求并找到ip对应的物理地址
- 三次握手建立连接
- 进行页面请求,服务器返回html内容
- 请求并返回图片和视频等内容
- 四次挥手断开连接
参考: