TCP连接的建立与释放

一.TCP的段结构

在这里插入图片描述
源端口(16比特):表示发送方进程端口
目的端口(16比特):表示接收方进程端口
序列号seq(32比特):TCP对字节进行编号,例如,某数据段包括2000字节,若首字节编号为0,则下一个数据段首字节的序列号为0+2000=2000
确认号ack(32比特):是期望对方发送的下一个数据段的首字节序号,表示该序号之前的字节都已正确接收
报头长度(4比特):指出TCP报文的首部长度,随可选项的长度而改变

  • URG:紧急比特。当为1时,表明此报文段中含有发送端应用进程标出的紧急数据,同时用“紧急指针”字段指出紧急数据的末字符。TCP必须通知接收方的应用进程“紧急数据”,并将“紧急指针”传送给应用进程
  • ACK:确认字段。在TCP连接建立后所有的报文段必须把ACK标志位置1,而且只有ACK标志位为1时,确认号字段才有效
  • PSH:推送功能。在进行Telnet或Rlogin等交互模式的连接时,该标志总是置位的。该标志置位,数据将尽快交付应用处理。
  • RST:重置连接。用于复位相应的TCP连接,当通信过程中出现严重错误时,通信双方的任意一方发送RST位设置为1的报文段用于终止连接
  • SYN:同步标志。用于在TCP建立连接时同步序号。在TCP连接建立请求报文和连接接受报文中,SYN置为1
  • FIN:终止标志。发送方通过发送FIN为1的报文段说明数据发送已经结束,请求释放连接

二.搭建网络拓扑,配置设备参数

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

三.将模拟器切换到Simulation模式,建立TCP连接

在PC0的Web Browser的命令行中输入服务器的IP地址
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由于协议栏中协议太多,我们可以对协议进行筛选,首先,点击Show All/None命令,隐藏全部协议,完成结果如下图所示:
在这里插入图片描述
然后,我们再点击Edit Filters命令,选择需要显示的协议“HTTP”,“TCP”,完成结果如下图所示:
在这里插入图片描述

四.分析TCP连接的建立(三次握手)

TCP连接的建立过程被形象地称为“三次握手”,因为通信双方在建立连接时需要发送三个报文
三次握手机制通过请求,确认,再确认三个报文确保TCP连接成功建立
在这里插入图片描述

1.第一次握手

A向B发送SYN=1的请求报文段,即“请求”报文,请求建立TCP连接,报文段的序号seq=x,第一次握手请求发送后A的状态为SYN-SENT,B在接收到请求后状态由LISTEN变为SYN-RCVD按照TCP的规定,这个请求报文段不能携带任何实际的数据,但是必须消耗掉一个序号。

客户端发出SYN请求报文,请求建立TCP连接,状态转变为SYN-SENT

报文序号SEQUENCE NUMB为0
确认序号ACK NUM为0
SYN同步标志置1
在这里插入图片描述
在这里插入图片描述

服务器收到TCP SYN报文,接受请求,状态由LISTEN转变为SYN-RECEIVED

报文序号SEQUENCE NUM为0
确认序号ACK NUM为0
SYN同步标志置1
在这里插入图片描述
在这里插入图片描述

2.第二次握手

B对于A的请求发送确认报文段,即“确认”报文,SYN=1,ACK=1(SYN表示B请求跟A建立连接,ACK表示对A的连接请求进行应答),报文段的序号seq=y,确认号ack=x+1,A接收到B的确认后,状态变为ESTABLISHED,B的状态依然为SYN-RCVD。

服务器回复了“确认”报文,状态仍然为SYN-RECEIVED

报文序号SEQUENCE NUM为0
确认序号ACK NUM为1
SYN同步标志置1
ACK同步标志置1
在这里插入图片描述
在这里插入图片描述

客户端收到服务器的确认,状态转变为ESTABLISHED

在这里插入图片描述
在这里插入图片描述

3.第三次握手

