• 三次握手《《=====》》四次握手


    1、第一次握手:客户端给服务器发送一个 SYN 报文。

    2、第二次握手:服务器收到 SYN 报文之后,会应答一个 SYN+ACK 报文。

    3、第三次握手:客户端收到 SYN+ACK 报文之后,会回应一个 ACK 报文。

    4、服务器收到 ACK 报文之后,三次握手建立完成

    ============》作用是为了确认双方的接收与发送能力是否正常。

    第一次握手:客户端发送网络包,服务端收到了。这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。

    第二次握手:服务端发包,客户端收到了。这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常。

    第三次握手:客户端发包,服务端收到了。这样服务端就能得出结论:客户端的接收、发送能力正常,服务器自己的发送、接收能力也正常。

    详细描述:

    刚开始客户端处于 closed 的状态,服务端处于 listen 状态

    1、第一次握手:客户端给服务端发一个 SYN 报文,并指明客户端的初始化序列号 ISN(c)。此时客户端处于 SYN_Send 状态。

    2、第二次握手:服务器收到客户端的 SYN 报文之后,会以自己的 SYN 报文作为应答,并且也是指定了自己的初始化序列号 ISN(s),同时会把客户端的 ISN + 1 作为 ACK 的值,表示自己已经收到了客户端的 SYN,此时服务器处于 SYN_REVD 的状态。

    3、第三次握手:客户端收到 SYN 报文之后,会发送一个 ACK 报文,当然,也是一样把服务器的 ISN + 1 作为 ACK 的值,表示已经收到了服务端的 SYN 报文,此时客户端处于 establised 状态。

    4、服务器收到 ACK 报文之后,也处于 establised 状态,此时,双方以建立起了链接。

     三次握手的作用

    1、确认双方的接受能力、发送能力是否正常。

    2、指定自己的初始化序列号,为后面的可靠传送做准备。

    3、如果是 https 协议的话,三次握手这个过程,还会进行数字证书的验证以及加密密钥的生成到。

    《================================================================================》

    四次挥手

    刚开始双方都处于 establised 状态,假如是客户端先发起关闭请求,则:

    1、第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于CLOSED_WAIT1状态。

    2、第二次握手:服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序列号值 + 1 作为 ACK 报文的序列号值,表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT2状态。

    3、第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号。此时服务端处于 LAST_ACK 的状态。

    4、第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 + 1 作为自己 ACK 报文的序列号值,此时客户端处于 TIME_WAIT 状态。需要过一阵子以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态

    5、服务端收到 ACK 报文之后,就处于关闭连接了,处于 CLOSED 状态。

    注(这里特别需要主要的就是TIME_WAIT这个状态了,这个是面试的高频考点,就是要理解,为什么客户端发送 ACK 之后不直接关闭,而是要等一阵子才关闭。这其中的原因就是,要确保服务器是否已经收到了我们的 ACK 报文,如果没有收到的话,服务器会重新发 FIN 报文给客户端,客户端再次收到 FIN 报文之后,就知道之前的 ACK 报文丢失了,然后再次发送 ACK 报文。===========》TIME_WAIT 持续的时间至少是一个报文的来回时间。一般会设置一个计时,如果过了这个计时没有再次收到 FIN 报文,则代表对方成功就是 ACK 报文,此时处于 CLOSED 状态

    每个状态所包含的含义

    LISTEN - 侦听来自远方TCP端口的连接请求;

    SYN-SENT -在发送连接请求后等待匹配的连接请求;

    SYN-RECEIVED - 在收到和发送一个连接请求后等待对连接请求的确认;

    ESTABLISHED- 代表一个打开的连接,数据可以传送给用户;

    FIN-WAIT-1 - 等待远程TCP的连接中断请求,或先前的连接中断请求的确认;

    FIN-WAIT-2 - 从远程TCP等待连接中断请求;

    CLOSE-WAIT - 等待从本地用户发来的连接中断请求;

    CLOSING -等待远程TCP对连接中断的确认;

    LAST-ACK - 等待原来发向远程TCP的连接中断请求的确认;

    TIME-WAIT -等待足够的时间以确保远程TCP接收到连接中断请求的确认;

    CLOSED - 没有任何连接状态;

  • 相关阅读:
    【k8s】livenessProbe-exec
    【Kubernetes】结束前执行-HTTPGET
    【Kubernetes】启动后执行-HTTPGET
    【Kubernetes】结束前执行-exec
    【Kubernetes】启动后执行-exec
    【Kubernetes】镜像拉取策略-Never
    JavaWeb 之 备用
    JavaWeb 之 备用
    JavaWeb 之 Session
    JavaWeb 之 Cookie
  • 原文地址:https://www.cnblogs.com/KL2016/p/14553732.html
Copyright © 2020-2023  润新知