TCP的三次握手和四次挥手

TCP的三次握手
TCP中所有的问题,都要先建立连接,需要先看连接维护的问题,TCP的连接建立,常被称为三次握手;

A:您好B,我是A.
B:您好A,我是B.
A:您好B

采用 请求->应答->应答之应答的方式,保证二者的消息传送都是有来有回的;

三次握手除了双方建立连接外,主要还是为了沟通一件事情,就是TCP包的序号的问题。 每个连接都要有不同的序号。这个序号的起始序号是随着时间变化的,可以看成一个32位的计数器,每4ms加一,其时序图如下:
在这里插入图片描述
1、刚开始客户端和服务端都处于CLOSED状态,服务端先监听某个端口,处于LISTEN状态
2、客户端主动发起连接请求SYN=1,ACK=0初始序号为x,之后处于SYN-SENT状态;
3、服务端收到发起的连接请求,如果同意连接就返回SYN=1,ACK=1,确认号为 x+1,同时也选择一个初始的序号 y,之后处于SYN-RCVD状态;
4、客户端收到服务端发送的SYN和ACK之后,发送ACK的ACK,确认号为 y+1,序号为 x+1。之后处于ESTABLISHED状态,因为它一发一收成功了;
5、服务端收到ACK的ACK之后,处于ESTABLISHED状态,因为它也一发一收了。
TCP的四次挥手
A:B啊,我不想玩了;
B:哦,你不想玩了啊,我知道;
此时的A很可能是发送完最后的数据就准备不玩了,不能在ACK的时候就关闭连接,此时B还没有忙完自己的事情,还是可以发送数据的,称为半关闭状态;
B:A啊,好吧,那我也不玩了,拜拜;
A:好的,拜拜;

断开连接的时序图如下所示:
在这里插入图片描述
双方一开始都是处于建立连接的状态:

A 发送连接释放报文,FIN=1,就进入FIN_WAIT_1的状态;
B 收到之后发出确认,此时 TCP 属于CLOSE_WAIT(半关闭)状态,B 能向 A 发送数据但是 A 不能向 B 发送数据;
当 B 不再需要连接时,发送连接释放报文,FIN=1,就进入FIN_WAIT_2的状态
A 收到后发出确认,进入 TIME-WAIT 状态,等待 2 MSL(最大报文存活时间)后释放连接;
B 收到 A 的确认后释放连接;
四次挥手的原因

客户端发送了 FIN 连接释放报文之后,服务器收到了这个报文,就进入了 CLOSE-WAIT 状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器会发送 FIN 连接释放报文。

TIME_WAIT

客户端接收到服务器端的 FIN 报文后进入此状态,此时并不是直接进入 CLOSED 状态,还需要等待一个时间计时器设置的时间 2MSL。这么做有两个理由

确保最后一个确认报文能够到达。如果 B 没收到 A 发送来的确认报文,那么就会重新发送连接释放请求报文,A等待一段时间就是为了处理这种情况的发生。
等待一段时间是为了让本连接持续时间内所产生的所有报文都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值