zoukankan      html  css  js  c++  java
  • TCP三次握手与四次挥手

    最近在了解web服务器方面的一些基本知识,看到了TCP的三次握手与四次挥手,在此记录以下。

    1. TCP协议

    TCP协议,传输控制协议(英语:Transmission Control Protocol,缩写为 TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。

    TCP通信需要经过创建连接、数据传送、终止连接三个步骤。

    2. 三次握手与四次挥手

    三次握手发生在创建连接阶段。客户端和服务器总共需要发送三个包。

    第一次握手:客户端发送连接请求

    第二次握手:服务器端选择自己 ISN 序列号,放到 Seq 域里,并将客户端的ISN加1发送确认应答。

    第三次握手:客户端把服务器发来的ISN加1,发送确认包。


     四次挥手发生在终止连接阶段。客户端或服务器均可主动发起挥手动作,在 socket 编程中,任何一方执行 close() 操作即可产生挥手操作。

    第一次挥手:假如客户端想关闭连接,发送FIN标志为1的包,表明自己不再发送数据,但还可以接收数据。

    第二次挥手:服务器发送一个确认包,确认收到了客户端的终止请求。发送完确认包后,服务器进入等待状态,等待自己的数据发送完,客户端也进入等待状态,等待服务器发送关闭信号。

    第三次挥手:服务器准备关闭连接,向客户端发送FIN标志为1的包,然后进入LAST-ACK状态,等待客户端的确认。

    第四次挥手:客户端接收到服务器的关闭请求,发送确认包,然后进入等待状态,等待服务器可能发送的要求重传ACK包。服务器接收到确认包后就关闭连接,如果没有接收到,一段时间后就会重新发送关闭连接。客户端等待了某个固定时间(两个最大段生命周期,2MSL,2 Maximum Segment Lifetime)之后,没有收到服务器端的 ACK ,认为服务器端已经正常关闭连接,于是自己也关闭连接

    3. 为什么连接需要三次关闭需要四次

    因为连接时只需要互相确认,没有数据传送,所以服务器端的发送和确认可以合并为一次;结束时服务器端可能还在传送数据,不能直接发送关闭信号,需要等待服务器发送完数据,才发送关闭信号。

    参考链接:

    [1] https://hit-alibaba.github.io/interview/basic/network/TCP.html

  • 相关阅读:
    JavaScript坑
    maven学习
    JAVA多线程和并发基础面试问答(转)
    Redis与Memcached的区别(一)
    poi生成execl综合
    POI操作Excel常用方法总结(转)
    java中在创建对象时候的初始化顺序
    [Java Web]敏感词过滤算法
    orcle导入导出
    js动态时间
  • 原文地址:https://www.cnblogs.com/yunxiaofei/p/11223294.html
Copyright © 2011-2022 走看看