个人信息:
姓名:钟逸强
学号:201821121092
班级:计算1813
目录
- 1 实验目的
- 2 实验内容
- 3. 实验报告
- 3.1 建立网络拓扑结构
- 3.2 配置参数
- 3.3 抓包,分析TCP连接建立过程
- 4. 拓展
1 实验目的
- 使用路由器连接不同的网络
- 使用命令行操作路由器
- 通过抓取HTTP报文,分析TCP连接建立的过程
2 实验内容
使用Packet Tracer,正确配置网络参数,通过抓取HTTP数据包,分析TCP连接建立过程。
- 建立网络拓扑结构
- 配置参数
- 抓包
- 分析数据包
3. 实验报告
3.1 建立网络拓扑结构
网络拓扑图如下图所示:
3.2 配置参数
(1)客户端的IP地址和网关配置:
(2)服务端的IP地址和网关配置:
(3)路由器参数配置:
配置并激活端口:
Router>enable #进入特权执行模式
Router#configure terminal #进入全局配置模式
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#hostname R #将路由器名称配置为R
配置G0/0接口:
R(config)#interface G0/0
R(config-if)#ip address 192.168.1.93 255.255.255.0 #设置IP地址和子网掩码
R(config-if)#no shutdown #激活端口
R(config-if)#
%LINK-5-CHANGED: Interface GigabitEthernet0/0, changed state to up
%LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet0/0, changed state to up
配置G0/1接口:
R(config-if)#exit #返回上一层
R(config)#interface G0/1
R(config-if)#ip address 192.168.2.93 255.255.255.0 #设置IP地址和子网掩码
R(config-if)#no shutdown #激活端口
配置路由算法
R(config-if)#exit #返回上一层
R(config)# router rip #使用rip 2版本
R(config-router)#version 2 #使用rip 2版本;
R(config-router)#no auto-summary #关闭自动路由汇总
指定网络:
R(config-router)#network 192.168.1.0
R(config-router)#network 192.168.2.0
3.3 抓包,分析TCP连接建立过程
抓取到的数据包:
Http包:
请求报文:
响应报文:
TCP包:
通过抓取HTTP数据包得到的TCP报文,完成如下事情:
(1)画出TCP连接建立示意图
如下图所示:
(2)分析序号和确认号的变化
1.第一次握手:建立连接。PC端发送连接请求报文段,将同步序号SYN位置为1,ACK=0;顺序码Seq为0 ; 然后,PC端进入发送状态,等待Server端的确认;
2.第二次握手:Server收到SYN报文段。Server端收到PC端的同步序号SYN报文段,需要对这个SYN报文段进行确认,设置ack为Seq+1(表示确认接收到PC的请求); 同时,发送SYN请求信息,将SYN位置为1,Seq为0; Server端将上述所有信息放到SYN=1+ACK=1报文段中(表示发送连接请求和确认应答有效),发送给PC端,此时Server进入接收状态;
3.第三次握手:PC收到服务器的SYN+ACK报文段。然后将确认号ack设置为seq+1(表示确认接收到Server的请求),向Server发送ACK=1报文段(表示应答有效),之后,PC端和Server端进入连接状态;
(3)解答:为什么连接建立需要第三次握手
因为已经失效的请求报文可能会再发送到服务器端,使得服务器端再产生新的连接,所以需要客户端再发送一次ACK=1的报文,来确认收到服务器的SYN+ACK报文段,不会再接收错误的新连接请求。
4. 拓展
(1)分析TCP连接释放
TCP连接释放示意图如下图所示
为什么连接释放需要四次握手?
第一次握手是向Server发送一个FIN=1的连接释放请求,并令seq=102;
第二次握手是Server收到了PC发来的FIN报文段,向PC发送一个ack=seq+1(102+1)确认接收到PC的请求,并发送ACK=1表示应答有效;
第三次是发送一个FIN=1连接释放请求给PC,关闭Server到PC的连接;
第四次握手是PC端收到FIN报文后,发送ACK=1的应答报文给Server.
其实实际来说是算三次握手,原理跟建立连接的过程差不多,区别就是,建立连接的时候SYN和ACK可以一起传输,但是释放的时候Server发给PC端的ACK和FIN要分开发,因为Server端存在待发送的数据,先发ACK=1的报文回应PC端,间隔一段时间把数据发送完,再断开连接并发送FIN包给PC,PC就会断开连接并发送ACK回复Server端。
(2)通过该实验如果有产生新的疑问,可以写出来,并尝试自己解决问题
为什么连接释放的第四次握手的确认号ack,不是ack=seq+1?