• 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包 作为确认信息,同样在服务器端断开连接时 也需要重复上述动作




  • 相关阅读:
    为什么很多程序员都选择跳槽?
    程序员牛人跳槽
    批处理学习教程
    linux操作命令
    apache配置访问限制
    不常见使用的css
    input中的内容改变时触发的事件
    order by 特殊排序技巧
    CSS设置input placeholder文本的样式
    GoodUI:页面布局的技巧和设计理念
  • 原文地址:https://www.cnblogs.com/lovecatcher/p/12803164.html
Copyright © 2020-2023  润新知