首页 > 其他分享 >简述 TCP三次握手和四次挥手

简述 TCP三次握手和四次挥手

时间:2024-05-14 23:31:54浏览次数:25  
标签:报文 四次 TCP Server 简述 Client FIN 连接

TCP首部的网络传输起到的作用:


  • TCP的标志位
    每个TCP段都有一个目的,这是借助于TCP标志位选项来确定的,允许发送方或接收方指定哪些标志应该被使用,以便段被另一端正确处理。用的最广泛的标志是 SYN,ACK 和 FIN,用于建立连接,确认成功的段传输,最后终止连接。
    1. SYN:简写为S,同步标志位,用于建立会话连接,同步序列号;
    2. ACK: 简写为.,确认标志位,对已接收的数据包进行确认;
    3. FIN: 简写为F,完成标志位,表示我已经没有数据要发送了,即将关闭连接;

TCP 三次握手建立连接
所谓三次握手(Three-way Handshake),是指建立一个 TCP 连接时,需要客户端和服务器总共发送3个报文。

三次握手的目的是连接服务器指定端口,建立 TCP 连接,并同步连接双方的序列号和确认号,交换 TCP 窗口大小信息。在 socket 编程中,客户端执行 connect() 时。将触发三次握手。

三次握手过程的示意图如下:

 

 

TCP 四次挥手关闭连接
四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发。
由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。

四次挥手过程的示意图如下:

 

 

 

挥手请求可以是Client端,也可以是Server端发起的,我们假设是Client端发起:

  • 第一次挥手: Client端发起挥手请求,向Server端发送标志位是FIN报文段,设置序列号seq,此时,Client端进入FIN_WAIT_1状态,这表示Client端没有数据要发送给Server端了。
  • 第二次分手:Server端收到了Client端发送的FIN报文段,向Client端返回一个标志位是ACK的报文段,ack设为seq加1,Client端进入FIN_WAIT_2状态,Server端告诉Client端,我确认并同意你的关闭请求。
  • 第三次分手: Server端向Client端发送标志位是FIN的报文段,请求关闭连接,同时Client端进入LAST_ACK状态。
  • 第四次分手 : Client端收到Server端发送的FIN报文段,向Server端发送标志位是ACK的报文段,然后Client端进入TIME_WAIT状态。Server端收到Client端的ACK报文段以后,就关闭连接。此时,Client端等待2MSL的时间后依然没有收到回复,则证明Server端已正常关闭,那好,Client端也可以关闭连接了。

为什么连接的时候是三次握手,关闭的时候却是四次握手?

建立连接时因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。所以建立连接只需要三次握手。

由于TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议,TCP是全双工模式。
这就意味着,关闭连接时,当Client端发出FIN报文段时,只是表示Client端告诉Server端数据已经发送完毕了。当Server端收到FIN报文并返回ACK报文段,表示它已经知道Client端没有数据发送了,但是Server端还是可以发送数据到Client端的,所以Server很可能并不会立即关闭SOCKET,直到Server端把数据也发送完毕。
当Server端也发送了FIN报文段时,这个时候就表示Server端也没有数据要发送了,就会告诉Client端,我也没有数据要发送了,之后彼此就会愉快的中断这次TCP连接。

为什么要等待2MSL?
MSL:报文段最大生存时间,它是任何报文段被丢弃前在网络内的最长时间。
有以下两个原因:

    • 第一点:保证TCP协议的全双工连接能够可靠关闭:
      由于IP协议的不可靠性或者是其它网络原因,导致了Server端没有收到Client端的ACK报文,那么Server端就会在超时之后重新发送FIN,如果此时Client端的连接已经关闭处于CLOESD状态,那么重发的FIN就找不到对应的连接了,从而导致连接错乱,所以,Client端发送完最后的ACK不能直接进入CLOSED状态,而要保持TIME_WAIT,当再次收到FIN的收,能够保证对方收到ACK,最后正确关闭连接。
    • 第二点:保证这次连接的重复数据段从网络中消失
      如果Client端发送最后的ACK直接进入CLOSED状态,然后又再向Server端发起一个新连接,这时不能保证新连接的与刚关闭的连接的端口号是不同的,也就是新连接和老连接的端口号可能一样了,那么就可能出现问题:如果前一次的连接某些数据滞留在网络中,这些延迟数据在建立新连接后到达Client端,由于新老连接的端口号和IP都一样,TCP协议就认为延迟数据是属于新连接的,新连接就会接收到脏数据,这样就会导致数据包混乱。所以TCP连接需要在TIME_WAIT状态等待2倍MSL,才能保证本次连接的所有数据在网络中消失。

 

 摘自网络,学习留存

 