A对于B的确认报文段也发出确认报文,即“再确认”报文,ACK=1(表示对B的连接请求进行应答),确认号为B的序号y加1即ack=y+1,自身序号为seq=x+1(因为第一个请求建立连接报文已经消耗掉一个序号)。B接收到A的确认后,A和B的状态都将变为ESTABLISHED。

客户端回复了“确认”报文,状态仍然为ESTABLISHED

由于客户端的连接建立请求报文已消耗掉一个序号因此
报文序号SEQUENCE NUM为1
确认序号ACK NUM为1
ACK同步标志置1
在这里插入图片描述
在这里插入图片描述

服务器接收到客户端的确认后,状态也转变为ESTABLISHED

在这里插入图片描述
在这里插入图片描述
A和B的状态都将变为ESTABLISHED,此后双方就可以开始进行数据传输了。

接收方在接收到发送方发送的seq后,应答一个ack,ack的值等于seq+1,表示已要发送方开始发送seq+1位置的数据。

五.分析TCP连接的释放(四次挥手)

在这里插入图片描述

1.第一次挥手

A收到应用层的通知,向B发送FIN=1,ACK=1的连接释放报文段,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,A的状态转换为FIN-WAIT-1按照TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。

客户端发送FIN报文,请求释放,客户端的状态转换为FIN-WAIT-1

报文序号SEQUENCE NUM为103(即客户机之前已传送过的数据的最后一个字节的序号加1)
确认序号ACK NUM为472
终止控制位FIN置1
ACK控制位置1

在这里插入图片描述
在这里插入图片描述

2.第二次挥手

B收到A的连接释放请求并向A发出确认报文,ACK=1,ack=u+1,B的确认报文序列号seq=v,B的状态转换为CLOSE-WAIT。
⇒ B通知高层的应用进程,A向B的方向就释放了,这时候处于半关闭状态,即A已经没有数据要发送了,但是B若发送数据,A依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。

服务器收到客户端的连接释放请求,服务器的状态转换为CLOSE-WAIT

报文序号SEQUENCE NUM为472
确认序号ACK NUM为103
终止控制位FIN置1
ACK控制位置1
在这里插入图片描述
在这里插入图片描述

服务器回复确认报文

报文序号SEQUENCE NUM为472
确认序号ACK NUM为104
终止控制位FIN置1
ACK控制位置1
在这里插入图片描述
在这里插入图片描述

3.第三次挥手

B将最后的数据发送完毕后,就向A发送FIN=1的连接释放报文段,FIN=1,ACK=1,ack=u+1,由于在半关闭状态,B很可能又发送了一些数据,假定此时的序列号为seq=w(不一定为v),此时,B的状态转换为LAST-ACK,等待A的确认。

服务器向客户端发送FIN报文,服务器的状态转换为LAST-ACK

报文序号SEQUENCE NUM为472
确认序号ACK NUM为104
终止控制位FIN置1
ACK控制位置1
在这里插入图片描述

4.第四次挥手

A收到了B的释放连接请求并向B发送了ACK=1的确认报文,seq=u+1,ack=w+1,B的状态转变为TIME-WAIT 。此时TCP连接还没有释放,必须经过2MSL(最长报文段寿命)的时间后,才进入CLOSED状态。

⇒ B收到了A的确认报文,B向A的方向就释放了。

客户端收到服务器的请求报文,客户端状态转换为CLOSED

报文序号SEQUENCE NUM为472
确认序号ACK NUM为104
终止控制位FIN置1
ACK控制位置1
在这里插入图片描述
在这里插入图片描述

客户端回应ACK报文

报文序号SEQUENCE NUM为104
确认序号ACK NUM为472
ACK控制位置1
在这里插入图片描述
在这里插入图片描述

服务器收到ACK报文,服务器状态转换为CLOSED

报文序号SEQUENCE NUM为104
确认序号ACK NUM为472
ACK控制位置1
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值