1.为什么TCP要经过三次握手,四次挥手?

1.重要标志位

ACK: TCP协议规定,只有ACK=1时有效,连接建立之后所有报文中ACK必须等于1;

SYN:在连接建立时用来同步序号,当SYN=1,ACK=0时,说明这是一个连接请求报文。如果服务器同意连接,那么返回的响应报文中SYN=1,ACK=1。因此如果SYN=1,就说明这是一个连接请求报文或者连接接受报文。

FIN: 终结。当FIN=1时,说明服务器没有需要发送回来的数据了。要求释放连接。

2.三次握手,四次挥手的过程:

1.三次握手:

1.建立连接。客户端发送连接请求报文,syn=1,seq(序列号)=x,之后客户端进入SYN-SEND状态,等待服务器确认。

2.服务器接收到请求报文之后,会对SYN进行确认,然后设置SYN=1, ACK=1,ack=x+1,seq=y发送报文,之后服务器进入SYN-RECV状态。

3.客户端接收到SYN+ACK报文段,向服务器发送ACK(ack=y+1)包,发送完毕,就连接成功了,完成三次握手。

2.四次挥手

1.客户端向服务器发送seq=u,fin=1报文,请求释放连接,说明客户端没有数据要发送给服务器了。之后客户端进入FIN_WAIT_1状态。

2.服务器收到客户端报文之后,返回ack=u+1,seq=w报文,表示同意关闭连接,之后服务器进入CLOSE_WAIT状态。

3.客户端接收到消息后,进入FIN_WAIT_2状态。之后服务器会发送fin=1,ack=u+1,seq=y报文,向客户端请求关闭连接。然后服务器进入LAST_ACK最后确认状态。

4.客户端收到消息后,就发送ack=y+1,seq=u+1报文,之后进入TIME_WAIT状态,并等待2msl,服务器收到确认消息立马关闭。2msl后客户端还是没有收到消息,说明服务器已经正常关闭,自然自己也立马关闭了。

“三次握手”:确保服务器可以收到请求,并作出正确应答。(第一次和第二次握手)。确保客户端可以收到信息,并作出正确应答。(第二次和第三次握手)。

“四次挥手”:因为TCP是全双工模式。收到FIN说明不会再有数据发过来,但是还是可以把数据发过去。

3.为什么握手是三次,而挥手是四次?

因为建立连接的时候,服务器收到请求之后,可以把SYN和ACK报文一起发送给客户端。但是断开连接时,服务器接收到请求后,不会马上返回FIN,而是先发送一个ACK,告诉客户端,我同意了。但是我要先处理完事情,才会发送FIN。

 

参考文章:https://juejin.im/post/5e5b50eb6fb9a07cae136773#heading-31

                  https://www.cnblogs.com/jainszhang/p/10641728.html

                  https://blog.csdn.net/a1985831055/article/details/93206431

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值