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


     

     

    建立TCP连接

    我们知道了TCP/IP协议簇大致的工作原理之后,我们来看看HTTP是如何建立连接的。

    1.TCP包头信息

    前面咱们讲过HTTP是一个基于TCP/IP协议簇来传递数据,所以这HTTP建立连接也就是建立TCP连接,TCP如何建立连接,一起来看看TCP包信息结构吧。



    TCP报文包=TCP头信息+TCP数据体,而在TCP头信息中包含了6种控制位(上图红色框中),这六种标志位就代表着TCP连接的状态:

      1. URG:

        紧急数据(urgent data)—-这是一条紧急信息

      2. ACK:

        确认已收到

      3. PSH:

        提示接收端应用程序应该立即从tcp接收缓冲区中读走数据

      4. RST:

        表示要求对方重新建立连接

      5. SYN:

        表示请求建立一个连接

      6. FIN:

        表示通知对方本端要关闭连接

    2.建立连接过程

    了解了TCP包头信息之后,我们就可以正式看看TCP建立连接的三次握手了。

    三次握手讲解:

    1. 客户端发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,服务器由SYN=1知道客户端要求建立联机(客户端:

      我要连接你)

    2. 服务器收到请求后要确认联机信息,向A发送ack number=(客户端的seq+1),syn=1,ack=1,随机产生seq=7654321的包(服务器:

      好的,你来连吧)

    3. 客户端收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,客户端会再发送ack number=(服务器的seq+1),ack=1,服务器收到后确认seq值与ack=1则连接建立成功。

      (客户端:

      好的,我来了)

    面试官:为什么http建立连接需要三次握手,不是两次或四次
    答:三次是最少的安全次数,两次不安全,四次浪费资源

    3.断开连接过程

    在建立TCP连接时是三次握手,而断开TCP连接是四次挥手!

    TCP关闭连接过程:

    1.Client向Server发送FIN包,表示Client主动要关闭连接,然后进入FIN_WAIT_1状态,等待Server返回ACK包。此后Client不能再向Server发送数据,但能读取数据。

    2.Server收到FIN包后向Client发送ACK包,然后进入CLOSE_WAIT状态,此后Server不能再读取数据,但可以继续向Client发送数据。

    3.Client收到Server返回的ACK包后进入FIN_WAIT_2状态,等待Server发送FIN包。

    4.Server完成数据的发送后,将FIN包发送给Client,然后进入LAST_ACK状态,等待Client返回ACK包,此后Server既不能读取数据,也不能发送数据。

    5.Client收到FIN包后向Server发送ACK包,然后进入TIME_WAIT状态,接着等待足够长的时间(2MSL)以确保Server接收到ACK包,最后回到CLOSED状态,释放网络资源。

    6.Server收到Client返回的ACK包后便回到CLOSED状态,释放网络资源。

  • 相关阅读:
    Linux系统目录结构介绍
    【Android开发学习笔记】【第二课】Activity学习
    【Android开发学习笔记】【第一课】初识New Project,工程文件介绍
    Android 环境快速搭建-详细步骤-win7-64bit
    【VC6】【集成工具】将输入信息集成到VC工具中
    Intellij IDEA快捷键
    C#+Winform开发窗体程序
    使用U盘重装系统
    C#进阶学习笔记
    C#基础学习笔记
  • 原文地址:https://www.cnblogs.com/hupingzhi/p/11214468.html
Copyright © 2020-2023  润新知