标签:报文,四次,TCP,Server,简述,Client,FIN,连接
From: https://www.cnblogs.com/dczs/p/18192495

相关文章

  • 第四次Scrum Meeting
    这个作业属于哪个课程软件工程2024这个作业的要求是什么团队作业4——项目冲刺这个作业的目标完成第四篇Scrum冲刺博客第四天会议记录昨天已完成的任务实现“十三超声波在空气传播的测定”的前端页面实现“十三超声波在空气传播的测定”的后端接口收......
  • TCP/UDP
    说明:TCP(TransmissionControlProtocol,传输控制协议)和UDP(UserDatagramProtocol,用户数据报协议)是Internet协议套件中的两个主要传输层协议,它们负责在网络中端到端间的数据传输。以下是关于TCP和UDP的详细说明:1.TCPTCP(传输控制协议)特点:面向连接:在数据传输前,TCP需要通过三......
  • 2 用电信号传输TCP/IP数据
    目录1创建套接字2连接服务器3收发数据1创建套接字浏览器、邮件等一般应用程序收发数据时用TCP;DNS查询等收发较短的控制数据时用UDP网络包:网络中的数据会被切分成几十字节到几千字节的小块,每一个小数据块被称为一个包IP中还包括ICMPA协议和ARPB协议。ICMP用......
  • TCP TIME_WAIT状态优化
    一般来讲,在高并发的场景中,出现TIME_WAIT连接是正常现象,一旦四次握手连接关闭之后,这些连接也就随之被系统回收了 但是在实际高并发场景中,很有可能会出现这样的极端情况——大量的TIME_WAIT连接 TIME_WAIT状态连接过多的危害 TIME_WAIT状态下,TCP连接占用的本地端口将一直......
  • 调试-网络-如何查看tcp socket recv buffer size
    客户端与服务器建立tcp连接后,在服务器上执行ss-imdst目标IP地址来检查skmemrb值:tcpESTAB00192.168.99.124:ssh192.168.99.......
  • TCP的四次挥手过程
    TCP连接是双向传输的对等的模式(全双工模式),就是说双方都可以同时向对方发送或接收数据。而断开的时候,也是双方都可以主动断开,此时需要经过四次挥手的过程,流程如下图所示:主动方发送FIN包给被动方,主动方状态变成FIN_WAIT_1,等待被动方的确认。此时主动方不能再发送数据。被动方收......
  • 无线通信模块通过TCP/IP协议实现与PC端的数据传输
    在当今的信息时代,无线通信技术的发展日新月异,为我们的工作和生活带来了极大的便利。其中,无线通信模块通过TCP/IP协议向PC端传送数据已经成为了一种常见的通信方式。本文将详细介绍这一过程的主要步骤和涉及的关键技术,并以WIFI模块为例,探讨如何在QT平台下实现数据的无线传输。一、......
  • TCP KEEPALIVE以获得更好的POSTGRESQL体验
    一、数据库连接断开的原因连接断开的可能原因有多种:1、数据库服务器崩溃如果服务器由于某种原因崩溃,要调查服务器是否存在问题,您应该首先查看PostgreSQL日志,看看是否可以找到匹配的崩溃报告。2、客户端放弃的连接如果客户端在没有正确关闭数据库连接的情况下退出,服务器在网......
  • 故障分析 | TCP 缓存超负荷导致的 MySQL 连接中断
    1.背景在执行跑批任务的过程中,应用程序遇到了一个问题:部分任务的数据库连接会突然丢失,导致任务无法完成。从数据库的错误日志中,发现了 Abortedconnection 的信息,这说明客户端和服务器之间的通信被异常中断了。2.分析为了找出问题的原因,我们首先根据经验,分析了可能导致连接被......
  • TCP长连接/HTTP长连接/HTTP长(短)轮询
     TCP长连接/HTTP长连接/HTTP长轮询TCP长连接VSHTTP长连接TCP长连接和HTTP长连接是两个相关但概念上有所区别的技术。TCP长连接TCP(TransmissionControlProtocol)是互联网传输层的一个面向连接的协议,它提供可靠的数据传输服务。在TCP连接中,长连接是指客户端和服务器建立连......