首页 > 其他分享 >八股文-TCP的四次挥手

八股文-TCP的四次挥手

时间:2023-11-18 14:32:57浏览次数:26  
标签:八股文 挥手 TCP 发送 四次 关闭 连接

TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,它的连接的建立和关闭过程都是经过精心设计的。在TCP连接关闭时,使用四次挥手来保证数据的完整传输和连接的正常终止。

tcp.jpg

漫画TCP的四次挥手

tcp.png

第一次挥手:主动关闭方发送关闭请求(FIN)

在TCP的四次挥手过程中,首先由主动关闭方(通常是客户端)发起关闭请求。主动关闭方发送一个TCP报文,其中包含FIN(Finish)标志位,表示主动关闭方不再有数据要发送了。此时,主动关闭方进入FIN_WAIT_1状态,等待被动关闭方的确认。

第二次挥手:被动关闭方回应确认(ACK)

被动关闭方(通常是服务器)接收到主动关闭方的FIN后,发送一个确认(ACK)报文,表示已经收到了关闭请求。此时,被动关闭方进入CLOSE_WAIT状态,表示服务器端的应用程序已经等待关闭了,但仍可以接收来自客户端的数据。

第三次挥手:被动关闭方发送关闭请求(FIN)

在完成自己的数据发送后,被动关闭方也发送一个带有FIN标志的TCP报文,表示被动关闭方也没有数据要发送了。此时,被动关闭方进入LAST_ACK状态,等待主动关闭方的确认。

第四次挥手:主动关闭方回应确认(ACK)

主动关闭方接收到被动关闭方的FIN后,发送一个确认(ACK)报文,表示已经收到了关闭请求。此时,主动关闭方进入TIME_WAIT状态,等待一段时间,以确保被动关闭方收到了确认,并防止可能存在的延迟报文导致连接混乱。一旦等待时间过去,主动关闭方进入CLOSED状态,表示连接已经完全关闭。

TCP的四次挥手过程确保了连接的正常关闭,同时保证了数据的完整传输。 详细图示如下:

tcp05e8967a8b423a94.png

为什么要四次挥手

TCP进行四次挥手的原因是为了确保数据的完整传输和连接的正常终止。在TCP连接中,数据的传输是双向的,因此在关闭连接时,双方都需要确认彼此已经完成数据的发送。以下是TCP进行四次挥手的详细原因:

  • 全双工通信: TCP连接是全双工的,允许双方在同一时间进行双向通信。每一方都有可能在连接中发送数据,因此在关闭连接时,需要保证双方都能完成数据的发送。

  • 保证数据完整传输: 在关闭连接之前,可能还有未传输完成的数据在网络中。通过四次挥手,双方可以确认彼此的数据已经全部接收完毕,从而确保数据的完整传输。

  • 防止连接混淆: 为了防止在网络中可能存在的延迟报文导致连接混乱,采用四次挥手的方式等待一段时间(TIME_WAIT状态)。这样可以确保在关闭连接之前,网络中的所有报文都得到处理,避免可能的重复连接。

标签:八股文,挥手,TCP,发送,四次,关闭,连接
From: https://blog.51cto.com/xiuji/8462189

相关文章

  • 常见面试题-Netty线程模型以及TCP粘包拆包
    介绍一下Netty使用的线程模型?答:Netty主要基于主从Reactor多线程模型,其中主从Reactor多线程模型将Reactor分为两部分:mainReactor:监听ServerSocket,用来处理网络IO连接建立操作,将建立的SocketChannel指定注册给subReactorsubReactor:和建立起来的socket做数据交互和......
  • nginx keepalive 设置避免 服务器端大量time_wait 增加tcp 连接重用
    #Formoreinformationonconfiguration,see:#*OfficialEnglishDocumentation:http://nginx.org/en/docs/#*OfficialRussianDocumentation:http://nginx.org/ru/docs/usernginx;worker_processesauto;error_log/var/log/nginx/error.log;pid/run/......
  • 第四次实验
    任务1-1#include<stdio.h>#defineN4voidtest1(){ inta[N]={1,9,8,4}; inti; //输出数组a占用的内存字节数 printf("sizeof(a)=%d\n",sizeof(a)); //输出int类型数组a的每一个元素的地址、值; for(i=0;i<N;i++) printf("%p:%d\n",&a[i],a[i]......
  • TCP time_wait close_wait处理方法
    CLOSE_WAIT是服务器未能处理完,导致CLOSE_WAIT一直处于存在,导致服务器资源消耗主要的配置参数:TCP_KEEPIDLETCP_KEEPINTVLTCP_KEEPCNTTIME_WAIT是客户端一直等待服务器过程,迟迟未等待服务器的返回,导致客户端资源消耗主要的配置参数:tcp_tw_reuse  对应LWIP里的SO_REUSE......
  • TCP乱序产生的原因
    网络拥塞:当网络拥塞时,数据包可能会在传输过程中因为网络负载过重而延迟或丢失,导致乱序数据的产生。路由选择:路由选择可以使数据包在传输过程中经过不同路径,这也可能导致乱序数据的产生。分段重组:由于网络链路的限制,数据包可能会被分段发送,接收端需要对这些分......
  • 八股文-TCP的三次握手
    TCP协议是一种面向连接、可靠传输的协议,而建立连接的过程就是著名的三次握手。这个过程保证了通信的双方能够同步信息,确保后续的数据传输是可靠和有序的。本文将深入解析TCP三次握手的步骤及其意义。漫画TCP的三次握手TCP连接的建立采用了三次握手的机制,确保通信双方都能够正常......
  • Chen Shuo's Practical Network Programming - TTCP Lecture代码注释
    下面是C语言版本的TTCP,主要注释的是voidreceive(constOptions&opt);函数,负责在服务器接收客户端发送的数据://muduo/examples/ace/ttcp/ttcp_blocking.cc#include...//接受新的TCP连接staticintacceptOrDie(uint16_tport){...}//完整的写N个字节staticint......
  • frps: 2023/11/15 10:49:24 http: Accept error: accept tcp [::]:7650: accept4: too
    0.错误信息表明frps服务在接受传入连接时遇到了问题,特别是与端口7750相关的错误,具体错误为"accepttcp[::]:7750:accept4:toomanyopenfiles",意味着打开文件数目过多。这种错误通常发生在系统达到文件描述符的打开数目限制时。在类Unix操作系统中,每个进程都有同时可以......
  • 以太网通信控制板-B2-控制板作为多路TCP客户端和电脑TCP服务器通信(连接路由器或者交
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/CH579_DTU_PBX/index1.html"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p> 说明如果......
  • TCPIP 协议族
    TCP/IP协议族通常我说TCP/IP是指TCP/IP协议族。它是基于TCP和IP这两个最初的协议之上的不同的通信协议的大集合。例如:http、https、ftp、icmp、arp、rarp、smtp(简单邮件传输协议)一个网络请求是怎么传输的?我们拿访问浏览器举个栗子,如图所示:TCP、UDP有什么区别?各有......