TCP的三次握手和四次挥手以及状态转移过程

1、TCP的三次握手即客户端与服务器端建立连接的过程

(三次握手一般是由客户端发起的建立连接请求,connect返回连接成功表示三次握手完成)


第一次握手:客户端发起建立连接请求,并发送SYN和一个序列号i

第二次握手:服务器确认与客户端建立连接,发送SYN和一个自己的序列号j,同时发送ACK以及确认值i+1

第三次握手:客户端向服务器发送ACK以及确认值j+1


2、TCP的四次挥手即客户端与服务器端断开连接的过程

(四次挥手可能由客户端执行主动断开也可能由服务器端主动断开)


第一次挥手:主动断开方要求关闭连接,并且发送FIN

第二次挥手:被动断开方确认关闭连接发送ACK和确认值i+2

第三次挥手:被动断开方紧接着发送FIN

第四次挥手:主动断开方发送ACK和确认值J+2表示确认

 

3. TCP状态转移过程


SYN_SENT:客户端向服务器端发送连接请求

 

ESTABLISHED :客户端收到服务器端的同步报文段和确认

 

FIN_WAIT_1:主动断开方发送结束报文段

 

FIN_WAIT_2:主动断开方收到被动断开方的确认报文段

 

TIME_WAIT:主动断开方收到结束报文段

 

SYN_RCVD: listen开始时就创建监听队列,若已完成三次握手的队列为空,则accept阻塞,一旦监听到连接请求,就将其放入内核等待队列中,并向客户端发送SYN确认,此时该连接处于该状态。

 

ESTABLISHED :服务器端接收到客户端发送的确认报文段,连接双方能够进行双向数据传输的状态

 

CLOSE_WAIT:主动断开方关闭连接,被动断开方发送确认报文段,进入等待关闭连接状态

 

LAST_ACK:被动断开方给主动断开方发送结束报文段关闭连接进入该状态,等待主动断开方的最后一次确认

 

4. TIME_WAIT状态存在的意义

(1)保证可靠的终止TCP连接

     解释:若最后一条确认报文段丢失,被动断开方则会重发一条结束报文段,主动断开方则会在该状态下处理这条重发的结束报文段,重新向被动断开方发送一条确认报文段。

(2)保证迟来的数据能被识别并丢弃

     解释:处于该状态下,不能使用这个被占用的端口建立一个新的连接,防止这个新的连接接收到之前的连接的报文段。


5.为什么是三次握手呢?

(1)数据延时

假如客户端向服务器端发起的连接请求报文段因为某些原因滞留,过了一段时间之后服务器端才接收到,但是这个报文段已经无效了并未丢失。服务器端就会向客户端发送一个确认的同步报文段。如果是两次握

握手,这样连接已经建立,服务器端就会一直等待客户端发送数据,但是客户端并未建立这次连接,这就造成了资源的浪费。

(1)SYN溢出攻击

 

6.四次挥手可不可以是三次挥手?

主动断开方与被动断开方同时要关闭连接的情况下,四次挥手也可以是三次挥手,就是当FIN_WAIT_1状态下的主动断开方收到被动断开方带有确认的结束报文段时转入TIME_WAIT状态,不必再经过FIN_WAIT_2状态。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值