• 四次挥手


    四次挥手,连接终止协议。其性质就是终止协议。指断开一个TCP连接时,需要客户端和服务端总共发4个包以确认连接的断开。

    TCP有6个标志位,分别是

    • SYN,同步序列编号(Synchronize Sequence Numbers)是TCP/IP建立连接时使用的握手信号。在客户端和服务端之间建立正常的TCP网络连接时,客户端首先会发出一个SYN消息,服务端使用SYN+ACK应答表示收到了这个消息。
    • ACK,(Acknowledge character,确认字符,表示收到的字符无错误,在TCP/IP协议中,如果接收方成功的接收到数据,就会回复一个ACK数据
    • PSH(push),当设置为1时,要求把数据尽快的交给应用层,不做处理
    • FIN(finish),是TCP报文的码位字段,当该位置为1的含义为发送方字节流结束,用于关闭连接。当两端交换带有FIN的TCP报文段且每一端都确认另一端发送的FIN包时,TCP连接将会关闭。
    • RST(reset),表示重置连接、复位连接。无论何时一个报文段发往基准的连接(目的IP地址和目的端口号以及源IP地址和源端口号指明的连接)出现错误,TCP都会发出一个复位报文段。
    • URG(urgent),URG标志设置为1时,紧急指针才有效,紧急方式是向对方发送紧急数据的一种方式,表示数据要优先处理。

      由于TCP连接是全双工的,每个方向都必须单独进行关闭,当A方完成发送任务后,发送一个FIN来终止A方的连接,B方收到一个FIN意味着B方不会再收到数据了,但是这个TCP连接仍能发送数据(即B方仍能发送数据给A方),直到B方也发送了一个FIN。首先进行关闭的一方执行主动关闭,另一方执行被动关闭。

      具体点的四次挥手描述如下,A端可以为客户端也可以为服务端

    • 第一次挥手:A端发送了一个FIM=M,用来关闭A端到B端的数据传送,A端将会进入FIN_WAIT_1状态。
    • 第二次挥手:B端收到FIN后,发送ACK=M+1给A端,这时A端进入FIN_WAIT_2状态,继续等待B端的FIN报文
    • 第三次挥手:当B端确认数据已经发送完毕,向A端发送FIN=N的报文,B端进入LAST_ACK状态
    • 第四次挥手:A端收到FIN=N报文后,发送ACK=N+1给B端,并进入TIME_WAIT状态。当B端收到ACK后就会断开连接,而A端等待2MSL后没有收到B端的回复,就会正常关闭连接。

    四次挥手可以如下图

    原博文链接https://www.jianshu.com/p/cd801d1b3147

  • 相关阅读:
    <input type='date'>传到后台怎么接收
    @Conditionnal注解和拦截器
    docker安装nginx
    vue npm run build报错 npm ERR! missing script: build
    阳哥讲面试题(七)Redis五种基本类型,分布式锁
    阳哥讲面试题(六)AOP,循环依赖
    mysql建表报错(this is incompatible with sql_mode=only_full_group_by)
    阳哥讲面试题(五)各种锁,LockSupport,AQS
    SSM_CRUD新手练习(2)配置文件
    Mysql逻辑分层、存储引擎
  • 原文地址:https://www.cnblogs.com/smallzhen/p/12656956.html
Copyright © 2020-2023  润新知