zoukankan      html  css  js  c++  java
  • 学习:TCP/UDP协议分析(TCP四次挥手)

    根据:https://www.cnblogs.com/zpchcbd/p/12291007.html,大家都可以大致了解了,那么直接可以讲了

    有关TCP标志位 flags:

    SYN(synchronous建立联机) 
    
    ACK(acknowledgement 确认) 
    
    PSH(push传送) 
    
    FIN(finish结束) 
    
    RST(reset重置) 
    
    URG(urgent紧急)
    
    Sequence number(顺序号码) 
    
    Acknowledge number(确认号码)
    

    大家要先知道TCP连接双向的,在四次挥手中,前两次挥手用于断开一方方向的连接,后两次挥手用于断开另一方的方向的连接。

    注意的是:谁先断不一定,比如HTTP请求中,若connection 模式为CLOSE,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求。

    第一次挥手: 客户端先发送一个带有FIN(结束标志位)以及随机Sequence number的数据包,然后客户端会进入FIN-WAIT-1状态

    第二次挥手: 服务端收到后,返回一个带有ACK(确认标志位)的数据包,其中Acknowledge number为第一次挥手数据包的SEQ+1和再次随机的Sequence number,服务端会进入CLOSE-WAIT(关闭等待)状态客户端收到该应答后,进入FIN-WAIT-2状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。

    注意:第二次挥手完成后,客户端到服务端方向的连接已经释放,但服务端到客户端方向的连接仍然存在,服务器若发送数据,客户端依然要接受

    第三次挥手: 所以此时服务端继续发送一个数据包为ACK确认标志位FIN结束标志位Acknowledge number为第一次挥手数据包的SEQ+1,再次随机的Sequence number给客户端,服务端就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

    第四次挥手: 客户端收到服务端的结束数据包之后,向服务器发送一个应答包ACK确认标志位Sequence number为第三次挥手的Acknowledge number、当前的Acknowledge number为第三次握手的SEQ+ 1,客户端就进入了TIME-WAIT(时间等待)状态,这个期间TCP连接还未释放,若该时间段内没有服务端的重发请求的话,客户端就进入CLOSED状态,服务端只要收到了客户端发出的确认,立即进入CLOSED状态

    这里也可以看出服务端比客户端早结束通信过程,但并不是一定!

    参考文章:https://www.jianshu.com/p/ca64764e4a26

  • 相关阅读:
    第一阶段冲刺05
    生成器
    三元表达式 ,列表推导式 , 字典生成式
    装饰器
    闭包函数
    函数的定义和参数
    列表内置方法
    字符串的内置方法
    py_11_ 0731
    py_11_ 0730
  • 原文地址:https://www.cnblogs.com/zpchcbd/p/12291391.html
Copyright © 2011-2022 走看看