姓名:陈泽镭
学号:201821121121
班级:计算1814
1 实验目的
- 使用路由器连接不同的网络
- 使用命令行操作路由器
- 通过抓取HTTP报文,分析TCP连接建立的过
2 实验内容
使用Packet Tracer,正确配置网络参数,通过抓取HTTP数据包,分析TCP连接建立过程。
- 建立网络拓扑结构
- 配置参数
- 抓包
- 分析数据包
3. 实验报告
3.1 建立网络拓扑结构
网络拓扑图如下图所示:
3.2 配置参数
- 客户端的IP地址:
192.168.1.121
默认网关(Deafult Gateway):192.168.1.122
- 客户端的IP地址:
192.168.2.121
默认网关(Deafult Gateway):192.168.2.122
配置路由器参数:
清除路由器上现有的配置:
- 使用命令清除路由器上的现有配置
- 进入特权执行模式
- 清除路由器上的现有配置
- 进入全局配置模式
- 禁用DNS查找
配置并激活端口:
- 进入特权执行模式
- 进入全局配置模式
- 将路由器名称配置为R
- 配置Fa0/0接口
- 同样方法激活Fa0/1接口
配置路由器算法:
- 启动动态路由
- 指定网络
验证参数配置是否正确:
- 检验IP地址正确并且接口处于激活状态
- 查看路由表
- 任意两台机器能Ping成功
3.3 抓包,分析TCP连接建立过程
- 通过PC端访问
- 抓到如下的报文
- HTTP报文
- TCP报文
IP报文格式:
版本:IP协议的版本,目前的IP协议版本号为4,下一代IP协议版本号为6。
首部长度:IP报头的长度。固定部分的长度(20字节)和可变部分的长度之和。共占4位。最大为1111,即10进制的15,代表IP报头的最大长度可以为15个32bits(4字节),也就是最长可为15*4=60字节,除去固定部分的长度20字节,可变部分的长度最大为40字节。
服务类型:Type Of Service。
总长度:IP报文的总长度。报头的长度和数据部分的长度之和。
标识:唯一的标识主机发送的每一分数据报。通常每发送一个报文,它的值加一。当IP报文长度超过传输网络的MTU(最大传输单元)时必须分片,这个标识字段的值被复制到所有数据分片的标识字段中,使得这些分片在达到最终目的地时可以依照标识字段的内容重新组成原先的数据。
标志:共3位。R、DF、MF三位。目前只有后两位有效,DF位:为1表示不分片,为0表示分片。MF:为1表示“更多的片”,为0表示这是最后一片。
位移:本分片在原先数据报文中相对首位的偏移位。(需要再乘以8)
生存时间:IP报文所允许通过的路由器的最大数量。每经过一个路由器,TTL减1,当为0时,路由器将该数据报丢弃。TTL 字段是由发送端初始设置一个 8 bit字段.推荐的初始值由分配数字 RFC 指定,当前值为 64。发送 ICMP 回显应答时经常把 TTL 设为最大值 255。
协议:指出IP报文携带的数据使用的是那种协议,以便目的主机的IP层能知道要将数据报上交到哪个进程(不同的协议有专门不同的进程处理)。和端口号类似,此处采用协议号,TCP的协议号为6,UDP的协议号为17。ICMP的协议号为1,IGMP的协议号为2.
首部校验和:计算IP头部的校验和,检查IP报头的完整性。
源IP地址:标识IP数据报的源端设备。
目的IP地址:标识IP数据报的目的地址。
TCP报文格式:
源端口:占2个字节,源端口和IP的作用是标记报文的返回地址。
目的端口:占2个字节,指明接收方计算机上的应用程序接口。
序号:占4个字节,是TCP可靠传输的关键部分。
确认序号:即ack,占4个字节,指明下一个期待收到的字节序号,表明该序号之前的所有数据已经正确无误的收到。
数据偏移:占4位,它指出TCP报文的数据距离TCP报文段的起始处有多远。
保留:为将来定义新的用途保留,一般置为0。
控制位:
URG:紧急指针标志。1:紧急指针有效;0:忽略紧急指针。
ACK:确认序号标志。1:确认号有效;0:忽略确认号段。
PSH:push标志。1:带有push标志的数据,表示接收方在接收到该报文后应尽快将这个报文段交给应用程序,而不是缓冲区排队。
RST:重置连接标志。用于重置由于主机崩溃或其他原因而出现错误的连接。或者用于拒绝非法的报文段和拒绝连接请求。
SYN:同步序号,用于建立连接过程,在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1。
FIN:结束标志,用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本方数据流。
窗口:滑动窗口大小,用来告知发送端接收端的缓存大小,以此控制发送端发送数据的速率,从而达到流量控制。
校验和:奇偶校验,此校验和是针对整个TCP报文段的,包括TCP报头和TCP报文数据段,以2个字节进行计算所得。
紧急指针:只有当URG标志置1时紧急指针才有效,TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。
选项和填充:最常见的可选字段是最长报文大小,它表示本端所能接受的最大报文段的长度。
数据部分:TCP报文段中的数据部分是可选的。
(1)画出TCP连接建立示意图
(2)分析序号和确认号的变化
- 首先由客户端发送请求连接,即SYN=1,ACK=0。TCP规定,在SYN=1时不能携带数据,但是要消耗一个序号,所以申明自己的序号seq=x。
- 然后Server进行回复确认,即SYN=1,ACK=1,seq=y,ack=x+1。
- 然后客户端再次确认,但不用SYN=1,即ACK=1,seq=x+1,ack=y+1。(SYN=1时,表明这是一个请求连接或接受连接报文)
(3)解答:为什么连接建立需要第三次握手
这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,
己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。
4. 拓展 (不作要求,但属于加分项)
(1)分析TCP连接释放
(2)解答:为什么释放连接要四次握手?
第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
回答:由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,
收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。
首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。
(3)解答:为什么释放连接的图和书上的不同?
可能是因为在此次试验中,服务器并没有数据可以向客户端发送,所以在释放连接时,服务器将对客户端的回应报文和发送FIN报文合在一起。因此此次试验的释放连接看起来是三次握手。