美文网首页IT@程序员猿媛程序员Java架构技术栈
阿里面试题解析:TCP的三次握手四次挥手

阿里面试题解析:TCP的三次握手四次挥手

作者: 若丨寒 | 来源:发表于2019-04-06 20:26 被阅读5次

    TCP(Transmission Control Protocol 传输控制协议)协议的作用是为了确保数据传输的可靠性;为了更容易传送大数据,使用了字节流服务(Byte Stream Service)将大块数据分割成报文段(segment)为单位的数据包进行管理和传输;而且TCP协议能够确认数据最终是否送达到对方。

    为了准确无误的将数据送达目标处,TCP采用了三次握手(three-way handshaking)的策略。用TCP协议把数据包送出去后,TCP会向对方确认数据是否成功送达。握手过程中使用了TCP的标志(flag)——SYN(synchronize)和ACK(acknowledgement)。

    三次握手步骤:

    • 服务器B处于LISTEN(监听)状态,等待来自客户机A的连接请求。
    • 客户机A向服务器B发送连接请求报文SYN。
    • 服务器B收到客户机A发来的请求报文SYN,如果同意建立连接,则向客户机A连接确认报文SYN ACK。
    • 客户机A收到连接确认报文SYN ACK后,还要向服务器B发出确认报文ACK。
    • 服务器B收到确认报文ACK后,连接建立完成。

    若在握手过程中某个阶段莫名中断,TCP协议会再次以相同的顺序发送相同的数据包。

    四次挥手:

    FIN:FINISH

    MSL:Maximum Segment Lifetime(报文最大生存时间):他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。

    TIME-WAIT

    客户端收到服务器端的FIN连接释放报文后进入此状态,而不是直接进入CLOSED状态,还需要等待一个时间计时器设置的时间2MSL;这么做的理由有两个:

    1. 确保最后一个确认报文ACK能够达到。如果服务器端没有收到客户端发来的确认报文ACK那么久需要从新发送连接释放请求报文FIN,客户端等待一段时间就是为了处理这种情况的发送。
    2. 等待一段时间是为了让本次连接持续时间内产生的所有报文都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文SYN,从而错误打开连接。

    四次挥手的过程:

    • 客户机A发送连接释放报文FIN。
    • 服务器B收到FIN之后发出确认ACK,此时TCP属于半关闭状态,服务器B能想客户机A发送数据但是客户机A不能向服务器B发送数据。
    • 当服务器B不在需要连接时,发送连接释放报文FIN。
    • 客户机A收到FIN后发出确认ACK,进入TIME-WAIT状态,等待2倍的MSL(最大报文存活时间)后释放连接。
    • 服务器B收到ACK后释放连接。

    四次挥手的原因:

    客户端发送了FIN连接释放报文之后,服务器端收到了这个报文,就进入了CLOSE-WAIT状态。这个状态是为了让服务器端发送还未完毕的数据,传送完毕之后,服务器端会发送FIN连接释放报文。

    相关文章

      网友评论

        本文标题:阿里面试题解析:TCP的三次握手四次挥手

        本文链接:https://www.haomeiwen.com/subject/ztrdiqtx.html