WEB 页面请求全历程协议及数据 包解析(综合性实验)-计算机网络
一、 实验目的
1.1 实现本地浏览器访问目标WEB网站(如www.sina.com)并抓取相关的一系列网络数据包。
1.2 提高学生综合分析和理解计算机网络协议和解析网络数据包的能力
1.3 分析产生的相关数据包内容及其作用,从而给出 WEB 页面请求的完整实现过程。
二、 实验环境
2.1 Wireshark 网络分析软件
2.2实验文件“web 页面请求全程数据包.cap”
三、 实验内容
实验文件“web 页面请求全程数据包.cap”包含的是本地主机(IP:172.29.19.133)通过浏览器访问某 web 页面所产生和收到的相关数据包。
四、 实验问题
1.从实验文件中,列举解析本地主机(IP:172.29.19.133)通过浏览器访问某 web 页面所
产生和收到的相关数据包。
答:
分组1到11都是本地主机(IP:172.29.19.133)通过浏览器访问百度所产生和收到的相关数据包。分组 1、2、3、4 完成的是 www.baidu.com 的域名解析,分组 5、6、7 完成的是浏览器客户端与 baidu 服务器的 TCP 连接,以便执行后续的 HTTP 协议。分组 8、9 分别是客户浏览器发送的 HTTP Get 请求和服务器的响应,分组10、11是进行TCP数据传输过程。
2. 详细解析数据包的内容。
答:
分组5:
l 它的源端口是 61556,是客户端的一般端口号。
l 它的目的端口是 80,是服务器端的 HTTP 应用服务。
l 当前发送的数据首字节是 1(相对值)。它携带的数据包长度是 0 字节,52(IP包全长,见 IP 包头的长度字段值)-20(IP 首部长度)-32(TCP 首部长度)=0字节,因此该 TCP 数据包未携带数据。
l 确认号字段为 0,结合后面的 ACK =0,表明没有接收对方发送的首字节的数据。
l TCP 首部长度:0800(H)=0000 1000 0000 0000(B),其中表示 TCP 首部长度长度是前4位,即 1000(B)=8,因此该 TCP 首部长度是 8×4 字节=32 字节,包含选项字段12字节。
l 同步比特 SYN=0,表明它不是一个 TCP 连接相关的数据包。
l 确认比特 ACK=1 ,确认号字段才有效。当 ACK =0 时,确认号无效。
l 推送比特 PSH (PuSH)=0,等到整个缓存都填满了后再向上交付。
l 窗口字段大小 65535 字节,当前可以接收对方发送65535字节。
l 校验和=0x7fc6,未确认。
l 紧急指针字段=0,因为紧急 URG=0
l 头部选项字段:给出了时间戳 Time stamp。
分组6:
l 它的源端口是 80,是服务器端的 HTTP 应用服务。
l 它的目的端口是 61556,是客户端的一般端口号。
l 当前发送的数据首字节是 1(相对值)。它携带的数据包长度是 0 字节,52(IP包全长,见 IP 包头的长度字段值)-20(IP 首部长度)-32(TCP 首部长度)=0字节,因此该 TCP 数据包未携带数据。
l 确认号字段为 1,结合后面的 ACK =1,表明已经正确接收对方发送的首字节的数据。
l TCP 首部长度:0800(H)=0000 1000 0000 0000(B),其中表示 TCP 首部长度长度是前4位,即 1000(B)=8,因此该 TCP 首部长度是 8×4 字节=32 字节,包含选项字段12字节。
l 同步比特 SYN=0,表明它不是一个 TCP 连接相关的数据包。
l 确认比特 ACK=1 ,确认号字段才有效。当 ACK =0 时,确认号无效。
l 推送比特 PSH (PuSH)=1,接收 TCP 收到推送比特置 1 的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。
l 窗口字段大小 8192 字节,当前可以接收对方发送8192字节。
l 校验和=0x35df,未确认。
l 紧急指针字段=0,因为紧急 URG=0
l 头部选项字段:给出了时间戳 Time stamp。
分组7:
l 它的源端口是 61556,是客户端的一般端口号。
l 它的目的端口是 80,是服务器端的 HTTP 应用服务。
l 当前发送的数据首字节是 1(相对值)。它携带的数据包长度是 0 字节,52(IP包全长,见 IP 包头的长度字段值)-20(IP 首部长度)-32(TCP 首部长度)=0字节,因此该 TCP 数据包未携带数据。
l 确认号字段为 1,结合后面的 ACK =1,表明已经正确接收对方发送的首字节的数据。
l TCP 首部长度:0800(H)=0000 1000 0000 0000(B),其中表示 TCP 首部长度长度是前4位,即 1000(B)=8,因此该 TCP 首部长度是 8×4 字节=32 字节,包含选项字段12字节。
l 同步比特 SYN=0,表明它不是一个 TCP 连接相关的数据包。
l 确认比特 ACK=1 ,确认号字段才有效。当 ACK =0 时,确认号无效。
l 推送比特 PSH (PuSH)=0,等到整个缓存都填满了后再向上交付。
l 窗口字段大小 32768 字节,当前可以接收对方发送32768字节。
l 校验和=0x7fba,未确认。
l 紧急指针字段=0,因为紧急 URG=0
分组8:
浏览器发送的 HTTP Get 请求;
请求的域名:www.baidu.com
连接属性:长连接
浏览器支持的语言类型:zh-CN
客户端可识别的数据编码:gzip, deflate
分组9:
百度服务器的响应;
响应版本:HTTP/1.1
状态码:302
回复短语:找到
服务器:HTTP Load Balancer/2.0
内容类型:text/html
位置:https://www.baidu.com/index.php?tn=56060048_5_pg&ch=6\r\n
3. 根据实验文件回答:
(1)DNS 解析的内容;
答:
分组1:
标识字段:0x9075
若干标志字段(2 字节):标志字段值为 0100(H),分解为 QR=0,是查寻报文;opcode=0000标准查询;TC=0,报文不可截断;RD=1,期望递归查询;Z=0,保留位;NA=0,不接收非权威数据。
问题数=1;资源记录=0;授权资源记录=0;额外资源记录=0;
查寻的域名:www.baidu.com;查寻类型:主机地址;查寻类别:IP 地址 (class ,是一个16 位值,标记协议族或某一个协议实例,使用 IN 代表 internet 系统,CH 代表 Chaos 系统; classIN 是一个 32 位 IP 地址 )
分组2:
标识字段:0xd363
若干标志字段(2 字节):标志字段值为 0100(H),分解为 QR=0,是查寻报文;opcode=0000标准查询;TC=0,报文不可截断;RD=1,期望递归查询;Z=0,保留位;NA=0,不接收非权威数据。
问题数=1;资源记录=0;授权资源记录=0;额外资源记录=0;
查寻的域名:www.baidu.com;查寻类型:主机地址;查寻类别:IP 地址 (class ,是一个16 位值,标记协议族或某一个协议实例,使用 IN 代表 internet 系统,CH 代表 Chaos 系统; classIN 是一个 32 位 IP 地址 )
分组3:
标识字段:0x9075
若干标志字段(2 字节):标志字段值为 8180(H),分解为 QR=1,是响应报文;opcode=0000标准查询;TC=0,报文不可截断;RD=1,期望递归查询;Z=0,保留位;NA=0,不接收非权威数据。
问题数=1;资源记录=3;授权资源记录=0;额外资源记录=0;
分组4:
标识字段:0xd363
若干标志字段(2 字节):标志字段值为 8180(H),分解为 QR=1,是响应报文;opcode=0000标准查询;TC=0,报文不可截断;RD=1,期望递归查询;Z=0,保留位;NA=0,不接收非权威数据。
问题数=1;资源记录=1;授权资源记录=1;额外资源记录=0;
(2)TCP 的连接建立过程;
答:
客户端进程(IP 地址:172.29.19.133,端口 61556)与服务器端进程(IP 地址:14.215.177.38
端口 80)建立连接的 3 次握手过程,对应的分别是第 5、6、7 数据分组。它们分别完成的是:
第 5 数据分组:客户端的TCP(SYN=2fd4117a,这是客户端为了防范某些安全性攻击而选择的起始序号,相对序号是 1)向服务器端发出连接请求报文段;注意该分组的Option 字段内容,给出了 MSS=1460 字节,Sack Permitted 等协商内容。该连接请求报文不携带数据(Len=0),但消耗一个序号。为了防止 TCP syn 攻击,该分组选择的初始化序号是 2fd4117a,当然相对序号是 1。
第 6 数据分组:服务器端 的 TCP 收到连接请求报文段后,同意,发回确认(确认报文段中将 SYN 置为 1,ACK=1);注意该分组的 Option 字段内容,给出了 MSS=1452 字节. 该连接请求确认报文不携带数据(Len=0),但消耗一个序号。同时初始窗口值为 16384字节。为了防止 TCP syn 攻击,该分组选择的初始化序号是 9660d117,当然相对序号是 1, 对5 数据分组的确认是 9660d118(9660d117+1)。
第 7 数据分组:客户端收到此报文段后,向服务器端给出确认(ACK=1)。连接建立完成。
(3)本地主机访问的 web 页面的地址,如果发生重定向,新的 web 页面的地址是什么?
答:https://www.baidu.com/index.php?tn=56060048_5_pg&ch=6。
(4)TCP 是否发生了重传?
答:是。
(5)TCP 是如何实现确认的?
答:
累计确认就是TCP协议的确认方法,TCP使用可变长度报文段来发送数据,重传时,报文段数据可能会比原报文段数据包含更多的数据,因此对数据报和报文段无法进行简单的确认。TCP使用流序号对流中的一个位置进行确认,即序号和确认号一一对应,接收方使用序号将报文段重新排序,且以正确接收到的流的最长连续前缀进行确认。