TCP连接的三次握手和四次挥手

发布于:2023-01-04 ⋅ 阅读:(337) ⋅ 点赞:(0)

一、三次握手过程

1、主机B创建传输控制块TCB,等待接收主机A发送的连接请求,此时主机B进入LISTEN状态;

2、主机A创建传输控制块TCB,然后向主机B发送请求连接报文,包含初始化序列号seq=X,此时主机A进入SYN-SENT(同步已发送)状态;

3、主机B收到SYN报文后,如果同意建立连接,向主机A发送一个SYN-ACK确认报文,包含确认序列号ack=X+1,初始化序列号seq=Y,此时主机B进入SYN-RCYD(同步收到)状态;

4、主机A收到SYN-ACK报文后,还需要给主机B发送一个ACK确认报文。包含确认序列号ack=Y+1,序列号seq=X+1。此时连接建立,主机A和主机B状态变为ESTABLISHED。

 二、四次挥手

1、主机A发送连接释放报文,并停止发送数据。报文内FIN字段标记为1,初始化序列号为seq=x。此时主机A进入FIN-WAIT-1(终止等待1)状态;

2、主机B收到FIN报文后,通知应用进程,并发出确认报文,ACK字段标记为1,ack序列号为ack=x+1,初始化序列号seq=1。此时主机B进入CLOSE-WAIT(等待关闭)状态;

3、主机A收到主机B的确认报文后,进入FIN-WAIT-2(终止等待2)状态,等待主机B发送释放连接报文,同时还需要接受主机B发出的数据;

4、主机B发送完数据后,向主机A发送释放连接报文,FIN、ACK字段都设为1,包含序列号seq=w,ack=x+1,此时主机B进入LAST-ACK(最后确认)状态;

5、主机A收到主机B的释放连接报文,发出确认报文,ACK字段设为1,包含seq=x+1,ack=w+1,主机A进入TIME-WAIT(时间等待)状态;

6、主机B在收到确认报文后,立即进去CLOSED状态;

7、主机A在发送确认报文后,等待2MSL,进入CLOSED状态。

三、问题

1. 连接成功后,客户端突然出现故障,服务端会怎么做?

        TCP设有一个保活计时器。当客户端出现故障,服务端不会一直保持连接直到客户端恢复,因为这样会造成资源浪费。服务器收到依次客户请求后,通常会重置计时器,时间通常设为两小时。如果两小时没有收到来自客户端的数据,服务端会向客户端发送一个探测报文段,并每个75秒发送一次。若一连发送十个探测报文,客户端都没有反应,服务器则认为客户端出现故障,自动断开连接。


网站公告

今日签到

点亮在社区的每一天
去签到