网络——TCP三次握手/四次挥手

在正常情况下,TCP都是要经过三次握手建立连接,四次挥手断开连接

 

一、TCP的连接状态

1.LISTEN:监听客户端的TCP端口的连接请求

2.SYN_SENT:再次发送连接请求后等待匹配的连接请求

3.SYN_RECV:再收到和发送一个连接请求后等待对方连接请求的确认

4.ESTABLISHED:代表一个打开的连接

5.FIN_WAIT_1:等待远程TCP连接中断请求,或此案前的连接中断请求的确认

6.FIN_WAIT_2:从远程TCP等待连接中断请求

7.COLSE_WAIT:等待从本地用户发来的连接中断请求

8.LAST_ACK:等待原来的发向远程TCP的连接中断请求的确认

9.TIME_WAIT:等待足够的实际以确保远程TCP接收到连接中断请求的确认

10.CLOSED:没有任何连接状态,连接结束

三次握手是客户端与服务器建立连接的过程,只有客户端可以主动发起

四次挥手是双方断开连接的过程,客户端和服务器都可以主动发

 

二、三次握手

第一次握手:客户端将SYN设置为1,表示请求建立连接,并产生一个随机的Seq=m,将数据发送给服务器。客户端进入SYN_SEND状态。

第二次握手:服务器收到数据包后由SYN=1知道客户端想要建立连接,服务器将SYN以及确认应答ACK都设置为1,ack=m+1,并产生随机的seq=n,将该数据报发送给客户端,服务器进入LISTEN状态

第三次握手:客户端收到确认后,检查ack是否等于m+1,ACK是否为1,若是则表示建立连接成功(服务器有时候不同意建立连接,ACK=0),此时服务器与客户端都进入ESTABLISHRED状态,就可以传输数据了

 

为什么是三次握手不是俩次?俩次握手也可以进行传输,但为什么要三次?

1.如果只有一次握手,客户端就不能确定自己是否与服务器建立连接,更不能确定服务器与自己建立连接是否成功。因为客户端的请求报文可能丢失或者被接收,但是客户端不知道,服务器也不会做出反应

2.如果只有俩次握手,服务器不能确定是否连接成功,因为它的ACK报文可能丢失或者被接受到,但是服务器不知道,客户端也不会对此做出反应。

3.如果是四次握手,在双方都确认建立连接的情况下,又一次进行了握手,浪费资源,因为是相当与又重复了一次第三次握手的过程。

三、四次挥手

假设是客户端主动断开连接

1.第一次挥手:客户端发送一个请求断开连接FIN=1,seq=m,要求关闭客户端到服务器之间的连接,客户端进入FIN_WAIT_1状态,等待服务器回应。

2.第二次挥手:服务器发送一个ACK应答,和ack=m+1表示知道了你的请求,进入CLOSE_WAIT状态。但是服务器没有立即关闭连接,因为服务器此时可能还有数据没有发送完,还可以进行简单数据传送,知道数据都发完。客户端在接受到服务器的ACK报文后,进入FIN_WAIT_2状态,等待服务器断开连接

3.第三次挥手:服务器数据全都发送完成,向客户端发送一个FIN报文,进入LAST_ACK状态。

4.第四次挥手:客户端接收到服务器的FIN报文,回复一个ACK报文,并进入TIME_WAIT状态,服务器在收到ACK报文后,关闭连接关闭了。如果没有收到客户端的ACK报文,客户端则会重传,这就是TIME_WAIT的意义,如果客户端等待了2MSL后依然没有收到回复,则证明服务器正常关闭了,客户端也正常关闭连接

 

为什么建立连接要三次握手,而断开连接是四次挥手?

在三次握手建立连接时,服务器在listen的状态下,收到建立连接请求SYN报文后,服务器将SYN和ACK放在一个报文里发送给客户端(第二次握手)。而在四次挥手关闭建立连接时,由于TCP属于全双工的工作方式,他把ACK与FIN分了俩次发。客户端发送FIN断开连接时,他先发送ACK应答,因为很有可能服务器还有数据没有发送完,只有等待数据发送完成了,服务器才发送FIN断开连接。

为什么TIME_WAIT状态要经过2MSL(最大报文生存时间)才能返回CLOSE状态?

TCP的可靠性会根据请求应答机制。四次挥手的时候,最后一条报文是否到达时不可靠的。主动关闭方发送的最后一个ACK可能会丢失,这时候被动方会重新发送一个新的FIN报文,如果主动方处于CLOSED状态,就会响应RST而不是ACK。所以主动方要处于TIME_WAIT状态。所以多等待2MSL是为了重新发送一个丢失了的ACK报文。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值