使用Packet Tracer,正确配置网络参数,经过抓取HTTP数据包,分析TCP链接创建过程。服务器
4.2.1 配置客户端网络
客户端的参数配置以下:并发
4.2.2 配置服务端dom
服务端的参数配置以下:tcp
4.2.3 配置路由器spa
(1)激活路由器命令行
解释: 3d
Router>enable # 进入特权执行模式 router
Router#configure terminal # 进入全局配置模式 blog
Router(config)# no ip domain-lookup # 禁用DNS查找
Router(config)#hostname R # 将路由器名称配置为R
(2)配置端口 Fa0/0与Fa0/1
解释:
R(config)#interface Fa0/0
R(config-if)#ip address 192.168.1.80 255.255.255.0
R(config-if)#no shutdown # 激活接口
(3)配置路由器协议
解释:
R(config)#router rip # 进入配置路由协议的模式
R(config-router)#version 2 # 使用rip2版本
R(config-router)#no auto-summary # 关闭自动路由总结
R(config-router)#network 192.168.1.0 # 设置参与配置协议的网络地址
(4)查看是否配置完成
4.3.1用客户端的Web Browser访问服务器:
4.3.2 仿真界面完成抓包
4.3.3画出TCP链接创建示意图
4.3.4分析序列号和确认号的变化
(1)第一次握手:Client将标志位SYN置为1,随机产生一个序列号值seq=x,并将该数据包发送给Serve,PC进入SYN_SENT状态,等待Serve确认
(2)第二次握手:Serve收到数据包后由标志位SYN=1知道Client请求创建链接,Serve将标志位SYN和ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给Client以确认链接请求,Server进入SYN_RCVD状态。
(3)第三次握手:Client收到确认后,检查ack是否为x+1,ACK是否为1,若是正确则将标志位ACK置为1,ack=y+1,并将该数据包发送给Server,Server检查ack是否为y+1,ACK是否为1,若是正确则链接创建成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间能够开始传输数据了。
4.3.5解答:为何链接创建须要第三次握手
3次握手完成两个重要的功能,既要双方作好发送数据的准备工做,也要容许双方就初始序列号进行协商,这个序列号在握手过程当中被发送和确认。目的是为了解决网络中存在延迟的重复分组问题。
只有2 次握手极可能形成“死锁”:假定C给S发送一个链接请求分组,S收到了这个分组,并发 送了确认应答分组。按照两次握手的协定,S认为链接已经成功地创建了,能够开始发送数据分组。但是,C在S的应答分组在传输中被丢失的状况下,将不知道S 是否已准备好,不知道S创建什么样的序列号,C甚至怀疑S是否收到本身的链接请求分组。在这种状况下,C认为链接还未创建成功,将忽略S发来的任何数据分 组,只等待链接确认应答分组。而S在发出的分组超时后,重复发送一样的分组。致使死锁的形成。
(1)分析TCP链接释放
(2)图为何会跟课本不同
在半关闭状态,服务器极可能又发送了一些数据。而客户端收到服务器的链接释放报文后,必须发出确认。此时的TCP链接尚未释放。
(3)为何须要第四次握手
关闭链接时,当Server端收到FIN报文时,极可能并不会当即关闭SOCKET,因此只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端全部的报文都发送完了,我才能发送FIN报文,所以不能一块儿发送。故须要四步握手。
(4)疑问
若是链接已经创建,但客户端忽然出现故障的话,服务端会立刻终止交易仍是傻傻等下去?又或者机制比较聪明先试探一下确认客户端真的崩溃后才断开链接??