计算机网络实验一
应用协议与数据包分析实验报告
实验目的
通过本实验,熟练掌握Wireshark的操作和使用,学习对HTTP协议进行分析。
实验内容
HTTP 协议简介
HTTP 是超文本传输协议 (Hyper Text Transfer Protocol)的缩写,用于WWW 服务。
(1)HTTP 的工作原理
HTTP 是一个面向事务的客户服务器协议。尽管HTTP 使用TCP 作为底层传输协议,但
HTTP 协议是无状态的。也就是说,每个事务都是独立地进行处理。当一个事务开始时,就在web客户和服务器之间建立一个TCP 连接,而当事务结束时就释放这个连接。此外,客户可以使用多个端口和和服务器 (80 端口)之间建立多个连接。其工作过程包括以下几个阶段。
① 服务器监听TCP 端口 80,以便发现是否有浏览器 (客户进程)向它发出连接请求;
② 一旦监听到连接请求,立即建立连接。
③ 浏览器向服务器发出浏览某个页面的请求,服务器接着返回所请求的页面作为响应。
④ 释放TCP 连接。
在浏览器和服务器之间的请求和响应的交互,必须遵循HTTP 规定的格式和规则。
当用户在浏览器的地址栏输入要访问的HTTP 服务器地址时,浏览器和被访问HTTP 服务器的工作过程如下:
① 浏览器分析待访问页面的URL 并向本地DNS 服务器请求IP 地解析;
② DNS 服务器解析出该HTTP 服务器的IP 地址并将IP 地址返回给浏览器;
③ 浏览器与HTTP 服务器建立TCP 连接,若连接成功,则进入下一步;
④ 浏览器向HTTP 服务器发出请求报文 (含GET 信息),请求访问服务器的指定页面;
⑤ 服务器作出响应,将浏览器要访问的页面发送给浏览器,在页面传输过程中,浏览器会打开多个端口,与服务器建立多个连接;
⑥ 释放TCP 连接;
⑦ 浏览器收到页面并显示给用户。
(2)HTTP 报文格式
HTTP 有两类报文:从客户到服务器的请求报文和从服务器到客户的响应报文。
每个字段之间有空格分隔,每行的行尾有回车换行符。各字段的意义如下:
① 请求行由三个字段组成:
* 方法字段,最常用的方法为 “GET”,表示请求读取一个万维网的页面。常用的方法还有 “HEAD(指读取页面的首部)”和“POST(请求接受所附加的信息);
* URL 字段为主机上的文件名,这时因为在建立TCP 连接时已经有了主机名;
* 版本字段说明所使用的HTTP 协议的版本,一般为 “HTTP/1.1”。
② 状态行也有三个字段:
* 第一个字段等同请求行的第三字段;
* 第二个字段一般为 “200”,表示一切正常,状态码共有41 种,常用的有:301 (网站已转移),400(服务器无法理解请求报文),404(服务器没有锁请求的对象)等;
* 第三个字段时解释状态码的短语。
③ 根据具体情况,首部行的行数是可变的。请求首部有Accept 字段,其值表示浏览器 可以接受何种类型的媒体;Accept-language,其值表示浏览器使用的语言;User-agent 表明可用的浏览器类型。响应首部中有Date、Server、Content-Type、Content-Length 等字段。在请求首部和响应首部中都有 Connection 字段,其值为Keep-Alive 或 Close,表示服务器在传送完所请求的对象后是保持连接或关闭连接。
④ 若请求报文中使用 “GET”方法,首部行后面没有实体主体,当使用 “POST”方法是,附加的信息被填写在实体主体部分。在响应报文中,实体主体部分为服务器发送给客户的对象。
实验步骤
步骤1:在PC 机上运行Wireshark,开始截获报文;
步骤2:从浏览器上访问Web 界面,如http://www.163.com。打开网页,待浏览器的状态栏出现 “完毕”信息后关闭网页。
步骤3:停止截获报文,将截获的报文命名为http-学号保存。
中间结果
截获报文机图如下:
- 请求报文
- 响应报文
最终结果
-
综合分析截获的报文,查看有几种HTTP 报文?
两种:请求报文和响应报文
-
在截获的HTTP 报文中,任选一个HTTP 请求报文和对应的 HTTP 应答报文,仔细分析它们的格式,填写表1.1 和表1.2。
方 法 URL 版 本 GET www.baidu.com HTTP/1.1 首部字段名 字段值 字段所表达的信息 Accept Text/html… 接收何种类型的媒体 Accept-language en-AU,en;zh-Hans-CN;zh-HANS; 浏览器使用的语言 User-agent Mozilla,Chrome,Safari… 可以使用的浏览器类型 Connection Keep-Alive 保持连接 Host www.baidu.com 要找的主机 版本 状态码 短语 HTTP/1.1 302 FOUND 首部字段名 字段值 字段所表达的信息 Date Sat,07 Mar 2020 11:18:51 GMT 时间 Location www.baidu.com 重定向位置 Server BWS/1.1 报文产生 -
分析在截获的报文中,客户机与服务器建立了几个连接?服务器和客户机分别使用了哪几个端口号?
建立了一个连接。
客户端为57077端口,服务器为80端口(特殊端口,通常用于HTTP超文本传输协议)
-
综合分析截获的报文,理解HTTP 协议的工作过程,将结果填入表1.3 中
HTTP的工作流程大致为:
1、建立连接。先解析DNS,把localhost变成ip(127.0.0.1),然后根据127.0.0.1和端口号8080(没有端口号则使用默认的端口)建立socket。也可以理解为通过“三次握手”建立TCP连接,确定通讯正常。
2、发送请求命令。socket建立好之后,客户端开始向web服务器发送请求命令(GET/POST等)。
3、发送请求头(和请求正文如果有)。客户端先发送与自身相关的信息,再发送空行表示请求头发送完毕,如果是post则继续发送请求正文。
4、回传状态行。应答第一步,发送协议版本和状态码(200、503、404等)
5、回传应答头。应答第二步,先发送自身相关信息、Content-Type(必须)及被请求的文档,在发送空行宝石应答头发送完毕。
6、回传应答正文。应答第三步,根据应答头的Content-Type指定的格式发送应答正文。
7、关闭连接。一次‘会话’完成,如果设置了Connection:keep-alive则TCP连接不关闭,否则关闭连接。
HTTP 客户机端口号 HTTP 服务器端口号 所包括的报文号 步骤说明 57077 80 17 TCP第一次握手,浏览器向服务器发出连接 57077 80 18 TCP第二次握手,服务器回应浏览器的请求,并要求确认 57077 80 19 TCP第三次握手,浏览器回应了服务器的确认,连接成功 57077 80 20 浏览器发出一个页面HTTP请求 57077 80 23 服务器确认 57077 80 24 服务器返回302,要完成请求需要更进一步操作
实验心得
第一次完成计算机网络的实验,将课堂上的知识部分实践,增加了我对TCP协议的理解和HTTP协议的工作原理,在之后的实验也会更加努力完成。