首页 > 其他分享 >TCP的三次握手四次挥手

TCP的三次握手四次挥手

时间:2023-08-19 14:34:38浏览次数:35  
标签:ACK 报文 TCP 发送 四次 接收 FIN 握手

简述TCP的三次握手。

第一步,是请求端(客户端)发送一个包含 SYN 即同步(Synchronize)标志的TCP 报文,SYN 同步报文会指明客户端使用的端口以及 TCP 连接的初始序号。

第二步,服务器在收到客户端的 SYN 报文后,将返回一个 SYN+ACK 的报文,表示 客 户 端 的 请 求 被 接 受 , 同 时 TCP 序 号 被 加 一 , ACK 即 确 认(Acknowledgement)。

第三步,客户端也返回一个确认报文 ACK 给服务器端,同样 TCP 序列号被加一,到此一个 TCP 连接完成。然后才开始通信的第二步:数据处理。


三次握手的过程:

1、首先由Client发送请求连接即SYN=1,声明自己的序号时seq=x

2、然后Server 进行回复确认,即 SYN=1 ,声明自己的序号是 seq=y, 并设置为ack=x+1

3、最后Client 再进行一次确认,设置 ack=y+1

为什么要三次握手:

第一次握手:客户发送请求,此时服务器知道客户能发;

第二次握手:服务器发送确认,此时客户知道服务器能发能收;

第三次握手:客户发送确认,此时服务器知道客户能收。

TCP四次挥手过程(断连接的过程):

1、发送方发送FIN报文:当应用程序完成数据传输后,发送方向接收方发送一个FIN报文,表示

数据传输完成,要求关闭连接。此时,发送方进入FIN_WAIT_1(等待对方FIN)状态,等待接收

到确认报文。

2、接收方发送ACK报文:接收方收到发送方的FIN报文后,向发送方发送一个确认报文,表示已

经收到了关闭连接的请求,此时,接收方进入CLOSE_WAIT(等待关闭状态)状态。

3、接收方发送FIN报文:接收方在发送ACK报文后,通知自己的应用程序可以关闭连接了,向发

送方发送一个FIN报文,此时,接收方进入LAST_ACK(等待最后的ACK状态)状态。

4、发送方发送ACK报文:发送方收到接收方的FIN报文后,向接收方发送一个确认报文,表示已

经收到了关闭连接的请求,此时,发送方进入TIME_WAIT(2MSL)状态。接收方在收到这个确

认报文后,进入CLOSED(关闭连接)状态,整个连接关闭。

注意:第四次挥手后,发送方并不是立即进入CLOSED状态,而是等待一段时间(称为2MSL,即

两倍的最长报文段寿命),这是为了保证在这段时间内可以收到可能在传输中丢失的ACK报文。

如果在2MSL时间内没有收到回复,发送方会认为连接已经被完全关闭,进入CLOSED状态。

为什么需要等待2MSL:

1. 最后一个报文没有确认;

2. 确保发送方的ACK可以到达接收方;

3. 2MSL时间内没有收到,则接收方会重发;

4. 确保当前连接的所有报文都已经过期

标签:ACK,报文,TCP,发送,四次,接收,FIN,握手
From: https://blog.51cto.com/u_16230968/7149384

相关文章

  • 网络原理之TCP
    TCP(TransmissionControlProtocol)传输控制协议:对数据的传输进行详细的控制TCP协议段格式TCP报文=TCP报头+TCP载荷选项之前的长度固定20个字节TCP并不像UDP长度固定8个字节,长度不固定首部长度:描述Tcp报头具体有多长 选项:相当于对TCP报文的一些属性进行解释说明TCP报头......
  • TCP丢包与重传检测原理浅析
    TCP本身能够检测数据包丢失和重传,但由于其运行方式,它可能并不总是能够绝对确定地区分两者。原因如下:重复和无序数据包:在TCP连接中,由于网络的性质,数据包可能会无序到达。如果数据包无序到达,TCP的接收缓冲区将保留它,直到接收到丢失的数据包并且数据可以按顺序传送到应用程序。......
  • 在C++中实现多线程异步TCP消息发送
    本文主要解释了在C++中如何实现一个多线程,异步发送TCP消息的系统。我们将会用到C++的标准库和Boost.Asio库。基础知识TCP(TransmissionControlProtocol):是一种面向连接的、可靠的、基于字节流的通信协议。它在两个网络节点之间创建一个稳定的连接,以便可以交换字节流。多线程编程:......
  • 通过 TCPView 还发现个流氓 KPKIService.exe 删掉
    叫统一安全中间件,就是个第三方做的key的安全检查,谁知道是哪年装的资料https://baijiahao.baidu.com/s?id=1717384219148345375&wfr=spider&for=pc......
  • tcp bbr v3
    目前google发布了tcpbbrv2+fixbug===tcpbbrv3 ......
  • 服务端不回应客户端的syn握手,连接建立失败原因排查
    背景测试环境有一个后台服务,部署在内网服务器A上(无外网地址),给app提供接口。app访问这个后台服务时,ip地址是公网地址,那这个请求是如何到达我们的内网服务器A呢,这块我咨询了网络同事,我画了简图如下:请求会直接打到防火墙上,防火墙对请求先做了DNAT转换(将目的地址转换为后台服务器的......
  • ThingsKit物联网平台模拟TCP设备接入
    准备工作TCP设备模拟工具下载NetAssist网络调试助手,是Windows平台下开发的TCP/IP网络调试工具,集TCP/UDP服务端及客户端于一体,是网络应用开发及调试工作必备的专业工具之一,可以帮助网络应用设计、开发、测试人员检查所开发的网络应用软/硬件的数据收发状况,提高开发速度,简化开发......
  • HTTP、TCP、Socket 的关系
    HTTP、TCP和Socket之间有着密切的关系,它们在网络通信中扮演不同的角色,构成了现代互联网通信的基础。HTTP(HypertextTransferProtocol):HTTP是一种应用层协议,用于在客户端和服务器之间传输超文本数据,例如网页内容、图片、视频等。它定义了客户端和服务器之间的通信规则,......
  • TCP
    1.如何理解UDP和TCP?区别?应用场景?一、UDPUDP(UserDatagramProtocol),用户数据包协议,是一个简单的面向数据报的通信协议,即对应用层交下来的报文,不合并,不拆分,只是在其上面加上首部后就交给了下面的网络层也就是说无论应用层交给UDP多长的报文,它统统发送,一次发送一个报文而......
  • TCP和UDP
    一、进程间通信-socket套接字基本特征:socket是一种接口技术,被抽象了一种文件操作,可以让同一计算机中的不同进程之间通信,也可以让不同计算机中的进程之间通信(网络通信)本地进程间通信编程模型:进程A进程B创建socket对象创建sock......