计网实验——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报文都是分开发送的。

 

 

 

 

posted @   吧拉吧拉吧  阅读(717)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 我与微信审核的“相爱相杀”看个人小程序副业
· DeepSeek “源神”启动!「GitHub 热点速览」
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示