计网实验——TCP连接建立与释放
一、实验目的
1.理解TCP连接建立和释放过程;
2.理解TCP协议工作原理。
二、实验内容
1.根据网络拓扑图构建网络,配置网络参数;
2.抓取TCP连接建立、数据传送、连接释放的报文;
3.分析抓取到的报文,并做出示意图。
三、实验环境
Window11
Cisco Packet Tracker
四、实验步骤和调试过程
1.建立网络拓扑结构:一台PC端(PC0)、一台路由器以及一台服务端(Server0)
2.配置参数(IP地址都可以随意设)
(1)PC0
(2)Server0
(3)Router
分别配置
a. FastEthernet0/0
b. FastEthernet0/1
3.测试客户端与服务器间能否正常通信:
(1)PC0 ping Server0
(2)Server0 ping PC0
4.抓包并分析TCP连接建立过程
(1)开启仿真模式
(2)打开pc端desktop下的Web Browser,输入服务端的ip地址:192.168.2.104,点击go——开始抓包
(3)在EvenList中查看抓到的包
(4)通过TCP报文首部格式图,我们可以对TCP的连接建立进行分析。
a. 报文
②画TCP连接建立示意图:
③分析序号和确认号的变化:
分析图中的1、2、3个序号分别对应书中的三次TCP报文段交换过程即三报文握手:
1)客户端进程向服务器进程发出连接请求,请求报文段首部中的控制位标志SYN=1,由于是首次请求建立连接,因此,控制位标志ACK=0,该报文段包含计算机随机生成的初始序号seq=x,即0。发送请求连接的TCP报文段,此时客户端进程处于SYN_SENT状态,这是TCP连接的第一次握手。
2)服务端收到客户端发来的请求报文后,若同意建立连接,则向客户端发送确认。确认报文中的控制位SYN=1,ACK=1,确认应答号ack=x+1,即1,并且发送主机的一个初始序列号seq=y(请求与客户端连接),即0。此时,服务器端进入SYN_RCVD状态,这是TCP连接的第二次握手。
3)客户端进程收到服务端进程的确认报文后,还要向服务端发出确认信息。确认报文段的控制位ACK=1,确认应答号ack=y+1,即1,此时,客户端进入ESTABLISHED状态。这是TCP连接的第三次握手。此时,TCP连接成功建立。
3.分析TCP连接释放
(1)报文
(2)画TCP报文建立示意图:
(3)分析:三次交换,但是有四次握手,以下为四次握手的过程
①客户端进程主动向服务端发出连接释放请求报文,并停止发送数据,主动关闭TCP连接。释放连接报文段中控制为FIN=1,序列号为seq=i,即103,发送该报文段后客户端进入FIN_WAIT_1(终止等待1)状态,等待服务器确认。这是TCP连接释放的第一次挥手。
②服务器收到连接释放请求报文段后即发出确认释放连接的报文段,该报文段中控制位ACK=1,确认号为ack=i+1,即104,然后服务器进入CLOSE_WAIT(关闭等待)状态。此时TCP处于半关闭状态,即客户端已经不向服务器发送数据,但服务器仍可向客户端发送数据。这是TCP连接释放的第二次挥手。
③客户端收到服务器的确认信息后,就进入了FIN_WAIT_2(终止等待2)状态,等待服务器发出连接释放请求报文段,若没有数据需要传输,服务器被动向客户端发出链接释放请求报文段,报文段中控制位FIN=1,序列号seq=j,即472,此时服务器进入LAST_ACK(最后确认)状态,等待客户端的确认应答,这是TCP连接释放的第三次挥手。
④客户端收到服务器的连接释放请求后,必须对此发出确认。确认报文段中控制位ACK=1,确认应答号ack=j+1,即472,客户端发出确认应答消息后进入TIME_WAIT(时间等待)状态。在这段时间内TCP连接并没有释放,必须等待2MSL时间后,客户端才进入CLOSED状态。服务器收到客户端的确认应答后,就进入CLOSED状态。直到客户端和服务器都进入了CLOSED状态后,连接就完全释放了,这是TCP连接释放的第四次挥手。
五、实验总结
- 关于连接的时候是三次握手,关闭的时候却是四次挥手的思考:
因为当服务器端收到来自客户端的SYN报文(客户端希望新建一个TCP连接)时,它可以把ACK和SYN放在同一个报文里来发送给客户端,其中ACK报文是用来应答的,SYN报文是用来同步的。但在关闭TCP连接时,当收到对方的FIN报文时,对方仅仅表示对方已经没有数据发送给你了,但是你自己可能还有数据需要发送给对方,就需要告诉对方你收到了FIN报文,同时要告诉对方你的消息发完了,所以等你发送完剩余的数据给对方之后,再发送FIN报文给对方来表示你数据已经发送完毕,并请求关闭连接,所以通常情况下,这里的ACK报文和FIN报文都是分开发送的。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 我与微信审核的“相爱相杀”看个人小程序副业
· DeepSeek “源神”启动!「GitHub 热点速览」
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库