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
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值