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

    三次握手:就像两个人打电话时,a给b先发一个消息,你听得到我在说话么,b回一个听得到,你听得到我说话没,a回一个,听得到,然后连接就建立了。
    这里写图片描述
    tcp六种标志位:SYN:置1,代表,建立连接
    ACK:确认标志位,置1,代表合法。
    FIN:连接断开标志位。
    PSH:传送标志位
    RST:重置标志位
    URG(urgent紧急)
    Sequence number(顺序号码)
    Acknowledge number(确认号码)

    三次握手的过程:
    1.客户端向服务器发送建立连接的请求,即发送SYN=1,和发送序号seq(生成的一个随机值),客户端进入SYN_SENT。
    2.服务器端接收到客户端的请求,发送确认标志位,ACK=1,SYN=1,顺序号码ack=seq+1,再随机生成一个seq.然后客户端接收到请求,返回给客户端一个确认标志位ACK=1,ack=seq+1,seq(随机生成的值)
    确认号:其数值等于发送方的发送序号 +1(即接收方期望接收的下一个序列号)。
    过程如图所示:

    三次握手的几种状态:
    Closed:初始状态
    SYN_SENT:client发送建立连接请求后。进入该状态。
    SYN_RCVD:server接收到client的建立连接请求,并发送SYN_ACK包,后进入该状态。
    established:客户端收到SYN_ACK包,并发送ACK包,后,server检查ack是否正确,正确,连接建立。二者可进行数据传输。

    四次挥手过程:描述连接的关闭过程。终止连接总共发送4个包。

    第一次挥手:没有数据的一方a给对手b发送一个FIN=1(连接关闭标志位),a进入FIN_WAIT_1状态。

    第二次挥手:b接收到该数据,并给a发送一个ACK=1的确认信息:就是你关闭连接的信息我b已经接收到了,但可能还有数据要发送,

    第三次挥手:b知道自己没有数据要发送了,给a发送一个FIN=1(关闭连接标志位)

    第四次挥手:a收到了b的FIN,再给b发送一个ACK=1的确认信息,将自己的状态设置为TIME_WAIT,在,a,b端均启动一个计时器,当b因为网络原因啥的,没有收到a的确认信息,就会再次请求,a发送确认信息。当a在计数器时间范围内没有收到b的再次请求发送确认信息,便会认为b已收到ACK,便关闭自己的连接。

    关于挥手过程几种状态的理解:
    FIN_WAIT_1:请求关闭连接的一方a,发送FIN=1,后,进入该状态。
    FIN_WAIT_2:收到请求信息的一方b,发送ACK确认信息后,b进入CLOSE_WAIT状态,a进入FIN_WAIT_2
    LAST_ACK:b发送完数据,给a发送FIN=1,其进入该状态
    TIME_WAIT:a收到FIN=1,并发送ACK=1,进入该状态。
    closed:连接关闭状态。

  • 相关阅读:
    二进制运算基础
    初识Tomcat系统架构
    MySQL InnoDB引擎锁的总结
    Java并发编程:并发容器之CopyOnWriteArrayList
    java类的加载机制
    Nginx实现tomcat集群进行负载均衡
    Java序列化对象为字符串并将字符串反序列化为对象
    数据库的四大特性及事务的隔离级别
    人性的弱点
    华为工作法摘抄笔记
  • 原文地址:https://www.cnblogs.com/wangxiaopei/p/8551252.html
Copyright © 2011-2022 走看看