三次握手与四次挥手

 三次握手一般是客户端向服务器端发起通信请求,而四次挥手可以由客户端发起,也可以由服务器端发起断开链接。

SYN:同步序列编号(Synchronize Sequence Numbers)。是TCP/IP建立连接时使用的握手信号。

seq:序列号(sequence),接收方根据接收到的序列号是否有序来确定是否需要重传数据包。

ACK:确认值(Acknowledgement),为1便是确认连接。

ack:确认编号(Acknowledgement Number),即接收到的上一次远端主机传来的seq然后+1,再发送给远端主机。提示远端主机已经成功接收上一次所有数据,并发送给远端主机确认。

三次握手:

        由于tcp是可靠传输,为了防止失效的连接请求到达服务器,让服务器错误打开连接,所以需要三次握手而不是简单地通知服务器传输数据。

        第一次握手前:

        客户端与服务器端正常情况下是关闭的,当客户端想要向服务器端获取数据,比如充值时,打开客户端,准备第一次握手。

        第一次握手:

            客户端向服务器端发送一段TCP报文,然后进入SYN-SENT阶段。

        这个TCP报文是给服务器端发送一个请求(告诉服务器端我想充值)。主要包括SYN=1与seq=x(x是个随机数)。

        SYN=1:向服务器端发送一个握手信号

        seq=x:x是个要发送的数据包的序列号,可以验证发送的数据是否正确。

        第二次握手:

        服务器端接收到TCP报文后,打开服务器端口,发送一个TCP报文给客户端确认,然后进入SYN-RCVD状态。

        TCP报文是为了确认服务器端接收到的TCP是客户端发送的。(服务器端询问客户端是否想要充值)

        TCP报文中包含SYN:向客户端发送握手信号;ACK:是确认值,确认连接。ack是为了确认服务器端是否接收到正确的数据。seq是一个随机值。

        第三次握手:

        客户端明确了与服务器端之间发送的数据是正常的(即我知道 你知道 我想要充值了),结束SYN-SENT状态,发送TCP报文,进入ESTABLISHED状态

        三次握手后:

        服务器端接收到客户端的TCP报文,确认无误后开始进行数据传输。(服务器端发送充值界面给客户端)

        三次握手总图解:

四次挥手:

FIN:FIN=1就是发送给另一端一个请求断开连接的信号。

seq:序列号(sequence),接收方根据接收到的序列号是否有序来确定是否需要重传数据包。

ACK:确认值(Acknowledgement),为1便是确认连接。

ack:确认编号(Acknowledgement Number),即接收到的上一次远端主机传来的seq然后+1,再发送给远端主机。提示远端主机已经成功接收上一次所有数据,并发送给远端主机确认。

        作用:

        四次挥手发生在三次握手之后,可以由客户端发起也可以由服务器端发起,以下是由服务器端发起断开连接的展示。为了安全无误地断开双方连接,防止出现客户端接收完数据后还想获取数据,但服务器端已经关闭的情况。四次挥手需要两端都发起断开连接的请求,以及都接收到断开连接的请求。

        第一次挥手前:

        由于已经进行了三次握手,故客户端和服务器端都保持在ESTABLISHED状态。当服务器端发送完数据后,开始第一次挥手。

        第一次挥手:

        服务器端发送一个TCP报文给客户端,表达自己想要断开链接。然后服务器端进入 FIN_WAIT_1 状态。

        该TCP报文包括FIN=1、seq=x、ACK=1、ack=t。关于FIN_WAIT_1状态,服务器端在发送FIN后就进入FIN_WAIT_1状态,在接受到针对该FIN的ACK后进入FIN_WAIT_2状态。

        第二次挥手:

        客户端接收到TCP报文后发送一个TCP报文给服务器端确认,然后进入CLOSE_WAIT状态。服务器端接收并确认TCP报文后,进入FIN_WAIT_2 状态。

        该TCP报文包括ACK=1、seq=t+1、ack=x+1。FIN_WAIT_2状态表示该端口已经接收到一次确认,在等待第二次确认关闭链接。CLOSE_WAIT状态:在被动关闭连接情况下,已经接收到FIN,但还没有发送自己的FIN。

        第三次挥手:

        客户器端准备好释放链接后再次发送一个TCP报文给服务器端,再次确认要关闭链接,进入LAST_ACK状态。

        该TCP报文包括FIN=1、ACK=1、ack=x+1、seq=y。LAST_ACK状态表示该端口在等待关闭中,等到接收到另一个端口的确认后就会关闭链接。

        第四次挥手:

        服务器端确认TCP报文后发送最后一个TCP确认接收关闭链接。然后进入TIME_WAIT 状态等待2MSL的时间。

        该TCP包括ACK=1、seq=y、ack=x+2。TIME_WAIT状态:若在2MSL时间内没接收到来自另一端的FIN+ACK,就会关闭链接。否则,关闭失败,本次挥手结束。2MSL时间代表一个TCP报文在两个端口之间来回通信所需的最长时间。

        第四次挥手后:

        客户端接收到TCP报文后关闭链接,而服务器端等待时间结束后自动关闭链接。

         四次挥手总图解:

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值