首页 > 其他分享 >深度好文:TCP三次握手和四次挥手深入实践

深度好文:TCP三次握手和四次挥手深入实践

时间:2023-02-24 07:44:06浏览次数:43  
标签:挥手 握手 四次 TCP Server 好文 Client 连接

 

TCP连接状态

  图1是TCP三次握手、数据传输、四次挥手三个阶段的状态转移图,状态说明如下:

  1.  LISTEN:侦听来自客户端的TCP端口的连接请求
  2. SYN-SENT:再发送连接请求后等待匹配的连接请求(如果有大量这样的状态包,检查是否中招了)
  3. SYN-RCVD:再收到和发送一个连接请求后等待对方对连接请求的确认(如有大量此状态,估计被flood攻击了)
  4. ESTABLISHED:代表一个打开的连接
  5. FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认
  6. FIN-WAIT-2:从远程TCP等待连接中断请求
  7. CLOSE-WAIT:等待从本地用户发来的连接中断请求
  8. LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认(不是什么好东西,此项出现,检查是否被攻击)
  9. TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认
  10. CLOSED:没有任何连接状态,连接结束

 

 

 

 

本文通过实践例子模拟每个阶段的状态变化。

  

 

 图1 TCP连接状态转移图

 

 

 

 本文用tcpdump抓包分析TCP连接的交互过程,其中tcpdump Flags含义如下:

  1.  S=SYN 发起连接标志
  2. P=PUSH 传送数据标志
  3. F=FIN 关闭连接标志
  4. R=RESET 异常关闭连接,链接重置
  5. . 表示没有任何标志,表示返回ack

 为什么要三次握手?

 

  • 如果只有一次握手,Client不能确定与Server的单向连接,更加不能确定Server与Client的单向连接;

  • 如果只有两次握手,Client确定与Server的单向连接,但是Server不能确定与Client的单向连接;

  • 只有三次握手,Client与Server才能相互确认双向连接,实现双工数据传输。

 图2 TCP三次握手

 

 

 

 

为什么要四次挥手?

 “三次握手”的第二次握手发送SYN+ACK回应第一次握手的SYN,但是“四次挥手”的第二次挥手只能发送ACK回应第一次挥手的FIN,因为此时Server可能还有数据传输给Client,所以Server传输数据完成后才能发起第三次挥手发送FIN给Client,等待Client的第四次挥手ACK。

 图3 TCP四次挥手

 

 

 

 摘自:https://baijiahao.baidu.com/s?id=1708621911214426696&wfr=spider&for=pc

标签:挥手,握手,四次,TCP,Server,好文,Client,连接
From: https://www.cnblogs.com/sword0077/p/17150055.html

相关文章

  • 换个角度理解TCP建立连接为什么需要三次握手
    1、第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。2、换个易于理解的视角来看为什么要3次握手。客户端和服务端通信前要进行连接,“3次握手”的......
  • TCP和UDP的区别及使用场景
    一、TCP和UDP是什么?   TCP:   传输控制协议(TCP,TransmissionControlProtocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC793定义。   ......
  • nginx TCP代理增加日志配置
    在straem增加一下配置stream{log_formatTCP_proxy'$remote_addr-[$time_local]''$protocol$status$bytes_sent$bytes_received''......
  • TCP 三次握手四次挥手具体原理——转载
    【TCP/IP】TCP协议的流程图解  一、TCP协议起步#1.什么是TCP协议#TCP是面向连接的协议,这是因为在一个应用进程可以开始向另一个应用进程发送数据之前,这两个进程必......
  • IDEA - MySql / Spring mvc : Exception in thread "RMI TCP Connection(idle)" java.
    运行Intellijidea时output窗口出现该问题:Exceptioninthread“RMITCPConnection(idle)”java.lang.OutOfMemoryError:PermGenspace导致有些功能不能继续执行。运行......
  • 套接字连接以及TCP三次握手详解
    在套接字和地址文章中,我们画出基于套接字接口网络应用的一张图,本文章就是详细解释这些函数具体怎么实现的。socket创建套接字客户端和服务器使用socket函数来创建一个套......
  • tcp的粘包现象
    粘包现象只出现在tcp协议中多条消息之间没有边界,并且还有一大堆优化算法发送端:两条消息很短并且发送的间隔很短接收端:接收消息不及时解决粘包问题的本......
  • tcpdump用法
    超详细的网络抓包神器tcpdump使用指南https://juejin.cn/post/68449040841687695491.基本语法和使用方法tcpdump的常用参数如下:$tcpdump-ieth0-nn-s0-vport80-......
  • TCP与UDP简述
    什么是TCPTCP(TransmissionControlProtocol传输控制协议)是一种面向连接的,可靠的,基于字节流的传输通信协议。1、tcp(TransmissionControlProtocol传输控制协议)2、传......
  • Modbus TCP / BACnet IP 网关BMT-370
    基本说明:BMT-370是BACnetIP从站协议与ModbusTCP主站协议转换的通信网关,可以实现BACnetIP主站与多个ModbusTCP从站之间的数据通信。同时该网关的以太网端支持双以太网......