TCP三次握手和四次挥手

三次握手

tcp的flag位由6个bit组成, 分别代表SYN、ACK、FIN、URG、PSH、RST, 都以置1表示有效. 我们重点关注SYN、ACK、FIN.
SYN(Synchronize Sequence Numbers)用于建立链接时的同步信号;
ACK(Acknowledgement)用于对收到的数据进行确认, 所确认的数据由确认序列号表示;
FIN(Finish)表示后面没有数据需要发送, 通常意味着所建立的链接需要关闭了;

三次握手指的是建立链接的三个步骤:

  1. A机器发出一个数据包并将SYN置为1, 表示希望建立链接. 这个包中的序列号假设为x.
  2. B机器收到A机器发过来的数据包后, 通过SYN得知这是一个建立链接的请求, 于是发送一个响应包并将SYN和ACK标记都置1. 假设这个包中的序列号是y, 而确认序列号必须是x+1, 表示收到了A发过来的SYN.
  3. A收到B的响应包后需要进行确认, 确认包中将ACK置1, 并将确认序列号设置为y+1, 表示收到了来自B的SYN

在这里插入图片描述

TCP三次握手的目的: 信息对等和防止超时, 也就是确认双方都具有发送和接受的能力.

四次挥手

TCP是全双工通信, 双方都能作为数据的发送分和接收方, 但TCP链接也会有断开的时候. 所谓相爱容易分手难, 建立链接只有三次, 而挥手断开则需要四次
A机器想要关闭链接, 则待本方数据发送完毕后, 传递FIN信号给B机器. B机器应答ACK, 告诉A机器可以断开, 但是需要等B机器处理完数据, 再主动给A机器发送FIN信号. 这时, A机器处于半关闭状态(FIN_WAIT_2), 无法再发送新的数据. B机器做好链接关闭前的准备工作后, 发送FIN给A机器, 此时B也进入半关闭状态(CLOSE_WAIT). A机器发送针对B机器FIN的ACK后, 进入TIME_WAIT状态, 经过2MSL(Maximum Segment Lifetime)后,没有收到B机器传来的保文, 则确定B机器已经收到A机器最后发送的ACK指令, 此时TCP链接正式释放.
在这里插入图片描述
TIME_WAIT: 主动要求关闭的机器表示收到了对方的FIN报文, 并发送出了ACK报文, 进入TIME_WAIT状态, 等2MSL后即可进入到CLOSED状态. 如果FIN_WAIT_1状态下, 同时收到带FIN标识和ACK标识的报文时, 可以直接进入TIME_WAIT状态, 而无须经过FIN_WAIT_2状态.
CLOSE_WAIT: 被动要求关闭的机器收到收到对方请求关闭链接的FIN报文, 在第一次ACK应答后, 马上进入CLOSE_WAIT状态. 这种状态其实表示在等到关闭, 并且通知应用程序发送剩余数据, 处理现场信息, 关闭相关资源.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值