• 详解TCP的三次握手和四次挥手


    一、题目描述

    谈谈你对TCP三次握手和四次挥手的理解。

    分析:

    关于TCP的三次握手和四次挥手,已经被面试官问烂了。然而,并不是所有人都能很好地回答这个问题,尤其是一些细节上的点,很容易被忽略。

    三次握手:

    这张图展示了建立TCP连接所需的三次握手过程。

    首先需要明确,三次握手的目的是建立可靠的通信信道,即双方确认彼此的信息发送与接收是正常的。

    其次需要明确,客户端与服务器的身份并不是固定的,在某些情况下的客户端,在另外的情况下可能会承担服务器的角色。

    下面我们依次来看三次握手的过程和目的。

    第一次握手:客户端向服务端发送SYN。此时客户端什么都不能确认;服务端确认对方发送正常,自己接收正常。

     

    第二次握手:服务端向客户端发送SYN/ACK。此时客户端确认自己发送、接收正常,对方发送、接收正常;服务端确认对方发送正常,自己接收正常。

     

    第三次握手:客户端向服务端发送ACK。此时客户端确认自己发送、接收正常,对方发送、接收正常;服务端确认自己发送、接收正常,对方发送、接收正常。

    综上所述,当且仅当三次握手之后,双方都能够确认收发功能正常。

    四次挥手:

    这张图展示了断开TCP连接所需的四次挥手过程。

    下面我们依次来看四次挥手的过程和目的。

     

    第一次挥手:客户端向服务端发送FIN。用来关闭客户端到服务器的数据传送。

     

    第二次挥手:服务器向客户端发送ACK。表示服务端收到了客户端的连接释放通知。

     

    第三次挥手:服务器向客户端发送FIN。用来关闭与客户端的数据传送。

     

    第四次挥手:客户端向服务端发送ACK。表示客户端收到了服务端的连接释放通知。

    同样,这里所说的客户端和服务器并不是一个固定的概念。事实上,建立TCP连接的任何一方都可以在数据传送结束后发出连接释放通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。

    另外,值得注意的是,在第四次挥手之后,客户端并非立马进入关闭状态,而是会进入TIME-WAIT状态,在等待2MSL时间后,才会进入关闭状态。这样做的原因主要有以下两点:

    第一,防止客户端发送的最后一个ACK报文丢失而引起服务端不能正常关闭。

    第二,防止已经失效的连接请求报文段对新连接造成影响。

  • 相关阅读:
    C语言学习11(循环结构:for语句)
    C语言学习9(循环结构:while语句)
    C语言学习8(选择结构的嵌套)
    C语言学习笔记2
    C语言学习笔记1
    C语言的学习5(数据的输出)
    C语言学习12(函数的定义)
    第二十一章流 14临时文件 简单
    第二十一章流 12输出数据到文件指定位置处seekp() 简单
    第二十一章流 11指定读取文件中的数据seekg() 简单
  • 原文地址:https://www.cnblogs.com/Magic_liao/p/13128600.html
Copyright © 2020-2023  润新知