zoukankan      html  css  js  c++  java
  • http协议之三次握手 四次挥手

    三次握手:(只能由客户端发起)
        第一次:客户端向服务器发送syn包 请求建立链接  序号 seq = x
        第二次:服务器接到客户端的请求,向客户端发送syn_ack包 告知客户端 允许建立链接 返回序号 ack = seq + 1 = x+1
        第三次:客户端收到服务器端返回的syn_ack包 向服务器发送一个序列号 确认收到服务器的通知  序号:seq = x+1 返回ack = sql + 1

        客户端开始向服务器发送数据

        为什么需要三次握手:
            是为了防止在第二次握手时 服务器向客户端发送syn_ack包的时候 数据发生丢失的现象 如果我们只握手两次的话 服务器无法得知客户端是否已经接收到允许建立链接的通知  在第二次握手后 如果发生数据丢失 客户端将无法收到服务器端的回信 在等待一定时间后,客户端会默认第一次链接失败 会再次发起链接。如果没有第三次握手的话 服务器也是无法确认客户端是否已经正常链接到服务器 所以第一次的链接请求依旧会被服务器保留 这样就可能造成服务器连接资源浪费 因此需要三次握手

    四次挥手:
        客户端数据传输/接收结束(挥手的动作 客户端和服务器端都可以发起,此仅以客户端为例)
        第一次:客户端向服务器返送fin 告诉服务器这边已经发送或接受完数据 需要断开链接
        第二次:服务器收到客户端发送的断开链接请求 向客户端返回一个syn+ack包 告诉客户端服务器同意断开链接
        第三次:服务器向客户端发送fin 告诉客户端 服务器即将断开和客户端的链接
        第四次:客户端在收到服务器的fin信息后 会向服务器发送一个ack包 告知服务器客户端同意断开链接

        发送完成后 等待大约2MSL的时间 以便客户端或服务器可以正常接收最后一次的ack包的发送
        断开链接的动作 由谁发起的 谁先断开
        1MSL:指的是ack包的最大存活时间

        为什么需要四次挥手:
            断开链接的动作 是需要链接双方同意的,故在客户端发送一个FIN 告知服务器端客户端将要断开双方链接的时候,服务器会返回给客户端一个ack包 作为确认信息,同样在服务器端断开连接时 也需要重复上述动作




  • 相关阅读:
    Redis 的安装
    oracle表分区
    HashMap、HashTable、LinkedHashMap和TreeMap用法和区别
    HashMap和LinkedHashMap区别
    SpringMVC MultiActionController 默认方法名解析器
    静态资源无法访问问题
    JMeter-简单控制器
    JMeter-随机顺序控制器
    JMeter-随机控制器
    JMeter-交替控制器
  • 原文地址:https://www.cnblogs.com/lovecatcher/p/12803164.html
Copyright © 2011-2022 走看看