TCP的三次握手与四次断开(挥手)问题

目录

一.TCP的三次握手与四次挥手的实质

二.一些术语的描述

三.三次握手

                  1.第一次握手

2.第二次握手

3.第三次握手

四.可以只进行两次握手吗?

五.四次挥手

1.第一次挥手

2.第二次挥手

3.第三次挥手

4.第四次挥手


一.TCP的三次握手与四次挥手的实质

        TCP的三次握手与四次挥手就是客户端与服务端通信连接与断开的过程。

二.一些术语的描述

SYN表示同步位   SYN=1表示一个连接请求

ACK表示确认位   ACK=1表示确认有效   ACK=0表示确认无效

ack表示确认号     ack=对方发送的序号+1

seq表示序号        为随机值

FIN=1表示请求断开连接  并且不再发送数据

本文将采用图文结合的方式为大家进行解释

三.三次握手

1.第一次握手

        首先,客户端会向服务端发送一个SYN报文,将SYN置为1表示想要建立连接。并会附带上自己的序号,这里的X为随机值

2.第二次握手

        当服务器收到客户端的请求后,为了告诉客户端自己收到了请求,便会也将自己的SYN置为1并把ACK置为1发送给客户端,表示同步确认有效。并附带上自己的序号以及确认号,这里的Y也是随机值。

3.第三次握手

        当客户端收到了服务器同意建立连接后,为了告诉服务器我收到了你的确认,也会发一个ACK报文,此时的序列号为上一次客户端发送的序列号+1,ack=服务端序列号+1.

四.可以只进行两次握手吗?

        假设采用两次握手建立连接,客户端向服务端发了一个SYN包来请求建立连接,可能因为一些原因并没有到达服务器,比如在某个网络节点产生了滞留。客户端为了建立连接会再次发送SYN包,此包顺利到达服务端后,服务端回复SYN+ACK包。两端开始建立连接,此时之前被滞留的SYN包回复了连接,再次发给服务端,此时服务端会误认为客户端发起了一个新的连接,这会造成两端的状态不一致。客户端会认为自己建立了一次连接,服务端认为自己收到了两次连接请求。会导致旧的重复连接初始化造成混乱。

五.四次挥手

        

1.第一次挥手

        客户端发送一个FIN报文给服务端,表示请求断开连接,此时客户端会停止发送数据(FIN=1,seq=a)a为随机生成

2.第二次挥手

        服务端收到FIN后,发送ACK报文表示收到客户端的请求,此时处于半关闭状态,服务端仍可以发送未发送完的数据(ACK=1,seq=b,ack=客户端序号+1)b随机生成

3.第三次挥手

        服务端发送完数据后,发出FIN=1,ACK=1表示数据已经发送完毕,确认关闭连接,等待客户端确认。(FIN=1,ACK=1,seq=c,ack=a+1)c随机生成

4.第四次挥手

        客户端收到FIN后,发送ACK=1表示确认请求,客户端会进入TIME_WAIT状态,经过一段时间确保服务器收到自己的确认后,进入CLOSED状态。服务器收到最后的ACK报文后,也进入CLOSED状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值